Browse Source

用能月报导出1

jichaobo 3 years ago
parent
commit
4d3c8ef43f

+ 37 - 13
fiveep-controller/src/main/java/com/bizmatics/controller/web/HtAnalogDataController.java

@@ -3,9 +3,11 @@ package com.bizmatics.controller.web;
 
 import com.bizmatics.common.core.bean.ApiResult;
 import com.bizmatics.model.vo.DataManagementOneVO;
-import com.bizmatics.model.vo.DataManagementVO;
 import com.bizmatics.service.HtAnalogDataService;
-import com.bizmatics.service.vo.*;
+import com.bizmatics.service.vo.CommonIcoVO;
+import com.bizmatics.service.vo.HadCountVO;
+import com.bizmatics.service.vo.RealScoreVO;
+import com.bizmatics.service.vo.TimeShareVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -106,6 +108,7 @@ public class HtAnalogDataController {
 
     /**
      * 历史电流电压评分
+     *
      * @param deviceCode
      * @param startTime
      * @param endTime
@@ -113,13 +116,14 @@ public class HtAnalogDataController {
      */
     @GetMapping("rtRealScore")
     public ApiResult<List<RealScoreVO>> rtRealScore(@RequestParam String deviceCode,
-                                                            @RequestParam Date startTime,
-                                                            @RequestParam Date endTime) {
-        return ApiResult.success(htAnalogDataService.rtRealScore(deviceCode, startTime,endTime));
+                                                    @RequestParam Date startTime,
+                                                    @RequestParam Date endTime) {
+        return ApiResult.success(htAnalogDataService.rtRealScore(deviceCode, startTime, endTime));
     }
 
     /**
-     *数据管理-同比分析报表-统计图数据查询
+     * 数据管理-同比分析报表-统计图数据查询
+     *
      * @param dataManagementOneVO
      * @return
      */
@@ -130,7 +134,8 @@ public class HtAnalogDataController {
 
 
     /**
-     *数据管理-环比分析报表-统计图数据查询
+     * 数据管理-环比分析报表-统计图数据查询
+     *
      * @param dataManagementOneVO
      * @return
      */
@@ -140,11 +145,12 @@ public class HtAnalogDataController {
     }
 
     /**
-     *数据管理-用能月报-统计图数据查询
+     * 数据管理-用能月报-统计图数据查询
+     *
      * @param deviceCode 设备编号
-     * @param cycle 1.日报表 2.月报表 3.年报表
-     * @param startTime 开始时间
-     * @param endTime 结束时间
+     * @param cycle      1.日报表 2.月报表 3.年报表
+     * @param startTime  开始时间
+     * @param endTime    结束时间
      * @return
      */
     @GetMapping("monthlyReport")
@@ -157,9 +163,10 @@ public class HtAnalogDataController {
 
     /**
      * 数据管理-需量分析-统计图数据查询
+     *
      * @param deviceCode 设备编号
-     * @param cycle 1.电费结算周期 2.自然月
-     * @param monthDate 时间 xxxx-xx
+     * @param cycle      1.电费结算周期 2.自然月
+     * @param monthDate  时间 xxxx-xx
      * @return
      */
     @GetMapping("demandAnalysis")
@@ -169,5 +176,22 @@ public class HtAnalogDataController {
         return ApiResult.success(htAnalogDataService.demandAnalysis(deviceCode, monthDate, cycle));
 
     }
+
+    /**
+     * 数据管理-用能月报-导出
+     *
+     * @param deviceCode 设备编号
+     * @param cycle      1.日报表 2.月报表 3.年报表
+     * @param startTime  开始时间
+     * @param endTime    结束时间
+     * @return
+     */
+    @GetMapping("monthlyReportExport")
+    public ApiResult<String> monthlyReportExport(@RequestParam String deviceCode,
+                                                 @RequestParam int cycle,
+                                                 @RequestParam String startTime,
+                                                 @RequestParam String endTime) {
+        return ApiResult.success(htAnalogDataService.monthlyReportExport(deviceCode, startTime, endTime, cycle));
+    }
 }
 

+ 42 - 0
fiveep-model/src/main/java/com/bizmatics/model/vo/HtAnalogDataOneVo.java

@@ -0,0 +1,42 @@
+package com.bizmatics.model.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ya
+ * @since 2021-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class HtAnalogDataOneVo implements Serializable {
+
+    /**
+     * 伍继电力test_183消费组模拟量数据表ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 三相正向有功电度
+     */
+    private Double Epp;
+
+    /**
+     * 冻结时间
+     */
+    private Date freezingTime;
+
+
+}

+ 11 - 4
fiveep-persistence/src/main/java/com/bizmatics/persistence/mapper/HtAnalogDataMapper.java

@@ -1,10 +1,8 @@
 package com.bizmatics.persistence.mapper;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.bizmatics.model.AlarmPower;
-import com.bizmatics.model.HtAnalogData;
 import com.bizmatics.common.mvc.base.CrudMapper;
+import com.bizmatics.model.HtAnalogData;
+import com.bizmatics.model.vo.HtAnalogDataOneVo;
 import com.bizmatics.model.vo.HtAnalogDataVo;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
@@ -118,4 +116,13 @@ public interface HtAnalogDataMapper extends CrudMapper<HtAnalogData> {
     List<HtAnalogDataVo> demandAnalysisList(@Param("deviceCode") String deviceCode,
                                             @Param("monthDate") String monthDate);
 
+
+    List<HtAnalogDataOneVo> energyUseListOne(@Param("deviceCode") String deviceCode,
+                                             @Param("startTime") String startTime,
+                                             @Param("endTime") String endTime,
+                                             @Param("cycle") Integer cycle,
+                                             @Param("sign") Integer sign,
+                                             @Param("size") Integer size,
+                                             @Param("startCurrent") Integer startCurrent);
+
 }

+ 164 - 43
fiveep-persistence/src/main/resources/mapper/mysql/HtAnalogDataMapper.xml

@@ -50,7 +50,7 @@
         select max(Demand) as demandMax,min(Demand) as demandMin,avg(Demand) as demandAvg,
         max(Epp) as eppMax,min(Epp) as eppMin,avg(Epp) as eppAvg
         from device as d
-        inner join  ht_analog_data as had
+        inner join ht_analog_data as had
         on d.device_code = had.deviceName
         <where>
             <if test="siteId != null and siteId != 0">
@@ -78,7 +78,8 @@
         select
         had.id,deviceName,Busot,COS,COSa,COSb,COSc,Demand,DevResetTimes,DeviceTemp,Epn,Epn1,Epn2,Epn3,Epn4,Epp,
         Epp1,Epp2,Epp3,Epp4,Eqn,Eqp,F,I0,I2,IHa,IHb,IHc,Ia,Ib,Ic,Ir,LastDayMD,LastDayMDt,P,Pa,Pb,Pc,Q,Qa,Qb,Qc,SignalIntensity,
-        T1,T2,T3,T4,THDUa,THDUb,THDUc,Ua,Uab,Ub,Ubc,UblU0,UblU2,Uc,Uca,Udt,Ul,Upt,Ust,freezingTime,dataTime,d.site_id as siteId
+        T1,T2,T3,T4,THDUa,THDUb,THDUc,Ua,Uab,Ub,Ubc,UblU0,UblU2,Uc,Uca,Udt,Ul,Upt,Ust,freezingTime,dataTime,d.site_id as
+        siteId
         from ht_analog_data as had
         left join device as d
         on had.deviceName = d.device_code
@@ -107,7 +108,7 @@
         select
         IFNULL(sum(had.epp),0)
         from device as d
-        inner join  ht_analog_data as had
+        inner join ht_analog_data as had
         on d.device_code = had.deviceName
         <where>
             <if test="siteId != null and siteId != 0">
@@ -196,12 +197,12 @@
         JOIN device_analog_variable_list AS c ON a.deviceName = c.device_code
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
-                and a.deviceName IN
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            and a.deviceName IN
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -288,11 +289,11 @@
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
             a.deviceName IN
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -380,11 +381,11 @@
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
             and a.deviceName IN
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -471,11 +472,11 @@
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
             and a.deviceName in
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -562,11 +563,11 @@
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
             and a.deviceName in
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -653,11 +654,11 @@
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
             and a.deviceName in
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -744,11 +745,11 @@
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
             and a.deviceName in
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -835,11 +836,11 @@
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
             and a.deviceName in
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -851,14 +852,14 @@
 
     <select id="energyUseList" resultType="com.bizmatics.model.vo.HtAnalogDataVo">
         <if test="cycle == 1">
-        SELECT
-        b.id,
-        a.minid,
-        b.Epp,
-        b.Demand,
-        freezingTime AS freezingTimes
-        FROM
-        (
+            SELECT
+            b.id,
+            a.minid,
+            b.Epp,
+            b.Demand,
+            freezingTime AS freezingTimes
+            FROM
+            (
             <if test="sign == 1">
                 SELECT
                 max(id) AS minid,
@@ -869,8 +870,8 @@
                 min(id) AS minid,
                 freezingTime AS freezingTimess
             </if>
-        FROM
-        ht_analog_data
+            FROM
+            ht_analog_data
             <where>
                 and deviceName = #{deviceCode}
                 <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
@@ -878,8 +879,8 @@
                 </if>
             </where>
             GROUP BY freezingTimess
-        ) a
-        LEFT JOIN ht_analog_data b ON a.minid = b.id;
+            ) a
+            LEFT JOIN ht_analog_data b ON a.minid = b.id;
         </if>
         <if test="cycle == 2">
             SELECT
@@ -963,19 +964,139 @@
         </if>
     </select>
 
+    <select id="energyUseListOne" resultType="com.bizmatics.model.vo.HtAnalogDataOneVo">
+        <if test="cycle == 1">
+            SELECT
+            b.id,
+            b.Epp,
+            freezingTime AS freezingTime
+            FROM
+            (
+            <if test="sign == 1">
+                SELECT
+                max(id) AS minid,
+                freezingTime AS freezingTimess
+            </if>
+            <if test="sign == 2">
+                SELECT
+                min(id) AS minid,
+                freezingTime AS freezingTimess
+            </if>
+            FROM
+            ht_analog_data
+            <where>
+                and deviceName = #{deviceCode}
+                <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
+                    and dataTime BETWEEN #{startTime} and #{endTime}
+                </if>
+            </where>
+            GROUP BY freezingTimess
+            ) a
+            LEFT JOIN ht_analog_data b ON a.minid = b.id
+            <if test="startCurrent != null and size !=0 and size!=null">
+                LIMIT #{startCurrent},
+                #{size}
+            </if>
+        </if>
+        <if test="cycle == 2">
+            SELECT
+            b.id,
+            b.Epp,
+            FROM_UNIXTIME(
+            UNIX_TIMESTAMP(b.dataTime),
+            '%Y-%m'
+            ) AS freezingTime
+            FROM
+            (
+            <if test="sign == 1">
+                SELECT
+                max(id) AS minid,
+                FROM_UNIXTIME(
+                UNIX_TIMESTAMP(dataTime),
+                '%Y-%m'
+                ) AS freezingTimess
+            </if>
+            <if test="sign == 2">
+                SELECT
+                min(id) AS minid,
+                FROM_UNIXTIME(
+                UNIX_TIMESTAMP(dataTime),
+                '%Y-%m'
+                ) AS freezingTimess
+            </if>
+            FROM
+            ht_analog_data
+            <where>
+                and deviceName = #{deviceCode}
+                <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
+                    and dataTime BETWEEN #{startTime} and #{endTime}
+                </if>
+            </where>
+            GROUP BY freezingTimess
+            ) a
+            LEFT JOIN ht_analog_data b ON a.minid = b.id
+            <if test="startCurrent != null and size !=0 and size!=null">
+                LIMIT #{startCurrent},
+                #{size}
+            </if>
+        </if>
+        <if test="cycle == 3">
+            SELECT
+            b.id,
+            b.Epp,
+            FROM_UNIXTIME(
+            UNIX_TIMESTAMP(b.dataTime),
+            '%Y-%m'
+            ) AS freezingTime
+            FROM
+            (
+            <if test="sign == 1">
+                SELECT
+                max(id) AS minid,
+                FROM_UNIXTIME(
+                UNIX_TIMESTAMP(dataTime),
+                '%Y'
+                ) AS freezingTimess
+            </if>
+            <if test="sign == 2">
+                SELECT
+                min(id) AS minid,
+                FROM_UNIXTIME(
+                UNIX_TIMESTAMP(dataTime),
+                '%Y'
+                ) AS freezingTimess
+            </if>
+            FROM
+            ht_analog_data
+            <where>
+                and deviceName = #{deviceCode}
+                <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">
+                    and dataTime BETWEEN #{startTime} and #{endTime}
+                </if>
+            </where>
+            GROUP BY freezingTimess
+            ) a
+            LEFT JOIN ht_analog_data b ON a.minid = b.id
+            <if test="startCurrent != null and size !=0 and size!=null">
+                LIMIT #{startCurrent},
+                #{size}
+            </if>
+        </if>
+    </select>
+
     <select id="demandAnalysisList" resultType="com.bizmatics.model.vo.HtAnalogDataVo">
         SELECT
         MAX(Demand) as Demand,
         freezingTime AS freezingTimes
         FROM
         ht_analog_data
-            <where>
-                and deviceName = #{deviceCode}
-                <if test="monthDate != null and monthDate != ''">
-                    and freezingTime LIKE CONCAT(CONCAT('%', #{monthDate}), '%')
-                </if>
-            </where>
-            GROUP BY freezingTime;
+        <where>
+            and deviceName = #{deviceCode}
+            <if test="monthDate != null and monthDate != ''">
+                and freezingTime LIKE CONCAT(CONCAT('%', #{monthDate}), '%')
+            </if>
+        </where>
+        GROUP BY freezingTime;
     </select>
 
 
@@ -983,10 +1104,10 @@
         SELECT
         a.id,
         a.deviceName,
-        <foreach collection="list" item="fieldDisplay"   open=" " separator="," close=" ">
+        <foreach collection="list" item="fieldDisplay" open=" " separator="," close=" ">
             ${fieldDisplay}
         </foreach>
-                ,
+        ,
         FROM_UNIXTIME(
         UNIX_TIMESTAMP(a.dataTime),
         '%m-%d %H:%i'
@@ -1000,11 +1121,11 @@
         JOIN device_attribute AS d ON c.monitoring_equipment = d.id
         <where>
             and a.deviceName in
-            <foreach item="item"  collection="deviceCode" open="(" separator="," close=")">
+            <foreach item="item" collection="deviceCode" open="(" separator="," close=")">
                 #{item.displayField}
             </foreach>
             AND c.variable_coding in
-            <foreach item="item"  collection="variableCoding" open="(" separator="," close=")">
+            <foreach item="item" collection="variableCoding" open="(" separator="," close=")">
                 #{item.variableCoding}
             </foreach>
             <if test="endTime != null and startTime != null and endTime != '' and startTime != ''">

+ 19 - 5
fiveep-service/src/main/java/com/bizmatics/service/HtAnalogDataService.java

@@ -3,15 +3,18 @@ package com.bizmatics.service;
 import com.bizmatics.common.mvc.base.CrudService;
 import com.bizmatics.model.HtAnalogData;
 import com.bizmatics.model.vo.DataManagementOneVO;
-import com.bizmatics.model.vo.DataManagementVO;
-import com.bizmatics.service.vo.*;
+import com.bizmatics.model.vo.HtAnalogDataOneVo;
+import com.bizmatics.service.vo.CommonIcoVO;
+import com.bizmatics.service.vo.HadCountVO;
+import com.bizmatics.service.vo.RealScoreVO;
+import com.bizmatics.service.vo.TimeShareVO;
 
 import java.util.Date;
 import java.util.List;
 
 /**
  * <p>
- *  服务类
+ * 服务类
  * </p>
  *
  * @author ya
@@ -22,12 +25,14 @@ public interface HtAnalogDataService extends CrudService<HtAnalogData> {
 
     /**
      * 日/月/年用电量
+     *
      * @return
      */
     HadCountVO selectCount();
 
     /**
      * 用电趋势图
+     *
      * @param siteId
      * @return
      */
@@ -36,14 +41,15 @@ public interface HtAnalogDataService extends CrudService<HtAnalogData> {
 
     /**
      * 用电趋势图
+     *
      * @return
      */
     List<CommonIcoVO> selectTrendByMonth();
 
 
-
     /**
      * 站点日/月/年用电量
+     *
      * @return
      */
     HadCountVO getCountBySite(Integer siteId);
@@ -51,6 +57,7 @@ public interface HtAnalogDataService extends CrudService<HtAnalogData> {
 
     /**
      * 分时电量
+     *
      * @param siteId
      * @param type
      * @return
@@ -59,6 +66,7 @@ public interface HtAnalogDataService extends CrudService<HtAnalogData> {
 
     /**
      * 需量趋势图
+     *
      * @param siteId
      * @return
      */
@@ -66,14 +74,16 @@ public interface HtAnalogDataService extends CrudService<HtAnalogData> {
 
     /**
      * 电流
+     *
      * @param siteId
      * @param date
      * @return
      */
-    List<CommonIcoVO> getElectricIco(Integer siteId,Date date);
+    List<CommonIcoVO> getElectricIco(Integer siteId, Date date);
 
     /**
      * 根据设备和时间查看电流电压
+     *
      * @param deviceCode
      * @param startTime
      * @param endTime
@@ -89,5 +99,9 @@ public interface HtAnalogDataService extends CrudService<HtAnalogData> {
 
     List<CommonIcoVO> demandAnalysis(String deviceCode, String monthDate, int cycle);
 
+    String monthlyReportExport(String deviceCode, String startTime, String endTime, int cycle);
+
+    List<HtAnalogDataOneVo> monthlyReportlist(String deviceCode, String startTime, String endTime, int cycle, Integer startCurrent);
+
 
 }

+ 137 - 75
fiveep-service/src/main/java/com/bizmatics/service/impl/HtAnalogDataServiceImpl.java

@@ -1,5 +1,7 @@
 package com.bizmatics.service.impl;
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -7,24 +9,28 @@ import com.bizmatics.common.core.exception.BusinessException;
 import com.bizmatics.common.core.util.Arith;
 import com.bizmatics.common.core.util.BeanMapperUtils;
 import com.bizmatics.common.core.util.DateUtils;
+import com.bizmatics.common.core.util.FileUtils;
 import com.bizmatics.common.mvc.base.AbstractCrudService;
+import com.bizmatics.common.spring.util.GlobalUtils;
 import com.bizmatics.common.spring.util.JsonUtils;
 import com.bizmatics.model.*;
 import com.bizmatics.model.vo.DataManagementOneVO;
 import com.bizmatics.model.vo.DataManagementVO;
+import com.bizmatics.model.vo.HtAnalogDataOneVo;
 import com.bizmatics.model.vo.HtAnalogDataVo;
 import com.bizmatics.persistence.mapper.HtAnalogDataMapper;
 import com.bizmatics.service.*;
 import com.bizmatics.service.util.FieldEscapeUtils;
 import com.bizmatics.service.util.SecurityUtils;
-import com.bizmatics.service.vo.CommonIcoVO;
-import com.bizmatics.service.vo.HadCountVO;
-import com.bizmatics.service.vo.RealScoreVO;
-import com.bizmatics.service.vo.TimeShareVO;
+import com.bizmatics.service.vo.*;
 import com.fasterxml.jackson.core.type.TypeReference;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -288,33 +294,33 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
     @Override
     public List<RealScoreVO> rtRealScore(String deviceCode, Date startTime, Date endTime) {
         LambdaQueryWrapper<HtAnalogData> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.select(HtAnalogData::getIa,HtAnalogData::getIb,HtAnalogData::getIc,
-                HtAnalogData::getUa,HtAnalogData::getUb,HtAnalogData::getUc,HtAnalogData::getDataTime,
+        queryWrapper.select(HtAnalogData::getIa, HtAnalogData::getIb, HtAnalogData::getIc,
+                HtAnalogData::getUa, HtAnalogData::getUb, HtAnalogData::getUc, HtAnalogData::getDataTime,
                 HtAnalogData::getCos)
-                .eq(HtAnalogData::getDeviceName,deviceCode)
-                .between(HtAnalogData::getDataTime,startTime,endTime);
+                .eq(HtAnalogData::getDeviceName, deviceCode)
+                .between(HtAnalogData::getDataTime, startTime, endTime);
         List<HtAnalogData> list = this.list(queryWrapper);
         //查询设备
         LambdaQueryWrapper<Device> deviceQuery = Wrappers.lambdaQuery();
-        deviceQuery.eq(Device::getDeviceCode,deviceCode);
+        deviceQuery.eq(Device::getDeviceCode, deviceCode);
         Device device = deviceService.getOne(deviceQuery);
         Optional.ofNullable(device).orElseThrow(() -> new BusinessException("设备不存在"));
         //查询sd
         LambdaQueryWrapper<SiteDynamicProperties> sdQuery = Wrappers.lambdaQuery();
-        sdQuery.eq(SiteDynamicProperties::getSiteId,device.getSiteId());
+        sdQuery.eq(SiteDynamicProperties::getSiteId, device.getSiteId());
         SiteDynamicProperties siteDynamicProperties = siteDynamicPropertiesService.getOne(sdQuery);
         Optional.ofNullable(siteDynamicProperties).orElseThrow(() -> new BusinessException("sd不存在"));
         LambdaQueryWrapper<DeviceAttribute> adQuery = Wrappers.lambdaQuery();
-        adQuery.eq(DeviceAttribute::getSiteId,device.getSiteId());
+        adQuery.eq(DeviceAttribute::getSiteId, device.getSiteId());
         List<DeviceAttribute> deviceAttributes = deviceAttributeService.list(adQuery);
-        if (CollectionUtils.isEmpty(deviceAttributes)){
+        if (CollectionUtils.isEmpty(deviceAttributes)) {
             throw new BusinessException("da不存在");
         }
         DeviceAttribute deviceAttribute = deviceAttributes.stream().min(Comparator.comparing(DeviceAttribute::getId)).get();
         List<RealScoreVO> realScoreVOS = new ArrayList<>();
-        for (HtAnalogData htAnalogData:list) {
+        for (HtAnalogData htAnalogData : list) {
             RtAnalogData rtAnalogData = BeanMapperUtils.map(htAnalogData, RtAnalogData.class);
-            realScoreVOS.add(rtAnalogDataService.fillRealScoreData(rtAnalogData,siteDynamicProperties,deviceAttribute));
+            realScoreVOS.add(rtAnalogDataService.fillRealScoreData(rtAnalogData, siteDynamicProperties, deviceAttribute));
         }
         return realScoreVOS;
     }
@@ -337,57 +343,57 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
             newListOne.add(dataManagementOneVO.getDisplayField().get(i).split("_")[1]);
             newListTwo.add(dataManagementOneVO.getDisplayField().get(i).split("_")[2]);
             fieldDisplay.add(dataManagementOneVO.getDisplayField().get(i).split("_")[1]);
-            newListThree.add(dataManagementOneVO.getDisplayField().get(i).split("_")[1]+"_"+dataManagementOneVO.getDisplayField().get(i).split("_")[2]);
+            newListThree.add(dataManagementOneVO.getDisplayField().get(i).split("_")[1] + "_" + dataManagementOneVO.getDisplayField().get(i).split("_")[2]);
             DeviceAnalogVariableList deviceAnalogVariableList = new DeviceAnalogVariableList();
-            deviceAnalogVariableList.setVariableCoding(dataManagementOneVO.getDisplayField().get(i).split("_")[0]+"_"+dataManagementOneVO.getDisplayField().get(i).split("_")[1]);
+            deviceAnalogVariableList.setVariableCoding(dataManagementOneVO.getDisplayField().get(i).split("_")[0] + "_" + dataManagementOneVO.getDisplayField().get(i).split("_")[1]);
             variableCodingList.add(deviceAnalogVariableList);
         }
-        Set set = new  HashSet();
-        List<DataManagementVO> newList = new  ArrayList();
+        Set set = new HashSet();
+        List<DataManagementVO> newList = new ArrayList();
         set.addAll(dataManagementVOList);
         newList.addAll(set);
 
-        Set set1 = new  HashSet();
-        List<String> list = new  ArrayList();
+        Set set1 = new HashSet();
+        List<String> list = new ArrayList();
         set1.addAll(newListOne);
         list.addAll(set1);
 
-        Set set2 = new  HashSet();
-        List<String> monitor_list = new  ArrayList();
+        Set set2 = new HashSet();
+        List<String> monitor_list = new ArrayList();
         set2.addAll(newListTwo);
         monitor_list.addAll(set2);
 
-        Set set3 = new  HashSet();
-        List<String> fieldDisplayOne = new  ArrayList();
+        Set set3 = new HashSet();
+        List<String> fieldDisplayOne = new ArrayList();
         set3.addAll(fieldDisplay);
         fieldDisplayOne.addAll(set3);
 
         if (dataManagementOneVO.getType() == 1) {
             if (dataManagementOneVO.getValueCalculation() == 1) {
-                yearOnYearList = baseMapper.yearOnYearOne(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                yearOnYearList = baseMapper.yearOnYearOne(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 2) {
-                yearOnYearList = baseMapper.dayMaxDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                yearOnYearList = baseMapper.dayMaxDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 3) {
-                yearOnYearList = baseMapper.dayMinDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                yearOnYearList = baseMapper.dayMinDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 4) {
-                yearOnYearList = baseMapper.daySumDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                yearOnYearList = baseMapper.daySumDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             }
         } else if (dataManagementOneVO.getType() == 2) {
             if (dataManagementOneVO.getValueCalculation() == 1) {
-                yearOnYearList = baseMapper.yearOnYearTwo(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                yearOnYearList = baseMapper.yearOnYearTwo(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 2) {
-                yearOnYearList = baseMapper.monthMaxDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                yearOnYearList = baseMapper.monthMaxDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 3) {
-                yearOnYearList = baseMapper.monthMinDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                yearOnYearList = baseMapper.monthMinDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 4) {
-                yearOnYearList = baseMapper.monthSumDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                yearOnYearList = baseMapper.monthSumDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             }
         } else {
-            yearOnYearList = baseMapper.yearOnYearThree(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList,fieldDisplayOne);
+            yearOnYearList = baseMapper.yearOnYearThree(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList, fieldDisplayOne);
         }
         FieldEscapeUtils.remove1(list);
         List<CommonIcoVO> reListOne = new ArrayList<>();
-        if (yearOnYearList!=null && !yearOnYearList.isEmpty()){
+        if (yearOnYearList != null && !yearOnYearList.isEmpty()) {
             for (int i = 0; i < monitor_list.size(); i++) {
                 for (int j = 0; j < list.size(); j++) {
                     List<Object> data = new ArrayList<>();
@@ -395,20 +401,20 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
                     List<Object> time = new ArrayList<>();
                     for (int k = 0; k < yearOnYearList.size(); k++) {
                         String variable_one = list.get(j) + "_" + monitor_list.get(i);
-                        String variable_two = list.get(j)+"_"+yearOnYearList.get(k).getDeviceAttributeId();
-                        System.out.println("variable_one:"+variable_one+"---variable_two:"+variable_two);
-                        if (variable_one.equals(variable_two)){
-                            String variable_three = list.get(j)+"_"+yearOnYearList.get(k).getDeviceAttributeId();
-                            System.out.println("variable_one_a:"+newListThree+"---variable_two_b:"+variable_three+"---value:"+newListThree.contains(variable_three));
-                            if (newListThree.contains(variable_three)){
+                        String variable_two = list.get(j) + "_" + yearOnYearList.get(k).getDeviceAttributeId();
+                        System.out.println("variable_one:" + variable_one + "---variable_two:" + variable_two);
+                        if (variable_one.equals(variable_two)) {
+                            String variable_three = list.get(j) + "_" + yearOnYearList.get(k).getDeviceAttributeId();
+                            System.out.println("variable_one_a:" + newListThree + "---variable_two_b:" + variable_three + "---value:" + newListThree.contains(variable_three));
+                            if (newListThree.contains(variable_three)) {
                                 name = yearOnYearList.get(k).getMonitorDeviceName() + "/" + FieldEscapeUtils.fieldEscapeUtils(list.get(j));
                                 time.add(yearOnYearList.get(k).getDataTime());
 //                                System.out.println();
-                                data.add(FieldEscapeUtils.transformation(yearOnYearList.get(k),list.get(j)));
+                                data.add(FieldEscapeUtils.transformation(yearOnYearList.get(k), list.get(j)));
                             }
                         }
                     }
-                    if (data!=null && !data.isEmpty()){
+                    if (data != null && !data.isEmpty()) {
                         reListOne.add(CommonIcoVO.builder().name(name).list(data).listDate(time).build());
                     }
 
@@ -437,28 +443,28 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
             newListOne.add(dataManagementOneVO.getDisplayField().get(i).split("_")[1]);
             fieldDisplay.add(dataManagementOneVO.getDisplayField().get(i).split("_")[1]);
             newListTwo.add(dataManagementOneVO.getDisplayField().get(i).split("_")[2]);
-            newListThree.add(dataManagementOneVO.getDisplayField().get(i).split("_")[1]+"_"+dataManagementOneVO.getDisplayField().get(i).split("_")[2]);
+            newListThree.add(dataManagementOneVO.getDisplayField().get(i).split("_")[1] + "_" + dataManagementOneVO.getDisplayField().get(i).split("_")[2]);
             DeviceAnalogVariableList deviceAnalogVariableList = new DeviceAnalogVariableList();
-            deviceAnalogVariableList.setVariableCoding(dataManagementOneVO.getDisplayField().get(i).split("_")[0]+"_"+dataManagementOneVO.getDisplayField().get(i).split("_")[1]);
+            deviceAnalogVariableList.setVariableCoding(dataManagementOneVO.getDisplayField().get(i).split("_")[0] + "_" + dataManagementOneVO.getDisplayField().get(i).split("_")[1]);
             variableCodingList.add(deviceAnalogVariableList);
         }
-        Set set = new  HashSet();
-        List<DataManagementVO> newList = new  ArrayList();
+        Set set = new HashSet();
+        List<DataManagementVO> newList = new ArrayList();
         set.addAll(dataManagementVOList);
         newList.addAll(set);
 
-        Set set1 = new  HashSet();
-        List<String> list = new  ArrayList();
+        Set set1 = new HashSet();
+        List<String> list = new ArrayList();
         set1.addAll(newListOne);
         list.addAll(set1);
 
-        Set set2 = new  HashSet();
-        List<String> monitor_list = new  ArrayList();
+        Set set2 = new HashSet();
+        List<String> monitor_list = new ArrayList();
         set2.addAll(newListTwo);
         monitor_list.addAll(set2);
 
-        Set set3 = new  HashSet();
-        List<String> fieldDisplayOne = new  ArrayList();
+        Set set3 = new HashSet();
+        List<String> fieldDisplayOne = new ArrayList();
         set3.addAll(fieldDisplay);
         fieldDisplayOne.addAll(set3);
 
@@ -470,32 +476,32 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
 //        String lastPeriodStartTime = sfOne.format(new Date(startLong - (interval * 14)));
         if (dataManagementOneVO.getType() == 1) {
             if (dataManagementOneVO.getValueCalculation() == 1) {
-                currentPeriodRingRatioList = baseMapper.yearOnYearOne(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                currentPeriodRingRatioList = baseMapper.yearOnYearOne(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 2) {
-                currentPeriodRingRatioList = baseMapper.dayMaxDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                currentPeriodRingRatioList = baseMapper.dayMaxDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 3) {
-                currentPeriodRingRatioList = baseMapper.dayMinDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                currentPeriodRingRatioList = baseMapper.dayMinDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 4) {
-                currentPeriodRingRatioList = baseMapper.daySumDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                currentPeriodRingRatioList = baseMapper.daySumDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             }
         } else if (dataManagementOneVO.getType() == 2) {
             if (dataManagementOneVO.getValueCalculation() == 1) {
-                currentPeriodRingRatioList = baseMapper.yearOnYearTwo(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                currentPeriodRingRatioList = baseMapper.yearOnYearTwo(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 2) {
-                currentPeriodRingRatioList = baseMapper.monthMaxDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                currentPeriodRingRatioList = baseMapper.monthMaxDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 3) {
-                currentPeriodRingRatioList = baseMapper.monthMinDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                currentPeriodRingRatioList = baseMapper.monthMinDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             } else if (dataManagementOneVO.getValueCalculation() == 4) {
-                currentPeriodRingRatioList = baseMapper.monthSumDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList);
+                currentPeriodRingRatioList = baseMapper.monthSumDataList(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList);
             }
         } else {
 //            String[] a={"Epn3","Epp"};
-            currentPeriodRingRatioList = baseMapper.yearOnYearThree(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(),variableCodingList,fieldDisplayOne);
+            currentPeriodRingRatioList = baseMapper.yearOnYearThree(newList, dataManagementOneVO.getStartTime(), dataManagementOneVO.getEndTime(), variableCodingList, fieldDisplayOne);
         }
 
         FieldEscapeUtils.remove1(list);
         List<CommonIcoVO> reListOne = new ArrayList<>();
-        if (currentPeriodRingRatioList!=null && !currentPeriodRingRatioList.isEmpty()){
+        if (currentPeriodRingRatioList != null && !currentPeriodRingRatioList.isEmpty()) {
             for (int i = 0; i < monitor_list.size(); i++) {
                 for (int j = 0; j < list.size(); j++) {
                     List<Object> data = new ArrayList<>();
@@ -503,20 +509,20 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
                     List<Object> time = new ArrayList<>();
                     for (int k = 0; k < currentPeriodRingRatioList.size(); k++) {
                         String variable_one = list.get(j) + "_" + monitor_list.get(i);
-                        String variable_two = list.get(j)+"_"+currentPeriodRingRatioList.get(k).getDeviceAttributeId();
-                        System.out.println("variable_one:"+variable_one+"---variable_two:"+variable_two);
-                        if (variable_one.equals(variable_two)){
-                            String variable_three = list.get(j)+"_"+currentPeriodRingRatioList.get(k).getDeviceAttributeId();
-                            System.out.println("variable_one_a:"+newListThree+"---variable_two_b:"+variable_three+"---value:"+newListThree.contains(variable_three));
-                            if (newListThree.contains(variable_three)){
+                        String variable_two = list.get(j) + "_" + currentPeriodRingRatioList.get(k).getDeviceAttributeId();
+                        System.out.println("variable_one:" + variable_one + "---variable_two:" + variable_two);
+                        if (variable_one.equals(variable_two)) {
+                            String variable_three = list.get(j) + "_" + currentPeriodRingRatioList.get(k).getDeviceAttributeId();
+                            System.out.println("variable_one_a:" + newListThree + "---variable_two_b:" + variable_three + "---value:" + newListThree.contains(variable_three));
+                            if (newListThree.contains(variable_three)) {
                                 name = currentPeriodRingRatioList.get(k).getMonitorDeviceName() + "/" + FieldEscapeUtils.fieldEscapeUtils(list.get(j));
                                 time.add(currentPeriodRingRatioList.get(k).getDataTime());
 //                                System.out.println();
-                                data.add(FieldEscapeUtils.transformation(currentPeriodRingRatioList.get(k),list.get(j)));
+                                data.add(FieldEscapeUtils.transformation(currentPeriodRingRatioList.get(k), list.get(j)));
                             }
                         }
                     }
-                    if (data!=null && !data.isEmpty()){
+                    if (data != null && !data.isEmpty()) {
                         reListOne.add(CommonIcoVO.builder().name(name).list(data).listDate(time).build());
                     }
 
@@ -545,12 +551,13 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
         return list;
     }
 
+
     @Override
     public List<CommonIcoVO> demandAnalysis(String deviceCode, String monthDate, int cycle) {
         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd");
         String date = FieldEscapeUtils.getLastDayOfMonth(monthDate);
-        String date1=monthDate+"-01 00:00:00";
+        String date1 = monthDate + "-01 00:00:00";
         String date2 = date + " 23:59:59";
         Date startTime;
         Date endTime;
@@ -562,14 +569,14 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
         }
 
         LambdaQueryWrapper<HtAnalogData> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.select(HtAnalogData::getDemand,HtAnalogData::getFreezingTime)
-                .eq(HtAnalogData::getDeviceName,deviceCode)
-                .between(HtAnalogData::getFreezingTime,startTime,endTime)
+        queryWrapper.select(HtAnalogData::getDemand, HtAnalogData::getFreezingTime)
+                .eq(HtAnalogData::getDeviceName, deviceCode)
+                .between(HtAnalogData::getFreezingTime, startTime, endTime)
                 .groupBy(HtAnalogData::getFreezingTime);
         List<HtAnalogData> list1 = this.list(queryWrapper);
         List<Object> demandList = new ArrayList<>();
         List<Object> freezingTimesList = new ArrayList<>();
-        for (int i = 0; i < list1.size(); i++){
+        for (int i = 0; i < list1.size(); i++) {
             demandList.add(list1.get(i).getDemand());
             freezingTimesList.add(formatter1.format(list1.get(i).getFreezingTime()));
         }
@@ -587,4 +594,59 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
         return list;
     }
 
+    @Override
+    public String monthlyReportExport(String deviceCode, String startTime, String endTime, int cycle) {
+        Workbook workbook = null;
+        File file = null;
+        try {
+            ExportParams params = new ExportParams(null, "用能月报");
+            workbook = ExcelExportUtil.exportBigExcel(params, HtAnalogDataTwoExportVo.class,
+                    (o, i) -> {
+                        int startCurrent = (i - 1) * 30;
+                        List<HtAnalogDataOneVo> listOne = this.monthlyReportlist(deviceCode, startTime, endTime, cycle, startCurrent);
+                        return new ArrayList<>(BeanMapperUtils.mapList(listOne, HtAnalogDataOneVo.class, HtAnalogDataTwoExportVo.class));
+                    }, null);
+            if (null != workbook) {
+                file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), String.format("%s-%s.xlsx", "用能月报", System.currentTimeMillis() + ""));
+                FileUtils.createFile(file.getAbsolutePath());
+                FileOutputStream allListingFileOutputStream = new FileOutputStream(file);
+                workbook.write(allListingFileOutputStream);
+            } else {
+                throw new BusinessException("表格数据为空");
+            }
+        } catch (Exception e) {
+            log.error("导出文件失败", e);
+            throw new BusinessException("导出文件失败");
+        } finally {
+            if (workbook != null) {
+                try {
+                    workbook.close();
+                } catch (IOException e) {
+                    log.error("===export spec=== 关闭workbook失败", e);
+                }
+            }
+        }
+        return file.getName();
+    }
+
+
+    @Override
+    public List<HtAnalogDataOneVo> monthlyReportlist(String deviceCode, String startTime, String endTime, int cycle, Integer startCurrent) {
+        List<HtAnalogDataOneVo> listOne = new ArrayList<>();
+        List<HtAnalogDataOneVo> maxMonthlyReport = baseMapper.energyUseListOne(deviceCode, startTime, endTime, cycle, 1, 30, startCurrent);
+        List<HtAnalogDataOneVo> minMonthlyReport = baseMapper.energyUseListOne(deviceCode, startTime, endTime, cycle, 2, 30, startCurrent);
+        if (maxMonthlyReport.size() > 0) {
+            for (int j = 0; j < maxMonthlyReport.size(); j++) {
+                HtAnalogDataOneVo htAnalogDataOneVo = new HtAnalogDataOneVo();
+                BigDecimal b1 = new BigDecimal(maxMonthlyReport.get(j).getEpp().toString());
+                BigDecimal b2 = new BigDecimal(minMonthlyReport.get(j).getEpp().toString());
+                htAnalogDataOneVo.setEpp(b1.subtract(b2).doubleValue());
+//                htAnalogDataOneVo.setEpp("0.01");
+                htAnalogDataOneVo.setFreezingTime(maxMonthlyReport.get(j).getFreezingTime());
+                listOne.add(htAnalogDataOneVo);
+            }
+        }
+        return listOne;
+    }
+
 }

+ 29 - 0
fiveep-service/src/main/java/com/bizmatics/service/vo/HtAnalogDataTwoExportVo.java

@@ -0,0 +1,29 @@
+package com.bizmatics.service.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ya
+ * @since 2021-07-07
+ */
+@Data
+public class HtAnalogDataTwoExportVo {
+
+    private Integer id;
+
+
+    @Excel(name = "电量one", height = 6, width = 20)
+    private Double Epp;
+
+
+    @Excel(name = "名称", height = 6, width = 20)
+    private Date freezingTime;
+
+}