Przeglądaj źródła

建筑用能模块:能耗总览、需量分析、节能分析、能耗排名、分项能耗接口优化,与数据库数据对接

sl 1 rok temu
rodzic
commit
dfc60092f0

+ 87 - 0
jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -732,4 +732,91 @@ public class DateUtils extends PropertyEditorSupport {
         return null;
     }
 
+
+
+    public static Date addYears(Date date, int amount)
+    {
+        return add(date, 1, amount);
+    }
+
+    public static Date addMonths(Date date, int amount)
+    {
+        return add(date, 2, amount);
+    }
+
+    public static Date addWeeks(Date date, int amount)
+    {
+        return add(date, 3, amount);
+    }
+
+    public static Date addDays(Date date, int amount)
+    {
+        return add(date, 5, amount);
+    }
+
+    public static Date addHours(Date date, int amount)
+    {
+        return add(date, 11, amount);
+    }
+
+    public static Date addMinutes(Date date, int amount)
+    {
+        return add(date, 12, amount);
+    }
+
+    public static Date addSeconds(Date date, int amount)
+    {
+        return add(date, 13, amount);
+    }
+
+    public static Date addMilliseconds(Date date, int amount)
+    {
+        return add(date, 14, amount);
+    }
+    private static Date add(Date date, int calendarField, int amount) {
+        if (date == null) {
+            throw new IllegalArgumentException("The date must not be null");
+        } else {
+            Calendar c = Calendar.getInstance();
+            c.setTime(date);
+            c.add(calendarField, amount);
+            return c.getTime();
+        }
+    }
+
+    /**
+     * 一天按小时拆分
+     * @return
+     */
+    public static List<String> getDaySplitHour() {
+        List<String> hours = new ArrayList<>();
+        hours.add("00:00");
+        hours.add("01:00");
+        hours.add("02:00");
+        hours.add("03:00");
+        hours.add("04:00");
+        hours.add("05:00");
+        hours.add("06:00");
+        hours.add("07:00");
+        hours.add("08:00");
+        hours.add("09:00");
+        hours.add("10:00");
+        hours.add("11:00");
+        hours.add("12:00");
+        hours.add("13:00");
+        hours.add("14:00");
+        hours.add("15:00");
+        hours.add("16:00");
+        hours.add("17:00");
+        hours.add("18:00");
+        hours.add("19:00");
+        hours.add("20:00");
+        hours.add("21:00");
+        hours.add("22:00");
+        hours.add("23:00");
+
+        return hours;
+    }
+
 }
+

+ 4 - 0
module_base/src/main/java/org/jeecg/modules/baseSpace/entity/Space.java

@@ -93,4 +93,8 @@ public class Space implements Serializable {
 	@Dict(dicCode = "yn")
     @ApiModelProperty(value = "是否有子节点")
     private java.lang.String hasChild;
+    /**备注*/
+    @Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
 }

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/baseSpace/entity/SpaceDto.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.baseSpace.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * ClassName: SpaceDto
+ * Package: org.jeecg.modules.baseSpace.entity
+ * Description:后端传送前端的区域信息类
+ *
+ * @Author sl
+ * @Create 2024/2/20 14:42
+ * @Version 1.0
+ */
+@Data
+public class SpaceDto extends Space {
+    /** 父区域名称 */
+    private String parentName;
+}

+ 9 - 0
module_base/src/main/java/org/jeecg/modules/baseSpace/mapper/SpaceMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.common.system.vo.SelectTreeModel;
 import org.jeecg.modules.baseSpace.entity.Space;
+import org.jeecg.modules.baseSpace.entity.SpaceDto;
 
 import java.util.List;
 import java.util.Map;
@@ -32,4 +33,12 @@ public interface SpaceMapper extends BaseMapper<Space> {
 	 */
 	List<SelectTreeModel> queryListByPid(@Param("pid") String pid, @Param("query") Map<String, String> query);
 
+	/**
+	 * 根据区域ID查询信息
+	 *
+	 * @param spaceid 区域ID
+	 * @return 部门信息
+	 */
+	public SpaceDto selectSpaceById(String spaceid);
+
 }

+ 29 - 0
module_base/src/main/java/org/jeecg/modules/baseSpace/mapper/xml/SpaceMapper.xml

@@ -22,4 +22,33 @@
 		</if>
 	</select>
 
+	<resultMap type="org.jeecg.modules.baseSpace.entity.SpaceDto" id="SpaceDtoResult">
+		<id property="id" column="id"/>
+		<result property="parentid" column="parentid"/>
+		<result property="remark" column="remark"/>
+		<result property="name" column="name"/>
+		<result property="serialnum" column="serialnum"/>
+		<result property="spacetype" column="spacetype"/>
+		<result property="deptid" column="deptid"/>
+		<result property="builtarea" column="builtarea"/>
+		<result property="aircondsys" column="aircondsys"/>
+		<result property="heatsys" column="heatsys"/>
+		<result property="aircondarea" column="aircondarea"/>
+		<result property="heatarea" column="heatarea"/>
+		<result property="createBy" column="create_by"/>
+		<result property="createTime" column="create_time"/>
+		<result property="updateBy" column="update_by"/>
+		<result property="updateTime" column="update_time"/>
+		<result property="hasChild" column="has_child"/>
+		<result property="sysOrgCode" column="sys_org_code"/>
+		<result property="parentName" column="parent_name"/>
+	</resultMap>
+
+	<select id="selectSpaceById" parameterType="String" resultMap="SpaceDtoResult">
+		select d.id, d.parentid, d.remark, d.name, d.serialnum, d.spacetype, d.deptid, d.builtarea, d.aircondsys, d.heatsys,d.aircondarea,d.heatarea, d.create_by, d.create_time,d.has_child, d.sys_org_code,
+			   (select name from base_space where id = d.parentid) parent_name
+		from base_space d
+		where d.id = #{spaceid}
+	</select>
+
 </mapper>

+ 4 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/entity/EnergyItem.java

@@ -65,4 +65,8 @@ public class EnergyItem implements Serializable {
     @ApiModelProperty(value = "能源分类ID")
     @Dict(dictTable ="base_energy_type",dicText = "name",dicCode = "id")
     private String energytypeid;
+
+    /** 能源分类 */
+    @Excel(name = "能源分类", width = 15)
+    private String energytypename;
 }

+ 8 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/mapper/EnergyItemMapper.java

@@ -16,4 +16,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 @Mapper
 public interface EnergyItemMapper extends BaseMapper<EnergyItem> {
 
+    /**
+     * 查询能耗分项列表
+     *
+     * @param energyItem 能耗分项
+     * @return 能耗分项集合
+     */
+    public List<EnergyItem> selectEmsEnergyItemList(@Param("energyItem") EnergyItem energyItem);
+
 }

+ 12 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/mapper/xml/EnergyItemMapper.xml

@@ -2,4 +2,16 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.energyItem.mapper.EnergyItemMapper">
 
+    <select id="selectEmsEnergyItemList" parameterType="org.jeecg.modules.energyItem.entity.EnergyItem" resultType="org.jeecg.modules.energyItem.entity.EnergyItem">
+        select i.id, i.create_by, i.create_time, i.update_by, i.update_time, i.remark, i.energyitemname, i.energytypeid, t.name as energytypename
+        from base_energy_item as i
+        left join base_energy_type as t on i.energytypeid=t.id
+        <where>
+            <if test="energyItem.energyitemname != null and energyItem.energyitemname != ''"> and i.energyitemname like concat('%', #{energyItem.energyitemname}, '%')</if>
+            <if test="energyItem.energytypeid != null and energyItem.energytypeid != ''"> and i.energytypeid = #{energyItem.energytypeid}</if>
+            <if test="energyItem.energytypename != null and energyItem.energytypename != ''"> and t.name = #{energyItem.energytypename}</if>
+        </where>
+        order by id asc
+    </select>
+
 </mapper>

+ 3 - 2
module_ems/src/main/java/org/jeecg/modules/emsStatistics/controller/EmsStatisticsController.java

@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.text.ParseException;
 import java.util.Map;
 
 @Api(tags = "能耗管理")
@@ -42,7 +43,7 @@ public class EmsStatisticsController {
      */
     @ApiOperation("节能分析")
     @GetMapping("/savinganalysis")
-    public Result<Object> savingAnalysis(String spaceId, String yearMonth) {
+    public Result<Object> savingAnalysis(String spaceId, String yearMonth) throws ParseException {
         return emsStatisticsService.savingAnalysis(spaceId, yearMonth);
     }
 
@@ -60,7 +61,7 @@ public class EmsStatisticsController {
      */
     @ApiOperation("分项能耗")
     @GetMapping("/itemizedenergy")
-    public Result<Object> itemizedEnergy(String spaceId, String day) {
+    public Result<Object> itemizedEnergy(String spaceId, String day) throws ParseException {
         return emsStatisticsService.itemizedEnergy(spaceId, day);
     }
 

+ 9 - 9
module_ems/src/main/java/org/jeecg/modules/emsStatistics/mapper/EmsStatisticsMapper.java

@@ -95,7 +95,7 @@ public interface EmsStatisticsMapper {
      * @param day 天
      * @return 分析统计
      */
-    public List<EmsStatistics> selectEnergyByDay(@Param("ids") List<Long> ids, @Param("day") String day);
+    public List<EmsStatistics> selectEnergyByDay(@Param("ids") List<String> ids, @Param("day") String day);
 
     /**
      * 依据多个设备ID和开始结束年月获取能耗排名
@@ -105,7 +105,7 @@ public interface EmsStatisticsMapper {
      * @param endTime 结束年月
      * @return 分析统计
      */
-    public List<EmsStatistics> selectRankByEquipmentAndYearmonth(@Param("ids") List<Long> ids,
+    public List<EmsStatistics> selectRankByEquipmentAndYearmonth(@Param("ids") List<String> ids,
                                                                   @Param("beginTime") String beginTime,
                                                                   @Param("endTime") String endTime);
 
@@ -117,7 +117,7 @@ public interface EmsStatisticsMapper {
      * @param endTime 结束年月
      * @return 分析统计
      */
-    public Float selectAllElecByEquipmentAndYearmonth(@Param("equipmentid") Long equipmentid,
+    public Float selectAllElecByEquipmentAndYearmonth(@Param("equipmentid") String equipmentid,
                                                      @Param("beginTime") String beginTime,
                                                      @Param("endTime") String endTime);
 
@@ -147,7 +147,7 @@ public interface EmsStatisticsMapper {
      * @param week 周
      * @return 分析统计
      */
-    public List<EmsStatistics> selectItemByEquipidAndYearweek(@Param("ids") List<Long> ids,
+    public List<EmsStatistics> selectItemByEquipidAndYearweek(@Param("ids") List<String> ids,
                                                             @Param("year") Integer year,
                                                             @Param("week") Integer week);
 
@@ -159,7 +159,7 @@ public interface EmsStatisticsMapper {
      * @param week 周
      * @return 分析统计
      */
-    public List<EmsStatistics> selectItemByEquipidAndYearweekTotal(@Param("ids") List<Long> ids,
+    public List<EmsStatistics> selectItemByEquipidAndYearweekTotal(@Param("ids") List<String> ids,
                                                               @Param("year") Integer year,
                                                               @Param("week") Integer week);
 
@@ -171,7 +171,7 @@ public interface EmsStatisticsMapper {
      * @param month 月
      * @return 分析统计
      */
-    public List<EmsStatistics> selectItemByEquipidAndYearmonth(@Param("ids") List<Long> ids,
+    public List<EmsStatistics> selectItemByEquipidAndYearmonth(@Param("ids") List<String> ids,
                                                               @Param("year") Integer year,
                                                               @Param("month") Integer month);
 
@@ -183,7 +183,7 @@ public interface EmsStatisticsMapper {
      * @param month 月
      * @return 分析统计
      */
-    public List<EmsStatistics> selectItemByEquipidAndYearmonthTotal(@Param("ids") List<Long> ids,
+    public List<EmsStatistics> selectItemByEquipidAndYearmonthTotal(@Param("ids") List<String> ids,
                                                                @Param("year") Integer year,
                                                                @Param("month") Integer month);
 
@@ -196,7 +196,7 @@ public interface EmsStatisticsMapper {
      * @param beginTime 结束时间
      * @return 分析统计
      */
-    public List<EmsStatistics> selectItemByEquipidAndDaytime(@Param("ids") List<Long> ids,
+    public List<EmsStatistics> selectItemByEquipidAndDaytime(@Param("ids") List<String> ids,
                                                             @Param("day") String day,
                                                             @Param("beginTime") String beginTime,
                                                             @Param("endTime") String endTime);
@@ -210,7 +210,7 @@ public interface EmsStatisticsMapper {
      * @param beginTime 结束时间
      * @return 分析统计
      */
-    public List<EmsStatistics> selectItemByEquipidAndDaytimeTotal(@Param("ids") List<Long> ids,
+    public List<EmsStatistics> selectItemByEquipidAndDaytimeTotal(@Param("ids") List<String> ids,
                                                                  @Param("day") String day,
                                                                  @Param("beginTime") String beginTime,
                                                                  @Param("endTime") String endTime);

+ 195 - 3
module_ems/src/main/java/org/jeecg/modules/emsStatistics/mapper/xml/EmsStatisticsMapper.xml

@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.emsStatistics.mapper.EmsStatisticsMapper">
 
-
+    <!--获取某个月的电量top5-->
     <select id="selectMonthElectricity" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
         select equipmentid,equipmentname,year,month,ifnull(sum(electricityvalue),0) as howManyValue
         from ems_data_electricity_day
@@ -17,12 +17,14 @@
         order by howManyValue desc
         limit 5;
     </select>
+    <!--获取某个月某台设备的用电量-->
     <select id="selectMonthEquipElectricity" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
         select equipmentid,equipmentname,year,month,ifnull(sum(electricityvalue),0) as howManyValue2
         from ems_data_electricity_day
         where year=#{year} and month=#{month} and equipmentid=#{equipmentid}
         limit 1;
     </select>
+    <!--获取某个月的需量信息-->
     <select id="selectMonthDemand" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
         select '需量峰值' as type, max(tagvalue) as howManyValue
         from ems_data_demand
@@ -44,6 +46,7 @@
                             limit 1
                         ) as b
     </select>
+    <!--获取环境信息(二氧化碳排放、温度、湿度)-->
     <select id="selectEnvironment" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
         select 'CO2排放' as type, round(max(electricityvalue)*(select co2 from base_energy_type where name='电' limit 1), 3) as howManyValue
         from ems_data_electricity_day
@@ -67,6 +70,7 @@
         limit 1
         ) as b
     </select>
+    <!--能源消耗总标煤-依据配电室的电表来计算-->
     <select id="selectKgceMonthTotal" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
         select 290016788021249 as energyitemid,'动力用电' as type,round(ifnull(sum(e.electricityvalue),0)*y.kgce,3) as howManyValue
         from ems_data_electricity_day as e,base_energy_type as y
@@ -97,6 +101,7 @@
         from base_energy_type as y
         where y.name='电'
     </select>
+    <!--能源消耗总标煤-->
     <select id="selectKgceMonth" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
         select t.energyitemid,i.energyitemname as type,round(ifnull(sum(e.electricityvalue),0)*y.kgce,3) as howManyValue
         from ems_data_electricity_day as e,tpm_tag as t,base_energy_item as i,base_energy_type as y
@@ -108,8 +113,7 @@
         </foreach>
         group by t.energyitemid
     </select>
-    <select id="selectItemByEquipidAndDayTotal"
-            resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+    <select id="selectItemByEquipidAndDayTotal" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
         select 290016788021249 as energyitemid,'动力用电' as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
         from ems_data_electricity_day as e
         where e.day=#{day} and e.equipmentid in (301156930748417,301156962205697)
@@ -151,6 +155,7 @@
         group by t.energyitemid
         order by t.energyitemid asc
     </select>
+    <!--最大需量-->
     <select id="SelectMaxDmand" resultType="java.lang.Float">
         select max(a.tagvalue) as howManyValue
         from ems_data_demand a
@@ -159,4 +164,191 @@
             #{item}
         </foreach>
     </select>
+
+    <!--依据多个设备的ID获取某天的实际用能、计划用能-->
+    <select id="selectEnergyByDay" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+        select '实际用能' as type,ifnull(sum(electricityvalue),0) as howManyValue
+        from ems_data_electricity_day
+        where day=#{day}
+        and equipmentid in (
+        select equipmentid
+        from tpm_equipment_status
+        )
+        and equipmentid in
+        <foreach collection="ids" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        union
+        select '计划用能' as type,sum(planvalue) as howManyValue
+        from base_energy_plan
+        where day=#{day} and equipmentid in
+        <foreach collection="ids" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </select>
+
+    <!--依据多个设备ID和开始结束年月获取能耗排名-->
+    <select id="selectRankByEquipmentAndYearmonth" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+        select equipmentid,equipmentname,ifnull(sum(electricityvalue),0) as howManyValue
+        from ems_data_electricity_day
+        where yearmonth &gt;= #{beginTime} and yearmonth &lt;= #{endTime}
+        and equipmentid in (
+        select equipmentid
+        from tpm_equipment_status
+        )
+        and equipmentid in
+        <foreach collection="ids" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        group by equipmentid
+        order by howManyValue desc
+    </select>
+
+    <!--依据设备ID和年月获取能耗总量-->
+    <select id="selectAllElecByEquipmentAndYearmonth" resultType="java.lang.Float">
+        select ifnull(sum(electricityvalue),0) as howManyValue
+        from ems_data_electricity_day
+        where yearmonth &gt;= #{beginTime} and yearmonth &lt;= #{endTime} and equipmentid = #{equipmentid}
+    </select>
+
+    <!--依据个设备的ID和年、周获取能耗分项-依据配电室的电表来计算-->
+    <select id="selectItemByEquipidAndYearweekTotal" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+        select 290016788021249 as energyitemid,'动力用电' as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
+        from ems_data_electricity_day as e
+        where e.year=#{year} and e.week=#{week} and e.equipmentid in (301156930748417,301156962205697)
+        union
+        select 290016823672833 as energyitemid,'空调用电' as equipmentname, '能耗分项' as type,sum(e.electricityvalue) as howManyValue
+        from ems_data_electricity_day as e
+        where e.year=#{year} and e.week=#{week} and e.equipmentid in (301156947525633)
+        union
+        select 290016857227265 as energyitemid,'其它用电' as equipmentname, '能耗分项' as type,
+               (
+                   select sum(electricityvalue)
+                   from ems_data_electricity_day
+                   where equipmentid in (301156882513921) and year=#{year} and week=#{week}
+               ) -
+               (
+                   select sum(electricityvalue)
+                   from ems_data_electricity_day
+                   where equipmentid in (301156930748417,301156962205697) and year=#{year} and week=#{week}
+               ) -
+               (
+                   select sum(electricityvalue)
+                   from ems_data_electricity_day
+                   where equipmentid in (301156947525633) and year=#{year} and week=#{week}
+               ) as howManyValue
+    </select>
+    <!--依据个设备的ID和年、周获取能耗分项-->
+    <select id="selectItemByEquipidAndYearweek" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+        select t.energyitemid as equipmentid,i.energyitemname as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
+        from ems_data_electricity_day as e,tpm_tag as t,base_energy_item as i,base_energy_type as y
+        where e.tagid=t.tagid and t.energyitemid=i.energyitemid and e.year=#{year} and e.week=#{week}
+        and i.energytypeid=y.energytypeid and y.name='电'
+        and e.equipmentid in (
+        select equipmentid
+        from tpm_equipment_status
+        )
+        and e.equipmentid in
+        <foreach collection="ids" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        group by t.energyitemid
+        order by t.energyitemid asc
+    </select>
+
+    <!--依据个设备的ID和年、月获取能耗分项-依据配电室的电表来计算-->
+    <select id="selectItemByEquipidAndYearmonthTotal" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+        select 290016788021249 as energyitemid,'动力用电' as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
+        from ems_data_electricity_day as e
+        where e.year=#{year} and e.month=#{month} and e.equipmentid in (301156930748417,301156962205697)
+        union
+        select 290016823672833 as energyitemid,'空调用电' as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
+        from ems_data_electricity_day as e
+        where e.year=#{year} and e.month=#{month} and e.equipmentid in (301156947525633)
+        union
+        select 290016857227265 as energyitemid,'其它用电' as equipmentname, '能耗分项' as type,
+               (
+                   select ifnull(sum(electricityvalue),0)
+                   from ems_data_electricity_day
+                   where equipmentid in (301156882513921) and year=#{year} and month=#{month}
+               ) -
+               (
+                   select ifnull(sum(electricityvalue),0)
+                   from ems_data_electricity_day
+                   where equipmentid in (301156930748417,301156962205697) and year=#{year} and month=#{month}
+               ) -
+               (
+                   select ifnull(sum(electricityvalue),0)
+                   from ems_data_electricity_day
+                   where equipmentid in (301156947525633) and year=#{year} and month=#{month}
+               ) as howManyValue
+    </select>
+    <!--依据个设备的ID和年、月获取能耗分项-->
+    <select id="selectItemByEquipidAndYearmonth" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+        select t.energyitemid as equipmentid,i.energyitemname as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
+        from ems_data_electricity_day as e,tpm_tag as t,base_energy_item as i,base_energy_type as y
+        where e.tagid=t.tagid and t.energyitemid=i.energyitemid and e.year=#{year} and e.month=#{month}
+        and i.energytypeid=y.energytypeid and y.name='电'
+        and e.equipmentid in (
+        select equipmentid
+        from tpm_equipment_status
+        )
+        and e.equipmentid in
+        <foreach collection="ids" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        group by t.energyitemid
+        order by t.energyitemid asc
+    </select>
+
+    <!--依据个设备的ID和日期、开始结束时间获取能耗分项-->
+    <select id="selectItemByEquipidAndDaytimeTotal" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+        select 290016788021249 as energyitemid,'动力用电' as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
+        from ems_data_electricity as e
+        where e.day=#{day} and e.time &gt;= #{beginTime} and e.time &lt;= #{endTime}
+          and e.equipmentid in (301156930748417,301156962205697)
+        union
+        select 290016823672833 as energyitemid,'空调用电' as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
+        from ems_data_electricity as e
+        where e.day=#{day} and e.time &gt;= #{beginTime} and e.time &lt;= #{endTime}
+          and e.equipmentid in (301156947525633)
+        union
+        select 290016857227265 as energyitemid,'其它用电' as equipmentname, '能耗分项' as type,
+               (
+                   select ifnull(sum(electricityvalue),0)
+                   from ems_data_electricity
+                   where day=#{day} and time &gt;= #{beginTime} and time &lt;= #{endTime}
+                and equipmentid in (301156882513921)
+                ) -
+                (
+        select ifnull(sum(electricityvalue),0)
+        from ems_data_electricity
+        where day=#{day} and time &gt;= #{beginTime} and time &lt;= #{endTime}
+          and equipmentid in (301156930748417,301156962205697)
+            ) -
+            (
+        select ifnull(sum(electricityvalue),0)
+        from ems_data_electricity
+        where day=#{day} and time &gt;= #{beginTime} and time &lt;= #{endTime}
+          and equipmentid in (301156947525633)
+            ) as howManyValue
+    </select>
+    <!--依据个设备的ID和日期、开始结束时间获取能耗分项-->
+    <select id="selectItemByEquipidAndDaytime" resultType="org.jeecg.modules.emsStatistics.entity.EmsStatistics">
+        select t.energyitemid as equipmentid,i.energyitemname as equipmentname, '能耗分项' as type,ifnull(sum(e.electricityvalue),0) as howManyValue
+        from ems_data_electricity as e,tpm_tag as t,base_energy_item as i,base_energy_type as y
+        where e.tagid=t.tagid and t.energyitemid=i.energyitemid and e.day=#{day}
+        and e.time &gt;= #{beginTime} and e.time &lt;= #{endTime}
+        and i.energytypeid=y.energytypeid and y.name='电'
+        and e.equipmentid in (
+        select equipmentid
+        from tpm_equipment_status
+        )
+        and e.equipmentid in
+        <foreach collection="ids" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        group by t.energyitemid
+        order by t.energyitemid asc
+    </select>
 </mapper>

+ 3 - 2
module_ems/src/main/java/org/jeecg/modules/emsStatistics/service/IEmsStatisticsService.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.emsStatistics.service;
 
 import org.jeecg.common.api.vo.Result;
 
+import java.text.ParseException;
 import java.util.Map;
 
 public interface IEmsStatisticsService {
@@ -29,7 +30,7 @@ public interface IEmsStatisticsService {
      * @param spaceId 区域ID
      * @param yearMonth 年月
      */
-    Result<Object> savingAnalysis(String spaceId, String yearMonth);
+    Result<Object> savingAnalysis(String spaceId, String yearMonth) throws ParseException;
 
     /**
      * 能耗排名
@@ -48,7 +49,7 @@ public interface IEmsStatisticsService {
      * @param day 某天
      * @return 分析统计
      */
-    Result<Object> itemizedEnergy(String spaceId, String day);
+    Result<Object> itemizedEnergy(String spaceId, String day) throws ParseException;
 
     /**
      * 用能平衡分析

+ 405 - 5
module_ems/src/main/java/org/jeecg/modules/emsStatistics/service/impl/EmsStatisticsServiceImpl.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.baseSpace.entity.Space;
+import org.jeecg.modules.baseSpace.entity.SpaceDto;
+import org.jeecg.modules.baseSpace.mapper.SpaceMapper;
 import org.jeecg.modules.baseSpace.service.ISpaceService;
 import org.jeecg.modules.dataCurrent.entity.DataCurrent;
 import org.jeecg.modules.dataCurrent.mapper.DataCurrentMapper;
@@ -18,6 +20,7 @@ import org.jeecg.modules.elecfeeBase.mapper.ElecfeeBaseMapper;
 import org.jeecg.modules.emsStatistics.entity.EmsStatistics;
 import org.jeecg.modules.emsStatistics.mapper.EmsStatisticsMapper;
 import org.jeecg.modules.emsStatistics.service.IEmsStatisticsService;
+import org.jeecg.modules.energyItem.entity.EnergyItem;
 import org.jeecg.modules.energyItem.mapper.EnergyItemMapper;
 import org.jeecg.modules.equipmentStatus.entity.EquipmentStatus;
 import org.jeecg.modules.equipmentStatus.mapper.EquipmentStatusMapper;
@@ -27,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.DecimalFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.temporal.IsoFields;
@@ -65,6 +69,9 @@ public class EmsStatisticsServiceImpl implements IEmsStatisticsService {
 
     @Autowired
     private EquipmentStatusMapper equipmentStatusMapper;
+
+    @Autowired
+    private SpaceMapper spaceMapper;
     /**
      * 能耗总览
      *
@@ -328,8 +335,101 @@ public class EmsStatisticsServiceImpl implements IEmsStatisticsService {
      * @param yearMonth 年月
      */
     @Override
-    public Result<Object> savingAnalysis(String spaceId, String yearMonth) {
-        return null;
+    public Result<Object> savingAnalysis(String spaceId, String yearMonth) throws ParseException {
+        Map<String,Object> map = new HashMap<>();
+        LambdaQueryWrapper<TpmEquipment> eq = new LambdaQueryWrapper<TpmEquipment>()
+                .eq(TpmEquipment::getSpaceid, spaceId)
+                .select(TpmEquipment::getId);
+        List<TpmEquipment> equipments = equipmentMapper.selectList(eq);
+        List<String> equipmentids = new ArrayList<>();
+        if (equipments != null && !equipments.isEmpty()) {
+            equipmentids = equipments.stream().map(TpmEquipment::getId).collect(Collectors.toList());
+        }
+        System.out.println(equipmentids);
+        // 区域基本信息
+        SpaceDto energySpace = spaceMapper.selectSpaceById(spaceId);
+        // 当前日期
+        Date currentdate = DateUtils.parseDate(DateUtils.parseDateToStr("yyyy-MM-dd", new Date()), "yyyy-MM-dd");
+
+        // 获取年月的最后一天
+        String thisdate = DateUtils.getLastDay(yearMonth.substring(0,4), yearMonth.substring(5));
+        Integer lastday = Integer.parseInt(thisdate.substring(8));
+
+        // 循环获取相关信息,进行数据分析、节能分析趋势
+        List<Integer> monthDate = new ArrayList<>();
+        List<Float> jienengData = new ArrayList<>();
+        List<Float> chaobiaoData = new ArrayList<>();
+        List<Float> jihuaData = new ArrayList<>();
+        List<Float> leijiData = new ArrayList<>();
+
+        float shijiAll = 0f;
+        float jihuaAll = 0f;
+        float leijiAll = 0f;
+
+        Integer jienengAmount = 0;
+
+        for (int i = 1; i <= lastday; i++) {
+            monthDate.add(i);
+            String day = i < 10 ? yearMonth + "-0" + i : yearMonth + "-" + i;
+            List<EmsStatistics> yongnengList = new ArrayList<>();
+            // 如果选择的是整个厂区、配电室的,则只需要获取配电室的几个表的信息即可
+            if ("AREA0002".equals(energySpace.getSerialnum()) || "AREA0015".equals(energySpace.getSerialnum())) {
+                EmsStatistics statisticsParams1 = new EmsStatistics();
+                List<String> equip1 = new ArrayList<>();
+                equip1.add("301156882513921L");
+                yongnengList = emsStatisticsMapper.selectEnergyByDay(equip1, day);
+            }
+            else if (equipmentids != null && equipmentids.size() > 0) {
+                // 去掉配电室的几个表
+                equipmentids.remove("301156882513921L");
+                equipmentids.remove("301156930748417L");
+                equipmentids.remove("301156947525633L");
+                equipmentids.remove("301156962205697L");
+                yongnengList = emsStatisticsMapper.selectEnergyByDay(equipmentids, day);
+            }
+            float shiji = yongnengList.get(0).getHowManyValue();
+            float jihua = yongnengList.get(1).getHowManyValue();
+
+            // 实际用能、计划用能、累计节能
+            shijiAll += shiji;
+            jihuaAll += jihua;
+            if (currentdate.after(DateUtils.parseDate(day, "yyyy-MM-dd"))) {
+                leijiAll += jihua - shiji;
+            }
+
+            if (shiji > jihua) {
+                // 实际能耗(超标)
+                chaobiaoData.add(shiji);
+                jienengData.add(0f);
+            }
+            else {
+                // 实际能耗(节能)
+                jienengAmount++;
+                chaobiaoData.add(0f);
+                jienengData.add(shiji);
+            }
+//            // 计划用能
+            jihuaData.add(jihua);
+            // 累计节能
+            leijiData.add(leijiAll);
+        }
+
+        map.put("monthDate", monthDate);
+
+        map.put("shijiAll", shijiAll);
+        map.put("jihuaAll", jihuaAll);
+        map.put("leijiAll", leijiAll);
+
+        map.put("jienengData", jienengData);
+        map.put("chaobiaoData", chaobiaoData);
+        map.put("jihuaData", jihuaData);
+        map.put("leijiData", leijiData);
+
+        map.put("anlysis", "节能趋势:与计划能耗相比,有 " + jienengAmount + "个 周期为节能状态,有 " + (lastday - jienengAmount) +
+                "个 周期为耗能状态,与计划耗能相差 " + leijiAll + " kWh,整体状态为 " +
+                (leijiAll > 0 ? "节能" : "耗能"));
+
+        return Result.OK(map);
     }
 
     /**
@@ -342,7 +442,77 @@ public class EmsStatisticsServiceImpl implements IEmsStatisticsService {
      */
     @Override
     public Result<Object> ranking(String spaceId, String beginTime, String endTime) {
-        return null;
+        Map<String,Object> map = new HashMap<>();
+        LambdaQueryWrapper<TpmEquipment> eq = new LambdaQueryWrapper<TpmEquipment>()
+                .eq(TpmEquipment::getSpaceid, spaceId)
+                .select(TpmEquipment::getId);
+        List<TpmEquipment> equipments = equipmentMapper.selectList(eq);
+        List<String> equipmentids = new ArrayList<>();
+        if (equipments != null && !equipments.isEmpty()) {
+            equipmentids = equipments.stream().map(TpmEquipment::getId).collect(Collectors.toList());
+        }
+        System.out.println(equipmentids);
+        // 区域基本信息
+        SpaceDto energySpace = spaceMapper.selectSpaceById(spaceId);
+
+        // 获取今年能耗
+        List<EmsStatistics> thisYearList = new ArrayList<>();
+        // 如果选择的是整个厂区、配电室的,则只需要获取配电室的几个表的信息即可
+        if ("AREA0002".equals(energySpace.getSerialnum())) {
+            // 加上配电室的几个表
+            equipmentids.remove("301156882513921L");
+            equipmentids.remove("301156930748417L");
+            equipmentids.remove("301156947525633L");
+            equipmentids.remove("301156962205697L");
+        }
+        else if ("AREA0015".equals(energySpace.getSerialnum())) {
+            equipmentids = new ArrayList<>();
+            // 去掉配电室的几个表
+            equipmentids.add("301156882513921L");
+            equipmentids.add("301156930748417L");
+            equipmentids.add("301156947525633L");
+            equipmentids.add("301156962205697L");
+        }
+
+        if (equipmentids != null && equipmentids.size() > 0) {
+            thisYearList = emsStatisticsMapper.selectRankByEquipmentAndYearmonth(equipmentids, beginTime, endTime);
+        }
+
+        List<String> equipnames = new ArrayList<>(); // 名称
+        List<Float> equipelecs = new ArrayList<>(); // 能耗
+        if (thisYearList != null && thisYearList.size() > 0) {
+            // 计算今年总能耗
+            Float allElec = (float) thisYearList.stream().mapToDouble(EmsStatistics::getHowManyValue).sum();
+
+            for (int i = 0; i < thisYearList.size(); i++) {
+                equipnames.add(thisYearList.get(i).getEquipmentname());
+                equipelecs.add(thisYearList.get(i).getHowManyValue());
+
+                // 获取去年能耗
+                Integer lastYear = Integer.parseInt(beginTime.substring(0, 4)) - 1;
+                String lastBeginTime = lastYear + "-" + beginTime.substring(5);
+                String lastEndTime = lastYear + "-" + endTime.substring(5);
+                Float lastElectricity = emsStatisticsMapper.selectAllElecByEquipmentAndYearmonth(thisYearList.get(i).getEquipmentid(), lastBeginTime, lastEndTime);
+                thisYearList.get(i).setHowManyValue2(lastElectricity == null ? 0f : lastElectricity);
+
+                // 计算占比
+                float otherValue = (float)Math.round((thisYearList.get(i).getHowManyValue() / allElec) * 10000) / 100f;
+                thisYearList.get(i).setOtherValue(otherValue);
+
+                // 计算同比增长率
+                float thisElectricity = thisYearList.get(i).getHowManyValue();
+                float otherValue2 = 0f;
+                if (lastElectricity != null) {
+                    otherValue2 = (float) Math.round(((thisElectricity - lastElectricity) / lastElectricity) * 10000) / 100f;
+                }
+                thisYearList.get(i).setOtherValue2(otherValue2);
+            }
+        }
+        map.put("yuanquName", equipnames);
+        map.put("numbers", equipelecs);
+        map.put("tableData", thisYearList);
+
+        return Result.OK(map);
     }
 
     /**
@@ -353,8 +523,218 @@ public class EmsStatisticsServiceImpl implements IEmsStatisticsService {
      * @return 分析统计
      */
     @Override
-    public Result<Object> itemizedEnergy(String spaceId, String day) {
-        return null;
+    public Result<Object> itemizedEnergy(String spaceId, String day) throws ParseException {
+        Map<String,Object> map = new HashMap<>();
+
+        Calendar calendar = Calendar.getInstance();
+        // 设置当前的时间戳
+        Date thisDay = DateUtils.parseDate(day, "yyyy-MM-dd");
+        calendar.setTime(thisDay);
+        // 设置星期一为一周开始的第一天
+        calendar.setFirstDayOfWeek(Calendar.MONDAY);
+        // 获得当前日期所属周
+        // *********我草,这个不行,跟mysql获取到的不一致,得用下面一个,但是下面一个跟中国的周好像也不一致
+        // int week = calendar.get(Calendar.WEEK_OF_YEAR);
+        LocalDate localDate = LocalDate.parse(day);
+        int week = localDate.get (IsoFields.WEEK_OF_WEEK_BASED_YEAR);
+        // 获得当前日期所属月
+        int month = calendar.get(calendar.MONTH) + 1;
+        // 获得当前日期所属年
+        int year = calendar.get(Calendar.YEAR);
+
+        // 区域基本信息
+        SpaceDto energySpace = spaceMapper.selectSpaceById(spaceId);
+        // 设备ID
+        List<String> equipmentids = new ArrayList<>();
+        // 如果选择的是整个厂区、配电室的,则只需要获取总控表的信息即可
+        if ("AREA0002".equals(energySpace.getSerialnum()) || "AREA0015".equals(energySpace.getSerialnum())) {
+            EmsStatistics statisticsParams1 = new EmsStatistics();
+            equipmentids.add("301156882513921");
+        }
+        else {
+            LambdaQueryWrapper<TpmEquipment> eq = new LambdaQueryWrapper<TpmEquipment>()
+                    .eq(TpmEquipment::getSpaceid, spaceId)
+                    .select(TpmEquipment::getId);
+            List<TpmEquipment> equipments = equipmentMapper.selectList(eq);
+            if (equipments != null && !equipments.isEmpty()) {
+                equipmentids = equipments.stream().map(TpmEquipment::getId).collect(Collectors.toList());
+            }
+            System.out.println(equipmentids);
+            // 去掉配电室的几个表
+            equipmentids.remove("301156882513921");
+            equipmentids.remove("301156930748417");
+            equipmentids.remove("301156947525633");
+            equipmentids.remove("301156962205697");
+        }
+
+        // 能耗分项
+        List<String> itemList = getEnergyItem("电");
+        map.put("items", itemList);
+
+        // 当天数据
+        String lastDay = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(thisDay, -1)); // 获取昨日
+        List<EmsStatistics> dayStatistics = new ArrayList<>();
+        List<EmsStatistics> lastDayStatistics = new ArrayList<>();
+        if ("AREA0002".equals(energySpace.getSerialnum()) || "AREA0015".equals(energySpace.getSerialnum())) {
+            dayStatistics = emsStatisticsMapper.selectItemByEquipidAndDayTotal(equipmentids, day);
+            lastDayStatistics = emsStatisticsMapper.selectItemByEquipidAndDayTotal(equipmentids, lastDay);
+        }
+        else if (equipmentids != null && equipmentids.size() > 0) {
+            dayStatistics = emsStatisticsMapper.selectItemByEquipidAndDay(equipmentids, day);
+            lastDayStatistics = emsStatisticsMapper.selectItemByEquipidAndDay(equipmentids, lastDay);
+        }
+        if (dayStatistics != null) {
+            double thisDaySum = dayStatistics.stream().mapToDouble(EmsStatistics::getHowManyValue).sum();
+            EmsStatistics thisDayStatis = new EmsStatistics();
+            thisDayStatis.setType("当日用能");
+            thisDayStatis.setHowManyValue((float) thisDaySum);
+            dayStatistics.add(thisDayStatis);
+
+            double lastDaySum = lastDayStatistics.stream().mapToDouble(EmsStatistics::getHowManyValue).sum();
+            EmsStatistics lastDayStatis = new EmsStatistics();
+            lastDayStatis.setType("昨日用能");
+            lastDayStatis.setHowManyValue((float) lastDaySum);
+            dayStatistics.add(lastDayStatis);
+
+            double chain = 0;
+            if (lastDaySum != 0) {
+                chain = Math.round(((thisDaySum - lastDaySum) / lastDaySum) * 10000) / 100f;
+            }
+            EmsStatistics chainStatis = new EmsStatistics();
+            chainStatis.setType("环比");
+            chainStatis.setHowManyValue((float) chain);
+            dayStatistics.add(chainStatis);
+        }
+        map.put("dayStatistics", dayStatistics);
+
+        // 当周数据
+        Date lastWeekDay = DateUtils.addWeeks(thisDay, -1);
+        calendar.setTime(lastWeekDay);
+        int lastWeekYear = calendar.get(Calendar.YEAR);
+        LocalDate localDate1 = LocalDate.parse(DateUtils.parseDateToStr("yyyy-MM-dd",lastWeekDay));
+        int lastWeek = localDate1.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);
+
+        List<EmsStatistics> weekStatistics = new ArrayList<>();
+        List<EmsStatistics> lastWeekStatistics = new ArrayList<>();
+        if ("AREA0002".equals(energySpace.getSerialnum()) || "AREA0015".equals(energySpace.getSerialnum())) {
+            weekStatistics = emsStatisticsMapper.selectItemByEquipidAndYearweekTotal(equipmentids, year, week);
+            lastWeekStatistics = emsStatisticsMapper.selectItemByEquipidAndYearweekTotal(equipmentids, lastWeekYear, lastWeek);
+        }
+        else if (equipmentids != null && equipmentids.size() > 0) {
+            weekStatistics = emsStatisticsMapper.selectItemByEquipidAndYearweek(equipmentids, year, week);
+            lastWeekStatistics = emsStatisticsMapper.selectItemByEquipidAndYearweek(equipmentids, lastWeekYear, lastWeek);
+        }
+        if (weekStatistics != null) {
+            double thisWeekSum = weekStatistics.stream().mapToDouble(EmsStatistics::getHowManyValue).sum();
+            EmsStatistics thisWeekStatis = new EmsStatistics();
+            thisWeekStatis.setType("当周用能");
+            thisWeekStatis.setHowManyValue((float) thisWeekSum);
+            weekStatistics.add(thisWeekStatis);
+
+            double lastWeekSum = lastWeekStatistics.stream().mapToDouble(EmsStatistics::getHowManyValue).sum();
+            EmsStatistics lastWeekStatis = new EmsStatistics();
+            lastWeekStatis.setType("上周用能");
+            lastWeekStatis.setHowManyValue((float) lastWeekSum);
+            weekStatistics.add(lastWeekStatis);
+
+            double chain = 0;
+            if (lastWeekSum != 0) {
+                chain = Math.round(((thisWeekSum - lastWeekSum) / lastWeekSum) * 10000) / 100f;
+            }
+            EmsStatistics chainStatis = new EmsStatistics();
+            chainStatis.setType("环比");
+            chainStatis.setHowManyValue((float) chain);
+            weekStatistics.add(chainStatis);
+        }
+        map.put("weekStatistics", weekStatistics);
+
+        // 当月数据
+        Date lastMonthDay = DateUtils.addMonths(thisDay, -1);
+        calendar.setTime(lastMonthDay);
+        int lastMonth = calendar.get(calendar.MONTH) + 1;
+        int lastMonthYear = calendar.get(Calendar.YEAR);
+        List<EmsStatistics> monthStatistics = new ArrayList<>();
+        List<EmsStatistics> lastMonthStatistics = new ArrayList<>();
+        if ("AREA0002".equals(energySpace.getSerialnum()) || "AREA0015".equals(energySpace.getSerialnum())) {
+            monthStatistics = emsStatisticsMapper.selectItemByEquipidAndYearmonthTotal(equipmentids, year, month);
+            lastMonthStatistics = emsStatisticsMapper.selectItemByEquipidAndYearmonthTotal(equipmentids, lastMonthYear, lastMonth);
+        }
+        else if (equipmentids != null && equipmentids.size() > 0) {
+            monthStatistics = emsStatisticsMapper.selectItemByEquipidAndYearmonth(equipmentids, year, month);
+            lastMonthStatistics = emsStatisticsMapper.selectItemByEquipidAndYearmonth(equipmentids, lastMonthYear, lastMonth);
+        }
+        if (monthStatistics != null) {
+            double thisMonthSum = monthStatistics.stream().mapToDouble(EmsStatistics::getHowManyValue).sum();
+            EmsStatistics thisMonthStatis = new EmsStatistics();
+            thisMonthStatis.setType("当月用能");
+            thisMonthStatis.setHowManyValue((float) thisMonthSum);
+            monthStatistics.add(thisMonthStatis);
+
+            double lastMonthSum = lastMonthStatistics.stream().mapToDouble(EmsStatistics::getHowManyValue).sum();
+            EmsStatistics lastMonthStatis = new EmsStatistics();
+            lastMonthStatis.setType("上月用能");
+            lastMonthStatis.setHowManyValue((float) lastMonthSum);
+            monthStatistics.add(lastMonthStatis);
+
+            double chain = 0;
+            if (lastMonthSum != 0) {
+                chain = Math.round(((thisMonthSum - lastMonthSum) / lastMonthSum) * 10000) / 100f;
+            }
+            EmsStatistics chainStatis = new EmsStatistics();
+            chainStatis.setType("环比");
+            chainStatis.setHowManyValue((float) chain);
+            monthStatistics.add(chainStatis);
+        }
+        map.put("monthStatistics", monthStatistics);
+
+        // 用能趋势
+        List<String> hours = DateUtils.getDaySplitHour();
+        map.put("hours", hours);
+
+        List<Float> dongli = new ArrayList<>();
+        List<Float> zhaoming = new ArrayList<>();
+        List<Float> kongtiao = new ArrayList<>();
+        List<Float> qita = new ArrayList<>();
+
+
+        for(int i = 0; i < hours.size(); i++) {
+            dongli.add(0f);
+            zhaoming.add(0f);
+            kongtiao.add(0f);
+            qita.add(0f);
+            List<EmsStatistics> hourStatis = new ArrayList<>();
+            // 如果选择的是整个厂区、配电室的,需要修改算法
+            if ("AREA0002".equals(energySpace.getSerialnum()) || "AREA0015".equals(energySpace.getSerialnum())) {
+                hourStatis = emsStatisticsMapper.selectItemByEquipidAndDaytimeTotal(equipmentids, day, hours.get(i) + ":00", hours.get(i).substring(0,2) + ":59:59");
+            }
+            else if (equipmentids != null && equipmentids.size() > 0) {
+                hourStatis = emsStatisticsMapper.selectItemByEquipidAndDaytime(equipmentids, day, hours.get(i) + ":00", hours.get(i).substring(0,2) + ":59:59");
+            }
+            if (hourStatis != null && hourStatis.size() > 0) {
+                for (EmsStatistics hoursta : hourStatis) {
+                    switch (hoursta.getEquipmentname()) {
+                        case "动力用电":
+                            dongli.set(i, hoursta.getHowManyValue());
+                            break;
+                        case "照明用电":
+                            zhaoming.set(i, hoursta.getHowManyValue());
+                            break;
+                        case "空调用电":
+                            kongtiao.set(i, hoursta.getHowManyValue());
+                            break;
+                        case "其它用电":
+                            qita.set(i, hoursta.getHowManyValue());
+                            break;
+                    }
+                }
+            }
+        }
+        map.put("dongli", dongli);
+        map.put("zhaoming", zhaoming);
+        map.put("kongtiao", kongtiao);
+        map.put("qita", qita);
+
+        return Result.OK(map);
     }
 
     /**
@@ -487,4 +867,24 @@ public class EmsStatisticsServiceImpl implements IEmsStatisticsService {
     }
 
 
+    /**
+     * 获取分项
+     * @param energytypename 能源分类名称
+     * @return
+     */
+    private List<String> getEnergyItem(String energytypename) {
+        List<String> rtn = new ArrayList<>();
+
+        EnergyItem energyItem = new EnergyItem();
+        energyItem.setEnergytypename(energytypename);
+        List<EnergyItem> itemList = energyItemMapper.selectEmsEnergyItemList(energyItem);
+        System.out.println(itemList);
+        if (itemList != null && itemList.size() > 0) {
+            for (int i = 0; i < itemList.size(); i++) {
+                rtn.add(itemList.get(i).getEnergyitemname());
+            }
+        }
+        return rtn;
+    }
+
 }