learshaw пре 3 месеци
родитељ
комит
238555b1e3

+ 0 - 9
ems-ui-cloud/src/api/device/device.js

@@ -108,15 +108,6 @@ export function getObjAttr(params) {
   })
 }
 
-// 查询设备最新1条指标
-export function getNewIndex(params) {
-  return request({
-    url: '/ems/object/loadIndex/getNewIndex',
-    method: 'get',
-    params
-  })
-}
-
 export function listDeviceType(params) {
   return request({
     url: '/ems/device/type/online',

+ 0 - 2
ems-ui-cloud/src/api/device/elecMeterH.js

@@ -39,8 +39,6 @@ export function getElecDayAvg(param) {
   })
 }
 
-
-
 /**
  * 条件查询用能指标
  */

+ 108 - 0
ems-ui-cloud/src/api/device/energyConsumption.js

@@ -141,6 +141,14 @@ export function exportAreaWaterConsumption(query) {
   })
 }
 
+export function getAreaElecHourMeter(queryMeter) {
+  return request({
+    url: '/ems/consumption/area/elec/hour/list',
+    method: 'get',
+    params: queryMeter
+  })
+}
+
 // ==================== 设施用电统计 ====================
 
 /**
@@ -225,6 +233,106 @@ export function exportFacsWaterConsumption(query) {
   })
 }
 
+export function listFacsMeterHourSta(queryMeter) {
+  return request({
+    url: '/ems/consumption/facs/elec/listFacsMeterHourSta',
+    method: 'get',
+    params: queryMeter
+  })
+}
+
+export function listFacsElecHourMeter(queryMeter) {
+  return request({
+    url: '/ems/consumption/facs/elec/hour/list',
+    method: 'get',
+    params: queryMeter
+  })
+}
+
+/**
+ * 查询区域小时用电(按时间序列)
+ * @param {Object} query 查询参数
+ */
+export function getAreaElecByTimeIndex(query) {
+  return request({
+    url: '/ems/consumption/area/elec/hour/byTimeIndex',
+    method: 'get',
+    params: query
+  })
+}
+
+/**
+ * 计算时间范围内日平均用电
+ * @param {Object} param 查询参数 { areaCode, deviceCode, startRecTime, endRecTime }
+ */
+export function getElecDayAvg(param) {
+  return request({
+    url: '/ems/consumption/elec/day/avg',
+    method: 'get',
+    params: param
+  })
+}
+
+/**
+ * 按设备类型查询日用电
+ * @param {Object} param 查询参数 { startRecTime, areaCode }
+ */
+export function qryDeviceDay(param) {
+  return request({
+    url: '/ems/consumption/elec/sum/device/day',
+    method: 'get',
+    params: param
+  })
+}
+
+/**
+ * 查询区域小时用水明细
+ * @param {Object} query 查询参数
+ */
+export function getAreaWaterHourMeter(query) {
+  return request({
+    url: '/ems/consumption/area/water/hour/list',
+    method: 'get',
+    params: query
+  })
+}
+
+/**
+ * 查询区域小时用水(按时间序列)
+ * @param {Object} query 查询参数
+ */
+export function getAreaWaterByTimeIndex(query) {
+  return request({
+    url: '/ems/consumption/area/water/hour/byTimeIndex',
+    method: 'get',
+    params: query
+  })
+}
+
+/**
+ * 查询设施小时用水明细
+ * @param {Object} query 查询参数
+ */
+export function getFacsWaterHourMeter(query) {
+  return request({
+    url: '/ems/consumption/facs/water/hour/list',
+    method: 'get',
+    params: query
+  })
+}
+
+/**
+ * 查询设施小时用水汇总
+ * @param {Object} query 查询参数
+ */
+export function listFacsWaterMeterHourSta(query) {
+  return request({
+    url: '/ems/consumption/facs/water/listFacsMeterHourSta',
+    method: 'get',
+    params: query
+  })
+}
+
 // ==================== 辅助功能接口 ====================
 
 /**

+ 0 - 44
ems-ui-cloud/src/api/mgr/loadIndex.js

@@ -1,44 +0,0 @@
-import request from '@/utils/request'
-
-// 查询电力负荷设施指标列表
-export function listLoadIndex(query) {
-  return request({
-    url: '/ems/object/loadIndex/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询电力负荷设施指标详细
-export function getLoadIndex(id) {
-  return request({
-    url: '/ems/object/loadIndex/' + id,
-    method: 'get'
-  })
-}
-
-// 新增电力负荷设施指标
-export function addLoadIndex(data) {
-  return request({
-    url: '/ems/object/loadIndex',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改电力负荷设施指标
-export function updateLoadIndex(data) {
-  return request({
-    url: '/ems/object/loadIndex',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除电力负荷设施指标
-export function delLoadIndex(id) {
-  return request({
-    url: '/ems/object/loadIndex/' + id,
-    method: 'delete'
-  })
-}

+ 117 - 17
ems-ui-cloud/src/views/analysis/power/save.vue

@@ -50,7 +50,7 @@
         <div class="statistic-cards">
           <el-row :gutter="15">
             <el-col :span="12" :xs="24">
-              <div class="stat-card electricity">
+              <div class="stat-card electricity" v-loading="avgLoading">
                 <div class="card-header">
                   <i class="el-icon-s-data card-icon"></i>
                   <span class="card-title">上月平均日用电</span>
@@ -75,7 +75,7 @@
               </div>
             </el-col>
             <el-col :span="12" :xs="24">
-              <div class="stat-card water">
+              <div class="stat-card water" v-loading="avgLoading">
                 <div class="card-header">
                   <i class="el-icon-s-opportunity card-icon"></i>
                   <span class="card-title">上月平均日用水</span>
@@ -212,8 +212,7 @@
 
 <script>
 import { listEmsEcoD } from "@/api/ems/EmsEcoD"
-import { getElecDayAvg } from '@/api/device/elecMeterH'
-import { getWaterDayAvg } from '@/api/device/waterMeterH'
+import { getAreaElecConsumptionSummary, getAreaWaterConsumptionSummary } from '@/api/device/energyConsumption'
 import { areaTreeByFacsCategory } from '@/api/basecfg/area'
 
 export default {
@@ -222,6 +221,7 @@ export default {
     return {
       // 遮罩层
       loading: true,
+      avgLoading: false, // 平均数据加载状态
       // 显示搜索条件
       showSearch: true,
       // 总条数
@@ -283,11 +283,14 @@ export default {
         startRecTime: null,
         endRecTime: null
       },
+      // 【改动点3】日平均查询参数改为使用统一格式
       queryDayAvgParams: {
-        areaCode: '-1',
-        deviceCode: null,
+        objCode: '-1',  // 改为objCode,与新接口保持一致
+        objType: 1,     // 1-区域
+        timeDimension: 'day',  // 日维度
         startRecTime: null,
-        endRecTime: null
+        endRecTime: null,
+        orderFlag: 'desc'
       }
     }
   },
@@ -336,7 +339,12 @@ export default {
       this.queryParams.endRecTime = this.dateRange[1]
     },
 
-    // 初始化月平均数据
+    /**
+     * 【改动点4】初始化月平均数据 - 使用新的统一接口
+     * 原来使用 getElecDayAvg 和 getWaterDayAvg
+     * 现在使用 getAreaElecConsumptionSummary 和 getAreaWaterConsumptionSummary
+     * 然后在前端计算日平均值
+     */
     async initDayAvg() {
       const today = new Date()
       const lastMonth = new Date(today)
@@ -345,29 +353,79 @@ export default {
       const firstDayOfLastMonth = new Date(lastMonth.getFullYear(), lastMonth.getMonth(), 1)
       const lastDayOfLastMonth = new Date(lastMonth.getFullYear(), lastMonth.getMonth() + 1, 0)
 
-      this.queryDayAvgParams.startRecTime = this.formatDate(firstDayOfLastMonth)
-      this.queryDayAvgParams.endRecTime = this.formatDate(lastDayOfLastMonth)
+      // 计算上月天数(用于计算日平均)
+      const dayCount = this.calculateDaysBetween(firstDayOfLastMonth, lastDayOfLastMonth)
+
+      // 构建查询参数
+      const queryParams = {
+        objCode: this.queryDayAvgParams.objCode === '-1' ? null : this.queryDayAvgParams.objCode,
+        objType: 1, // 区域
+        timeDimension: 'day',
+        startRecTime: this.formatDate(firstDayOfLastMonth) + ' 00:00:00',
+        endRecTime: this.formatDate(lastDayOfLastMonth) + ' 23:59:59',
+        orderFlag: 'desc'
+      }
 
+      this.avgLoading = true
       try {
+        // 并行请求用电和用水汇总数据
         const [elecRes, waterRes] = await Promise.all([
-          getElecDayAvg(this.queryDayAvgParams),
-          getWaterDayAvg(this.queryDayAvgParams)
+          getAreaElecConsumptionSummary(queryParams),
+          getAreaWaterConsumptionSummary(queryParams)
         ])
 
+        // 计算用电日平均
         if (elecRes.data) {
-          this.lastMonthAvgElec = parseFloat((elecRes.data.quantity || 0).toFixed(2))
-          this.lastMonthAvgElecCost = parseFloat((elecRes.data.useCost || 0).toFixed(2))
+          const totalElecQuantity = parseFloat(elecRes.data.totalElecQuantity) || 0
+          const totalElecCost = parseFloat(elecRes.data.totalElecCost) || 0
+          this.lastMonthAvgElec = parseFloat((totalElecQuantity / dayCount).toFixed(2))
+          this.lastMonthAvgElecCost = parseFloat((totalElecCost / dayCount).toFixed(2))
+        } else {
+          this.lastMonthAvgElec = 0
+          this.lastMonthAvgElecCost = 0
         }
 
+        // 计算用水日平均
         if (waterRes.data) {
-          this.lastMonthAvgWater = parseFloat((waterRes.data.quantity || 0).toFixed(2))
-          this.lastMonthAvgWaterCost = parseFloat((waterRes.data.useCost || 0).toFixed(2))
+          const totalWaterQuantity = parseFloat(waterRes.data.totalWaterQuantity) || 0
+          const totalWaterCost = parseFloat(waterRes.data.totalWaterCost) || 0
+          this.lastMonthAvgWater = parseFloat((totalWaterQuantity / dayCount).toFixed(2))
+          this.lastMonthAvgWaterCost = parseFloat((totalWaterCost / dayCount).toFixed(2))
+        } else {
+          this.lastMonthAvgWater = 0
+          this.lastMonthAvgWaterCost = 0
         }
       } catch (error) {
         console.error('加载平均数据失败', error)
+        this.$message.error('加载平均数据失败')
+        // 出错时重置为0
+        this.lastMonthAvgElec = 0
+        this.lastMonthAvgElecCost = 0
+        this.lastMonthAvgWater = 0
+        this.lastMonthAvgWaterCost = 0
+      } finally {
+        this.avgLoading = false
       }
     },
 
+    /**
+     * 【新增方法】计算两个日期之间的天数
+     * @param {Date} startDate 开始日期
+     * @param {Date} endDate 结束日期
+     * @returns {number} 天数(包含首尾两天)
+     */
+    calculateDaysBetween(startDate, endDate) {
+      const start = new Date(startDate)
+      const end = new Date(endDate)
+      // 清除时间部分,只保留日期
+      start.setHours(0, 0, 0, 0)
+      end.setHours(0, 0, 0, 0)
+      // 计算天数差(包含首尾两天,所以+1)
+      const diffTime = Math.abs(end - start)
+      const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1
+      return diffDays
+    },
+
     // 格式化日期
     formatDate(date) {
       const year = date.getFullYear()
@@ -448,7 +506,8 @@ export default {
     // 节点单击事件
     handleNodeClick(data) {
       this.queryParams.areaCode = data.id
-      this.queryDayAvgParams.areaCode = data.id
+      // 【改动点5】更新日平均查询参数
+      this.queryDayAvgParams.objCode = data.id
       this.selectedLabel = data.label
       this.initDayAvg()
       this.getList()
@@ -490,6 +549,47 @@ export default {
       if (totalSaving > 0) return '节能'
       if (totalSaving < 0) return '超支'
       return '持平'
+    },
+
+    /**
+     * 解析时间格式
+     * @param {string|Date} time 时间
+     * @param {string} pattern 格式模式
+     */
+    parseTime(time, pattern) {
+      if (!time) return ''
+      const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
+      let date
+      if (typeof time === 'object') {
+        date = time
+      } else {
+        if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
+          time = parseInt(time)
+        }
+        if ((typeof time === 'number') && (time.toString().length === 10)) {
+          time = time * 1000
+        }
+        date = new Date(time)
+      }
+      const formatObj = {
+        y: date.getFullYear(),
+        m: date.getMonth() + 1,
+        d: date.getDate(),
+        h: date.getHours(),
+        i: date.getMinutes(),
+        s: date.getSeconds(),
+        a: date.getDay()
+      }
+      return format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+        let value = formatObj[key]
+        if (key === 'a') {
+          return ['日', '一', '二', '三', '四', '五', '六'][value]
+        }
+        if (result.length > 0 && value < 10) {
+          value = '0' + value
+        }
+        return value || 0
+      })
     }
   }
 }

+ 2 - 2
ems-ui-cloud/src/views/analysis/report/statement-self.vue

@@ -189,7 +189,7 @@
 
 <script>
 import { areaTreeSelect } from '@/api/basecfg/area'
-import { listAreaMeter } from '@/api/device/elecMeterH'
+import { getAreaElecHourMeter } from '@/api/device/energyConsumption'
 import { listPvSupplyH } from '@/api/mgr/pgSupplyH'
 
 export default {
@@ -285,7 +285,7 @@ export default {
     handleQuery() {
       const { reportType, ...params } = this.queryParams
       this.loading = true
-      const api = reportType === 'prod' ? listPvSupplyH : listAreaMeter
+      const api = reportType === 'prod' ? listPvSupplyH : getAreaElecHourMeter
 
       api(params).then(res => {
         const list = res.rows || []

+ 3 - 3
ems-ui-cloud/src/views/largeScreen/home/left.vue

@@ -51,7 +51,7 @@ import {mapState} from 'vuex';
 import {pgSupplyTotalPv} from "@/api/screen";
 import {numToStr} from "@/utils";
 import {DateTool} from "@/utils/DateTool";
-import {listByFacs} from "@/api/device/elecMeterH";
+import { listFacsMeterHourSta } from '@/api/device/energyConsumption'
 import {getSumHStorage, getSumRealTimeStorage} from "@/api/mgr/elecStoreH";
 import {listConfig} from "@/api/system/config";
 
@@ -243,10 +243,10 @@ export default {
         areaCode: this.areaType || -1,
         facsCategory: 'Z',
       };
-      listByFacs(params).then(response => {
+      listFacsMeterHourSta(params).then(response => {
         this.buildingData = response.data.map(item => ({
           name: item.objName,
-          value: item.quantity || 0,
+          value: item.totalElecQuantity || 0,
         }));
       })
     },

+ 3 - 3
ems-ui-cloud/src/views/largeScreen/soc/left.vue

@@ -47,7 +47,7 @@ import {dateFormat} from '@/utils';
 import * as echarts from 'echarts'
 import {mapState} from 'vuex';
 import {cntDevice} from "@/api/device/meterDevice";
-import {listByFacs} from "@/api/device/elecMeterH";
+import { listFacsMeterHourSta } from '@/api/device/energyConsumption'
 import {DateTool} from "@/utils/DateTool";
 import {pgSupplyDayTotalPv} from "@/api/screen";
 
@@ -248,10 +248,10 @@ export default {
         areaCode: this.areaType || -1,
         facsCategory: 'Z',
       };
-      listByFacs(params).then(response => {
+      listFacsMeterHourSta(params).then(response => {
         this.energyUse = response.data.map(item => ({
           name: item.objName,
-          value: item.quantity || 0,
+          value: item.totalElecQuantity || 0,
         }));
       })
     },

+ 4 - 3
ems-ui-cloud/src/views/largeScreen/soc/right.vue

@@ -43,7 +43,8 @@ import BaseChart from '@/components/BaseChart/index.vue'
 import * as echarts from 'echarts'
 import {array2Map, numToStr} from '@/utils'
 import {mapState} from 'vuex';
-import {listByFacs, qryElecMeterByDate, qryWaterMeterByDate} from "@/api/device/elecMeterH";
+import { listFacsMeterHourSta } from '@/api/device/energyConsumption'
+import { qryElecMeterByDate, qryWaterMeterByDate} from "@/api/device/elecMeterH";
 import {DateTool} from "@/utils/DateTool";
 import _ from 'lodash'
 import {listForecastConsumeDateRange} from "@/api/prediction/forecastConsume";
@@ -173,11 +174,11 @@ export default {
         areaCode: this.areaType || -1,
         facsCategory: 'Z',
       };
-      listByFacs(params).then(response => {
+      listFacsMeterHourSta(params).then(response => {
         const energyUse = response.data.map(item => ({
           name: item.objName,
           color: "#14c5f2",
-          value: item.quantity || 0,
+          value: item.totalElecQuantity || 0,
         }));
         this.ranking = _.slice(_.orderBy(energyUse, ['value'], ['desc']), 0, 5);
       })

+ 21 - 14
ems-ui-cloud/src/views/mgr/poweruse.vue

@@ -360,8 +360,7 @@
 <script>
 import * as echarts from 'echarts'
 import dayjs from 'dayjs'
-// API 接口 - 确保路径正确
-import { listByFacs, listFacsMeter } from '@/api/device/elecMeterH'
+import { listFacsMeterHourSta, listFacsElecHourMeter } from '@/api/device/energyConsumption'
 import { getFacsCategorygetByCode } from '@/api/basecfg/emsfacs'
 import { areaTreeByFacsCategory } from '@/api/basecfg/area'
 
@@ -608,25 +607,32 @@ export default {
           meterCls: 45,
           facsCategory: 'Z'
         }
-        const response = await listByFacs(params)
+        const response = await listFacsMeterHourSta(params)
         const data = response.data || []
 
+        // 修改:字段从 quantity 改为 totalElecQuantity
         this.overviewTableData = data
           .map(item => ({
             objCode: item.objCode,
             objName: item.objName,
-            quantity: item.quantity || 0
+            quantity: item.totalElecQuantity || 0  // 修改此处
           }))
           .filter(item => item.quantity > 0)
           .sort((a, b) => b.quantity - a.quantity)
 
-        const totalQuantity = data.reduce((sum, item) => sum + (item.quantity || 0), 0)
+        // 修改:利用新字段获取分时电量统计
+        const totalQuantity = data.reduce((sum, item) => sum + (item.totalElecQuantity || 0), 0)
+        const peakQuantity = data.reduce((sum, item) => sum + (item.peakQuantity || 0) + (item.sharpPeakQuantity || 0), 0)
+        const valleyQuantity = data.reduce((sum, item) => sum + (item.valleyQuantity || 0) + (item.deepValleyQuantity || 0), 0)
+        const normalQuantity = data.reduce((sum, item) => sum + (item.normalQuantity || 0), 0)
+        const totalCost = data.reduce((sum, item) => sum + (item.totalElecCost || 0), 0)
+
         this.overviewSummary = {
           totalQuantity: totalQuantity,
-          peakQuantity: 0,
-          valleyQuantity: 0,
-          normalQuantity: 0,
-          totalCost: 0
+          peakQuantity: peakQuantity,      // 现在可以正确显示峰时用电
+          valleyQuantity: valleyQuantity,  // 现在可以正确显示谷时用电
+          normalQuantity: normalQuantity,
+          totalCost: totalCost             // 现在可以正确显示总电费
         }
 
         this.$nextTick(() => this.renderOverviewChart())
@@ -674,13 +680,14 @@ export default {
         console.log('[loadDetailData] 请求参数:', baseParams)
 
         // 1. 加载设施汇总数据
-        const summaryRes = await listByFacs(baseParams)
+        const summaryRes = await listFacsMeterHourSta(baseParams)
         console.log('[loadDetailData] 设施汇总响应:', summaryRes)
 
+        // 修改:字段从 quantity 改为 totalElecQuantity
         this.facsSummaryList = (summaryRes.data || []).map(item => ({
           objCode: item.objCode,
           objName: item.objName,
-          quantity: item.quantity || 0
+          quantity: item.totalElecQuantity || 0  // 修改此处
         }))
         console.log('[loadDetailData] 设施汇总数据:', this.facsSummaryList)
 
@@ -722,7 +729,7 @@ export default {
         const params = { ...baseParams, objCode: this.selectedObjCode }
         console.log('[loadHourlyDataByFacs] 查询单个设施:', this.selectedObjCode)
 
-        const hourlyRes = await listFacsMeter(params)
+        const hourlyRes = await listFacsElecHourMeter(params)
         const rawData = hourlyRes.rows || []
 
         const facs = this.facsSummaryList.find(f => f.objCode === this.selectedObjCode)
@@ -743,7 +750,7 @@ export default {
 
       if (facsListToQuery.length === 0) {
         // 没有设施时,尝试按区域获取汇总数据
-        const hourlyRes = await listFacsMeter(baseParams)
+        const hourlyRes = await listFacsElecHourMeter(baseParams)
         const rawData = hourlyRes.rows || []
 
         if (rawData.length > 0) {
@@ -761,7 +768,7 @@ export default {
           const params = { ...baseParams, objCode: facs.objCode }
           console.log('[loadHourlyDataByFacs] 请求设施小时数据:', facs.objCode)
 
-          const hourlyRes = await listFacsMeter(params)
+          const hourlyRes = await listFacsElecHourMeter(params)
           const rawData = hourlyRes.rows || []
 
           return {