From 25648562a9c396f9013a26b4a892155ee77becbb Mon Sep 17 00:00:00 2001
From: ali <ali9696@163.com>
Date: 星期五, 14 二月 2025 11:05:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/develop1.0' into develop_alioo
---
zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java | 564 ++-
zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java | 1
zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java | 3
zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java | 40
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java | 36
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java | 419 +++
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendPage.java | 22
zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java | 65
zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java | 103
zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java | 69
zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml | 18
zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java | 77
zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java | 19
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java | 23
zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java | 145 +
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeVO.java | 43
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java | 44
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java | 115
zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml | 26
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java | 68
zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/YearComprehensiveController.java | 161 +
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/YearComprehensiveServiceImpl.java | 68
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/common/DateTimeUtil.java | 750 +++++
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java | 20
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java | 55
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java | 315 ++
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/MonthlyComprehensive.java | 415 +++
zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java | 10
zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java | 2
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java | 34
zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java | 191 +
zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java | 30
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java | 28
zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml | 4
zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java | 174
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendItem.java | 51
zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java | 32
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/YearComprehensiveMapper.java | 51
zhitan-system/src/main/resources/mapper/comprehensivestatistics/MonthlyComprehensiveMapper.xml | 101
zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml | 103
zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java | 4
zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java | 70
zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java | 12
zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java | 3
zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java | 4
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java | 2
zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/StatisticalAnalysisController.java | 2
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java | 44
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java | 33
zhitan-system/src/main/resources/mapper/comprehensivestatistics/YearComprehensiveMapper.xml | 81
zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java | 12
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java | 23
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java | 60
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/ImonthlyComprehensive.java | 41
zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java | 748 +++++
zhitan-admin/src/main/java/com/zhitan/web/controller/saving/EnergySavingProgramController.java | 6
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java | 44
zhitan-admin/src/main/resources/application.yml | 2
zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java | 12
zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java | 41
zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java | 15
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java | 20
zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java | 2
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/DailyReport.java | 321 ++
zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java | 26
zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java | 22
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java | 278 ++
zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java | 15
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/CostTrendEnergyTypeItem.java | 47
zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java | 5
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IyearComprehensive.java | 42
zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java | 40
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java | 23
zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java | 5
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/MonthlyComprehensiveMapper.java | 51
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java | 33
zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java | 55
zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml | 22
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/MonthlyComprehensiveServiceImpl.java | 42
zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java | 2
zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java | 8
zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml | 17
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/IEnergyConsumeDataService.java | 35
zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/MonthlyComprehensiveController.java | 205 +
zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml | 10
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java | 19
zhitan-admin/src/main/java/com/zhitan/web/controller/history/HistoryDataTrendController.java | 97
zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java | 5
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java | 83
zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java | 14
/dev/null | 163 -
zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/YearComperhensive.java | 214 +
zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java | 4
zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java | 13
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java | 20
zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java | 4
zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java | 39
97 files changed, 7,021 insertions(+), 734 deletions(-)
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java
index 7eb390d..c00de71 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java
@@ -1,10 +1,12 @@
package com.zhitan.web.controller.common;
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import com.zhitan.common.config.BaseConfig;
+import com.zhitan.common.constant.Constants;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.common.utils.file.FileUploadUtils;
+import com.zhitan.common.utils.file.FileUtils;
+import com.zhitan.framework.config.ServerConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
@@ -13,13 +15,12 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import com.zhitan.common.config.BaseConfig;
-import com.zhitan.common.constant.Constants;
-import com.zhitan.common.core.domain.AjaxResult;
-import com.zhitan.common.utils.StringUtils;
-import com.zhitan.common.utils.file.FileUploadUtils;
-import com.zhitan.common.utils.file.FileUtils;
-import com.zhitan.framework.config.ServerConfig;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
/**
* 閫氱敤璇锋眰澶勭悊
@@ -36,6 +37,9 @@
private ServerConfig serverConfig;
private static final String FILE_DELIMETER = ",";
+
+ @Resource
+ private BaseConfig baseConfig;
/**
* 閫氱敤涓嬭浇璇锋眰
@@ -81,7 +85,7 @@
String filePath = BaseConfig.getUploadPath();
// 涓婁紶骞惰繑鍥炴柊鏂囦欢鍚嶇О
String fileName = FileUploadUtils.upload(filePath, file);
- String url = serverConfig.getUrl() + fileName;
+ String url = baseConfig.getDomainName() + fileName;
AjaxResult ajax = AjaxResult.success();
ajax.put("url", url);
ajax.put("fileName", fileName);
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java
index 4beb942..d5c6788 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/ComprehensiveStatisticsController.java
@@ -9,6 +9,7 @@
import com.zhitan.keyequipment.service.IDailyKeyEquipmentService;
import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.model.service.IModelNodeService;
+import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java
index 4ce9a69..879ecce 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/DailyComprehensiveController.java
@@ -67,7 +67,7 @@
i++;
}
List<DailyComprehensive> list = dailyComprehensiveService.getDailyComprehensiveList(modelNode.getNodeId(),
- dataList, dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(), dataItem.getIndexStorageId());
+ dataList, dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(), dataItem.getEnergyType());
return AjaxResult.success(list);
} catch (Exception ex) {
logger.error("鑾峰彇鍑洪敊锛�", ex);
@@ -87,7 +87,7 @@
dataItem.setBeginTime(dataItem.getDataTime());
String endTime=aa+" 24:00:00";
dataItem.setEndTime(sf.parse(endTime));
- List<DailyComprehensive> list = dailyComprehensiveService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+ List<DailyComprehensive> list = dailyComprehensiveService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
return AjaxResult.success(list);
}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/MonthlyComprehensiveController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/MonthlyComprehensiveController.java
new file mode 100644
index 0000000..0a98ba3
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/MonthlyComprehensiveController.java
@@ -0,0 +1,205 @@
+package com.zhitan.web.controller.comprehensivestatistics;
+
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.comprehensivestatistics.domain.MonthlyComprehensive;
+import com.zhitan.comprehensivestatistics.service.ImonthlyComprehensive;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.realtimedata.domain.DataItem;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.Field;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * electricityPriceController
+ *
+ * @author sys
+ * @date 2020-02-18
+ */
+@Slf4j
+@RestController
+@RequestMapping("/comprehensive/monthlyComprehensive")
+@Api(value = "缁煎悎鎸囨爣鍒嗘瀽锛堟湀锛塩ontroller",tags = {"缁煎悎鎸囨爣鍒嗘瀽"})
+public class MonthlyComprehensiveController extends BaseController {
+
+ @Autowired
+ private IModelNodeService modelNodeService;
+ @Autowired
+ private ImonthlyComprehensive monthlyComprehensive;
+
+ /*鍏ㄥ巶鑳借�楃粺璁�*/
+ @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堟湀锛夊垪琛�")
+ @GetMapping("/list")
+ public AjaxResult list(DataItem dataItem) {
+ try {
+
+ Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
+ List<MonthlyComprehensive> dataList=new ArrayList<>();
+ DateFormat df = new SimpleDateFormat("yyyy-MM");
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String aa= df.format(dataItem.getDataTime());
+ String bb="";
+ int i = 1;
+ String beginTime=aa+"-01 00:00:00";
+ dataItem.setBeginTime(sf.parse(beginTime));
+ String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
+ dataItem.setEndTime(sf.parse(endTime));
+ while (i <= Integer.parseInt(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length() - 2))) {
+ if (i > 9) {
+ bb = aa + "-" + i + " 00:00:00";
+ } else {
+ bb = aa + "-0" + i + " 00:00:00";
+ }
+ MonthlyComprehensive report = new MonthlyComprehensive();
+ report.setDataTime(sf.parse(bb));
+ report.setValue("value" + i);
+ dataList.add(report);
+ tableColumn.put("value" + i, String.valueOf(i) + "鏃�");
+ i++;
+ }
+
+ MonthlyComprehensive reportList = new MonthlyComprehensive();
+ List<Map> table = new ArrayList<>();
+ table.add(tableColumn);
+ reportList.setTablehead(table);
+
+ ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
+ if (ObjectUtils.isEmpty(modelNode)) {
+ return AjaxResult.success(reportList);
+ }
+ List<MonthlyComprehensive> list = monthlyComprehensive.getMonthlyComprehensiveList(modelNode.getNodeId(),
+ dataList, dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(), dataItem.getEnergyType());
+ int count = Integer.parseInt(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length() - 2));
+ list.forEach(monthlyReport -> monthlyReport.setCount(count));
+ reportList.setTabledata(list);
+
+ return AjaxResult.success(reportList);
+ } catch (Exception ex) {
+ logger.error("鑾峰彇鍑洪敊锛�", ex);
+ return AjaxResult.error("鑾峰彇鍑洪敊!");
+ }
+ }
+/**/
+ /**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
+ */
+ @GetMapping("/listChart")
+ @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽鍥捐〃锛堟湀锛夋暟鎹�")
+ public AjaxResult listChart(DataItem dataItem) throws ParseException {
+ DateFormat df = new SimpleDateFormat("yyyy-MM");
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String aa= df.format(dataItem.getDataTime());
+ String beginTime=aa+"-01 00:00:00";
+ dataItem.setBeginTime(sf.parse(beginTime));
+ String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
+ dataItem.setEndTime(sf.parse(endTime));
+ List<MonthlyComprehensive> list = monthlyComprehensive.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
+ return AjaxResult.success(list);
+ }
+ public static String getLastDayOfMonth(String yearMonth) {
+ int year = Integer.parseInt(yearMonth.split("-")[0]); //骞�
+ int month = Integer.parseInt(yearMonth.split("-")[1]); //鏈�
+ Calendar cal = Calendar.getInstance();
+ // 璁剧疆骞翠唤
+ cal.set(Calendar.YEAR, year);
+ // 璁剧疆鏈堜唤
+ // cal.set(Calendar.MONTH, month - 1);
+ cal.set(Calendar.MONTH, month); //璁剧疆褰撳墠鏈堢殑涓婁竴涓湀
+ // 鑾峰彇鏌愭湀鏈�澶уぉ鏁�
+ //int lastDay = cal.getActualMaximum(Calendar.DATE);
+ int lastDay = cal.getMinimum(Calendar.DATE); //鑾峰彇鏈堜唤涓殑鏈�灏忓�硷紝鍗崇涓�澶�
+ // 璁剧疆鏃ュ巻涓湀浠界殑鏈�澶уぉ鏁�
+ //cal.set(Calendar.DAY_OF_MONTH, lastDay);
+ cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //涓婃湀鐨勭涓�澶╁噺鍘�1灏辨槸褰撴湀鐨勬渶鍚庝竴澶�
+ // 鏍煎紡鍖栨棩鏈�
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ return sdf.format(cal.getTime());
+ }
+ /*缁煎悎鏈堟姤琛ㄥ鍑�*/
+// @Log(title = "缁煎悎鏈堟姤琛ㄥ鍑�", businessType = BusinessType.EXPORT)
+ @GetMapping("/export")
+ @ApiOperation(value = "缁煎悎鏈堟姤琛ㄥ鍑�")
+ public AjaxResult export(DataItem dataItem) {
+ try {
+
+ Map tableColumn =new HashMap<>();//琛ㄦ暟鎹�
+ List<MonthlyComprehensive> dataList=new ArrayList<>();
+ DateFormat df = new SimpleDateFormat("yyyy-MM");
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String aa= df.format(dataItem.getDataTime());
+ String bb="";
+ int i = 1;
+ String beginTime=aa+"-01 00:00:00";
+ dataItem.setBeginTime(sf.parse(beginTime));
+ String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
+ dataItem.setEndTime(sf.parse(endTime));
+ while (i <= Integer.parseInt(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length() - 2))) {
+ if (i > 9) {
+ bb = aa + "-" + i + " 00:00:00";
+ } else {
+ bb = aa + "-0" + i + " 00:00:00";
+ }
+ MonthlyComprehensive report = new MonthlyComprehensive();
+ report.setDataTime(sf.parse(bb));
+ report.setValue("value" + i);
+ dataList.add(report);
+ tableColumn.put("value" + i, i + "鏃�");
+ i++;
+ }
+
+ MonthlyComprehensive reportList = new MonthlyComprehensive();
+ List<Map> table = new ArrayList<>();
+ table.add(tableColumn);
+ reportList.setTablehead(table);
+
+ ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
+ if (ObjectUtils.isEmpty(modelNode)) {
+ return AjaxResult.success(reportList);
+ }
+ List<MonthlyComprehensive> list = monthlyComprehensive.getMonthlyComprehensiveList(modelNode.getNodeId(), dataList,
+ dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(), dataItem.getEnergyType());
+ int count = Integer.parseInt(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length() - 2));
+ list.forEach(monthlyReport -> monthlyReport.setCount(count));
+ if (CollectionUtils.isNotEmpty(list)) {
+ list.forEach(this::valueRep);
+ }
+ ExcelUtil<MonthlyComprehensive> util = new ExcelUtil<>(MonthlyComprehensive.class);
+ return util.exportExcel(list, "缁煎悎鎸囨爣鍒嗘瀽鏈�");
+ } catch (Exception ex) {
+ logger.error("鑾峰彇鍑洪敊锛�", ex);
+ return AjaxResult.error("鑾峰彇鍑洪敊!");
+ }
+ }
+ public void valueRep(Object dr){
+ Field[] fields = dr.getClass().getDeclaredFields();
+ for(Field field:fields){
+ field.setAccessible(true);
+ Object obj = field.getType();
+ if(field.getType().getName().equals("java.lang.Double")){
+ String name = field.getName();
+ try {
+ if(ObjectUtils.isEmpty(field.get(dr)))
+ {
+ field.set(dr,0.00);
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/YearComprehensiveController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/YearComprehensiveController.java
new file mode 100644
index 0000000..3f6a91b
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/YearComprehensiveController.java
@@ -0,0 +1,161 @@
+package com.zhitan.web.controller.comprehensivestatistics;
+
+import cn.hutool.core.date.DateUtil;
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.common.enums.BusinessType;
+import com.zhitan.common.utils.poi.ExcelUtil;
+import com.zhitan.comprehensivestatistics.domain.YearComperhensive;
+import com.zhitan.comprehensivestatistics.service.IyearComprehensive;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.service.IModelNodeService;
+import com.zhitan.realtimedata.domain.DataItem;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.Field;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * electricityPriceController
+ *
+ * @author sys
+ * @date 2020-02-18
+ */
+@RestController
+@RequestMapping("/comprehensive/yearComprehensive")
+@Api(value = "缁煎悎鎸囨爣鍒嗘瀽锛堝勾锛塩ontroller",tags = {"缁煎悎鎸囨爣鍒嗘瀽"})
+public class YearComprehensiveController extends BaseController {
+
+ @Autowired
+ private IModelNodeService modelNodeService;
+ @Autowired
+ private IyearComprehensive yearComprehensive;
+
+ /*鍏ㄥ巶鑳借�楃粺璁�*/
+ @GetMapping("/list")
+ @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堝勾锛夊垪琛�")
+ public AjaxResult list(DataItem dataItem) {
+ try {
+ ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
+ if (ObjectUtils.isEmpty(modelNode)) {
+ return AjaxResult.success("鏆傛棤鏁版嵁");
+ }
+ List<YearComperhensive> dataList = new ArrayList<>();
+
+ dataItem.setBeginTime(DateUtil.beginOfYear(dataItem.getDataTime()));
+ dataItem.setEndTime(DateUtil.endOfYear(dataItem.getDataTime()));
+
+ DateFormat df = new SimpleDateFormat("yyyy");
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String aa = df.format(dataItem.getDataTime());
+ String bb = "";
+ int i = 1;
+ while (i <= 12) {
+ if(i > 9){
+ bb = aa + "-" + i + "-01 00:00:00";
+ }else{
+ bb = aa + "-0" + i + "-01 00:00:00";
+ }
+ YearComperhensive report = new YearComperhensive();
+ report.setDataTime(sf.parse(bb));
+ report.setValue("value" + i);
+ dataList.add(report);
+ i++;
+ }
+ List<YearComperhensive> list = yearComprehensive.getYearComprehensiveList(modelNode.getNodeId(),
+ dataList,dataItem.getBeginTime(), dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
+ return AjaxResult.success(list);
+ } catch (Exception ex) {
+ logger.error("鑾峰彇鍑洪敊锛�", ex);
+ return AjaxResult.error("鑾峰彇鍑洪敊!");
+ }
+ }
+
+ /**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
+ */
+ @GetMapping("/listChart")
+ @ApiOperation(value = "鑾峰彇缁煎悎鎸囨爣鍒嗘瀽鍥捐〃锛堝勾锛夋暟鎹�")
+ public AjaxResult listChart(DataItem dataItem){
+
+ dataItem.setBeginTime(DateUtil.beginOfYear(dataItem.getDataTime()));
+ dataItem.setEndTime(DateUtil.endOfYear(dataItem.getDataTime()));
+
+ List<YearComperhensive> list = yearComprehensive.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
+ return AjaxResult.success(list);
+ }
+
+ /**
+ * 瀵煎嚭宸ュ簭鍗曡�楃粺璁℃寚鏍囪缃姛鑳藉垪琛�
+ */
+ @Log(title = "缁煎悎鎶ヨ〃", businessType = BusinessType.EXPORT)
+ @GetMapping("/export")
+ @ApiOperation(value = "缁煎悎骞存姤琛ㄥ鍑�")
+ public AjaxResult export(DataItem dataItem) {
+ try {
+ ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dataItem.getIndexCode());
+ if (ObjectUtils.isEmpty(modelNode)) {
+ return AjaxResult.success("鏆傛棤鏁版嵁");
+ }
+ List<YearComperhensive> dataList = new ArrayList<>();
+ DateFormat df = new SimpleDateFormat("yyyy");
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String aa = df.format(dataItem.getBeginTime());
+ String bb = "";
+ int i = 1;
+ while (i <= 12) {
+ if(i>9){
+ bb=aa+"-"+i+"-01 00:00:00";
+ }else{
+ bb=aa+"-0"+i+"-01 00:00:00";
+ }
+ YearComperhensive report=new YearComperhensive();
+ report.setDataTime(sf.parse(bb));
+ report.setValue("value"+i);
+ dataList.add(report);
+ i++;
+ }
+ List<YearComperhensive> list = yearComprehensive.getYearComprehensiveList(modelNode.getNodeId(),
+ dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
+ if(CollectionUtils.isNotEmpty(list)){
+ list.forEach(this::valueRep);
+ }
+ ExcelUtil<YearComperhensive> util = new ExcelUtil<>(YearComperhensive.class);
+ return util.exportExcel(list, "缁煎悎鎸囨爣鍒嗘瀽骞�");
+ } catch (Exception ex) {
+ logger.error("鑾峰彇鍑洪敊锛�", ex);
+ return AjaxResult.error("鑾峰彇鍑洪敊!");
+ }
+ }
+
+ public void valueRep(Object dr){
+ Field[] fields = dr.getClass().getDeclaredFields();
+ for(Field field:fields){
+ field.setAccessible(true);
+ Object obj = field.getType();
+ if(field.getType().getName().equals("java.lang.Double")){
+ String name = field.getName();
+ try {
+ if(ObjectUtils.isEmpty(field.get(dr)))
+ {
+ field.set(dr,0.00);
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java
index af9dc6d..9c22a8d 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/consumptionanalysis/ConsumptionAnalysisController.java
@@ -10,6 +10,7 @@
import com.zhitan.consumptionanalysis.domain.vo.RankingDataVO;
import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
import com.zhitan.consumptionanalysis.service.IConsumptionAnalysisService;
+import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
@@ -35,6 +36,7 @@
* @Author: Zhujw
* @Date: 2023/3/1
*/
+@Api(tags = "缁煎悎鑳借�楀垎鏋�")
@RestController
@RequestMapping("/consumptionanalysis")
public class ConsumptionAnalysisController extends BaseController {
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java
index 6434f20..be5615e 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java
@@ -1,9 +1,13 @@
package com.zhitan.web.controller.energyMonitor;
import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.CommonConst;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
-import com.zhitan.energyMonitor.service.IEnergyUnitToDeviceService;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO;
+import com.zhitan.energyMonitor.domain.vo.ListElectricityMeterVO;
+import com.zhitan.energyMonitor.service.IElectricLoadService;
+import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.model.service.IEnergyIndexService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -13,6 +17,8 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
/**
* @Description: 璐熻嵎鍒嗘瀽
@@ -26,33 +32,37 @@
@Slf4j
public class ElectricLoadController extends BaseController {
@Autowired
- private IEnergyUnitToDeviceService energyUnitToDeviceService;
-// @Autowired
-// private IElectricLoadService electricLoadService;
+ private IElectricLoadService electricLoadService;
@Autowired
private IEnergyIndexService energyIndexService;
/**
* 鏍规嵁鐢佃〃id鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁
*
- * @param energyUnitId 鐢ㄨ兘鍗曞厓id
- * @param meterId 鐢佃〃id
- * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
- * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
- * @return
+ * @param nodeId 鐢ㄨ兘鍗曞厓id
+ * @param meterId 鐢佃〃id
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
*/
@Log(title = "鏍规嵁鐢佃〃id鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁")
@ApiOperation(value = "鏍规嵁鐢佃〃id鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁", notes = "鏍规嵁鐢佃〃id鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁")
@GetMapping(value = "/detail")
- public AjaxResult list(@RequestParam(name = "energyUnitId") String energyUnitId,
+ public AjaxResult list(@RequestParam(name = "nodeId") String nodeId,
@RequestParam(name = "meterId") String meterId,
@RequestParam(name = "timeType") String timeType,
@RequestParam(name = "timeCode") String timeCode) {
-// EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(energyUnitId, meterId, CommonConst.TAG_CODE_ZYGGL);
-//
-// EnergyUnitToDevice energyUnitToDevice = energyUnitToDeviceService.getEnergyUnitToDeviceById(energyUnitId, meterId);
-// ListElectricLoadVO lsvo = electricLoadService.list(timeType, timeCode, energyIndex, energyUnitToDevice);
- return AjaxResult.success(null);
+ EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(nodeId, meterId, CommonConst.TAG_CODE_ZYGGL);
+
+ ListElectricLoadVO vo = electricLoadService.list(timeType, timeCode, energyIndex, meterId);
+ return AjaxResult.success(vo);
+ }
+
+ @Log(title = "鑾峰彇鑺傜偣涓嬫墍鏈夌數琛�")
+ @ApiOperation(value = "鑾峰彇鑺傜偣涓嬫墍鏈夌數琛�", notes = "鑾峰彇鑺傜偣涓嬫墍鏈夌數琛�")
+ @GetMapping(value = "/listElectricMeter")
+ public AjaxResult listElectricMeter(@RequestParam(name = "nodeId") String nodeId) {
+ List<ListElectricityMeterVO> vo = electricLoadService.listElectricMeter(nodeId);
+ return AjaxResult.success(vo);
}
}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java
new file mode 100644
index 0000000..a82aeec
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java
@@ -0,0 +1,55 @@
+package com.zhitan.web.controller.energyMonitor;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.energyMonitor.service.IElectricPowerFactorService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.service.IEnergyIndexService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Description: 鍔熺巼鍥犳暟
+ * @Author: yxw
+ * @Date: 2022-04-24
+ * @Version: V1.2
+ */
+@Api(tags = "鍔熺巼鍥犳暟")
+@RestController
+@RequestMapping("/powerFactorAnalysis")
+@Slf4j
+public class ElectricPowerFactorController extends BaseController {
+
+ @Autowired
+ private IElectricPowerFactorService electricPowerFactorService;
+
+ @Autowired
+ private IEnergyIndexService energyIndexService;
+
+ /**
+ * 鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 鐢佃〃id
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21
+ */
+ @Log(title = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁")
+ @ApiOperation(value = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁", notes = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁")
+ @GetMapping(value = "/detail")
+ public AjaxResult list(@RequestParam(name = "nodeId") String nodeId,
+ @RequestParam(name = "meterId") String meterId,
+ @RequestParam(name = "timeCode") String timeCode) {
+ EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(nodeId, meterId, CommonConst.TAG_CODE_GLYS);
+
+ return AjaxResult.success(electricPowerFactorService.list(timeCode, energyIndex));
+ }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java
new file mode 100644
index 0000000..3a10efa
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java
@@ -0,0 +1,65 @@
+package com.zhitan.web.controller.energyMonitor;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.energyMonitor.service.IElectricThreePhaseService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.service.IEnergyIndexService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Description: 涓夌浉涓嶅钩琛�
+ * @Author: yxw
+ * @Date: 2022-04-24
+ * @Version: V1.2
+ */
+@Api(tags = "涓夌浉涓嶅钩琛�")
+@RestController
+@RequestMapping("/threePhaseUnbalanceAnalysis")
+@Slf4j
+public class ElectricThreePhaseController extends BaseController {
+
+ @Autowired
+ private IElectricThreePhaseService electricThreePhaseService;
+ @Autowired
+ private IEnergyIndexService energyIndexService;
+
+ /**
+ * 鑾峰彇鐢ㄨ兘鍗曞厓涓嬬殑鏌愪釜鐢佃〃鐨勪笁鐩镐笉骞宠 鏁版嵁
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 鐢佃〃id
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
+ * @param requestType 璇锋眰绫诲瀷锛�0.鐢靛帇锛�1.鐢垫祦
+ * @return
+ */
+ @Log(title = "鏍规嵁鐢佃〃id鏌ヨ涓夌浉涓嶅钩琛℃暟鎹�")
+ @ApiOperation(value = "鏍规嵁鐢佃〃id鏌ヨ涓夌浉涓嶅钩琛℃暟鎹�", notes = "鏍规嵁鐢佃〃id鏌ヨ涓夌浉涓嶅钩琛℃暟鎹�")
+ @GetMapping(value = "/detail")
+ public AjaxResult list(@RequestParam(name = "nodeId") String nodeId,
+ @RequestParam(name = "meterId") String meterId,
+ @RequestParam(name = "timeType") String timeType,
+ @RequestParam(name = "timeCode") String timeCode,
+ @RequestParam(name = "requestType") String requestType) {
+ if (ObjectUtils.isEmpty(meterId)){
+ return AjaxResult.error("鐢佃〃id涓嶈兘涓虹┖");
+ }
+
+ List<EnergyIndex> energyIndexList = energyIndexService.listDeviceIndex(nodeId, meterId);
+
+ return AjaxResult.success(electricThreePhaseService.list(timeType, timeCode, energyIndexList, requestType, meterId));
+ }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/history/HistoryDataTrendController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/history/HistoryDataTrendController.java
index e1f067b..5b5bd17 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/history/HistoryDataTrendController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/history/HistoryDataTrendController.java
@@ -4,10 +4,15 @@
import com.zhitan.basicdata.domain.MeterImplement;
import com.zhitan.basicdata.services.IMeterImplementService;
import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.enums.BusinessType;
import com.zhitan.common.enums.RetrievalModes;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.ChartUtils;
+import com.zhitan.common.utils.DateTimeUtil;
import com.zhitan.common.utils.poi.ExcelUtil;
import com.zhitan.history.domain.dto.HistoricalDataDTO;
import com.zhitan.history.domain.vo.HistoricalDataExcel;
@@ -16,7 +21,9 @@
import com.zhitan.model.service.IEnergyIndexService;
import com.zhitan.realtimedata.domain.TagValue;
import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import io.swagger.annotations.Api;
import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -29,11 +36,12 @@
import java.util.List;
/**
- * 璁惧鍚仠瀹炴椂鐩戞祴Controller
+ * 鍘嗗彶鏁版嵁瓒嬪娍Controller
*
* @author sys
* @date 2020-03-30
*/
+@Api(tags = "鍘嗗彶鏁版嵁瓒嬪娍")
@RestController
@RequestMapping("/dataMonitoring/historyDataTrend")
public class HistoryDataTrendController extends BaseController {
@@ -61,9 +69,6 @@
public AjaxResult getSettingIndex(EnergyIndex energyIndex) {
try {
List<EnergyIndex> infoList = energyIndexService.selectEnergyIndexList(energyIndex);
-// List<String> codeList= infoList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
-// List<TagValue> valList = realtimeDatabaseService.retrieve(codeList);
-// List resultList = new ArrayList();
return AjaxResult.success(infoList);
} catch (Exception ex) {
logger.error("鑾峰彇鍏宠仈閲囬泦鎸囨爣鍑洪敊锛�", ex);
@@ -80,68 +85,44 @@
if (ObjectUtils.isEmpty(energyIndex)) {
return AjaxResult.error("鏈壘鍒扮偣浣嶄俊鎭�");
}
- Date beginTime = dto.getDataTime();
- Date endTime;
- // 鏌ヨ鏉℃暟
- int count = 1440;
- if ("DAY".equals(dto.getTimeType())) {
- endTime = DateUtil.endOfDay(beginTime);
+ List<Date> dateList = new ArrayList<>();
+ if (TimeType.DAY.name().equals(dto.getTimeType())) {
+ String timeCode = DateTimeUtil.getDateTime(dto.getDataTime(), DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_DAY, timeCode, dateList);
+ } else if (TimeType.HOUR.name().equals(dto.getTimeType())) {
+ String timeCode = DateTimeUtil.getDateTime(dto.getDataTime(), DateTimeUtil.COMMON_PATTERN_TO_HOUR);
+ ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_HOUR, timeCode, dateList);
} else {
- count = 3600;
- endTime = DateUtil.offsetSecond(DateUtil.offsetHour(beginTime, 1), -1);
+ return AjaxResult.error("鏃堕棿闂撮殧绫诲瀷涓嶆纭�");
}
// 鏌ヨ璁¢噺鍣ㄥ叿
- MeterImplement info = meterImplementService.selectMeterImplementById(energyIndex.getMeterId());
- List<TagValue> tagValueList = realtimeDatabaseService.retrieve(energyIndex.getCode(), beginTime, endTime,
- RetrievalModes.BestFit, count);
+ MeterImplement meterInfo = meterImplementService.selectMeterImplementById(energyIndex.getMeterId());
+ if (ObjectUtils.isEmpty(meterInfo)) {
+ return AjaxResult.error("鏈壘鍒拌閲忓櫒鍏蜂俊鎭�");
+ }
List<HistoricalDataVO> voList = new ArrayList<>();
- Date date = DateUtil.date();
- for (int i = 0; i < count + 1; i++) {
+ for (Date date : dateList) {
+ List<TagValue> tagValues = new ArrayList<>();
+ if(TimeType.DAY.name().equals(dto.getTimeType())){
+ Date beginTime = date;
+ Date endTime = DateUtil.offsetHour(DateUtil.offsetMinute(date, CommonConst.DIGIT_MINUS_1), CommonConst.DIGIT_1);
+ tagValues = realtimeDatabaseService.retrieve(energyIndex.getCode(), beginTime,endTime,CommonConst.DIGIT_1);
+ }
+ if(TimeType.HOUR.name().equals(dto.getTimeType())){
+ Date beginTime = date;
+ Date endTime = DateUtil.offsetMinute(DateUtil.offsetSecond(date, CommonConst.DIGIT_MINUS_1), CommonConst.DIGIT_1);
+ tagValues = realtimeDatabaseService.retrieve(energyIndex.getCode(), beginTime,endTime,CommonConst.DIGIT_1);
+ }
+
HistoricalDataVO vo = new HistoricalDataVO();
+ vo.setDataTime(DateUtil.formatDateTime(date));
vo.setIndexId(energyIndex.getIndexId());
- String indexName = energyIndex.getName();
- if (ObjectUtils.isNotEmpty(info)) {
- indexName = info.getInstallactionLocation() + "_" + info.getMeterName() + "_" + indexName;
+ vo.setIndexName(meterInfo.getInstallactionLocation() + "_" + meterInfo.getMeterName() + "_" + energyIndex.getName());
+ vo.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+ if(ObjectUtils.isNotEmpty(tagValues)){
+ vo.setValue(tagValues.get(0).getValue().toString());
}
- vo.setIndexName(indexName);
- // 鍙栧��
- String value = "--";
- String usedValue = "--";
- if (beginTime.getTime() <= date.getTime()) {
- try {
- TagValue tagValue = tagValueList.get(i);
- BigDecimal cumulative = BigDecimal.valueOf(tagValue.getValue());
- if ("SWWSDJ_SD".equals(energyIndex.getCode()) || "SWWSDJ_WD".equals(energyIndex.getCode())) {
- cumulative = cumulative.multiply(BigDecimal.valueOf(0.1));
- }
- if (i > 0) {
- TagValue previousTagValue = tagValueList.get(i - 1);
- BigDecimal previousValue = BigDecimal.ZERO;
- if (ObjectUtils.isNotEmpty(previousTagValue.getValue())) {
- previousValue = BigDecimal.valueOf(previousTagValue.getValue());
- }
- if ("SWWSDJ_SD".equals(energyIndex.getCode()) || "SWWSDJ_WD".equals(energyIndex.getCode())) {
- previousValue = previousValue.multiply(BigDecimal.valueOf(0.1));
-
- }
- usedValue = String.valueOf(cumulative.subtract(previousValue).setScale(2, RoundingMode.HALF_UP));
- }
-
- value = String.valueOf(cumulative.setScale(2, RoundingMode.HALF_UP));
- } catch (Exception ignored) {
- }
- }
- // 鏃堕棿
- String timeName = DateUtil.formatDateTime(beginTime);
- vo.setDataTime(timeName);
- if ("DAY".equals(dto.getTimeType())) {
- beginTime = DateUtil.offsetMinute(beginTime, 1);
- } else {
- beginTime = DateUtil.offsetSecond(beginTime, 1);
- }
- vo.setUsedValue(String.valueOf(usedValue));
- vo.setValue(String.valueOf(value));
voList.add(vo);
}
return AjaxResult.success(voList);
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java
index aa80c65..07dbc79 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/DailyKeyEquipmenteController.java
@@ -75,7 +75,7 @@
i++;
};
startPage();
- List<DailyKeyEquipment> list = dailykeyEquipment.getdailyKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+ List<DailyKeyEquipment> list = dailykeyEquipment.getdailyKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
return getDataTable(list);
}
@@ -88,7 +88,7 @@
dataItem.setBeginTime(dataItem.getDataTime());
String endTime=aa+" 24:00:00";
dataItem.setEndTime(sf.parse(endTime));
- List<DailyKeyEquipment> list = dailykeyEquipment.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+ List<DailyKeyEquipment> list = dailykeyEquipment.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
return AjaxResult.success(list);
}
/*鎵�鏈夎澶�*/
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java
index da8f636..7cb93ba 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/MonthlyKeyEquipmentController.java
@@ -84,7 +84,7 @@
List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
startPage();
- List<MonthlyKeyEquipment> list = monthlyKeyEquipmentService.getMonthlyKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+ List<MonthlyKeyEquipment> list = monthlyKeyEquipmentService.getMonthlyKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
int count=Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2));
list.forEach(monthlyReport -> monthlyReport.setCount(count));
reportList.setTabledata(list);
@@ -107,7 +107,7 @@
dataItem.setBeginTime(sf.parse(beginTime));
String endTime=aa+"-"+Integer.valueOf(getLastDayOfMonth(aa).substring(getLastDayOfMonth(aa).length()-2))+" 00:00:00";
dataItem.setEndTime(sf.parse(endTime));
- List<MonthlyKeyEquipment> list = monthlyKeyEquipmentService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+ List<MonthlyKeyEquipment> list = monthlyKeyEquipmentService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
return AjaxResult.success(list);
}
public static String getLastDayOfMonth(String yearMonth) {
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java
index 00afae6..4b1b56b 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java
@@ -1,5 +1,6 @@
package com.zhitan.web.controller.keyequipment;
+import cn.hutool.core.date.DateUtil;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.core.page.TableDataInfo;
@@ -53,9 +54,13 @@
}
List<String> indexIds = energyList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
List<YearKeyEquipment> dataList=new ArrayList<>();
+
+ dataItem.setBeginTime(DateUtil.beginOfYear(dataItem.getDataTime()));
+ dataItem.setEndTime(DateUtil.endOfYear(dataItem.getDataTime()));
+
DateFormat df = new SimpleDateFormat("yyyy");
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String aa= df.format(dataItem.getBeginTime());
+ String aa= df.format(dataItem.getDataTime());
String bb="";
int i = 1;
while (i <= 12) {
@@ -71,14 +76,15 @@
i++;
}
startPage();
- List<YearKeyEquipment> list = yearKeyEquipmentService.getYearKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+ List<YearKeyEquipment> list = yearKeyEquipmentService.getYearKeyEquipmentList(indexIds, dataList,dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
return getDataTable(list);
}
@GetMapping("/listChart")
@ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙骞达級鍥捐〃")
public AjaxResult listChart(DataItem dataItem){
- List<YearKeyEquipment> list = yearKeyEquipmentService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId());
+
+ List<YearKeyEquipment> list = yearKeyEquipmentService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getEnergyType());
return AjaxResult.success(list);
}
}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java
index 7f933f4..7bf5cc1 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/meter/MeterController.java
@@ -26,9 +26,8 @@
* @Version: 1.0
* @Since: JDK1.8
*/
-
-@Slf4j
@Api("閲囬泦璁¢噺琛ㄦ暟鎹鐞�")
+@Slf4j
@RestController
@RequestMapping("/meters")
public class MeterController extends BaseController {
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java
index 73dcb3a..9a7f65b 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelInfoController.java
@@ -10,6 +10,7 @@
import com.zhitan.model.domain.vo.PointDataVO;
import com.zhitan.model.service.IEnergyIndexService;
import com.zhitan.model.service.IModelInfoService;
+import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -23,6 +24,7 @@
* @author fanxinfu
* @date 2020-02-17
*/
+@Api(tags = "妯″瀷鐩稿叧")
@RestController
@RequestMapping("/basicsetting/model")
public class ModelInfoController extends BaseController {
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java
index 211ddee..bd07910 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java
@@ -60,8 +60,6 @@
@ApiOperation(value = "鑾峰彇灏栧嘲骞宠胺鍒嗘椂缁熻")
public AjaxResult segmentAnalysisDay(PeakValleyDTO dto) {
return AjaxResult.success(rulesService.segmentAnalysisDay(dto));
-// return AjaxResult.success(rulesService.segmentAnalysisDayCustomize(dto));
}
-
}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/saving/EnergySavingProgramController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/saving/EnergySavingProgramController.java
index 69c3440..a26fef2 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/saving/EnergySavingProgramController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/saving/EnergySavingProgramController.java
@@ -36,7 +36,7 @@
* 鍒楄〃
*/
@GetMapping("/page")
- @PreAuthorize("@ss.hasPermi('energySavingProject:list')")
+ @PreAuthorize("@ss.hasPermi('energySavingProject:Project:list')")
@ApiOperation(value = "鍒嗛〉鍒楄〃")
public TableDataInfo list(EnergySavingProgram energySavingProgram) {
Page<EnergySavingProgramVO> list = energySavingProgramService.selectEnergySavingProgramList(energySavingProgram);
@@ -50,7 +50,6 @@
* 璇︾粏淇℃伅
*/
@ApiOperation(value = "鏌ヨ璇︽儏")
- @PreAuthorize("@ss.hasPermi('energySavingProject')")
@GetMapping(value = "getById")
public AjaxResult getInfo(@RequestParam("id") Long id) {
return success(energySavingProgramService.selectEnergySavingProgramById(id));
@@ -61,6 +60,7 @@
* 鑺傝兘椤圭洰绠$悊
*/
@ApiOperation(value = "鏂板")
+ @PreAuthorize("@ss.hasPermi('energySavingProject:Project:add')")
@PostMapping("add")
public AjaxResult add( @RequestBody EnergySavingProgramDTO dto) {
return energySavingProgramService.insertEnergySavingProgram(dto);
@@ -71,6 +71,7 @@
* 鑺傝兘椤圭洰绠$悊
*/
@ApiOperation(value = "鏇存柊")
+ @PreAuthorize("@ss.hasPermi('energySavingProject:Project:edit')")
@PostMapping("edit")
public AjaxResult edit(@RequestBody EnergySavingProgramDTO dto) {
return energySavingProgramService.updateEnergySavingProgram(dto);
@@ -81,6 +82,7 @@
* 鑺傝兘椤圭洰绠$悊
*/
@DeleteMapping("del/{id}")
+ @PreAuthorize("@ss.hasPermi('energySavingProject:Project:del')")
@ApiOperation(value = "鍒犻櫎")
public AjaxResult remove(@PathVariable Long id) {
return energySavingProgramService.deleteEnergySavingProgramById(id);
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java
new file mode 100644
index 0000000..e91dc45
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java
@@ -0,0 +1,69 @@
+package com.zhitan.web.controller.statisticalAnalysis;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * @Description: 鑳芥簮娑堣�楃粺璁″垎鏋�
+ * @author: yxw
+ * @date: 2022骞�04鏈�12鏃� 14:11
+ */
+@Api(tags = "鑳借�楃粺璁″垎鏋�")
+@RestController
+@RequestMapping("/energyTypeAnalysis")
+@Slf4j
+public class EnergyConsumeDataController {
+ @Autowired
+ private IEnergyConsumeDataService energyConsumeDataService;
+
+ /**
+ * 鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級- 鑾峰彇琛ㄦ牸鍒楄〃鏁版嵁
+ *
+ * @param pageNo 椤电爜鏁�
+ * @param pageSize 姣忛〉鏁版嵁澶氬皯
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param energyType 鑳芥簮绫诲瀷
+ * @param modelCode 妯″瀷Code
+ * @return
+ */
+ @Log(title = "鑳借�楃粺璁″垎鏋�-鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級- 鑾峰彇琛ㄦ牸鍒楄〃鏁版嵁")
+ @ApiOperation(value = "鑳借�楃粺璁″垎鏋�-鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級- 鑾峰彇琛ㄦ牸鍒楄〃鏁版嵁", notes = "鑳借�楃粺璁″垎鏋�-鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級- 鑾峰彇琛ㄦ牸鍒楄〃鏁版嵁")
+ @GetMapping(value = "/listEnergyCostTrend")
+ public AjaxResult listEnergyCostTrend(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+ @RequestParam(name = "timeCode") String timeCode,
+ @RequestParam(name = "timeType") String timeType,
+ @RequestParam(name = "energyType",required = false) String energyType,
+ @RequestParam(name = "modelCode") String modelCode) {
+ return AjaxResult.success(energyConsumeDataService.listEnergyCostTrend(pageNo, pageSize, timeCode, timeType,energyType,
+ modelCode));
+ }
+
+ /**
+ * 鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級
+ *
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param modelCode 妯″瀷Code
+ * @param energyType 鑳芥簮绫诲瀷
+ * @return
+ */
+ @Log(title = "鑳借�楃粺璁″垎鏋�-鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級")
+ @ApiOperation(value = "鑳借�楃粺璁″垎鏋�-鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級", notes = "鑳借�楃粺璁″垎鏋�-鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級")
+ @GetMapping(value = "/listEnergyCostTrendDetail")
+ public AjaxResult listEnergyCostTrendDetail(@RequestParam(name = "timeCode") String timeCode,
+ @RequestParam(name = "timeType") String timeType,
+ @RequestParam(name = "modelCode") String modelCode,
+ @RequestParam(name = "energyType",required = false) String energyType) {
+ return AjaxResult.success(energyConsumeDataService.listEnergyCostTrendDetail(timeCode, timeType, modelCode, energyType));
+ }
+
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java
new file mode 100644
index 0000000..af79e0b
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java
@@ -0,0 +1,39 @@
+package com.zhitan.web.controller.statisticalAnalysis;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.dataitem.service.IDataItemService;
+import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * 鑳借�楃粺璁″垎鏋�
+ */
+@Api(tags = "鑳借�楃粺璁″垎鏋�")
+@RestController
+@RequestMapping("/statisticsAnalysis")
+public class EnergyDataItemController {
+
+ @Autowired
+ private IDataItemService dataItemService;
+
+ /**
+ * 鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽
+ *
+ * @param dto 璇锋眰鍙傛暟
+ * @return 缁撴灉
+ */
+ @Log(title = "鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽")
+ @ApiOperation(value = "鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽", notes = "鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽")
+ @GetMapping(value = "/getFlowCharts")
+ public AjaxResult getFlowCharts(@Validated FlowChartsDTO dto) {
+ return AjaxResult.success(dataItemService.getFlowCharts(dto));
+ }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/StatisticalAnalysisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/StatisticalAnalysisController.java
index b93f9c7..6503583 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/StatisticalAnalysisController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/StatisticalAnalysisController.java
@@ -9,6 +9,7 @@
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisYoYExcel;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisYoYVO;
import com.zhitan.statisticalAnalysis.service.IStatisticalAnalysisService;
+import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
@@ -26,6 +27,7 @@
/**
* 缁熻鍒嗘瀽 鎺у埗灞�
*/
+@Api(tags = "缁熻鍒嗘瀽")
@RestController
@RequestMapping("/statisticalAnalysis")
public class StatisticalAnalysisController extends BaseController {
diff --git a/zhitan-admin/src/main/resources/application.yml b/zhitan-admin/src/main/resources/application.yml
index b766372..86eed19 100644
--- a/zhitan-admin/src/main/resources/application.yml
+++ b/zhitan-admin/src/main/resources/application.yml
@@ -11,6 +11,8 @@
addressEnabled: true
# 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
captchaType: math
+ # 鍩熷悕鍦板潃
+ domainName: https://demo-ems.zhitancloud.com/prod-api
# 寮�鍙戠幆澧冮厤缃�
server:
diff --git a/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java b/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java
index c9096ba..04ee184 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java
@@ -30,6 +30,12 @@
/** 楠岃瘉鐮佺被鍨� */
private static String captchaType;
+ /**
+ * 鏂囦欢鍦板潃鍩熷悕
+ */
+ private String domainName;
+
+
public String getName()
{
return name;
@@ -123,4 +129,12 @@
public static String getConfigurePath() {
return getProfile() + "/configure";
}
+
+ public String getDomainName() {
+ return domainName;
+ }
+
+ public void setDomainName(String domainName) {
+ this.domainName = domainName;
+ }
}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java b/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java
index c328731..7a5bb48 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java
@@ -867,7 +867,7 @@
/**
* 鎬绘湁鍔熷姛鐜囩偣浣嶆ā鏉縞ode
*/
- public static final String TAG_CODE_ZYGGL = "\\_ActivePower_Total";
+ public static final String TAG_CODE_ZYGGL = "ActivePow";
/**
* 鎬绘湁鍔熷姛鐜囩偣浣嶆ā鏉縞ode
*/
@@ -887,19 +887,19 @@
/**
* 鎬诲姛鐜囧洜鏁� 鐐逛綅妯℃澘code
*/
- public static final String TAG_CODE_GLYS = "PowerFactor_Total";
+ public static final String TAG_CODE_GLYS = "PowFactorT";
/**
* 鐢垫祦
*/
- public static final String TAG_CODE_CURRENT = "Current_";
+ public static final String TAG_CODE_CURRENT = "Current";
/**
* 鐢靛帇
*/
- public static final String TAG_CODE_VOLTAGE = "Voltage_";
+ public static final String TAG_CODE_VOLTAGE = "Voltage";
/**
* 鍔熺巼鍥犳暟
*/
- public static final String TAG_CODE_FACTOR = "PowerFactor_";
+ public static final String TAG_CODE_FACTOR = "PowerFactor";
/**
* 鍔熺巼鍥犳暟
*/
@@ -935,27 +935,27 @@
/**
* A鐩哥數娴�
*/
- public static final String TAG_CODE_CURRENT_A = "Current_A";
+ public static final String TAG_CODE_CURRENT_A = "CurrentA";
/**
* B鐩哥數娴�
*/
- public static final String TAG_CODE_CURRENT_B = "Current_B";
+ public static final String TAG_CODE_CURRENT_B = "CurrentB";
/**
* C鐩哥數娴�
*/
- public static final String TAG_CODE_CURRENT_C = "Current_C";
+ public static final String TAG_CODE_CURRENT_C = "CurrentC";
/**
* A鐩哥數鍘�
*/
- public static final String TAG_CODE_VOLTAGE_A = "Voltage_A";
+ public static final String TAG_CODE_VOLTAGE_A = "VoltageA";
/**
* B鐩哥數鍘�
*/
- public static final String TAG_CODE_VOLTAGE_B = "Voltage_B";
+ public static final String TAG_CODE_VOLTAGE_B = "VoltageB";
/**
* C鐩哥數鍘�
*/
- public static final String TAG_CODE_VOLTAGE_C = "Voltage_C";
+ public static final String TAG_CODE_VOLTAGE_C = "VoltageC";
/**
* A鐩稿姛鐜囧洜鏁�
*/
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java b/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java
index 24c77fa..0ad5f32 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java
@@ -6,5 +6,8 @@
* 鑾峰彇瀹炴椂鏁版嵁鏂瑰紡.
*/
public enum RetrievalModes {
- Full, BestFit
+
+ Full,
+
+ BestFit
}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java
new file mode 100644
index 0000000..50ef51b
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java
@@ -0,0 +1,191 @@
+package com.zhitan.common.utils;
+
+
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 缁熻鍥剧浉鍏虫暟鎹伐鍏风被
+ * @author: yxw
+ * @date: 2022骞�04鏈�28鏃� 15:29
+ */
+public class ChartUtils {
+
+ /**
+ * 鏋勯�犳棩鏈熷垪琛�
+ *
+ * @param timeType
+ * @param timeCode
+ * @param dateList
+ */
+ public static void generateDateList(String timeType, String timeCode, List<Date> dateList) {
+ Date now = new Date();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_HOUR, DateTimeUtil.COMMON_PATTERN_TO_HOUR);
+ }
+ int minute = 59;
+ for (int i = CommonConst.DIGIT_0; i <= minute; i++) {
+ String tempCode = timeCode + ":0" + i;
+ if(i>9){
+ tempCode = timeCode + ":" + i;
+ }
+ Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_END_WITH_MINUTE);
+ dateList.add(tempD);
+ }
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_DAY, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ }
+ int hour = 23;
+ for (int i = CommonConst.DIGIT_0; i <= hour; i++) {
+ String tempCode = timeCode + " 0" + i;
+ if (i > 9) {
+ tempCode = timeCode + " " + i;
+ }
+ Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_HOUR);
+ dateList.add(tempD);
+ }
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_MONTH, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ }
+ int max = DateTimeUtil.getDateTimeLastDay(DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH));
+
+ for (int i = CommonConst.DIGIT_1; i <= max; i++) {
+ String tempCode = timeCode + "-0" + i;
+ if (i > 9) {
+ tempCode = timeCode + "-" + i;
+ }
+ Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ dateList.add(tempD);
+ }
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ int monthMax = 12;
+ for (int i = CommonConst.DIGIT_1; i <= monthMax; i++) {
+ String tempCode = timeCode + "-0" + i;
+ if (i > 9) {
+ tempCode = timeCode + "-" + i;
+ }
+ Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ dateList.add(tempD);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * 鑾峰彇瀵瑰簲鐨勭粨鏉熸椂闂�
+ *
+ * @param timeType
+ * @param date
+ * @return
+ */
+ public static Date getEndTime(String timeType, Date date) {
+ Date d1 = new Date();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ d1 = DateTimeUtil.addDays(date, CommonConst.DIGIT_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ d1 = DateTimeUtil.addMonths(date, CommonConst.DIGIT_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ d1 = DateTimeUtil.addYears(date, CommonConst.DIGIT_1);
+ break;
+ default:
+ break;
+ }
+ return d1;
+ }
+
+ /**
+ * 鑾峰彇鏃ユ湡鏄剧ず瀛楃
+ *
+ * @param timeType
+ * @param date
+ * @return
+ */
+ public static String getTimeCode(String timeType, Date date) {
+ String str = CommonConst.EMPTY;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ break;
+ default:
+ break;
+ }
+ return str;
+ }
+
+ /**
+ * 鑾峰彇鏃ユ湡鏄剧ず瀛楃
+ *
+ * @param timeType
+ * @param date
+ * @return
+ */
+ public static String getTimeCodeChart(String timeType, Date date) {
+ String str = CommonConst.EMPTY;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_HOUR_MINUTE);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_MONTH_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ break;
+ default:
+ break;
+ }
+ return str;
+ }
+
+ /**
+ * 鑾峰彇鏃ユ湡鏄剧ず瀛楃
+ *
+ * @param timeType
+ * @param timeCode
+ * @return
+ */
+ public static Date getDateTime(String timeType, String timeCode) {
+ Date d1 = new Date();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_DAY, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ }
+ d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_MONTH, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ }
+ d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return d1;
+ }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
new file mode 100644
index 0000000..248cb2f
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
@@ -0,0 +1,748 @@
+package com.zhitan.common.utils;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * @Description: 鏃堕棿宸ュ叿绫�
+ * @author: yxw
+ * @date: 2022骞�02鏈�02鏃� 12:23
+ */
+@Slf4j
+public class DateTimeUtil {
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡
+ */
+ public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss";
+ /**
+ * 鏍煎紡鍖栨棩鏈熷埌鍒嗛挓
+ */
+ public static final String COMMON_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm";
+ /**
+ * 鏃ユ湡鏍煎紡 - 灏忔椂:鍒嗛挓
+ */
+ public static final String COMMON_PATTERN_HOUR_MINUTE = "HH:mm";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 骞翠唤
+ */
+ public static final String COMMON_PATTERN_YEAR = "yyyy";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏌愪竴骞�,
+ */
+ public static final String COMMON_PATTERN_CERTAIN_YEAR = "yy";
+
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_MONTH = "yyyyMM";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH = "yyyy-MM";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH_WORD = "yyyy-MM鏈�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH_ZH = "yyyy骞碝M鏈�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_DAY = "yyyyMMdd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_TO_DAY = "yyyy-MM-dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_TO_DAY_WORD = "yyyy-MM-dd鏃�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堟棩
+ */
+ public static final String COMMON_PATTERN_MONTH_DAY = "MM-dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶╂煇涓�澶�,
+ */
+ public static final String COMMON_PATTERN_DAY_OF_MONTH = "dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_HOUR = "yyyyMMddHH";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR = "yyyy-MM-dd HH";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR_WORD = "yyyy-MM-dd HH鏃�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR_TEXT = "yyyy骞碝M鏈坉d鏃� HH鏃�";
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿,鏃堕棿鏍煎紡锛歽yyy-MM-dd HH:mm:ss
+ *
+ * @return
+ */
+ public static String getNowDateTime() {
+ return getNowDateTime(COMMON_PATTERN);
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿
+ *
+ * @param pattern 鏃堕棿鏍煎紡
+ * @return
+ */
+ public static String getNowDateTime(String pattern) {
+ //璁剧疆鏃ユ湡鏍煎紡
+ SimpleDateFormat df = new SimpleDateFormat(pattern);
+ String dateTime = df.format(new Date());
+ return dateTime;
+ }
+
+ /**
+ * 鑾峰彇浠婂勾鐨勫勾浠藉��
+ *
+ * @return
+ */
+ public static String getNowYear() {
+ return getNowDateTime(COMMON_PATTERN_YEAR);
+ }
+
+ /**
+ * 鑾峰彇浠婂勾鐨勬湀浠藉��
+ *
+ * @return
+ */
+ public static String getNowMonth() {
+ return getNowDateTime(COMMON_PATTERN_MONTH);
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愭椂闂寸被鍨�,榛樿鏍煎紡锛歽yyy-MM-dd HH:mm:ss
+ *
+ * @param dateTimeStr
+ * @return
+ */
+ public static Date toDateTime(String dateTimeStr) {
+ DateTime dt = null;
+ try {
+ dt = DateTime.of(dateTimeStr, COMMON_PATTERN);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愭椂闂寸被鍨�
+ *
+ * @param dateTimeStr
+ * @return
+ */
+ public static Date toDateTime(String dateTimeStr, String pattern) {
+ DateTime dt = null;
+ try {
+ dt = DateTime.of(dateTimeStr, pattern);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愮壒瀹氭牸寮忕殑鏃堕棿瀛楃涓茬被鍨�
+ *
+ * @param dateTimeStr 鏃堕棿瀛楃涓�
+ * @param sourcePattern 瀛楃涓叉椂闂存牸寮�
+ * @param toPattern 瑕佽浆鎴愪粈涔堟牸寮忕殑鏃堕棿
+ * @return
+ */
+ public static String toDateTimeStr(String dateTimeStr, String sourcePattern, String toPattern) {
+ String str = CommonConst.EMPTY;
+ try {
+ DateTime dt = DateTime.of(dateTimeStr, sourcePattern);
+ str = getDateTime(dt, toPattern);
+ } catch (Exception e) {
+
+ }
+ return str;
+ }
+
+ /**
+ * 鏃堕棿杞垚鎸囧畾鐨勬牸寮�
+ *
+ * @param pattern 鏃堕棿鏍煎紡
+ * @return
+ */
+ public static String getDateTime(Date dt, String pattern) {
+ //璁剧疆鏃ユ湡鏍煎紡
+ SimpleDateFormat df = new SimpleDateFormat(pattern);
+ return df.format(dt);
+ }
+
+ /**
+ * 鏃堕棿杞垚yyyy-MM-dd HH:mm:ss鏍煎紡
+ *
+ * @return
+ */
+ public static String getDateTime(Date dt) {
+ if (ObjectUtil.isEmpty(dt)) {
+ return CommonConst.EMPTY;
+ }
+ return getDateTime(dt, COMMON_PATTERN);
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿鎵�灞炴湀浠界殑鏈�鍚庝竴澶�
+ *
+ * @return
+ */
+ public static int getDateTimeLastDay(Date dt) {
+ String month = getMonth(dt);
+ String firstDate = month + "01";
+ Date nextMonthFirstDate = addMonths(toDateTime(firstDate, COMMON_PATTERN_DAY), CommonConst.DIGIT_1);
+ Date currentMonthLastDate = addDays(nextMonthFirstDate, CommonConst.DIGIT_MINUS_1);
+ int day = IntegerUtil.toInt(getDateTime(currentMonthLastDate, COMMON_PATTERN_DAY_OF_MONTH));
+ return day;
+ }
+
+ /**
+ * 鑾峰彇骞翠唤鍊�
+ *
+ * @return
+ */
+ public static String getYear(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_YEAR);
+ }
+
+ /**
+ * 鑾峰彇鏈堜唤鍊� 202202
+ *
+ * @return
+ */
+ public static String getMonth(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_MONTH);
+ }
+
+ /**
+ * 鑾峰彇澶�,鏍煎紡锛歽yyyMMdd
+ *
+ * @return
+ */
+ public static String toDay(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_DAY);
+ }
+
+ /**
+ * 鑾峰彇灏忔椂:yyyyMMddHH
+ *
+ * @return
+ */
+ public static String toHour(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_HOUR);
+ }
+
+ /**
+ * 杞垚瀛楃涓茬被鍨嬪��
+ *
+ * @return
+ */
+ public static String toString(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫勾鏁�
+ *
+ * @param dateTime
+ * @param years
+ * @return
+ */
+ public static Date addYears(Date dateTime, int years) {
+ return calcDate(dateTime, years, Calendar.YEAR);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勬湀鏁�
+ *
+ * @param dateTime
+ * @param months
+ * @return
+ */
+ public static Date addMonths(Date dateTime, int months) {
+ return calcDate(dateTime, months, Calendar.MONTH);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫ぉ鏁�
+ *
+ * @param dateTime
+ * @param days
+ * @return
+ */
+ public static Date addDays(Date dateTime, int days) {
+ return calcDate(dateTime, days, Calendar.DATE);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟
+ *
+ * @param dateTime
+ * @param hours
+ * @return
+ */
+ public static Date addHours(Date dateTime, int hours) {
+ return calcDate(dateTime, hours, Calendar.HOUR);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫垎閽熸暟
+ *
+ * @param dateTime
+ * @param minutes
+ * @return
+ */
+ public static Date addMinutes(Date dateTime, int minutes) {
+ return calcDate(dateTime, minutes, Calendar.MINUTE);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟
+ *
+ * @param dateTime
+ * @param seconds
+ * @return
+ */
+ public static Date addSeconds(Date dateTime, int seconds) {
+ return calcDate(dateTime, seconds, Calendar.SECOND);
+ }
+
+ /**
+ * 璁$畻鏃ユ湡閫氱敤鏂规硶
+ *
+ * @param dateTime
+ * @param addValue
+ * @param calendarType 璁$畻绫诲瀷锛欳alendar.YEAR锛孋alendar.MONTH,Calendar.DAY
+ * @return
+ */
+ private static Date calcDate(Date dateTime, int addValue, int calendarType) {
+ Date dt = null;
+ try {
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(dateTime);
+ //鎶婃棩鏈熷線鍚庡鍔犱竴骞达紝鏁存暟寰�鍚庢帹锛岃礋鏁板線鍓嶇Щ
+ calendar.add(calendarType, addValue);
+ // 鑾峰彇鐩稿姞鎴栬�呯浉鍑忎箣鍚庣殑鏃堕棿鍊�
+ Date tempDt = calendar.getTime();
+ // 鎶婃椂闂磋浆鎴愭墍闇�瑕佺殑鏍煎紡
+ String temp = getDateTime(tempDt, COMMON_PATTERN);
+ dt = toDateTime(temp);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋澶╃殑绗嚑涓皬鏃�
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getHourOfDay(Date dateTime) {
+ return getDateValue(dateTime, Calendar.HOUR_OF_DAY);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋鏈堢殑绗嚑澶�
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getDayOfMonth(Date dateTime) {
+ return getDateValue(dateTime, Calendar.DAY_OF_MONTH);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋鍛ㄧ殑绗嚑澶�
+ * 涓�鍛ㄧ殑绗竴澶╂槸鍛ㄦ棩
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getDayOfWeek(Date dateTime) {
+ return getDateValue(dateTime, Calendar.DAY_OF_WEEK);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡勾鐨勭鍑犱釜鏈�
+ * 鏈堜唤鍊�+1鏄湡瀹炵殑褰撳墠鏈�
+ *
+ * @param dateTime
+ * @return 宸茬粡鍦ㄧ郴缁熶腑鑾峰彇鍊肩殑鍩虹涓婂姞1浜嗭紝鐜板湪鏄湡瀹炵殑褰撳墠鏈堜唤鍊�
+ */
+ public static int getMonthOfYear(Date dateTime) {
+ return getDateValue(dateTime, Calendar.MONTH) + 1;
+ }
+
+ /**
+ * 鑾峰彇褰撳ぉ鐨勭鍑犱釜灏忔椂/褰撴湀鐨勭鍑犲ぉ/褰撳勾鐨勭鍑犱釜鏈�
+ *
+ * @param dateTime 濡傛灉鏃堕棿鍊间负绌猴紝榛樿褰撳墠鏃堕棿
+ * @param calendarType
+ * @return
+ */
+ private static int getDateValue(Date dateTime, int calendarType) {
+ int value = 0;
+ try {
+ if (ObjectUtil.isEmpty(dateTime)) {
+ dateTime = new Date();
+ }
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(dateTime);
+ value = calendar.get(calendarType);
+ } catch (Exception e) {
+
+ }
+ return value;
+ }
+
+ /**
+ * 瀵规瘮time1 鍜� time2 鐨勫ぇ灏�
+ *
+ * @param time1
+ * @param time2
+ * @return -1:time1灏忎簬time2;0:time1绛変簬time2;1:time1澶т簬time2;
+ */
+ public static int compareDateDiff(Date time1, Date time2) {
+ long diff = time1.getTime() - time2.getTime();
+ int res = 0;
+ if (diff > 0) {
+ res = 1;
+ } else if (diff < 0) {
+ res = -1;
+ }
+ return res;
+ }
+
+ /**
+ * 鑾峰彇鏌ヨdata_item鎵�闇�瑕佺殑timecode鍊�
+ *
+ * @param timeType 鏃ユ湡绫诲瀷
+ * @param date 鏃堕棿
+ * @return
+ */
+ public static String getTimeCode(String timeType, Date date) {
+ String timeCode = CommonConst.EMPTY;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ timeCode = CommonConst.WORD_H + getDateTime(date, COMMON_PATTERN_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ timeCode = CommonConst.WORD_D + getDateTime(date, COMMON_PATTERN_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ timeCode = CommonConst.WORD_M + getDateTime(date, COMMON_PATTERN_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ timeCode = CommonConst.WORD_Y + getDateTime(date, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return timeCode;
+ }
+
+ /**
+ * 鑾峰彇鏌ヨ鏃ユ湀骞存姤琛ㄦ墍闇�瑕佺殑timecode鍊�
+ *
+ * @param timeType 鏃ユ湡绫诲瀷
+ * @param date 鏃堕棿
+ * @return
+ */
+ public static String getReportTimeCode(String timeType, Date date) {
+ String timeCode = CommonConst.EMPTY;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ timeCode = getDateTime(date, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return timeCode;
+ }
+
+ /**
+ * 鑾峰彇鏃堕棿瀵瑰簲鐨勭幆姣旀椂闂�
+ *
+ * @param timeType HOUR/DAY/MONTH/YEAR
+ * @param date 鏃堕棿鍊�
+ * @return
+ */
+ public static Date getLoopTime(String timeType, Date date) {
+ Date dt = null;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = addHours(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = addDays(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = addMonths(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = addYears(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鑾峰彇鏁寸偣鏃堕棿
+ *
+ * @param timeType HOUR/DAY/MONTH/YEAR
+ * @param date 鏃堕棿鍊�
+ * @return
+ */
+ public static Date getHourTime(String timeType, Date date) {
+ Date dt = null;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ String tempStr = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_HOUR);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_DAY);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_MONTH);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ tempStr = getDateTime(date, COMMON_PATTERN_YEAR);
+ dt = toDateTime(tempStr, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 璁$畻涓や釜鏃堕棿闂撮殧澶╂暟锛堟棩鏈熸牸寮忔瘮杈冿級
+ *
+ * @param beginTime
+ * @param endTime
+ * @return
+ */
+ public static int daysBetween(Date beginTime, Date endTime) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(beginTime);
+ long beginStamp = calendar.getTimeInMillis();
+ calendar.setTime(endTime);
+ long endStamp = calendar.getTimeInMillis();
+ long betweenDays = (endStamp - beginStamp) / (1000 * 3600 * 24);
+ return Integer.parseInt(String.valueOf(betweenDays));
+ }
+
+ /**
+ * 璁$畻涓や釜鏃堕棿闂撮殧澶╂暟锛堝瓧绗︿覆鏍煎紡姣旇緝锛�
+ *
+ * @param beginTime
+ * @param endTime
+ * @return
+ */
+ public static int daysBetween(String beginTime, String endTime) {
+ try {
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ Date begin = format.parse(beginTime);
+ Date end = format.parse(endTime);
+ return daysBetween(begin, end);
+ } catch (ParseException exception) {
+ log.error("璁$畻涓や釜鏃堕棿闂撮殧澶╂暟" + exception.getMessage());
+ return 0;
+ }
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷鎶婂瓧绗︿覆杞垚瀵瑰簲鐨勬椂闂�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿瀛楃涓�
+ * @return
+ */
+ public static Date getTime(String timeType, String time) {
+ Date dt = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = toDateTime(time, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = toDateTime(time, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = toDateTime(time, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = toDateTime(time, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷鎶婅繛缁殑鏃ユ湡瀛楃涓茶浆鎴愬搴旂殑鏃堕棿 锛�202303銆�20230303銆�2023030301銆�202303030101锛�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿瀛楃涓�
+ * @return
+ */
+ public static Date getTimeByContinuousTimeCode(String timeType, String time) {
+ Date dt = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = toDateTime(time, COMMON_PATTERN_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = toDateTime(time, COMMON_PATTERN_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = toDateTime(time, COMMON_PATTERN_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = toDateTime(time, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷杩斿洖澶┿�佹湀銆佸勾鏈�鍚庣殑鏃堕棿
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿
+ * @return
+ */
+ public static Date getEndTimeByType(String timeType, Date time) {
+ Date dt = null;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = DateUtil.endOfDay(time);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = DateUtil.endOfMonth(time);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = DateUtil.endOfYear(time);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鍛ㄦ湡绫诲瀷瀵圭敓浜у懆鏈熻繘琛屽姞鍑忚绠�
+ * 濉姤鍛ㄦ湡绫诲瀷锛圚OUR灏忔椂銆丏AY澶┿�丮ONTH鏈堛�乊EAR骞达級
+ *
+ * @param date 鐢熶骇鍛ㄦ湡
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param val 璁$畻鍊�
+ * @return
+ */
+ public static Date productionCycleCal(Date date, String cycleType,int val) {
+ Date momDate = date;
+ switch (cycleType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ momDate = DateUtils.addHours(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ momDate = DateUtils.addDays(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ momDate = DateUtils.addMonths(date, val);
+ break;
+ }
+ return momDate;
+ }
+
+ /**
+ * 鏍规嵁鍛ㄦ湡绫诲瀷瀵圭敓浜у懆鏈熻繘琛屽姞鍑忚绠� 骞朵笖杩涗綅 渚嬪锛� HOUR +1杩涗綅灏辨槸 鍔犱竴澶�
+ * 濉姤鍛ㄦ湡绫诲瀷锛圚OUR灏忔椂銆丏AY澶┿�丮ONTH鏈堛�乊EAR骞达級
+ *
+ * @param date 鐢熶骇鍛ㄦ湡
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param val 璁$畻鍊�
+ * @return
+ */
+ public static Date productionCycleCalCarry(Date date, String cycleType,int val) {
+ Date momDate = date;
+ switch (cycleType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ momDate = DateUtils.addDays(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ momDate = DateUtils.addMonths(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ momDate = DateUtils.addYears(date, val);
+ break;
+ }
+ return momDate;
+ }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java
new file mode 100644
index 0000000..e56b678
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java
@@ -0,0 +1,103 @@
+package com.zhitan.common.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+
+/**
+ * @Description: 鏁板瓧宸ュ叿绫�
+ * @author: yxw
+ * @date: 2022骞�02鏈�07鏃� 15:03
+ */
+public class DoubleUtil {
+ public static double toDouble(String str) {
+ double d = 0;
+ try {
+ d = Double.parseDouble(str);
+ } catch (Exception e) {
+ d = 0;
+ }
+ return d;
+ }
+
+ /**
+ * long 杞垚 double绫诲瀷
+ *
+ * @param l
+ * @return
+ */
+ public static double toDouble(long l) {
+ return toDouble(l + "");
+ }
+
+ /**
+ * long 杞垚 double绫诲瀷
+ *
+ * @param l
+ * @return
+ */
+ public static double toDouble(Object l) {
+ return toDouble(l + "");
+ }
+
+ /**
+ * int 杞垚 double绫诲瀷
+ *
+ * @param i
+ * @return
+ */
+ public static double toDouble(int i) {
+ return toDouble(i + "");
+ }
+
+
+ /**
+ * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁板瓧绗︿覆
+ *
+ * @param value
+ * @return
+ */
+ public static String formatDoubleToStr(Double value, int format) {
+ if (ObjectUtil.isEmpty(value)) {
+ value = 0.00;
+ }
+ String str = String.format("%." + format + "f", value).toString();
+ return str;
+ }
+
+ /**
+ * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁板瓧绗︿覆,榛樿鏍煎紡鍖栦负2浣嶅皬鏁�
+ *
+ * @param value
+ * @return
+ */
+ public static String formatDoubleToStr(Double value) {
+ return formatDoubleToStr(value, 2);
+ }
+
+ /**
+ * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁�
+ *
+ * @param value
+ * @param format
+ * @return
+ */
+ public static double formatDouble(Double value, int format) {
+ if (ObjectUtil.isEmpty(value)) {
+ return 0D;
+ }
+ String str = formatDoubleToStr(value, format);
+ return toDouble(str);
+ }
+
+ /**
+ * 鏍煎紡鍖栧皬鏁颁负2浣嶆暟鐨勫皬鏁�
+ *
+ * @param value
+ * @return
+ */
+ public static double formatDouble(Double value) {
+ if (ObjectUtil.isEmpty(value)) {
+ return 0D;
+ }
+ return formatDouble(value, 2);
+ }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java
new file mode 100644
index 0000000..4ab42f8
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java
@@ -0,0 +1,40 @@
+package com.zhitan.common.utils;
+
+/**
+ * @Description: 鏁存暟鐩稿叧宸ュ叿绫�
+ * @author: yxw
+ * @date: 2022骞�03鏈�10鏃� 17:31
+ */
+public class IntegerUtil {
+ /**
+ * 瀛楃涓茶浆鎴恑nt绫诲瀷
+ *
+ * @param str
+ * @return
+ */
+ public static int toInt(String str) {
+ int d = 0;
+ try {
+ d = Integer.parseInt(str);
+ } catch (Exception e) {
+ d = 0;
+ }
+ return d;
+ }
+
+ /**
+ * long杞垚int绫诲瀷
+ *
+ * @param l
+ * @return
+ */
+ public static int toInt(long l) {
+ int d = 0;
+ try {
+ d = (int) l;
+ } catch (Exception e) {
+ d = 0;
+ }
+ return d;
+ }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java
new file mode 100644
index 0000000..35522d0
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java
@@ -0,0 +1,70 @@
+package com.zhitan.common.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zhitan.common.constant.CommonConst;
+
+/**
+ * @Description: 瀛楃涓插伐鍏风被
+ * @author: yxw
+ * @date: 2022骞�02鏈�02鏃� 12:27
+ */
+public class StringUtil {
+ /**
+ * 鍒ゆ柇瀛楃涓叉槸鍚︿负绌哄瓧绗︿覆鎴栬�匩ull
+ *
+ * @param str 闇�瑕佸垽鏂殑瀛楃涓�
+ * @return
+ */
+ public static boolean isEmptyOrNull(String str) {
+ if (str == null || CommonConst.EMPTY.equals(str)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * 瀛楃涓插鏋滀负绌哄瓧绗︿覆鎴栬�匩ull杩斿洖绌哄瓧绗︿覆锛屽惁鍒欒繑鍥炲瓧绗︿覆鏈韩鐨勫��
+ *
+ * @param str
+ * @return
+ */
+ public static String ifEmptyOrNullReturnValue(String str) {
+ if (isEmptyOrNull(str)) {
+ return CommonConst.EMPTY;
+ }
+ return str;
+ }
+
+ /**
+ * 瀵硅薄杞垚json瀛楃涓�
+ *
+ * @param obj
+ * @return
+ */
+ public static String toJson(Object obj) {
+ return JSONObject.toJSONString(obj);
+ }
+
+ /**
+ * 瀵硅薄杞垚JSONObject
+ *
+ * @param obj
+ * @return
+ */
+ public static JSONObject toJsonObject(Object obj) {
+ return JSONObject.parseObject(toJson(obj));
+ }
+
+ /**
+ * 棣栧瓧姣嶅ぇ鍐�
+ *
+ * @param str
+ * @return
+ */
+ public static String captureWord(String str) {
+ str = str.toLowerCase();
+ char[] cs = str.toCharArray();
+ cs[0] -= 32;
+ return String.valueOf(cs);
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java
index b744816..ae25bae 100644
--- a/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java
@@ -88,4 +88,12 @@
MeterImplement selectByNodeIdIndexId(@Param("nodeId") String nodeId, @Param("indexId") String indexId);
List<MeterImplement> listMeterImplByInstallLocation(@Param("installactionLocation") String installactionLocation);
+
+ /**
+ * 鏍规嵁鑺傜偣id鏌ヨ璁¢噺鍣ㄥ叿淇℃伅
+ *
+ * @param nodeId
+ * @return
+ */
+ List<MeterImplement> selectByNodeId(@Param("nodeId") String nodeId);
}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/DailyReport.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/DailyReport.java
new file mode 100644
index 0000000..4bd3d04
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/DailyReport.java
@@ -0,0 +1,321 @@
+package com.zhitan.comprehensivestatistics.domain;
+
+
+import com.zhitan.common.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+public class DailyReport implements Serializable {
+ private static final long serialVersionUID = 1L;
+ private String indexId;
+ @Excel(name = "鎸囨爣鍚嶇О")
+ private String indexName;
+ private String value;
+ private Date dataTime;
+ private String timeType;
+ @Excel(name = "0鏃�")
+ private Double value0;
+ @Excel(name = "1鏃�")
+ private Double value1;
+ @Excel(name = "2鏃�")
+ private Double value2;
+ @Excel(name = "3鏃�")
+ private Double value3;
+ @Excel(name = "4鏃�")
+ private Double value4;
+ @Excel(name = "5鏃�")
+ private Double value5;
+ @Excel(name = "6鏃�")
+ private Double value6;
+ @Excel(name = "7鏃�")
+ private Double value7;
+ @Excel(name = "8鏃�")
+ private Double value8;
+ @Excel(name = "9鏃�")
+ private Double value9;
+ @Excel(name = "10鏃�")
+ private Double value10;
+ @Excel(name = "11鏃�")
+ private Double value11;
+ @Excel(name = "12鏃�")
+ private Double value12;
+ @Excel(name = "13鏃�")
+ private Double value13;
+ @Excel(name = "14鏃�")
+ private Double value14;
+ @Excel(name = "15鏃�")
+ private Double value15;
+ @Excel(name = "16鏃�")
+ private Double value16;
+ @Excel(name = "17鏃�")
+ private Double value17;
+ @Excel(name = "18鏃�")
+ private Double value18;
+ @Excel(name = "19鏃�")
+ private Double value19;
+ @Excel(name = "20鏃�")
+ private Double value20;
+ @Excel(name = "21鏃�")
+ private Double value21;
+ @Excel(name = "22鏃�")
+ private Double value22;
+ @Excel(name = "23鏃�")
+ private Double value23;
+ private List<Map> tablehead =new ArrayList<>();
+ private List<DailyReport> tabledata =new ArrayList<>();
+ public String getIndexId() {
+ return indexId;
+ }
+
+ public void setIndexId(String indexId) {
+ this.indexId = indexId;
+ }
+
+ public String getIndexName() {
+ return indexName;
+ }
+
+ public void setIndexName(String indexName) {
+ this.indexName = indexName;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String getTimeType() {
+ return timeType;
+ }
+
+ public void setTimeType(String timeType) {
+ this.timeType = timeType;
+ }
+
+ public Date getDataTime() {
+ return dataTime;
+ }
+
+ public void setDataTime(Date dataTime) {
+ this.dataTime = dataTime;
+ }
+
+ public Double getValue1() {
+ return value1;
+ }
+
+ public void setValue1(Double value1) {
+ this.value1 = value1;
+ }
+
+ public Double getValue2() {
+ return value2;
+ }
+
+ public void setValue2(Double value2) {
+ this.value2 = value2;
+ }
+
+ public Double getValue3() {
+ return value3;
+ }
+
+ public void setValue3(Double value3) {
+ this.value3 = value3;
+ }
+
+ public Double getValue4() {
+ return value4;
+ }
+
+ public void setValue4(Double value4) {
+ this.value4 = value4;
+ }
+
+ public Double getValue5() {
+ return value5;
+ }
+
+ public void setValue5(Double value5) {
+ this.value5 = value5;
+ }
+
+ public Double getValue6() {
+ return value6;
+ }
+
+ public void setValue6(Double value6) {
+ this.value6 = value6;
+ }
+
+ public Double getValue7() {
+ return value7;
+ }
+
+ public void setValue7(Double value7) {
+ this.value7 = value7;
+ }
+
+ public Double getValue8() {
+ return value8;
+ }
+
+ public void setValue8(Double value8) {
+ this.value8 = value8;
+ }
+
+ public Double getValue9() {
+ return value9;
+ }
+
+ public void setValue9(Double value9) {
+ this.value9 = value9;
+ }
+
+ public Double getValue10() {
+ return value10;
+ }
+
+ public void setValue10(Double value10) {
+ this.value10 = value10;
+ }
+
+ public Double getValue11() {
+ return value11;
+ }
+
+ public void setValue11(Double value11) {
+ this.value11 = value11;
+ }
+
+ public Double getValue12() {
+ return value12;
+ }
+
+ public void setValue12(Double value12) {
+ this.value12 = value12;
+ }
+
+ public Double getValue13() {
+ return value13;
+ }
+
+ public void setValue13(Double value13) {
+ this.value13 = value13;
+ }
+
+ public Double getValue14() {
+ return value14;
+ }
+
+ public void setValue14(Double value14) {
+ this.value14 = value14;
+ }
+
+ public Double getValue15() {
+ return value15;
+ }
+
+ public void setValue15(Double value15) {
+ this.value15 = value15;
+ }
+
+ public Double getValue16() {
+ return value16;
+ }
+
+ public void setValue16(Double value16) {
+ this.value16 = value16;
+ }
+
+ public Double getValue17() {
+ return value17;
+ }
+
+ public void setValue17(Double value17) {
+ this.value17 = value17;
+ }
+
+ public Double getValue18() {
+ return value18;
+ }
+
+ public void setValue18(Double value18) {
+ this.value18 = value18;
+ }
+
+ public Double getValue19() {
+ return value19;
+ }
+
+ public void setValue19(Double value19) {
+ this.value19 = value19;
+ }
+
+ public Double getValue20() {
+ return value20;
+ }
+
+ public void setValue20(Double value20) {
+ this.value20 = value20;
+ }
+
+ public Double getValue21() {
+ return value21;
+ }
+
+ public void setValue21(Double value21) {
+ this.value21 = value21;
+ }
+
+ public Double getValue22() {
+ return value22;
+ }
+
+ public void setValue22(Double value22) {
+ this.value22 = value22;
+ }
+
+ public Double getValue23() {
+ return value23;
+ }
+
+ public void setValue23(Double value23) {
+ this.value23 = value23;
+ }
+
+ public Double getValue0() {
+ return value0;
+ }
+
+ public void setValue0(Double value0) {
+ this.value0 = value0;
+ }
+
+ public List<Map> getTablehead() {
+ return tablehead;
+ }
+
+ public void setTablehead(List<Map> tablehead) {
+ this.tablehead = tablehead;
+ }
+ public List<DailyReport> getTabledata() {
+ return tabledata;
+ }
+
+ public void setTabledata(List<DailyReport> tabledata) {
+ this.tabledata = tabledata;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/MonthlyComprehensive.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/MonthlyComprehensive.java
new file mode 100644
index 0000000..4f29498
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/MonthlyComprehensive.java
@@ -0,0 +1,415 @@
+package com.zhitan.comprehensivestatistics.domain;
+
+import com.zhitan.common.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author sys
+ * @date 2020-12-31
+ */
+public class MonthlyComprehensive implements Serializable {
+ private static final long serialVersionUID = 1L;
+ private String indexId;
+ @Excel(name = "鎸囨爣鍚嶇О")
+ private String indexName;
+ private String value;
+ private Date dataTime;
+ private String timeType;
+ private String unitId;
+ @Excel(name = "1鏃�")
+ private Double value1;
+ @Excel(name = "2鏃�")
+ private Double value2;
+ @Excel(name = "3鏃�")
+ private Double value3;
+ @Excel(name = "4鏃�")
+ private Double value4;
+ @Excel(name = "5鏃�")
+ private Double value5;
+ @Excel(name = "6鏃�")
+ private Double value6;
+ @Excel(name = "7鏃�")
+ private Double value7;
+ @Excel(name = "8鏃�")
+ private Double value8;
+ @Excel(name = "9鏃�")
+ private Double value9;
+ @Excel(name = "10鏃�")
+ private Double value10;
+ @Excel(name = "11鏃�")
+ private Double value11;
+ @Excel(name = "12鏃�")
+ private Double value12;
+ @Excel(name = "13鏃�")
+ private Double value13;
+ @Excel(name = "14鏃�")
+ private Double value14;
+ @Excel(name = "15鏃�")
+ private Double value15;
+ @Excel(name = "16鏃�")
+ private Double value16;
+ @Excel(name = "17鏃�")
+ private Double value17;
+ @Excel(name = "18鏃�")
+ private Double value18;
+ @Excel(name = "19鏃�")
+ private Double value19;
+ @Excel(name = "20鏃�")
+ private Double value20;
+ @Excel(name = "21鏃�")
+ private Double value21;
+ @Excel(name = "22鏃�")
+ private Double value22;
+ @Excel(name = "23鏃�")
+ private Double value23;
+ @Excel(name = "24鏃�")
+ private Double value24;
+ @Excel(name = "25鏃�")
+ private Double value25;
+ @Excel(name = "26鏃�")
+ private Double value26;
+ @Excel(name = "27鏃�")
+ private Double value27;
+ @Excel(name = "28鏃�")
+ private Double value28;
+ @Excel(name = "29鏃�")
+ private Double value29;
+ @Excel(name = "30鏃�")
+ private Double value30;
+ @Excel(name = "31鏃�")
+ private Double value31;
+ private String timeCode;
+ private Integer count;
+ private List<Map> tablehead =new ArrayList<>();
+ private List<MonthlyComprehensive> tabledata =new ArrayList<>();
+ public String getIndexId() {
+ return indexId;
+ }
+
+ public void setIndexId(String indexId) {
+ this.indexId = indexId;
+ }
+
+ public String getIndexName() {
+ return indexName;
+ }
+
+ public void setIndexName(String indexName) {
+ this.indexName = indexName;
+ }
+ public String getUnitId() {
+ return unitId;
+ }
+
+ public void setUnitId(String unitId) {
+ this.unitId = unitId;
+ }
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String getTimeType() {
+ return timeType;
+ }
+
+ public void setTimeType(String timeType) {
+ this.timeType = timeType;
+ }
+
+ public Date getDataTime() {
+ return dataTime;
+ }
+
+ public void setDataTime(Date dataTime) {
+ this.dataTime = dataTime;
+ }
+
+ public Double getValue1() {
+ return value1;
+ }
+
+ public void setValue1(Double value1) {
+ this.value1 = value1;
+ }
+
+ public Double getValue2() {
+ return value2;
+ }
+
+ public void setValue2(Double value2) {
+ this.value2 = value2;
+ }
+
+ public Double getValue3() {
+ return value3;
+ }
+
+ public void setValue3(Double value3) {
+ this.value3 = value3;
+ }
+
+ public Double getValue4() {
+ return value4;
+ }
+
+ public void setValue4(Double value4) {
+ this.value4 = value4;
+ }
+
+ public Double getValue5() {
+ return value5;
+ }
+
+ public void setValue5(Double value5) {
+ this.value5 = value5;
+ }
+
+ public Double getValue6() {
+ return value6;
+ }
+
+ public void setValue6(Double value6) {
+ this.value6 = value6;
+ }
+
+ public Double getValue7() {
+ return value7;
+ }
+
+ public void setValue7(Double value7) {
+ this.value7 = value7;
+ }
+
+ public Double getValue8() {
+ return value8;
+ }
+
+ public void setValue8(Double value8) {
+ this.value8 = value8;
+ }
+
+ public Double getValue9() {
+ return value9;
+ }
+
+ public void setValue9(Double value9) {
+ this.value9 = value9;
+ }
+
+ public Double getValue10() {
+ return value10;
+ }
+
+ public void setValue10(Double value10) {
+ this.value10 = value10;
+ }
+
+ public Double getValue11() {
+ return value11;
+ }
+
+ public void setValue11(Double value11) {
+ this.value11 = value11;
+ }
+
+ public Double getValue12() {
+ return value12;
+ }
+
+ public void setValue12(Double value12) {
+ this.value12 = value12;
+ }
+
+ public Double getValue13() {
+ return value13;
+ }
+
+ public void setValue13(Double value13) {
+ this.value13 = value13;
+ }
+
+ public Double getValue14() {
+ return value14;
+ }
+
+ public void setValue14(Double value14) {
+ this.value14 = value14;
+ }
+
+ public Double getValue15() {
+ return value15;
+ }
+
+ public void setValue15(Double value15) {
+ this.value15 = value15;
+ }
+
+ public Double getValue16() {
+ return value16;
+ }
+
+ public void setValue16(Double value16) {
+ this.value16 = value16;
+ }
+
+ public Double getValue17() {
+ return value17;
+ }
+
+ public void setValue17(Double value17) {
+ this.value17 = value17;
+ }
+
+ public Double getValue18() {
+ return value18;
+ }
+
+ public void setValue18(Double value18) {
+ this.value18 = value18;
+ }
+
+ public Double getValue19() {
+ return value19;
+ }
+
+ public void setValue19(Double value19) {
+ this.value19 = value19;
+ }
+
+ public Double getValue20() {
+ return value20;
+ }
+
+ public void setValue20(Double value20) {
+ this.value20 = value20;
+ }
+
+ public Double getValue21() {
+ return value21;
+ }
+
+ public void setValue21(Double value21) {
+ this.value21 = value21;
+ }
+
+ public Double getValue22() {
+ return value22;
+ }
+
+ public void setValue22(Double value22) {
+ this.value22 = value22;
+ }
+
+ public Double getValue23() {
+ return value23;
+ }
+
+ public void setValue23(Double value23) {
+ this.value23 = value23;
+ }
+
+ public Double getValue24() {
+ return value24;
+ }
+
+ public void setValue24(Double value24) {
+ this.value24 = value24;
+ }
+
+ public Double getValue25() {
+ return value25;
+ }
+
+ public void setValue25(Double value25) {
+ this.value25 = value25;
+ }
+
+ public Double getValue26() {
+ return value26;
+ }
+
+ public void setValue26(Double value26) {
+ this.value26 = value26;
+ }
+
+ public Double getValue27() {
+ return value27;
+ }
+
+ public void setValue27(Double value27) {
+ this.value27 = value27;
+ }
+
+ public Double getValue28() {
+ return value28;
+ }
+
+ public void setValue28(Double value28) {
+ this.value28 = value28;
+ }
+
+ public Double getValue29() {
+ return value29;
+ }
+
+ public void setValue29(Double value29) {
+ this.value29 = value29;
+ }
+
+ public Double getValue30() {
+ return value30;
+ }
+
+ public void setValue30(Double value30) {
+ this.value30 = value30;
+ }
+
+ public Double getValue31() {
+ return value31;
+ }
+
+ public void setValue31(Double value31) {
+ this.value31 = value31;
+ }
+
+ public List<Map> getTablehead() {
+ return tablehead;
+ }
+
+ public void setTablehead(List<Map> tablehead) {
+ this.tablehead = tablehead;
+ }
+ public List<MonthlyComprehensive> getTabledata() {
+ return tabledata;
+ }
+
+ public void setTabledata(List<MonthlyComprehensive> tabledata) {
+ this.tabledata = tabledata;
+ }
+
+ public String getTimeCode() {
+ return timeCode;
+ }
+
+ public void setTimeCode(String timeCode) {
+ this.timeCode = timeCode;
+ }
+
+ public Integer getCount() {
+ return count;
+ }
+
+ public void setCount(Integer count) {
+ this.count = count;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/YearComperhensive.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/YearComperhensive.java
new file mode 100644
index 0000000..aa177cd
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/YearComperhensive.java
@@ -0,0 +1,214 @@
+package com.zhitan.comprehensivestatistics.domain;
+
+import com.zhitan.common.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+public class YearComperhensive implements Serializable {
+ private static final long serialVersionUID = 1L;
+ private String indexId;
+ @Excel(name = "鎸囨爣鍚嶇О")
+ private String indexName;
+ private String value;
+ private Date dataTime;
+ private String timeType;
+ private String unitId;
+ @Excel(name = "1鏈�")
+ private Double value1;
+ @Excel(name = "2鏈�")
+ private Double value2;
+ @Excel(name = "3鏈�")
+ private Double value3;
+ @Excel(name = "4鏈�")
+ private Double value4;
+ @Excel(name = "5鏈�")
+ private Double value5;
+ @Excel(name = "6鏈�")
+ private Double value6;
+ @Excel(name = "7鏈�")
+ private Double value7;
+ @Excel(name = "8鏈�")
+ private Double value8;
+ @Excel(name = "9鏈�")
+ private Double value9;
+ @Excel(name = "10鏈�")
+ private Double value10;
+ @Excel(name = "11鏈�")
+ private Double value11;
+ @Excel(name = "12鏈�")
+ private Double value12;
+ private String timeCode;
+ private List<Map> tablehead =new ArrayList<>();
+ private List<DailyReport> tabledata =new ArrayList<>();
+ public String getIndexId() {
+ return indexId;
+ }
+
+ public void setIndexId(String indexId) {
+ this.indexId = indexId;
+ }
+
+ public String getIndexName() {
+ return indexName;
+ }
+
+ public void setIndexName(String indexName) {
+ this.indexName = indexName;
+ }
+ public String getUnitId() {
+ return unitId;
+ }
+
+ public void setUnitId(String unitId) {
+ this.unitId = unitId;
+ }
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String getTimeType() {
+ return timeType;
+ }
+
+ public void setTimeType(String timeType) {
+ this.timeType = timeType;
+ }
+
+ public Date getDataTime() {
+ return dataTime;
+ }
+
+ public void setDataTime(Date dataTime) {
+ this.dataTime = dataTime;
+ }
+
+ public Double getValue1() {
+ return value1;
+ }
+
+ public void setValue1(Double value1) {
+ this.value1 = value1;
+ }
+
+ public Double getValue2() {
+ return value2;
+ }
+
+ public void setValue2(Double value2) {
+ this.value2 = value2;
+ }
+
+ public Double getValue3() {
+ return value3;
+ }
+
+ public void setValue3(Double value3) {
+ this.value3 = value3;
+ }
+
+ public Double getValue4() {
+ return value4;
+ }
+
+ public void setValue4(Double value4) {
+ this.value4 = value4;
+ }
+
+ public Double getValue5() {
+ return value5;
+ }
+
+ public void setValue5(Double value5) {
+ this.value5 = value5;
+ }
+
+ public Double getValue6() {
+ return value6;
+ }
+
+ public void setValue6(Double value6) {
+ this.value6 = value6;
+ }
+
+ public Double getValue7() {
+ return value7;
+ }
+
+ public void setValue7(Double value7) {
+ this.value7 = value7;
+ }
+
+ public Double getValue8() {
+ return value8;
+ }
+
+ public void setValue8(Double value8) {
+ this.value8 = value8;
+ }
+
+ public Double getValue9() {
+ return value9;
+ }
+
+ public void setValue9(Double value9) {
+ this.value9 = value9;
+ }
+
+ public Double getValue10() {
+ return value10;
+ }
+
+ public void setValue10(Double value10) {
+ this.value10 = value10;
+ }
+
+ public Double getValue11() {
+ return value11;
+ }
+
+ public void setValue11(Double value11) {
+ this.value11 = value11;
+ }
+
+ public Double getValue12() {
+ return value12;
+ }
+
+ public void setValue12(Double value12) {
+ this.value12 = value12;
+ }
+ public String getTimeCode() {
+ return timeCode;
+ }
+
+ public void setTimeCode(String timeCode) {
+ this.timeCode = timeCode;
+ }
+ public List<Map> getTablehead() {
+ return tablehead;
+ }
+
+ public void setTablehead(List<Map> tablehead) {
+ this.tablehead = tablehead;
+ }
+ public List<DailyReport> getTabledata() {
+ return tabledata;
+ }
+
+ public void setTabledata(List<DailyReport> tabledata) {
+ this.tabledata = tabledata;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java
index 08777d9..3a4de64 100644
--- a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java
@@ -14,7 +14,7 @@
* @date 2020-03-25
*/
public interface DailyComprehensiveMapper {
- public List<DailyComprehensive> getDailyComprehensiveList(@Param("nodeId") String nodeId,
+ List<DailyComprehensive> getDailyComprehensiveList(@Param("nodeId") String nodeId,
@Param("dataList") List<DailyComprehensive> dataList,
@Param("beginTime") Date beginTime,
@Param("endTime") Date endTime,
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/MonthlyComprehensiveMapper.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/MonthlyComprehensiveMapper.java
new file mode 100644
index 0000000..ca9a75c
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/MonthlyComprehensiveMapper.java
@@ -0,0 +1,51 @@
+package com.zhitan.comprehensivestatistics.mapper;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.MonthlyComprehensive;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏈�
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+public interface MonthlyComprehensiveMapper {
+ /**
+ * 鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堟湀锛夊垪琛�
+ *
+ * @param nodeId
+ * @param dataList
+ * @param beginTime
+ * @param endTime
+ * @param timeType
+ * @param indexStorageId
+ * @return
+ */
+ public List<MonthlyComprehensive> getMonthlyComprehensiveList(@Param("nodeId") String nodeId,
+ @Param("dataList") List<MonthlyComprehensive> dataList,
+ @Param("beginTime") Date beginTime,
+ @Param("endTime") Date endTime,
+ @Param("timeType") TimeType timeType,
+ @Param("indexStorageId") String indexStorageId);
+
+ /**
+ * 鑾峰彇缁煎悎鎸囨爣鍒嗘瀽鍥捐〃锛堟湀锛夋暟鎹�
+ *
+ * @param indexId
+ * @param beginTime
+ * @param endTime
+ * @param timeType
+ * @param indexStorageId
+ * @return
+ */
+ List<MonthlyComprehensive> getListChart(@Param("indexId") String indexId,
+ @Param("beginTime") Date beginTime,
+ @Param("endTime") Date endTime,
+ @Param("timeType") TimeType timeType,
+ @Param("indexStorageId") String indexStorageId);
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/YearComprehensiveMapper.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/YearComprehensiveMapper.java
new file mode 100644
index 0000000..7293dd7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/YearComprehensiveMapper.java
@@ -0,0 +1,51 @@
+package com.zhitan.comprehensivestatistics.mapper;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.YearComperhensive;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 骞�
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+public interface YearComprehensiveMapper {
+ /**
+ * 鑾峰彇骞存暟鎹�
+ *
+ * @param nodeId
+ * @param dataList
+ * @param beginTime
+ * @param endTime
+ * @param timeType
+ * @param indexStorageId
+ * @return
+ */
+ public List<YearComperhensive> getYearComprehensiveList(@Param("nodeId") String nodeId,
+ @Param("dataList") List<YearComperhensive> dataList,
+ @Param("beginTime") Date beginTime,
+ @Param("endTime") Date endTime,
+ @Param("timeType") TimeType timeType,
+ @Param("indexStorageId") String indexStorageId);
+
+ /**
+ * 鑾峰彇骞存暟鎹�-chart
+ *
+ * @param indexId
+ * @param beginTime
+ * @param endTime
+ * @param timeType
+ * @param indexStorageId
+ * @return
+ */
+ List<YearComperhensive> getListChart(@Param("indexId") String indexId,
+ @Param("beginTime") Date beginTime,
+ @Param("endTime") Date endTime,
+ @Param("timeType") TimeType timeType,
+ @Param("indexStorageId") String indexStorageId);
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/ImonthlyComprehensive.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/ImonthlyComprehensive.java
new file mode 100644
index 0000000..13221a0
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/ImonthlyComprehensive.java
@@ -0,0 +1,41 @@
+package com.zhitan.comprehensivestatistics.service;
+
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.MonthlyComprehensive;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏈�
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+public interface ImonthlyComprehensive {
+ /**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏈�
+ *
+ * @param nodeId
+ * @param dataList
+ * @param beginTime
+ * @param endTime
+ * @param timeType
+ * @param indexStorageId
+ * @return
+ */
+ List<MonthlyComprehensive> getMonthlyComprehensiveList(String nodeId, List<MonthlyComprehensive> dataList, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+
+ /**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 鏈�
+ *
+ * @param indexId
+ * @param beginTime
+ * @param endTime
+ * @param timeType
+ * @param indexStorageId
+ * @return
+ */
+ List<MonthlyComprehensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IyearComprehensive.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IyearComprehensive.java
new file mode 100644
index 0000000..2c3a979
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/IyearComprehensive.java
@@ -0,0 +1,42 @@
+package com.zhitan.comprehensivestatistics.service;
+
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.YearComperhensive;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍏ㄥ巶缁煎悎鑳借�楃粺璁� 骞�
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+public interface IyearComprehensive {
+ /**
+ * 鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堝勾锛夊垪琛�
+ *
+ * @param nodeId
+ * @param dataList
+ * @param beginTime
+ * @param endTime
+ * @param timeType
+ * @param indexStorageId
+ * @return
+ */
+ List<YearComperhensive> getYearComprehensiveList(String nodeId, List<YearComperhensive> dataList,
+ Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+
+ /**
+ * 鑾峰彇缁煎悎鎸囨爣鍒嗘瀽锛堝勾锛夊浘琛ㄦ暟鎹�
+ *
+ * @param indexId
+ * @param beginTime
+ * @param endTime
+ * @param timeType
+ * @param indexStorageId
+ * @return
+ */
+ List<YearComperhensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/MonthlyComprehensiveServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/MonthlyComprehensiveServiceImpl.java
new file mode 100644
index 0000000..04beef7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/MonthlyComprehensiveServiceImpl.java
@@ -0,0 +1,42 @@
+package com.zhitan.comprehensivestatistics.service.impl;
+
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.comprehensivestatistics.domain.MonthlyComprehensive;
+import com.zhitan.comprehensivestatistics.mapper.MonthlyComprehensiveMapper;
+import com.zhitan.comprehensivestatistics.service.ImonthlyComprehensive;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 涓氬姟灞傚鐞�
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+@Service
+public class MonthlyComprehensiveServiceImpl implements ImonthlyComprehensive {
+ @Resource
+ private MonthlyComprehensiveMapper monthMapper;
+
+ public List<MonthlyComprehensive> getMonthlyComprehensiveList(String nodeId, List<MonthlyComprehensive> dataList,
+ Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+ if (StringUtils.isNotEmpty(nodeId)) {
+ return monthMapper.getMonthlyComprehensiveList(nodeId, dataList, beginTime, endTime, timeType, indexStorageId);
+ }
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List<MonthlyComprehensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+ if (indexId != null && !indexId.isEmpty()) {
+ return monthMapper.getListChart(indexId,beginTime,endTime,timeType,indexStorageId);
+ }
+ return Collections.emptyList();
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/YearComprehensiveServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/YearComprehensiveServiceImpl.java
new file mode 100644
index 0000000..df2ac97
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/YearComprehensiveServiceImpl.java
@@ -0,0 +1,68 @@
+package com.zhitan.comprehensivestatistics.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.DateTimeUtil;
+import com.zhitan.comprehensivestatistics.domain.YearComperhensive;
+import com.zhitan.comprehensivestatistics.mapper.YearComprehensiveMapper;
+import com.zhitan.comprehensivestatistics.service.IyearComprehensive;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 涓氬姟灞傚鐞�
+ *
+ * @author sys
+ * @date 2020-03-25
+ */
+@Service
+public class YearComprehensiveServiceImpl implements IyearComprehensive {
+ @Resource
+ private YearComprehensiveMapper yearMapper;
+
+ @Override
+ public List<YearComperhensive> getYearComprehensiveList(String nodeId, List<YearComperhensive> dataList,
+ Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+ if (StringUtils.isNotEmpty(nodeId)) {
+ return yearMapper.getYearComprehensiveList(nodeId, dataList, beginTime, endTime, timeType, indexStorageId);
+ }
+ return Collections.emptyList();
+ }
+ @Override
+ public List<YearComperhensive> getListChart(String indexId, Date beginTime, Date endTime, TimeType timeType, String indexStorageId){
+ List<YearComperhensive> dataList = new ArrayList<>();
+ if (StringUtils.isNotEmpty(indexId)) {
+ List<YearComperhensive> listChart = yearMapper.getListChart(indexId, beginTime, endTime, timeType, indexStorageId);
+ if (CollectionUtils.isNotEmpty(listChart)) {
+ Date date = new Date();
+ YearComperhensive first = listChart.get(CommonConst.DIGIT_0);
+ Map<String, YearComperhensive> listChartMap = yearMapper.getListChart(indexId, beginTime, endTime, timeType, indexStorageId)
+ .stream().collect(Collectors.toMap(YearComperhensive::getTimeCode, prot -> prot));
+ while (beginTime.before(date)) {
+ YearComperhensive yearComperhensive = new YearComperhensive();
+ String format = CommonConst.WORD_M + DateUtil.format(beginTime, DateTimeUtil.COMMON_PATTERN_MONTH);
+ YearComperhensive item = listChartMap.get(format);
+ if (ObjectUtils.isNotEmpty(item)) {
+ yearComperhensive = item;
+ } else {
+ yearComperhensive.setTimeCode(format);
+ yearComperhensive.setIndexId(indexId);
+ yearComperhensive.setTimeType(timeType.name());
+ yearComperhensive.setUnitId(first.getUnitId());
+ yearComperhensive.setIndexName(first.getIndexName());
+ }
+ dataList.add(yearComperhensive);
+ beginTime = DateUtil.offsetMonth(beginTime, CommonConst.DIGIT_1);
+ }
+ }
+ }
+ return dataList;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java b/zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java
new file mode 100644
index 0000000..33560fa
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java
@@ -0,0 +1,32 @@
+package com.zhitan.dataitem.domain.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author DYL
+ **/
+@Data
+public class NodeIndexValueVO {
+
+ /**
+ * 鑺傜偣id
+ */
+ private String nodeId;
+
+ /**
+ * 鑺傜偣鍚嶇О
+ */
+ private String nodeName;
+
+ /**
+ * 鐐逛綅id
+ */
+ private String indexId;
+
+ /**
+ * 绱Н閲�
+ */
+ private BigDecimal value;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
index 2f6d9ab..99d5317 100644
--- a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
@@ -1,5 +1,6 @@
package com.zhitan.dataitem.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.carbonemission.domain.CarbonEmission;
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.domain.StagseDataEntry;
@@ -16,7 +17,7 @@
* @author sys
* @date 2020-03-25
*/
-public interface DataItemMapper {
+public interface DataItemMapper extends BaseMapper<DataItem> {
/**
* 闃舵鏁版嵁褰曞叆
*
@@ -122,4 +123,16 @@
*/
List<DataItem> getDataItemHourInforByIndexIds(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
@Param("timeType") String timeType, @Param("indexIds") List<String> indexIds);
+
+ /**
+ * 鏌ヨ鑳芥簮绫诲瀷闈炵數鐨勭敤閲�
+ * @param beginTime
+ * @param endTime
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param nodeId 鑺傜偣Id
+ * @param energyType 鑳芥簮绫诲瀷
+ * @return
+ */
+ BigDecimal getDataItemTimeRangeValueByNodeId(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
+ @Param("timeType") String timeType, @Param("nodeId") String nodeId, @Param("energyType") String energyType);
}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
index 993beb7..99c2a1c 100644
--- a/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
@@ -4,6 +4,8 @@
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.domain.StagseDataEntry;
import com.zhitan.realtimedata.domain.DataItem;
+import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO;
+import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsVO;
import java.math.BigDecimal;
import java.util.Date;
@@ -88,4 +90,12 @@
* @return
*/
List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds);
+
+ /**
+ * 鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽
+ *
+ * @param dto 璇锋眰鍙傛暟
+ * @return 缁撴灉
+ */
+ FlowChartsVO getFlowCharts(FlowChartsDTO dto);
}
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
index 1e29b7f..2256b65 100644
--- a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
@@ -1,16 +1,32 @@
package com.zhitan.dataitem.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.domain.StagseDataEntry;
+import com.zhitan.dataitem.domain.vo.NodeIndexValueVO;
import com.zhitan.dataitem.mapper.DataItemMapper;
import com.zhitan.dataitem.service.IDataItemService;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.mapper.EnergyIndexMapper;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.model.mapper.NodeIndexMapper;
import com.zhitan.realtimedata.domain.DataItem;
+import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO;
+import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsItemVO;
+import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsVO;
import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* stagseDataEntryService涓氬姟灞傚鐞�
@@ -22,7 +38,14 @@
@AllArgsConstructor
public class DataItemServiceImpl implements IDataItemService {
- private final DataItemMapper dataItemMapper;
+ @Resource
+ private DataItemMapper dataItemMapper;
+ @Resource
+ private ModelNodeMapper modelNodeMapper;
+ @Resource
+ private EnergyIndexMapper energyIndexMapper;
+ @Resource
+ private NodeIndexMapper nodeIndexMapper;
/**
@@ -117,4 +140,120 @@
public List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) {
return dataItemMapper.getDataItemHourInforByIndexIds(beginTime, endTime, timeType, indexIds);
}
+
+ /**
+ * 鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽
+ *
+ * @param dto 璇锋眰鍙傛暟
+ * @return 缁撴灉
+ */
+ @Override
+ public FlowChartsVO getFlowCharts(FlowChartsDTO dto) {
+ FlowChartsVO flowChartsVO = new FlowChartsVO();
+ // 鐖惰妭鐐筰d
+ LambdaQueryWrapper<ModelNode> wrapper = Wrappers.<ModelNode>lambdaQuery()
+ .eq(ModelNode::getModelCode, dto.getModelCode())
+ .isNull(ModelNode::getParentId);
+ List<ModelNode> modelNodes = modelNodeMapper.selectList(wrapper);
+ if(ObjectUtils.isEmpty(modelNodes)){
+ throw new RuntimeException("鏈煡璇㈠埌妯″瀷淇℃伅");
+ }
+ ModelNode modelNode = modelNodes.stream().findFirst().get();
+ String nodeId = modelNode.getNodeId();
+ dto.setNodeId(nodeId);
+ String energyType = dto.getEnergyType();
+ LocalDate queryTime = dto.getQueryTime();
+ TimeType timeType = dto.getTimeType();
+
+ // 鑾峰彇鏌ヨ鏃堕棿
+ Map<String, LocalDateTime> dateTimeMap = getDataItemByIndexId(timeType, queryTime);
+
+ // 鑾峰彇鑺傜偣鍜岀偣浣嶇殑绱Н閲�
+ List<NodeIndexValueVO> parentDataItemList = modelNodeMapper.getDataItemByNodeId(nodeId, energyType, timeType, dateTimeMap);
+
+ // 鑾峰彇瀛愯妭鐐逛笅鐨勭偣浣嶇殑绱Н閲�
+ List<NodeIndexValueVO> childDataItemList = modelNodeMapper.getDataItemByParentNodeId(nodeId, energyType, timeType, dateTimeMap);
+
+ // 鑾峰彇鐖惰妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰
+ if (ObjectUtils.isNotEmpty(parentDataItemList)) {
+ // 鐖惰妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰
+ BigDecimal totalValue = parentDataItemList.stream().map(NodeIndexValueVO::getValue)
+ .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 鎬荤疮绉噺
+ flowChartsVO.setTotalAccumulatedAmount(totalValue);
+ }
+ // 鑾峰彇瀛愯妭鐐逛笅鐨勮兘鑰楁暟鎹�
+ if (ObjectUtils.isNotEmpty(childDataItemList)) {
+ // 瀛愯妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰
+ BigDecimal childTotalValue = childDataItemList.stream().map(NodeIndexValueVO::getValue)
+ .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 瀛愯妭鐐圭疮绉噺
+ flowChartsVO.setChildNodeAccumulatedAmount(childTotalValue);
+
+ // 鏍规嵁瀛愯妭鐐筰d鍒嗙粍
+ Map<String, List<NodeIndexValueVO>> voMap = childDataItemList.stream()
+ .collect(Collectors.groupingBy(NodeIndexValueVO::getNodeId));
+ List<FlowChartsItemVO> itemList = new ArrayList<>();
+
+ for (String childNodeId : voMap.keySet()) {
+ FlowChartsItemVO vo = new FlowChartsItemVO();
+ vo.setSource(modelNode.getName());
+ List<NodeIndexValueVO> valueList = voMap.getOrDefault(childNodeId, Collections.emptyList());
+ if (ObjectUtils.isNotEmpty(valueList)) {
+ // 鍚勪釜瀛愯妭鐐圭殑鑳借�楁暟鎹�诲拰
+ BigDecimal value = valueList.stream().map(NodeIndexValueVO::getValue)
+ .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+ valueList.stream().findFirst().ifPresent(nodeIndexValueVO -> vo.setTarget(nodeIndexValueVO.getNodeName()));
+ vo.setValue(value);
+ }
+ itemList.add(vo);
+ }
+ flowChartsVO.setItemVOList(itemList);
+ }
+ return flowChartsVO;
+ }
+
+ /**
+ * 鏍规嵁indexId鏌ヨ鑳借�楁暟鎹�
+ */
+ private Map<String, LocalDateTime> getDataItemByIndexId(TimeType timeType, LocalDate queryTime) {
+ LocalDateTime startTime;
+ LocalDateTime endTime;
+ LocalDate startDate;
+ LocalDate endDate;
+ switch (timeType) {
+ case DAY:
+ // 褰撳ぉ鐨勫紑濮嬫椂闂�
+ startTime = LocalDateTime.of(queryTime, LocalTime.MIN);
+ // 褰撳ぉ鐨勭粨鏉熸椂闂�
+ endTime = LocalDateTime.of(queryTime, LocalTime.MAX);
+ break;
+ case MONTH:
+ // 褰撴湀鐨勫紑濮嬫椂闂�
+ startDate = queryTime.with(TemporalAdjusters.firstDayOfMonth());
+ startTime = LocalDateTime.of(startDate, LocalTime.MIN);
+ // 褰撴湀鐨勭粨鏉熸椂闂�
+ endDate = queryTime.with(TemporalAdjusters.lastDayOfMonth());
+ endTime = LocalDateTime.of(endDate, LocalTime.MAX);
+ break;
+ case YEAR:
+ // 褰撳勾鐨勫紑濮嬫椂闂�
+ startDate = queryTime.with(TemporalAdjusters.firstDayOfYear());
+ startTime = LocalDateTime.of(startDate, LocalTime.MIN);
+ // 褰撳勾鐨勭粨鏉熸椂闂�
+ endDate = queryTime.with(TemporalAdjusters.lastDayOfYear());
+ endTime = LocalDateTime.of(endDate, LocalTime.MAX);
+ break;
+ default:
+ // 褰撳ぉ鐨勫紑濮嬫椂闂�
+ startTime = LocalDateTime.of(queryTime, LocalTime.MIN);
+ // 褰撳ぉ鐨勭粨鏉熸椂闂�
+ endTime = LocalDateTime.of(queryTime, LocalTime.MAX);
+ break;
+ }
+ Map<String, LocalDateTime> localDateTimeMap = new HashMap<>();
+ localDateTimeMap.put("startTime", startTime);
+ localDateTimeMap.put("endTime", endTime);
+ return localDateTimeMap;
+ }
}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/EnergyUnitToDevice.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/EnergyUnitToDevice.java
deleted file mode 100644
index bf35d02..0000000
--- a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/EnergyUnitToDevice.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.zhitan.energyMonitor.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.zhitan.common.annotation.Excel;
-import com.zhitan.common.core.domain.BaseEntity;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.math.BigDecimal;
-
-/**
- * @Description: 鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭�
- * @Author: jeecg-boot
- * @Date: 2022-01-26
- * @Version: V1.0
- */
-@Data
-@TableName("energy_unit_to_device")
-@Accessors(chain = true)
-@EqualsAndHashCode(callSuper = false)
-@ApiModel(value="energy_unit_to_device瀵硅薄", description="鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭�")
-public class EnergyUnitToDevice extends BaseEntity {
- private static final long serialVersionUID = 1L;
-
- @ApiModelProperty(value = "鏂颁富閿�")
- @TableId(type = IdType.ASSIGN_ID)
- private String newId;
-
- /**涓婚敭*/
- @ApiModelProperty(value = "涓婚敭")
- private String id;
-
- /**鍏宠仈浠〃鍚嶇О*/
- @Excel(name = "鍏宠仈浠〃鍚嶇О", width = 15)
- @ApiModelProperty(value = "鍏宠仈浠〃鍚嶇О")
- private String name;
-
- /**鍏宠仈浠〃缂栫爜*/
- @Excel(name = "鍏宠仈浠〃缂栫爜", width = 15)
- @ApiModelProperty(value = "鍏宠仈浠〃缂栫爜")
- private String code;
-
- /**鑳芥簮绫诲瀷锛堟按琛ㄣ�佺數琛ㄣ�佹皵琛ㄧ瓑锛�*/
- @Excel(name = "鑳芥簮绫诲瀷锛堟按琛ㄣ�佺數琛ㄣ�佹皵琛ㄧ瓑锛�", width = 15)
- @ApiModelProperty(value = "鑳芥簮绫诲瀷锛堟按琛ㄣ�佺數琛ㄣ�佹皵琛ㄧ瓑锛�")
- private String deviceType;
-
- /**鐢ㄨ兘鍗曞厓涓婚敭*/
- @Excel(name = "鐢ㄨ兘鍗曞厓涓婚敭", width = 15)
- @ApiModelProperty(value = "鐢ㄨ兘鍗曞厓涓婚敭")
- private String energyUnitId;
-
- /**绉熸埛涓婚敭*/
- @Excel(name = "绉熸埛涓婚敭", width = 15)
- @ApiModelProperty(value = "绉熸埛涓婚敭")
- private Integer tenantId;
-
- @ApiModelProperty(value = "鍙備笌璁¢噺")
- private String partMeasurement;
-
- @ApiModelProperty(value = "瀹夎浣嶇疆")
- private String installPosition;
-
- @ApiModelProperty(value = "鍒嗘憡姣斾緥")
- private BigDecimal shareRatio;
-}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java
new file mode 100644
index 0000000..2da7ece
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java
@@ -0,0 +1,33 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ElectricPowerFactorDetail {
+ /**
+ * 鏈�澶у姛鐜囧洜鏁�
+ */
+ private String max;
+ /**
+ * 鏈�澶у姛鐜囧洜鏁板彂鐢熸椂闂�
+ */
+ private String maxTime;
+ /**
+ * 鏈�灏忓姛鐜囧洜鏁�
+ */
+ private String min;
+ /**
+ * 鏈�灏忓姛鐜囧洜鏁板彂鐢熸椂闂�
+ */
+ private String minTime;
+ /**
+ * 骞冲潎鍔熺巼鍥犳暟
+ */
+ private String avg;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java
new file mode 100644
index 0000000..42c024d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java
@@ -0,0 +1,20 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ElectricPowerFactorItem {
+ /**
+ * 鏃堕棿
+ */
+ private String timeCode;
+ /**
+ * 瀹炴椂鍊�
+ */
+ private String value;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java
new file mode 100644
index 0000000..83b3eef
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java
@@ -0,0 +1,23 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:58
+ */
+@Data
+public class ElectricPowerFactorVO {
+ /**
+ * 璁板綍鍒楄〃
+ */
+ private List<ElectricPowerFactorItem> itemList;
+
+ /**
+ * 璇︽儏瀹炰綋
+ */
+ private ElectricPowerFactorDetail detail;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java
new file mode 100644
index 0000000..6175ef9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java
@@ -0,0 +1,55 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ElectricThreePhaseDetail {
+ /**
+ * 鏈�澶у姛鐜囧洜鏁�
+ */
+ private String max;
+ /**
+ * 鏈�澶у姛鐜囧洜鏁板彂鐢熸椂闂�
+ */
+ private String maxTime;
+ /**
+ * 鏈�灏忓姛鐜囧洜鏁�
+ */
+ private String min;
+ /**
+ * 鏈�灏忓姛鐜囧洜鏁板彂鐢熸椂闂�
+ */
+ private String minTime;
+
+ /**
+ * 鏈�澶у��-A鐩哥數娴�/鐢靛帇
+ */
+ private String valueMaxA;
+ /**
+ * 鏈�澶у��-B鐩哥數娴�/鐢靛帇
+ */
+ private String valueMaxB;
+ /**
+ * 鏈�澶у��-C鐩哥數娴�/鐢靛帇
+ */
+ private String valueMaxC;
+
+ /**
+ * 鏈�灏忓��-A鐩哥數娴�/鐢靛帇
+ */
+ private String valueMinA;
+ /**
+ * 鏈�灏忓��-B鐩哥數娴�/鐢靛帇
+ */
+ private String valueMinB;
+ /**
+ * 鏈�灏忓��-C鐩哥數娴�/鐢靛帇
+ */
+ private String valueMinC;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java
new file mode 100644
index 0000000..779321a
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java
@@ -0,0 +1,44 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ElectricThreePhaseItem {
+ /**
+ * 鐢佃〃鍚嶇О
+ */
+ private String name;
+ /**
+ * 鏃堕棿
+ */
+ private String timeCode;
+ /**
+ * 缁熻鍥炬樉绀烘椂闂�
+ */
+ private String timeCodeChart;
+ /**
+ * 鏈�澶т笁鐩镐笉骞宠
+ */
+ private String max;
+ /**
+ * 鏈�灏忎笁鐩镐笉骞宠
+ */
+ private String min;
+ /**
+ * A鐩哥數娴�/鐢靛帇
+ */
+ private String valueA;
+ /**
+ * D鐩哥數娴�/鐢靛帇
+ */
+ private String valueB;
+ /**
+ * C鐩哥數娴�/鐢靛帇
+ */
+ private String valueC;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java
new file mode 100644
index 0000000..5051870
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java
@@ -0,0 +1,44 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�05鏈�06鏃� 14:02
+ */
+@Data
+public class ElectricThreePhaseTempModel {
+
+ private Double max;
+ private Date maxTime;
+ private Double min;
+ private Date minTime;
+ /**
+ * 鏈�澶у��-A鐩哥數娴�/鐢靛帇
+ */
+ private double valueMaxA;
+ /**
+ * 鏈�澶у��-B鐩哥數娴�/鐢靛帇
+ */
+ private double valueMaxB;
+ /**
+ * 鏈�澶у��-C鐩哥數娴�/鐢靛帇
+ */
+ private double valueMaxC;
+
+ /**
+ * 鏈�灏忓��-A鐩哥數娴�/鐢靛帇
+ */
+ private double valueMinA;
+ /**
+ * 鏈�灏忓��-B鐩哥數娴�/鐢靛帇
+ */
+ private double valueMinB;
+ /**
+ * 鏈�灏忓��-C鐩哥數娴�/鐢靛帇
+ */
+ private double valueMinC;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java
new file mode 100644
index 0000000..76e9e74
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java
@@ -0,0 +1,23 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:58
+ */
+@Data
+public class ElectricThreePhaseVO {
+ /**
+ * 璁板綍鍒楄〃
+ */
+ private List<ElectricThreePhaseItem> itemList;
+
+ /**
+ * 璇︽儏瀹炰綋
+ */
+ private ElectricThreePhaseDetail detail;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java
new file mode 100644
index 0000000..f1f0845
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java
@@ -0,0 +1,20 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 閲囬泦鐐圭敤鑳藉崟鍏冪數琛�
+ *
+ * @author fanxinfu
+ */
+@Data
+public class EnergyIndexAndUnitDevice {
+
+ private String indexId;
+ private String indexName;
+ private String energyType;
+ private String energyName;
+ private String energyUnitName;
+ private String energyUnitDeviceName;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java
new file mode 100644
index 0000000..78a7a82
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java
@@ -0,0 +1,33 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 鐐逛綅璇︾粏淇℃伅
+ *
+ * @Author: Zhujw
+ * @Date: 2023/5/26
+ */
+@Data
+public class EnergyIndexInforModel {
+
+ @ApiModelProperty(value = "鐐逛綅id")
+ private String indexId;
+
+ @ApiModelProperty(value = "璁¢噺鍣ㄥ叿id")
+ private String meterId;
+
+ @ApiModelProperty(value = "鐐逛綅鍚嶇О")
+ private String indexName;
+
+ @ApiModelProperty(value = "鐐逛綅绫诲瀷(閲囬泦銆佽绠�)")
+ private String indexType;
+
+ @ApiModelProperty(value = "鐐逛綅code")
+ private String indexCode;
+
+ @ApiModelProperty(value = "鐐逛綅鍗曚綅")
+ private String indexUnit;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java
new file mode 100644
index 0000000..9ee1c52
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java
@@ -0,0 +1,36 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ListElectricLoadDetail {
+ /**
+ * 鏈�澶ц礋鑽�
+ */
+ private String max;
+ /**
+ * 鏈�澶ц礋鑽峰彂鐢熸椂闂�
+ */
+ private String maxTime;
+ /**
+ * 鏈�灏忚礋鑽�
+ */
+ private String min;
+ /**
+ * 鏈�灏忚礋鑽峰彂鐢熸椂闂�
+ */
+ private String minTime;
+ /**
+ * 骞冲潎璐熻嵎
+ */
+ private String avg;
+ /**
+ * 璐熻嵎鐜� = 骞冲潎璐熻嵎 / 鏈�澶ц礋鑽�
+ */
+ private String rate;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java
new file mode 100644
index 0000000..da4a6c7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java
@@ -0,0 +1,44 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ListElectricLoadItem {
+ /**
+ * 鐢佃〃鍚嶇О
+ */
+ private String name;
+ /**
+ * 鏃堕棿
+ */
+ private String timeCode;
+ /**
+ * 缁熻鍥炬樉绀烘椂闂�
+ */
+ private String timeCodeChart;
+ /**
+ * 鏈�澶ц礋鑽�
+ */
+ private String max;
+ /**
+ * 鏈�灏忚礋鑽�
+ */
+ private String min;
+ /**
+ * 骞冲潎璐熻嵎
+ */
+ private String avg;
+ /**
+ * 瀹炴椂鍊�
+ */
+ private String value;
+ /**
+ * 璐熻嵎鐜�
+ */
+ private String rate;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java
new file mode 100644
index 0000000..dd06a35
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java
@@ -0,0 +1,23 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:58
+ */
+@Data
+public class ListElectricLoadVO {
+ /**
+ * 璁板綍鍒楄〃
+ */
+ private List<ListElectricLoadItem> itemList;
+
+ /**
+ * 璇︽儏瀹炰綋
+ */
+ private ListElectricLoadDetail detail;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/EnergyUnitToDeviceMapper.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/EnergyUnitToDeviceMapper.java
deleted file mode 100644
index 32edd1e..0000000
--- a/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/EnergyUnitToDeviceMapper.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.zhitan.energyMonitor.mapper;
-
-import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.zhitan.energyMonitor.domain.EnergyUnitToDevice;
-import com.zhitan.energyMonitor.domain.vo.EnergyCalculateCalcTV;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * @Description: 鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭�
- * @Author: jeecg-boot
- * @Date: 2022-01-26
- * @Version: V1.0
- */
-public interface EnergyUnitToDeviceMapper extends BaseMapper<EnergyUnitToDevice> {
-
- /**
- * 鏍规嵁璁$畻鐐逛綅涓婚敭鍜岀敤鑳藉崟鍏冧富閿� 鏌ヨ 浣跨敤鐨� 閲囬泦鐐瑰強浠〃淇℃伅
- *
- * @param calculateIndexId
- * @param energyUnitId
- * @return
- */
- public List<EnergyCalculateCalcTV> getCalculateDevices(@Param("calculateIndexId") String calculateIndexId,
- @Param("energyUnitId") String energyUnitId,
- @Param("tenantId") String tenantId);
-
- /**
- * 涓-鏍规嵁绉熸埛id闆嗗悎鏌ヨ璁¢噺鍣ㄥ叿id
- *
- * @param unitIds
- * @return
- */
- @InterceptorIgnore(tenantLine = "true")
- List<String> listDeviceByTenantIds(@Param("unitIds") List<String> unitIds);
-}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java
new file mode 100644
index 0000000..cfc6098
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java
@@ -0,0 +1,28 @@
+package com.zhitan.energyMonitor.service;
+
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO;
+import com.zhitan.energyMonitor.domain.vo.ListElectricityMeterVO;
+import com.zhitan.model.domain.EnergyIndex;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+public interface IElectricLoadService {
+
+ /**
+ * 鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁
+ */
+ ListElectricLoadVO list(String timeType, String timeCode, EnergyIndex energyIndex, String meterId);
+
+ /**
+ * 鑾峰彇鑺傜偣涓嬫墍鏈夌數琛�
+ * @param nodeId
+ * @return
+ */
+ List<ListElectricityMeterVO> listElectricMeter(String nodeId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java
new file mode 100644
index 0000000..b74cc1b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java
@@ -0,0 +1,19 @@
+package com.zhitan.energyMonitor.service;
+
+import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorVO;
+import com.zhitan.model.domain.EnergyIndex;
+
+
+/**
+ * @Description:
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+public interface IElectricPowerFactorService {
+
+ /**
+ * 鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁
+ */
+ ElectricPowerFactorVO list(String timeCode, EnergyIndex energyIndex);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java
new file mode 100644
index 0000000..8b8ce8d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java
@@ -0,0 +1,20 @@
+package com.zhitan.energyMonitor.service;
+
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseVO;
+import com.zhitan.model.domain.EnergyIndex;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+public interface IElectricThreePhaseService {
+
+ /**
+ * 鑾峰彇涓夌浉涓嶅钩琛℃暟鎹�
+ */
+ ElectricThreePhaseVO list(String timeType, String timeCode, List<EnergyIndex> energyIndexList, String requestType, String meterId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IEnergyUnitToDeviceService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IEnergyUnitToDeviceService.java
deleted file mode 100644
index 30bb563..0000000
--- a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IEnergyUnitToDeviceService.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.zhitan.energyMonitor.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.zhitan.energyMonitor.domain.EnergyUnitToDevice;
-import com.zhitan.energyMonitor.domain.vo.ListElectricityMeterVO;
-import com.zhitan.energyMonitor.domain.vo.UnitToDeviceRelationVO;
-
-import java.util.List;
-
-/**
- * @Description: 鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭�
- * @Author: jeecg-boot
- * @Date: 2022-01-26
- * @Version: V1.0
- */
-public interface IEnergyUnitToDeviceService extends IService<EnergyUnitToDevice> {
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓ID鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃闆嗗悎
- * @param unitId
- * @return
- */
- List<EnergyUnitToDevice> queryTenantUnitDeviceByUnitId(String unitId);
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓ID鑾峰彇绉熸埛涓嬫墍鏈夋湁鏁堢殑瀹炰綋琛ㄩ泦鍚�
- * @param unitId
- * @return
- */
- List<EnergyUnitToDevice> queryTenantEntityMeterByUnitId(String unitId);
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓id鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitId 鐢ㄨ兘鍗曞厓id
- * @return 浠〃id闆嗗悎
- */
- List<String> getEnergyUnitDeviceIdByUnitId(String unitId);
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓id闆嗗悎鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitIds 鐢ㄨ兘鍗曞厓id
- */
- List<String> getEnergyUnitDeviceIdByUnitIds(List<String> unitIds);
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓id闆嗗悎+鑳芥簮绫诲瀷鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitIds 鐢ㄨ兘鍗曞厓id闆嗗悎
- * @return
- */
- List<String> getDeviceIdByUnitIds(List<String> unitIds);
-
- /**
- * 鏇存柊鑳藉崟鍏僫d鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitId 鐢ㄨ兘鍗曞厓id
- * @return 浠〃id闆嗗悎
- */
- List<String> updateEnergyUnitDeviceIdByUnitId(String unitId);
-
- /**
- * 鍒犻櫎鑳藉崟鍏僫d鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- * @param unitId 鐢ㄨ兘鍗曞厓id
- * @return 浠〃id闆嗗悎
- */
- void deleteEnergyUnitDeviceIdByUnitId(String unitId);
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓ID鑾峰彇绉熸埛涓嬫湁鏁堢殑鐢佃〃闆嗗悎
- * @param unitId
- * @return
- */
- List<ListElectricityMeterVO> listElectricityMeter(String unitId);
-
- /**
- * 鑾峰彇绉熸埛涓嬫湁鏁堢殑琛ㄩ泦鍚�
- * @return
- */
- List<EnergyUnitToDevice> listAllMeter();
-
- /**
- * 鏍规嵁璁¢噺鍣ㄥ叿id鍜岀敤鑳藉崟鍏僫d鏌ヨ琛ㄥ叧绯�
- *
- * @param unitId 鐢ㄨ兘鍗曞厓id
- * @param id id
- * @return EnergyUnitToDevice瀹炰綋
- */
- EnergyUnitToDevice getEnergyUnitToDeviceById(String unitId, String id);
-
- /**
- * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ涓庣敤鑳界殑鍏崇郴
- *
- * @param unitIds
- * @return
- */
- List<UnitToDeviceRelationVO> listDeviceByUnitIds(List<String> unitIds);
-}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java
new file mode 100644
index 0000000..2e47b66
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java
@@ -0,0 +1,278 @@
+package com.zhitan.energyMonitor.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.mapper.MeterImplementMapper;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.GroupTimeType;
+import com.zhitan.common.utils.ChartUtils;
+import com.zhitan.common.utils.DateTimeUtil;
+import com.zhitan.common.utils.DoubleUtil;
+import com.zhitan.common.utils.StringUtil;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadDetail;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadItem;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO;
+import com.zhitan.energyMonitor.domain.vo.ListElectricityMeterVO;
+import com.zhitan.energyMonitor.service.IElectricLoadService;
+import com.zhitan.knowledgeBase.domain.enums.EnergyTypeEnum;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: sensor_alarm_item
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+@Service
+public class ElectricLoadServiceImpl implements IElectricLoadService {
+ @Autowired
+ private RealtimeDatabaseService realtimeDatabaseService;
+ @Resource
+ private MeterImplementMapper meterImplementMapper;
+
+ @Override
+ public ListElectricLoadVO list(String timeType, String timeCode, EnergyIndex energyIndex, String meterId) {
+ ListElectricLoadVO vo = new ListElectricLoadVO();
+ List<ListElectricLoadItem> itemList = new ArrayList<>();
+ vo.setItemList(itemList);
+ ListElectricLoadDetail detail = new ListElectricLoadDetail();
+ detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setRate(CommonConst.DOUBLE_MINUS_SIGN);
+ vo.setDetail(detail);
+
+ MeterImplement meterImplement = meterImplementMapper.selectById(meterId);
+
+ if (ObjectUtil.isEmpty(meterImplement)) {
+ return vo;
+ }
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(timeType, timeCode, dateList);
+ // 鍥犱负influxdb娌℃湁鎸夌収鏈堝垎缁勫彇鏁版嵁锛屽彧鑳芥寜鐓ф棩鏈熷惊鐜彇鏁版嵁
+ if (TimeTypeConst.TIME_TYPE_YEAR.equals(timeType)) {
+ getYearData(timeType, dateList, energyIndex, meterImplement.getMeterName(), itemList);
+ } else {
+ getDayAndMonthData(timeType, timeCode, energyIndex, meterImplement.getMeterName(), itemList);
+ }
+ if (!StringUtil.isEmptyOrNull(energyIndex.getCode())) {
+ Date start = ChartUtils.getDateTime(timeType, timeCode);
+ Date end = ChartUtils.getEndTime(timeType, start);
+
+ String code = energyIndex.getCode();
+ TagValue maxTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.max);
+ TagValue minTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.min);
+ TagValue avgTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.mean);
+
+ double avg = CommonConst.DIGIT_DOUBLE_0;
+ if (!ObjectUtil.isEmpty(avgTagValueModel) && !ObjectUtil.isEmpty(avgTagValueModel.getValue())) {
+ detail.setAvg(DoubleUtil.formatDoubleToStr(avgTagValueModel.getValue()) + CommonConst.ELECTRIC_LOAD_UNIT);
+ avg = avgTagValueModel.getValue();
+ }
+
+ if (!ObjectUtil.isEmpty(maxTagValueModel) && !ObjectUtil.isEmpty(maxTagValueModel.getValue())) {
+ detail.setMax(DoubleUtil.formatDoubleToStr(maxTagValueModel.getValue()));
+ detail.setMaxTime(DateTimeUtil.getDateTime(maxTagValueModel.getDataTime(), DateTimeUtil.COMMON_PATTERN));
+
+ if (maxTagValueModel.getValue() != CommonConst.DIGIT_DOUBLE_0) {
+ double rate = avg * CommonConst.DIGIT_DOUBLE_100 / maxTagValueModel.getValue();
+ detail.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT);
+ }
+ }
+
+ if (!ObjectUtil.isEmpty(minTagValueModel) && !ObjectUtil.isEmpty(minTagValueModel.getValue())) {
+ detail.setMin(DoubleUtil.formatDoubleToStr(minTagValueModel.getValue()));
+ detail.setMinTime(DateTimeUtil.getDateTime(minTagValueModel.getDataTime(), DateTimeUtil.COMMON_PATTERN));
+ }
+
+ if (!CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMax())) {
+ String m = detail.getMax();
+ detail.setMax(m + CommonConst.ELECTRIC_LOAD_UNIT);
+ }
+ if (!CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMin())) {
+ String min = detail.getMin();
+ detail.setMin(min + CommonConst.ELECTRIC_LOAD_UNIT);
+ }
+ if (CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMax())) {
+ detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ }
+ }
+
+ return vo;
+ }
+
+ /**
+ * 鑾峰彇鏈堝拰澶╂暟鎹�,鍥犱负influxdb鍙互鎸夌収鍒嗐�傛椂銆傚ぉ鍒嗙粍鍙栨暟锛屼笉鍙互鎸夌収鏈堝垎缁勫彇鏁帮紝鎵�浠ュ垎鎴愪袱涓柟娉曟潵鍐�
+ */
+ private void getDayAndMonthData(String timeType, String timeCode, EnergyIndex energyIndex, String meterName, List<ListElectricLoadItem> itemList) {
+ String tagCodes = energyIndex.getCode();
+ List<TagValue> maxList = new ArrayList<>();
+ List<TagValue> minList = new ArrayList<>();
+ List<TagValue> avgList = new ArrayList<>();
+ if (TimeTypeConst.TIME_TYPE_DAY.equals(timeType)) {
+
+ } else {
+ String tempTimeCode = StringUtil.ifEmptyOrNullReturnValue(timeCode).replace(CommonConst.SINGLE_MINUS_SIGN, CommonConst.EMPTY);
+ Date start = DateTimeUtil.toDateTime(tempTimeCode, DateTimeUtil.COMMON_PATTERN_MONTH);
+ Date end = DateTimeUtil.addMonths(start, CommonConst.DIGIT_1);
+ if (!StringUtil.isEmptyOrNull(tagCodes)) {
+ maxList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.max, GroupTimeType.d);
+ minList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.min, GroupTimeType.d);
+ avgList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.mean, GroupTimeType.d);
+ }
+ }
+ if (CollectionUtils.isEmpty(maxList)) {
+ maxList = new ArrayList<>();
+ }
+ if (CollectionUtils.isEmpty(minList)) {
+ minList = new ArrayList<>();
+ }
+ if (CollectionUtils.isEmpty(avgList)) {
+ avgList = new ArrayList<>();
+ }
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(timeType, timeCode, dateList);
+ Date now = new Date();
+ Date temNow = now;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_DAY, now);
+ break;
+ default:
+ break;
+ }
+ for (Date date : dateList) {
+ ListElectricLoadItem temp = new ListElectricLoadItem();
+ temp.setTimeCode(ChartUtils.getTimeCode(timeType, date));
+ temp.setName(ObjectUtils.isNotEmpty(meterName) ? meterName : "");
+ temp.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setTimeCodeChart(ChartUtils.getTimeCodeChart(timeType, date));
+ temp.setRate(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+ itemList.add(temp);
+ // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿--
+ if (DateTimeUtil.compareDateDiff(date, temNow) > CommonConst.DIGIT_0) {
+ continue;
+ }
+ //澶╃殑鍒ゆ柇
+ if (TimeTypeConst.TIME_TYPE_DAY.equals(timeType)) {
+ // 鐢变簬瀹炴椂搴撹繑鍥炵殑鏃堕棿瀵瑰簲鍊间唬琛ㄧ殑鏄墠涓�涓懆鏈熺殑鍊�
+ Date nextHour = DateTimeUtil.addHours(date, CommonConst.DIGIT_1);
+ if (!StringUtil.isEmptyOrNull(energyIndex.getCode())) {
+ TagValue tagValue = realtimeDatabaseService.retrieve(energyIndex.getCode(), nextHour);
+ if (!ObjectUtil.isEmpty(tagValue)) {
+ if (ObjectUtils.isEmpty(tagValue) || ObjectUtils.isEmpty(tagValue.getValue())) {
+ temp.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+ } else {
+ temp.setValue(String.valueOf(DoubleUtil.formatDouble(tagValue.getValue())));
+ }
+ }
+ }
+ } else {
+ //鏈堢殑鍒ゆ柇锛岀敱浜庡疄鏃跺簱杩斿洖鐨勬椂闂村搴斿�间唬琛ㄧ殑鏄墠涓�涓懆鏈熺殑鍊�
+ Date nextDay = DateTimeUtil.addDays(date, CommonConst.DIGIT_1);
+ TagValue tagValueMonth = maxList.stream().filter(x -> (new DateTime(x.getDataTime())).withTimeAtStartOfDay().toDate().equals(nextDay)).findAny().orElse(null);
+ if (!ObjectUtil.isEmpty(tagValueMonth)) {
+ //鏈堢殑鎵惧ぉ
+ TagValue minModel = minList.stream().filter(x -> x.getDataTime().equals(tagValueMonth.getDataTime())).findAny().orElse(null);
+ if (!ObjectUtil.isEmpty(minModel)) {
+ temp.setMin(String.valueOf(DoubleUtil.formatDouble(minModel.getValue())));
+ }
+ TagValue avgModel = avgList.stream().filter(x -> x.getDataTime().equals(tagValueMonth.getDataTime())).findAny().orElse(null);
+ if (!ObjectUtil.isEmpty(avgModel)) {
+ temp.setAvg(String.valueOf(DoubleUtil.formatDouble(avgModel.getValue())));
+ }
+ temp.setMax(String.valueOf(DoubleUtil.formatDouble(tagValueMonth.getValue())));
+
+ temp.setRate(CommonConst.DOUBLE_MINUS_SIGN);
+ if (Double.parseDouble(temp.getMax()) != CommonConst.DIGIT_DOUBLE_0) {
+ double rate = Double.parseDouble(temp.getAvg()) * 100 / Double.parseDouble(temp.getMax());
+ temp.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇骞存暟鎹�
+ */
+ private void getYearData(String timeType, List<Date> dateList, EnergyIndex energyIndex, String meterName, List<ListElectricLoadItem> itemList) {
+ String tagCode = StringUtil.ifEmptyOrNullReturnValue(energyIndex.getCode());
+ for (Date date : dateList) {
+ ListElectricLoadItem temp = new ListElectricLoadItem();
+ Date endTime = DateTimeUtil.addMonths(date, CommonConst.DIGIT_1);
+ temp.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ if (!StringUtil.isEmptyOrNull(tagCode)) {
+ String code = energyIndex.getCode();
+ TagValue rt3 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.max);
+ TagValue rt4 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.min);
+ TagValue rt2 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.mean);
+ if (ObjectUtils.isNotEmpty(rt2)) {
+ temp.setAvg(String.valueOf(DoubleUtil.formatDouble(rt2.getValue())));
+ }
+ if (ObjectUtils.isNotEmpty(rt3)) {
+ temp.setMax(String.valueOf(DoubleUtil.formatDouble(rt3.getValue())));
+ }
+ if (ObjectUtils.isNotEmpty(rt4)) {
+ temp.setMin(String.valueOf(DoubleUtil.formatDouble(rt4.getValue())));
+ }
+ }
+
+ temp.setTimeCode(ChartUtils.getTimeCode(timeType, date));
+ temp.setTimeCodeChart(ChartUtils.getTimeCodeChart(timeType, date));
+ temp.setName(StringUtil.ifEmptyOrNullReturnValue(meterName));
+ temp.setRate(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+ if (!temp.getMax().equals(CommonConst.DOUBLE_MINUS_SIGN) && Double.parseDouble(temp.getMax()) != CommonConst.DIGIT_DOUBLE_0) {
+ double rate = Double.parseDouble(temp.getAvg()) * 100 / Double.parseDouble(temp.getMax());
+ temp.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT);
+ }
+ itemList.add(temp);
+ }
+ }
+
+
+ /**
+ * 鑾峰彇鐢佃〃鍒楄〃
+ */
+ @Override
+ public List<ListElectricityMeterVO> listElectricMeter(String nodeId) {
+ List<MeterImplement> meterImplements = meterImplementMapper.selectByNodeId(nodeId);
+ meterImplements = meterImplements.stream().filter(x -> "electric".equals(x.getEnergyType())).collect(Collectors.toList());
+ List<ListElectricityMeterVO> list = new ArrayList<>();
+ for (MeterImplement meterImplement : meterImplements) {
+ ListElectricityMeterVO vo = new ListElectricityMeterVO();
+ vo.setCode(meterImplement.getId());
+ vo.setLabel(meterImplement.getMeterName());
+ list.add(vo);
+ }
+ return list;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java
new file mode 100644
index 0000000..ea366f9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java
@@ -0,0 +1,115 @@
+package com.zhitan.energyMonitor.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.utils.ChartUtils;
+import com.zhitan.common.utils.DateTimeUtil;
+import com.zhitan.common.utils.DoubleUtil;
+import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorDetail;
+import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorItem;
+import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorVO;
+import com.zhitan.energyMonitor.service.IElectricPowerFactorService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: sensor_alarm_item
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+@Slf4j
+@Service
+public class ElectricPowerFactorServiceImpl implements IElectricPowerFactorService {
+ @Autowired
+ private RealtimeDatabaseService realtimeDatabaseService;
+
+ @Override
+ public ElectricPowerFactorVO list(String timeCode, EnergyIndex energyIndex) {
+ ElectricPowerFactorVO vo = new ElectricPowerFactorVO();
+ List<ElectricPowerFactorItem> itemList = new ArrayList<>();
+ ElectricPowerFactorDetail detail = new ElectricPowerFactorDetail();
+ detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN);
+ vo.setItemList(itemList);
+ vo.setDetail(detail);
+
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_DAY, timeCode, dateList);
+ double max = CommonConst.DIGIT_0, min = CommonConst.MIN_INIT_VALUE;
+ //dateList璁℃暟
+ Date now = new Date();
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ now = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now);
+ int i = CommonConst.DIGIT_0;
+ for (Date date : dateList) {
+ ElectricPowerFactorItem temp = new ElectricPowerFactorItem();
+ temp.setTimeCode(ChartUtils.getTimeCodeChart(TimeTypeConst.TIME_TYPE_DAY, date));
+ temp.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+ itemList.add(temp);
+ // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿--
+ if (DateTimeUtil.compareDateDiff(date, now) > CommonConst.DIGIT_0) {
+ i++;
+ continue;
+ }
+ TagValue tagValue = new TagValue();
+ try {
+ TagValue retrieve = realtimeDatabaseService.retrieve(energyIndex.getCode(), date);
+ if (ObjectUtil.isNotEmpty(retrieve)) {
+ tagValue = retrieve;
+ }
+ } catch (Exception e) {
+ log.error("鑾峰彇鍔熺巼鍥犳暟寮傚父锛�" + e.getMessage());
+ }
+ if (ObjectUtil.isNotEmpty(tagValue.getValue())) {
+ double value = DoubleUtil.formatDouble(tagValue.getValue());
+
+ temp.setValue(String.valueOf(value));
+ //缁欐渶灏忓�艰祴鍊肩涓�鏉�
+ if (i == CommonConst.DIGIT_0) {
+ min = Double.parseDouble(temp.getValue());
+ }
+ if (value > max) {
+ max = value;
+ detail.setMax(max + CommonConst.EMPTY);
+ detail.setMaxTime(DateTimeUtil.getDateTime(date));
+ }
+ if (value <= min) {
+ min = value;
+ detail.setMin(min + CommonConst.EMPTY);
+ detail.setMinTime(DateTimeUtil.getDateTime(date));
+ }
+ }
+ i++;
+ }
+
+ detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ if (ObjectUtil.isNotEmpty(itemList)) {
+ double avg = CommonConst.DIGIT_DOUBLE_0;
+ for (ElectricPowerFactorItem li : itemList) {
+ try {
+ if (!li.getValue().equals(CommonConst.DOUBLE_MINUS_SIGN)) {
+ avg += DoubleUtil.toDouble(li.getValue());
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ }
+ detail.setAvg(DoubleUtil.formatDoubleToStr(avg / itemList.size()));
+ }
+
+ return vo;
+ }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java
new file mode 100644
index 0000000..f855043
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java
@@ -0,0 +1,419 @@
+package com.zhitan.energyMonitor.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.mapper.MeterImplementMapper;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.utils.*;
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseDetail;
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseItem;
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseTempModel;
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseVO;
+import com.zhitan.energyMonitor.service.IElectricThreePhaseService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import org.joda.time.DateTime;
+import org.joda.time.Duration;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: sensor_alarm_item
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+@Service
+public class ElectricThreePhaseServiceImpl implements IElectricThreePhaseService {
+
+ @Autowired
+ private RealtimeDatabaseService realtimeDatabaseService;
+ @Resource
+ private MeterImplementMapper meterImplementMapper;
+
+ /**
+ * 鑾峰彇涓夌浉涓嶅钩琛℃暟鎹�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param timeCode 鏃堕棿缂栫爜
+ * @param energyIndexList 鐐逛綅闆嗗悎
+ * @param requestType 绫诲瀷
+ * @return ElectricThreePhaseVo
+ * @Date 14:27 2022/5/30
+ **/
+ @Override
+ public ElectricThreePhaseVO list(String timeType, String timeCode, List<EnergyIndex> energyIndexList, String requestType, String meterId) {
+ ElectricThreePhaseVO vo = new ElectricThreePhaseVO();
+
+ // 鑾峰彇鐢靛帇涓嶅钩琛℃暟鎹�
+ if (CommonConst.STR_NUMBER_0.equals(requestType)) {
+ energyIndexList = energyIndexList.stream()
+ .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_VOLTAGE_A)
+ || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_VOLTAGE_B)
+ || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_VOLTAGE_C)).collect(Collectors.toList());
+ } else {
+ energyIndexList = energyIndexList.stream()
+ .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_CURRENT_A)
+ || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_CURRENT_B)
+ || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_CURRENT_C))
+ .collect(Collectors.toList());
+ }
+ if (ObjectUtil.isEmpty(energyIndexList)) {
+ return vo;
+ }
+ List<String> tagCodeList = energyIndexList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
+ if(ObjectUtil.isEmpty(tagCodeList)){
+ tagCodeList.add(CommonConst.STR_NUMBER_MINUS_ONE);
+ }
+
+ Date start = ChartUtils.getDateTime(timeType, timeCode);
+ Date end = getEndTime(timeType, start);
+
+ DateTime begin = new DateTime(start);
+ DateTime finish = new DateTime(end);
+ long millis = new Duration(begin, finish).getMillis();
+ int pointCount = IntegerUtil.toInt(millis / CommonConst.DIGIT_3600 / CommonConst.DIGIT_1000);
+
+ List<TagValue> tagValueList = realtimeDatabaseService.retrieve(tagCodeList, start, end, pointCount);
+ List<ElectricThreePhaseItem> itemList = new ArrayList<>();
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(timeType, timeCode, dateList);
+ ElectricThreePhaseTempModel tempModel = new ElectricThreePhaseTempModel();
+
+ Date now = new Date();
+ for (Date date : dateList) {
+ Date tempDate = date;
+ Date temNow = now;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ tempDate = DateTimeUtil.addHours(date, CommonConst.DIGIT_1);
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ tempDate = date;
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_DAY, now);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ tempDate = date;
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_MONTH, now);
+ break;
+ default:
+ break;
+ }
+ MeterImplement meterImplement = meterImplementMapper.selectById(meterId);
+
+ ElectricThreePhaseItem temp = new ElectricThreePhaseItem();
+ if (ObjectUtil.isNotEmpty(meterImplement)) {
+ temp.setName(meterImplement.getMeterName());
+ }
+ temp.setTimeCode(ChartUtils.getTimeCode(timeType, date));
+ temp.setTimeCodeChart(ChartUtils.getTimeCodeChart(timeType, date));
+ temp.setValueA(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setValueB(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setValueC(CommonConst.DOUBLE_MINUS_SIGN);
+ itemList.add(temp);
+ // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿--
+ if (DateTimeUtil.compareDateDiff(date, temNow) > CommonConst.DIGIT_0) {
+ continue;
+ }
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ // 鏋勯�犲綋澶╂瘡涓皬鏃剁殑鏁版嵁
+ listDayData(tempDate, tagValueList, temp, tempModel);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ // 鏋勯�犲綋鏈堟瘡澶╃殑鏁版嵁
+ listMonthData(tempDate, tagValueList, temp, tempModel);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ // 鏋勯�犲綋骞存瘡鏈堢殑鏁版嵁
+ listYearData(tempDate, tagValueList, temp, tempModel);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || CommonConst.MIN_INIT_VALUE == tempModel.getMin()) {
+ tempModel.setMin(null);
+ }
+ //璁剧疆鍊�
+ ElectricThreePhaseDetail detail = new ElectricThreePhaseDetail();
+ BeanUtils.copyProperties(tempModel, detail);
+ detail.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMaxA(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMaxB(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMaxC(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMinA(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMinB(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMinC(CommonConst.DOUBLE_MINUS_SIGN);
+ if (ObjectUtil.isNotNull(tempModel.getMax())) {
+ detail.setMax(DoubleUtil.formatDoubleToStr(tempModel.getMax()) + CommonConst.SYMBOL_PERCENT);
+ detail.setMaxTime(DateTimeUtil.getDateTime(tempModel.getMaxTime()));
+ detail.setValueMaxA(DoubleUtil.formatDoubleToStr(tempModel.getValueMaxA()));
+ detail.setValueMaxB(DoubleUtil.formatDoubleToStr(tempModel.getValueMaxB()));
+ detail.setValueMaxC(DoubleUtil.formatDoubleToStr(tempModel.getValueMaxC()));
+ }
+ if (ObjectUtil.isNotNull(tempModel.getMin())) {
+ detail.setMin(DoubleUtil.formatDoubleToStr(tempModel.getMin()) + CommonConst.SYMBOL_PERCENT);
+ detail.setMinTime(DateTimeUtil.getDateTime(tempModel.getMinTime()));
+ detail.setValueMinA(DoubleUtil.formatDoubleToStr(tempModel.getValueMinA()));
+ detail.setValueMinB(DoubleUtil.formatDoubleToStr(tempModel.getValueMinB()));
+ detail.setValueMinC(DoubleUtil.formatDoubleToStr(tempModel.getValueMinC()));
+ }
+ vo.setDetail(detail);
+ vo.setItemList(itemList);
+ return vo;
+ }
+
+ /**
+ * 鏋勯�犲綋鏈堢殑鏁版嵁鍒楄〃
+ *
+ * @param date
+ * @param tagValueList
+ * @param temp
+ * @param tempModel
+ */
+ private void listYearData(Date date, List<TagValue> tagValueList, ElectricThreePhaseItem temp, ElectricThreePhaseTempModel tempModel) {
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_MONTH, DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH), dateList);
+ ElectricThreePhaseTempModel tempModelMonth = new ElectricThreePhaseTempModel();
+ for (Date date1 : dateList) {
+ listMonthData(date1, tagValueList, temp, tempModelMonth);
+ temp.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ if (ObjectUtil.isNotNull(tempModelMonth.getMax())) {
+ temp.setMax(DoubleUtil.formatDoubleToStr(tempModelMonth.getMax()));
+ }
+ if (ObjectUtil.isNotNull(tempModelMonth.getMin())) {
+ temp.setMin(DoubleUtil.formatDoubleToStr(tempModelMonth.getMin()));
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || CommonConst.MIN_INIT_VALUE == tempModel.getMin()) {
+ tempModel.setMin(null);
+ }
+ if (ObjectUtil.isNotNull(tempModelMonth.getMax())) {
+ if (ObjectUtil.isNull(tempModel.getMax()) || (ObjectUtil.isNotNull(tempModel.getMax()) && tempModelMonth.getMax() > tempModel.getMax())) {
+ tempModel.setMax(DoubleUtil.formatDouble(tempModelMonth.getMax()));
+ tempModel.setMaxTime(tempModelMonth.getMaxTime());
+ tempModel.setValueMaxA(DoubleUtil.formatDouble(tempModelMonth.getValueMaxA()));
+ tempModel.setValueMaxB(DoubleUtil.formatDouble(tempModelMonth.getValueMaxB()));
+ tempModel.setValueMaxC(DoubleUtil.formatDouble(tempModelMonth.getValueMaxC()));
+ }
+ }
+ if (ObjectUtil.isNotNull(tempModelMonth.getMin())) {
+ if (ObjectUtil.isNull(tempModel.getMin()) || (ObjectUtil.isNotNull(tempModel.getMin()) && tempModelMonth.getMin() <= tempModel.getMin())) {
+ tempModel.setMin(DoubleUtil.formatDouble(tempModelMonth.getMin()));
+ tempModel.setMinTime(tempModelMonth.getMinTime());
+ tempModel.setValueMinA(DoubleUtil.formatDouble(tempModelMonth.getValueMinA()));
+ tempModel.setValueMinB(DoubleUtil.formatDouble(tempModelMonth.getValueMinB()));
+ tempModel.setValueMinC(DoubleUtil.formatDouble(tempModelMonth.getValueMinC()));
+ }
+ }
+ }
+ }
+
+ /**
+ * 鏋勯�犲綋鏈堢殑鏁版嵁鍒楄〃
+ *
+ * @param date
+ * @param tagValueList
+ * @param temp
+ * @param tempModel
+ */
+ private void listMonthData(Date date, List<TagValue> tagValueList, ElectricThreePhaseItem temp, ElectricThreePhaseTempModel tempModel) {
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_DAY, DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_DAY), dateList);
+ ElectricThreePhaseTempModel tempModelDay = new ElectricThreePhaseTempModel();
+ for (Date date1 : dateList) {
+ Date tempDate = DateTimeUtil.addHours(date1, CommonConst.DIGIT_1);
+ listDayData(tempDate, tagValueList, temp, tempModelDay);
+ temp.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ if (ObjectUtil.isNotNull(tempModelDay.getMax())) {
+ temp.setMax(DoubleUtil.formatDoubleToStr(tempModelDay.getMax()));
+ }
+ if (ObjectUtil.isNotNull(tempModelDay.getMin())) {
+ temp.setMin(DoubleUtil.formatDoubleToStr(tempModelDay.getMin()));
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || CommonConst.MIN_INIT_VALUE == tempModel.getMin()) {
+ tempModel.setMin(null);
+ }
+ if (ObjectUtil.isNotNull(tempModelDay.getMax())) {
+ if (ObjectUtil.isNull(tempModel.getMax()) || (ObjectUtil.isNotNull(tempModel.getMax()) && tempModelDay.getMax() > tempModel.getMax())) {
+ tempModel.setMax(DoubleUtil.formatDouble(tempModelDay.getMax()));
+ tempModel.setMaxTime(tempModelDay.getMaxTime());
+ tempModel.setValueMaxA(DoubleUtil.formatDouble(tempModelDay.getValueMaxA()));
+ tempModel.setValueMaxB(DoubleUtil.formatDouble(tempModelDay.getValueMaxB()));
+ tempModel.setValueMaxC(DoubleUtil.formatDouble(tempModelDay.getValueMaxC()));
+ }
+ }
+ if (ObjectUtil.isNotNull(tempModelDay.getMin())) {
+ if (ObjectUtil.isNull(tempModel.getMin()) || (ObjectUtil.isNotNull(tempModel.getMin()) && tempModelDay.getMin() <= tempModel.getMin())) {
+ tempModel.setMin(DoubleUtil.formatDouble(tempModelDay.getMin()));
+ tempModel.setMinTime(tempModelDay.getMinTime());
+ tempModel.setValueMinA(DoubleUtil.formatDouble(tempModelDay.getValueMinA()));
+ tempModel.setValueMinB(DoubleUtil.formatDouble(tempModelDay.getValueMinB()));
+ tempModel.setValueMinC(DoubleUtil.formatDouble(tempModelDay.getValueMinC()));
+ }
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇褰撳ぉ鐨勬暟鎹垪琛�
+ *
+ * @param date
+ * @param tagValueList
+ * @param tempModel
+ */
+ private void listDayData(Date date, List<TagValue> tagValueList, ElectricThreePhaseItem temp, ElectricThreePhaseTempModel tempModel) {
+ Date endTime = DateTimeUtil.addHours(date, CommonConst.DIGIT_1);
+ List<TagValue> currentTagValueList = tagValueList.stream()
+ .filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) <= 0 && DateTimeUtil.compareDateDiff(endTime, x.getDataTime()) > 0).collect(Collectors.toList());
+ List<TagValue> currentATagValueList = currentTagValueList.stream()
+ .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith(CommonConst.A_PHASE)).collect(Collectors.toList());
+ List<TagValue> currentBTagValueList = currentTagValueList.stream()
+ .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith(CommonConst.B_PHASE)).collect(Collectors.toList());
+ List<TagValue> currentCTagValueList = currentTagValueList.stream()
+ .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith(CommonConst.C_PHASE)).collect(Collectors.toList());
+ TagValue tagValueA = currentATagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null);
+ TagValue tagValueB = currentBTagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null);
+ TagValue tagValueC = currentCTagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null);
+ Double valueA = null, valueB = null, valueC = null;
+ if (ObjectUtil.isNotEmpty(tagValueA)) {
+ valueA = tagValueA.getValue();
+ temp.setValueA(String.valueOf(DoubleUtil.formatDouble(tagValueA.getValue())));
+ } else {
+ temp.setValueA(CommonConst.DOUBLE_MINUS_SIGN);
+ }
+ if (!ObjectUtil.isEmpty(tagValueB)) {
+ valueB = tagValueB.getValue();
+ temp.setValueB(String.valueOf(DoubleUtil.formatDouble(tagValueB.getValue())));
+ } else {
+ temp.setValueB(CommonConst.DOUBLE_MINUS_SIGN);
+ }
+ if (!ObjectUtil.isEmpty(tagValueC)) {
+ valueC = tagValueC.getValue();
+ temp.setValueC(String.valueOf(DoubleUtil.formatDouble(tagValueC.getValue())));
+ } else {
+ temp.setValueC(CommonConst.DOUBLE_MINUS_SIGN);
+ }
+ Double value = calcUnbalanceValue(valueA, valueB, valueC);
+ if (ObjectUtil.isEmpty(value)) {
+ return;
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || CommonConst.MIN_INIT_VALUE == tempModel.getMin()) {
+ tempModel.setMin(value);
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMax()) || value > tempModel.getMax()) {
+ tempModel.setMax(DoubleUtil.formatDouble(value));
+ if (!ObjectUtil.isEmpty(tagValueA)) {
+ tempModel.setMaxTime(tagValueA.getDataTime());
+ }
+ tempModel.setValueMaxA(DoubleUtil.formatDouble(valueA));
+ tempModel.setValueMaxB(DoubleUtil.formatDouble(valueB));
+ tempModel.setValueMaxC(DoubleUtil.formatDouble(valueC));
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || value <= tempModel.getMin()) {
+ tempModel.setMin(DoubleUtil.formatDouble(value));
+ tempModel.setValueMinA(DoubleUtil.formatDouble(valueA));
+ tempModel.setValueMinB(DoubleUtil.formatDouble(valueB));
+ tempModel.setValueMinC(DoubleUtil.formatDouble(valueC));
+ if (!ObjectUtil.isEmpty(tagValueA)) {
+ tempModel.setMinTime(tagValueA.getDataTime());
+ }
+ }
+ }
+
+ /**
+ * 璁$畻涓夌浉涓嶅钩琛℃瀬鍊�
+ *
+ * @param valueA
+ * @param valueB
+ * @param valueC
+ * @return
+ */
+ private Double calcUnbalanceValue(Double valueA, Double valueB, Double valueC) {
+ /**
+ * 1銆佽绠椾笁鐩稿钩鍧囩數娴侊紝A/B/C涓夌浉鐢垫祦鐩稿姞闄や互3
+ * 2銆� MAX锛堢浉鐢垫祦-涓夌浉骞冲潎鐢垫祦锛�/涓夌浉骞冲潎鐢垫祦锛�
+ * 姣斿涓夌浉鐢垫祦鍒嗗埆涓篒A=9A IB=8A IC=4A锛屽垯涓夌浉骞冲潎鐢垫祦涓�7A锛岀浉鐢垫祦-涓夌浉骞冲潎鐢垫祦鍒嗗埆涓�2A 1A 3A锛屽彇宸�兼渶澶ч偅涓紝鏁匨AX锛堢浉鐢垫祦-涓夌浉骞冲潎鐢垫祦锛�=3A锛屾墍浠ヤ笁鐩哥數娴佷笉骞宠 搴�=3/7銆�
+ */
+ Double result = null;
+ Double sum = null;
+ if (ObjectUtil.isNotNull(valueA)) {
+ sum = valueA;
+ }
+ if (ObjectUtil.isNotNull(valueB)) {
+ sum += valueB;
+ }
+ if (ObjectUtil.isNotNull(valueC)) {
+ sum += valueC;
+ }
+ if (ObjectUtil.isNotNull(sum)) {
+ double avg = sum / CommonConst.DIGIT_3;
+ double diff1 = 0, diff2 = 0, diff3 = 0;
+ if (ObjectUtil.isNotNull(valueA)) {
+ diff1 = Math.abs(valueA - avg);
+ }
+ if (ObjectUtil.isNotNull(valueB)) {
+ diff2 = Math.abs(valueB - avg);
+ }
+ if (ObjectUtil.isNotNull(valueC)) {
+ diff3 = Math.abs(valueC - avg);
+ }
+ double max = diff1;
+ if (diff2 > max) {
+ max = diff2;
+ }
+ if (diff3 > max) {
+ max = diff3;
+ }
+ if (avg != CommonConst.DIGIT_DOUBLE_0) {
+ result = max * CommonConst.DIGIT_DOUBLE_100 / avg;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 鑾峰彇瀵瑰簲鐨勭粨鏉熸椂闂�
+ *
+ * @param timeType
+ * @param date
+ * @return
+ */
+ public static Date getEndTime(String timeType, Date date) {
+ Date d1 = null;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ d1 = DateTimeUtil.addDays(date, CommonConst.DIGIT_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ d1 = DateTimeUtil.addMonths(date, CommonConst.DIGIT_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ d1 = DateTimeUtil.addYears(date, CommonConst.DIGIT_1);
+ break;
+ default:
+ break;
+ }
+ return d1;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/EnergyUnitToDeviceServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/EnergyUnitToDeviceServiceImpl.java
deleted file mode 100644
index 5df3d47..0000000
--- a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/EnergyUnitToDeviceServiceImpl.java
+++ /dev/null
@@ -1,232 +0,0 @@
-package com.zhitan.energyMonitor.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhitan.common.constant.CommonConst;
-import com.zhitan.energyMonitor.domain.EnergyUnitToDevice;
-import com.zhitan.energyMonitor.domain.vo.ListElectricityMeterVO;
-import com.zhitan.energyMonitor.domain.vo.UnitToDeviceRelationVO;
-import com.zhitan.energyMonitor.mapper.EnergyUnitToDeviceMapper;
-import com.zhitan.energyMonitor.service.IEnergyUnitToDeviceService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @Description: 鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭�
- * @Author: jeecg-boot
- * @Date: 2022-01-26
- * @Version: V1.0
- */
-@Service
-public class EnergyUnitToDeviceServiceImpl extends ServiceImpl<EnergyUnitToDeviceMapper, EnergyUnitToDevice>
- implements IEnergyUnitToDeviceService {
-
-
-// @Autowired
-// private IMeasuringInstrumentsService meterService;
-
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓id鑾峰彇绉熸埛涓嬬殑鍏朵笅鐨勪华琛ㄥ垪琛�
- *
- * @param unitId
- * @return
- */
- @Override
- public List<EnergyUnitToDevice> queryTenantUnitDeviceByUnitId(String unitId) {
-
- QueryWrapper<EnergyUnitToDevice> queryWrapper = new QueryWrapper<EnergyUnitToDevice>();
-// .eq(TableColumnConst.TABLE_COLUMN_ENERGY_UNIT_ID, unitId);
- return baseMapper.selectList(queryWrapper);
- }
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓ID鑾峰彇绉熸埛涓嬫墍鏈夋湁鏁堢殑瀹炰綋琛ㄩ泦鍚�
- *
- * @param unitId
- * @return
- */
- @Override
- public List<EnergyUnitToDevice> queryTenantEntityMeterByUnitId(String unitId) {
-
- List<EnergyUnitToDevice> unitToDeviceList = baseMapper.selectList(Wrappers.<EnergyUnitToDevice>lambdaQuery()
- .eq(EnergyUnitToDevice::getEnergyUnitId, unitId)
- );
-// if (CollectionUtils.isNotEmpty(unitToDeviceList)) {
-// List<String> meterIds = unitToDeviceList.stream().map(EnergyUnitToDevice::getId).collect(Collectors.toList());
-// // 杩囨护鍑哄疄浣撹〃
-// Integer applianceType = EquipmentInformationEnum.MEASURING_INSTRUMENT_TYPE.ENTITY.getValue();
-// List<Meter> meterList = meterService.list(Wrappers.<Meter>lambdaQuery()
-// .select(Meter::getId).in(Meter::getId, meterIds)
-// .eq(Meter::getApplianceType, applianceType)
-// );
-// List<String> newMeterIds = meterList.stream().map(Meter::getId).collect(Collectors.toList());
-// unitToDeviceList = unitToDeviceList.stream().filter(li -> newMeterIds.contains(li.getId())).collect(Collectors.toList());
-// }
- return unitToDeviceList;
- }
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓id鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitId 鐢ㄨ兘鍗曞厓id
- * @return 浠〃id闆嗗悎
- */
- @Override
-// @Cacheable(value = CacheConstant.ENERGY_UNIT_DEVICE_ID_CACHE, key = "#unitId", unless = "#result == null")
- public List<String> getEnergyUnitDeviceIdByUnitId(String unitId) {
-
- if (StringUtils.isEmpty(unitId)) {
- return Collections.emptyList();
- }
- List<EnergyUnitToDevice> energyUnitToDevices = baseMapper.selectList(Wrappers.<EnergyUnitToDevice>lambdaQuery()
- .select(EnergyUnitToDevice::getId).eq(EnergyUnitToDevice::getEnergyUnitId, unitId)
- );
- if (CollectionUtils.isEmpty(energyUnitToDevices)) {
- return Collections.emptyList();
- }
- return energyUnitToDevices.stream().map(EnergyUnitToDevice::getId).collect(Collectors.toList());
- }
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓id闆嗗悎鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitIds 鐢ㄨ兘鍗曞厓id
- */
- @Override
- public List<String> getEnergyUnitDeviceIdByUnitIds(List<String> unitIds) {
- if (CollectionUtils.isEmpty(unitIds)) {
- return Collections.emptyList();
- }
- List<String> deviceIdList = new ArrayList<>();
- for (String unitId : unitIds) {
- List<String> unitDeviceIdByUnitId = this.getEnergyUnitDeviceIdByUnitId(unitId);
- if (CollectionUtils.isNotEmpty(unitDeviceIdByUnitId)) {
- deviceIdList.addAll(unitDeviceIdByUnitId);
- }
- }
- return deviceIdList;
- }
-
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓id闆嗗悎+鑳芥簮绫诲瀷鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitIds 鐢ㄨ兘鍗曞厓id闆嗗悎
- * @return
- */
- @Override
- public List<String> getDeviceIdByUnitIds(List<String> unitIds) {
- if (CollectionUtils.isEmpty(unitIds)) {
- return Collections.emptyList();
- }
-
- return baseMapper.listDeviceByTenantIds(unitIds);
- }
-
- /**
- * 鏇存柊鑳藉崟鍏僫d鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitId 鐢ㄨ兘鍗曞厓id
- * @return 浠〃id闆嗗悎
- */
- @Override
-// @CachePut(value = CacheConstant.ENERGY_UNIT_DEVICE_ID_CACHE, key = "#unitId", unless = "#result == null")
- public List<String> updateEnergyUnitDeviceIdByUnitId(String unitId) {
-
- if (StringUtils.isEmpty(unitId)) {
- return Collections.emptyList();
- }
- List<EnergyUnitToDevice> energyUnitToDevices = baseMapper.selectList(Wrappers.<EnergyUnitToDevice>lambdaQuery()
- .select(EnergyUnitToDevice::getId).eq(EnergyUnitToDevice::getEnergyUnitId, unitId)
- );
- if (CollectionUtils.isEmpty(energyUnitToDevices)) {
- return Collections.emptyList();
- }
- return energyUnitToDevices.stream().map(EnergyUnitToDevice::getId).collect(Collectors.toList());
- }
-
- /**
- * 鍒犻櫎鑳藉崟鍏僫d鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎
- *
- * @param unitId 鐢ㄨ兘鍗曞厓id
- */
- @Override
-// @CacheEvict(value = CacheConstant.ENERGY_UNIT_DEVICE_ID_CACHE, key = "#unitId")
- public void deleteEnergyUnitDeviceIdByUnitId(String unitId) {
- }
-
- @Override
- public List<ListElectricityMeterVO> listElectricityMeter(String unitId) {
-
- LambdaQueryWrapper<EnergyUnitToDevice> queryWrapper = new LambdaQueryWrapper<EnergyUnitToDevice>()
- .eq(EnergyUnitToDevice::getEnergyUnitId, unitId);
-// .eq(EnergyUnitToDevice::getDeviceType, EnergyTypeConst.ELECTRICITY);
- List<EnergyUnitToDevice> models = baseMapper.selectList(queryWrapper);
-
- List<ListElectricityMeterVO> resultList = new ArrayList<>();
- for (EnergyUnitToDevice model : models) {
- ListElectricityMeterVO temp = new ListElectricityMeterVO();
- temp.setCode(model.getId());
- temp.setLabel(model.getName());
- resultList.add(temp);
- }
- return resultList;
- }
-
- @Override
- public List<EnergyUnitToDevice> listAllMeter() {
- QueryWrapper<EnergyUnitToDevice> queryWrapper = new QueryWrapper<EnergyUnitToDevice>();
- return baseMapper.selectList(queryWrapper);
- }
-
- @Override
- public EnergyUnitToDevice getEnergyUnitToDeviceById(String unitId, String id) {
- if (StringUtils.isEmpty(id)) {
- return null;
- }
- LambdaQueryWrapper<EnergyUnitToDevice> lambdaQueryWrapper = new LambdaQueryWrapper<>();
- lambdaQueryWrapper.eq(EnergyUnitToDevice::getEnergyUnitId, unitId);
- lambdaQueryWrapper.eq(EnergyUnitToDevice::getId, id);
- List<EnergyUnitToDevice> energyUnitToDevices = baseMapper.selectList(lambdaQueryWrapper);
- if (CollectionUtils.isNotEmpty(energyUnitToDevices)) {
- return energyUnitToDevices.get(CommonConst.DIGIT_0);
- }
- return null;
- }
-
- /**
- * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ涓庣敤鑳界殑鍏崇郴
- *
- * @param unitIds
- * @return
- */
- @Override
- public List<UnitToDeviceRelationVO> listDeviceByUnitIds(List<String> unitIds) {
- List<UnitToDeviceRelationVO> relationList = new ArrayList<>();
- if (CollectionUtils.isEmpty(unitIds)) {
- return relationList;
- }
- List<EnergyUnitToDevice> unitToDeviceList = baseMapper.selectList(Wrappers.<EnergyUnitToDevice>lambdaQuery()
- .select(EnergyUnitToDevice::getId, EnergyUnitToDevice::getEnergyUnitId, EnergyUnitToDevice::getName)
- .in(EnergyUnitToDevice::getEnergyUnitId, unitIds)
- );
- if (CollectionUtils.isNotEmpty(unitToDeviceList)) {
- unitToDeviceList.forEach(li -> {
- UnitToDeviceRelationVO vo = new UnitToDeviceRelationVO();
- vo.setDeviceId(li.getId());
- vo.setUnitId(li.getEnergyUnitId());
- vo.setDeviceName(li.getName());
- relationList.add(vo);
- });
- }
- return relationList;
- }
-}
diff --git a/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
index 201c59f..d7ac636 100644
--- a/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
@@ -66,10 +66,13 @@
@Override
public List<HomeEnergyStatisticsVO> energyConsumptionSummation(String timeType, String modelcode) {
Date currentTime = new Date();
-// Date currentTime = DateUtil.parseDateTime("2023-04-11 00:00:00");
DateTime tongbiTime = DateUtil.offsetMonth(currentTime, -12);
DateTime huanbiTime = DateUtil.offsetMonth(currentTime, -1);
+ if(TimeType.DAY.name().equals( timeType)){
+ huanbiTime = DateUtil.offsetDay(currentTime, -1);
+ }
+
final List<HomeEnergyStatisticsVO> current = getEnergyTotalByTime(timeType, modelcode, currentTime);
final List<HomeEnergyStatisticsVO> tongbi = getEnergyTotalByTime(timeType, modelcode, tongbiTime);
final List<HomeEnergyStatisticsVO> huanbi = getEnergyTotalByTime(timeType, modelcode, huanbiTime);
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java
index aa59f95..c9af73f 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java
@@ -75,18 +75,21 @@
@ApiModelProperty(value = "琛ㄨid")
private String meterId;
+
@ApiModelProperty(value = "椤哄簭鍙�")
@Excel(name = "椤哄簭鍙�")
private int orderNum;
@ApiModelProperty(value = "")
private String equipment;
+
@ApiModelProperty(value = "id")
private String energyId;
@Transient
@TableField(exist = false)
private String meterName;
+
public void setIndexId(String indexId) {
this.indexId = indexId;
}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java b/zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java
new file mode 100644
index 0000000..b4de1e1
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java
@@ -0,0 +1,26 @@
+package com.zhitan.model.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 妯″瀷鑺傜偣涓庢寚鏍囩殑鍏宠仈鍏崇郴(NodeIndex)瀹炰綋绫�
+ *
+ * @author makejava
+ * @since 2025-02-10 15:08:14
+ */
+@Data
+public class NodeIndex implements Serializable {
+ private static final long serialVersionUID = 386292923712960012L;
+ /**
+ * 鑺傜偣涓婚敭
+ */
+ private String nodeId;
+ /**
+ * 鎸囨爣涓婚敭
+ */
+ private String indexId;
+
+}
+
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
index 3c4928a..3c02acc 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
@@ -99,5 +99,7 @@
Page<EnergyIndex> selectEnergyIndexPage(@Param("page")Page<?> page, @Param("query") EnergyIndexQuery energyIndexQuery);
- List<EnergyIndex> getIndexByCode(@Param("code")String code, @Param("nodeId")String nodeId);
+ List<EnergyIndex> getIndexByCode(@Param("code")String code, @Param("nodeId")String nodeId);
+
+ List<EnergyIndex> getIndexByMeterIdIndexCode(@Param("meterId") String meterId, @Param("indexCode") String indexCode, @Param("nodeId") String nodeId);
}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
index 3df1018..9b6bb93 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
@@ -5,11 +5,14 @@
import com.zhitan.basicdata.domain.MeterImplement;
import com.zhitan.basicdata.domain.SysEnergy;
import com.zhitan.basicdata.domain.SysProduct;
+import com.zhitan.common.enums.TimeType;
+import com.zhitan.dataitem.domain.vo.NodeIndexValueVO;
import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.model.domain.ModelNode;
import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
import org.apache.ibatis.annotations.Param;
+import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@@ -196,4 +199,20 @@
ModelNode getFirstModeNodeInfo(String modelCode);
List<ModelNodeIndexInfor> selectIndexByNodeIds(@Param("modelCode") String modelCode,@Param("nodeIds") List<String> nodeIds);
+
+ /**
+ * 鏍规嵁鐖惰妭鐐筰d鍜岃兘婧愮被鍨嬫煡璇㈢偣浣嶄笅鐨勭疮绉噺
+ */
+ List<NodeIndexValueVO> getDataItemByParentNodeId(@Param("parentId") String parentId,
+ @Param("energyType") String energyType,
+ @Param("timeType") TimeType timeType,
+ @Param("dateTimeMap") Map<String, LocalDateTime> dateTimeMap);
+
+ /**
+ * 鏍规嵁鑺傜偣id鍜岃兘婧愮被鍨嬫煡璇㈢偣浣嶄笅鐨勭疮绉噺
+ */
+ List<NodeIndexValueVO> getDataItemByNodeId(@Param("nodeId") String nodeId,
+ @Param("energyType") String energyType,
+ @Param("timeType") TimeType timeType,
+ @Param("dateTimeMap") Map<String, LocalDateTime> dateTimeMap);
}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java
new file mode 100644
index 0000000..92808f2
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java
@@ -0,0 +1,15 @@
+package com.zhitan.model.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.model.domain.NodeIndex;
+
+/**
+ * 妯″瀷鑺傜偣涓庢寚鏍囩殑鍏宠仈鍏崇郴(NodeIndex)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2025-02-10 15:09:17
+ */
+public interface NodeIndexMapper extends BaseMapper<NodeIndex> {
+
+}
+
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
index 6807f7e..1f4c23c 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
@@ -13,107 +13,125 @@
* @author fanxinfu
* @date 2020-02-14
*/
-public interface IEnergyIndexService {
+public interface IEnergyIndexService {
- EnergyIndex getiEnergyIndexByCode(String code);
+ EnergyIndex getiEnergyIndexByCode(String code);
- /**
- * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ鐐逛綅淇℃伅
- *
- * @param meterId 璁¢噺鍣ㄥ叿id闆嗗悎
- * @return
- */
- List<EnergyIndex> listIndexByMeterIds(String nodeId,List<String> meterId);
+ /**
+ * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ鐐逛綅淇℃伅
+ *
+ * @param meterId 璁¢噺鍣ㄥ叿id闆嗗悎
+ * @return
+ */
+ List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId);
- /**
- * 鏌ヨ鎸囨爣淇℃伅
- *
- * @param indexId 鎸囨爣淇℃伅ID
- * @return 鎸囨爣淇℃伅
- */
- EnergyIndex selectEnergyIndexById(String indexId);
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅
+ *
+ * @param indexId 鎸囨爣淇℃伅ID
+ * @return 鎸囨爣淇℃伅
+ */
+ EnergyIndex selectEnergyIndexById(String indexId);
- /**
- * 鏌ヨ鎸囨爣淇℃伅
- *
- * @param indexId 鎸囨爣淇℃伅ID
- * @return 鎸囨爣淇℃伅
- */
- List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId);
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅
+ *
+ * @param indexId 鎸囨爣淇℃伅ID
+ * @return 鎸囨爣淇℃伅
+ */
+ List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId);
- /**
- * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
- *
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 鎸囨爣淇℃伅闆嗗悎
- */
- List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex);
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+ *
+ * @param energyIndex 鎸囨爣淇℃伅
+ * @return 鎸囨爣淇℃伅闆嗗悎
+ */
+ List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex);
- /**
- * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
- *
- * @param query 鎸囨爣淇℃伅
- * @return 鎸囨爣淇℃伅闆嗗悎
- */
- List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query);
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+ *
+ * @param query 鎸囨爣淇℃伅
+ * @return 鎸囨爣淇℃伅闆嗗悎
+ */
+ List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query);
- /**
- * 鏂板鎸囨爣淇℃伅
- *
- * @param nodeId
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 缁撴灉
- */
- int insertEnergyIndex(String nodeId, EnergyIndex energyIndex);
+ /**
+ * 鏂板鎸囨爣淇℃伅
+ *
+ * @param nodeId
+ * @param energyIndex 鎸囨爣淇℃伅
+ * @return 缁撴灉
+ */
+ int insertEnergyIndex(String nodeId, EnergyIndex energyIndex);
- /**
- * 淇敼鎸囨爣淇℃伅
- *
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 缁撴灉
- */
- int updateEnergyIndex(EnergyIndex energyIndex);
+ /**
+ * 淇敼鎸囨爣淇℃伅
+ *
+ * @param energyIndex 鎸囨爣淇℃伅
+ * @return 缁撴灉
+ */
+ int updateEnergyIndex(EnergyIndex energyIndex);
- /**
- * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
- *
- *
- * @param nodeId
- * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
- * @return 缁撴灉
- */
- int deleteEnergyIndexByIds(String nodeId, String[] indexIds);
+ /**
+ * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
+ *
+ * @param nodeId
+ * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
+ * @return 缁撴灉
+ */
+ int deleteEnergyIndexByIds(String nodeId, String[] indexIds);
- boolean energyIndexHasExist(String code);
+ boolean energyIndexHasExist(String code);
- boolean energyIndexHasExist(String indexId, String code);
+ boolean energyIndexHasExist(String indexId, String code);
- AjaxResult addMeterIndex(String meterId);
+ AjaxResult addMeterIndex(String meterId);
- List<EnergyIndex> getMeterIndex(String meterId);
+ List<EnergyIndex> getMeterIndex(String meterId);
- boolean modelHasConfig(String modelCode);
+ boolean modelHasConfig(String modelCode);
- List<EnergyIndex> selectCollectIndex(String deviceId);
+ List<EnergyIndex> selectCollectIndex(String deviceId);
- List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds);
+ List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds);
- List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes);
+ List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes);
- List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId);
+ List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId);
- List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter);
+ List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter);
- void removeNodeIndex(String nodeId, List<String> removeLink);
+ void removeNodeIndex(String nodeId, List<String> removeLink);
- AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport);
+ AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport);
- List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes);
+ List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes);
- Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize);
+ Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize);
- Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds,String code,
- String name,Long pageNum, Long pageSize);
+ Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds, String code,
+ String name, Long pageNum, Long pageSize);
- List<EnergyIndex> getIndexByCode(String code,String nodeId);
+ List<EnergyIndex> getIndexByCode(String code, String nodeId);
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 璁惧id
+ * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+ * @return
+ */
+ EnergyIndex getDeviceIndexByCode(String nodeId, String meterId, String indexCode);
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 璁惧id
+ * @return
+ */
+ List<EnergyIndex> listDeviceIndex(String nodeId, String meterId);
}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
index 2bb7ff0..c519c97 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
@@ -1,6 +1,7 @@
package com.zhitan.model.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.basicdata.domain.MeterImplement;
import com.zhitan.basicdata.services.IMeterImplementService;
@@ -17,6 +18,7 @@
import com.zhitan.model.service.IEnergyIndexService;
import com.zhitan.model.service.IModelNodeService;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -33,286 +35,330 @@
@Service
public class EnergyIndexServiceImpl implements IEnergyIndexService {
- @Autowired
- private EnergyIndexMapper energyIndexMapper;
- @Autowired
- private IDaqTemplateService daqTemplateService;
- @Autowired
- private IMeterImplementService meterImplementService;
- @Autowired
- private IModelNodeService modelNodeService;
+ @Autowired
+ private EnergyIndexMapper energyIndexMapper;
+ @Autowired
+ private IDaqTemplateService daqTemplateService;
+ @Autowired
+ private IMeterImplementService meterImplementService;
+ @Autowired
+ private IModelNodeService modelNodeService;
- @Autowired
- private ModelNodeMapper modelNodeMapper;
+ @Autowired
+ private ModelNodeMapper modelNodeMapper;
- @Override
- public EnergyIndex getiEnergyIndexByCode(String code) {
- return energyIndexMapper.getiEnergyIndexByCode(code);
- }
-
- @Override
- public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) {
- return energyIndexMapper.listIndexByMeterIds(nodeId,meterId);
- }
-
- /**
- * 鏌ヨ鎸囨爣淇℃伅
- *
- * @param indexId 鎸囨爣淇℃伅ID
- * @return 鎸囨爣淇℃伅
- */
- @Override
- public EnergyIndex selectEnergyIndexById(String indexId) {
- return energyIndexMapper.selectEnergyIndexById(indexId);
- }
-
- @Override
- public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) {
- if (CollectionUtils.isEmpty(indexId)) {
- return Collections.emptyList();
- }
- return energyIndexMapper.selectEnergyIndexByIds(indexId);
- }
-
- @Override
- public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) {
- return energyIndexMapper.selectEnergyIndexList(energyIndex);
- }
-
- /**
- * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
- *
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 鎸囨爣淇℃伅
- */
- @Override
- public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) {
- return energyIndexMapper.selectEnergyIndex(query);
- }
-
- /**
- * 鏂板鎸囨爣淇℃伅
- *
- * @param nodeId
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 缁撴灉
- */
- @Override
- public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) {
- energyIndex.setNodeId(nodeId);
- energyIndexMapper.insertEnergyIndex( energyIndex);
- return energyIndexMapper.insertNodeIndex(nodeId,energyIndex.getIndexId());
- }
-
- /**
- * 淇敼鎸囨爣淇℃伅
- *
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 缁撴灉
- */
- @Override
- public int updateEnergyIndex(EnergyIndex energyIndex) {
- return energyIndexMapper.updateEnergyIndex(energyIndex);
- }
-
- /**
- * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
- *
- * @param nodeId
- * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
- * @return 缁撴灉
- */
- @Override
- public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) {
- return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds);
- }
-
- @Override
- public boolean energyIndexHasExist(String code) {
- int count = energyIndexMapper.energyIndexHasExist(code);
- return count > 0;
- }
-
- @Override
- public boolean energyIndexHasExist(String indexId, String code) {
- int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code);
- return count > 0;
- }
-
- @Override
- public AjaxResult addMeterIndex(String meterId) {
- MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId);
- if (meterImplement == null) {
- return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�");
+ @Override
+ public EnergyIndex getiEnergyIndexByCode(String code) {
+ return energyIndexMapper.getiEnergyIndexByCode(code);
}
- DaqTemplate query = new DaqTemplate();
- query.setDeviceType(meterImplement.getMeterType());
- List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query);
- if (daqTemplates.isEmpty()) {
- return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒");
+ @Override
+ public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) {
+ return energyIndexMapper.listIndexByMeterIds(nodeId, meterId);
}
- List<EnergyIndex> energyIndices = new ArrayList<>();
- daqTemplates.forEach(daqTemplate -> {
- EnergyIndex energyIndex = new EnergyIndex();
- energyIndex.setIndexId(UUID.randomUUID().toString());
- energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode());
- energyIndex.setName(daqTemplate.getName());
- energyIndex.setUnitId(daqTemplate.getUnit());
- energyIndex.setIndexType(IndexType.COLLECT);
- energyIndex.setMeterId(meterId);
- energyIndices.add(energyIndex);
- });
-
- energyIndexMapper.deleteIndexByMeterId(meterId);
- energyIndexMapper.insertEnergyIndices(energyIndices);
- return AjaxResult.success();
- }
-
- @Override
- public List<EnergyIndex> getMeterIndex(String meterId) {
- return energyIndexMapper.getMeterIndex(meterId);
- }
-
- @Override
- public boolean modelHasConfig(String modelCode) {
- int count = energyIndexMapper.modelHasConfig(modelCode);
- return count > 0;
- }
-
- @Override
- public List<EnergyIndex> selectCollectIndex(String deviceId) {
- return energyIndexMapper.selectCollectIndex(deviceId);
- }
-
- @Override
- public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) {
- return energyIndexMapper.getEnergyIndexByIds(indexIds);
- }
-
- @Override
- public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) {
- if (indexCodes.isEmpty()) {
- return new ArrayList<>();
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅
+ *
+ * @param indexId 鎸囨爣淇℃伅ID
+ * @return 鎸囨爣淇℃伅
+ */
+ @Override
+ public EnergyIndex selectEnergyIndexById(String indexId) {
+ return energyIndexMapper.selectEnergyIndexById(indexId);
}
- return energyIndexMapper.getEnergyIndexByCodes(indexCodes);
- }
-
- @Override
- public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) {
- return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId);
- }
-
- @Override
- public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) {
- return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter);
- }
-
- @Override
- public void removeNodeIndex(String nodeId, List<String> removeLink) {
- energyIndexMapper.removeNodeIndex(nodeId, removeLink);
- }
-
- @Override
- public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) {
- List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode)
- .collect(Collectors.toList());
- List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId)
- .collect(Collectors.toList());
- List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes);
- List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes);
- Map<String, String> nodeCodeToId = modelNodes.stream()
- .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId));
- Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode)
- .collect(Collectors.toSet());
-
- List<EnergyIndex> insertData = new ArrayList<>();
- List<EnergyIndex> updateData = new ArrayList<>();
- List<String> errorNodeCode = new ArrayList<>();
- List<String> insertIndexCode = new ArrayList<>();
- AtomicBoolean existDuplicateCode = new AtomicBoolean(false);
- energyIndexList.forEach(energyIndex -> {
- if (cacheIndexCodes.contains(energyIndex.getCode())) {
- updateData.add(energyIndex);
- } else {
- String nodeCode = energyIndex.getNodeId();
- if (nodeCodeToId.containsKey(nodeCode)) {
- if (!insertIndexCode.contains(energyIndex.getCode())) {
- insertIndexCode.add(energyIndex.getCode());
- energyIndex.setIndexId(UUID.randomUUID().toString());
- energyIndex.setNodeId(nodeCodeToId.get(nodeCode));
- insertData.add(energyIndex);
- } else {
- existDuplicateCode.set(true);
- }
- } else if (!errorNodeCode.contains(nodeCode)) {
- errorNodeCode.add(nodeCode);
+ @Override
+ public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) {
+ if (CollectionUtils.isEmpty(indexId)) {
+ return Collections.emptyList();
}
- }
- });
-
- if (updateSupport && !updateData.isEmpty()) {
- updateData.forEach(energyIndexMapper::updateEnergyIndex);
+ return energyIndexMapper.selectEnergyIndexByIds(indexId);
}
- if (!insertData.isEmpty()) {
- energyIndexMapper.saveEnergyIndex(insertData);
+ @Override
+ public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) {
+ return energyIndexMapper.selectEnergyIndexList(energyIndex);
}
- String errMsg = "";
- if (existDuplicateCode.get()) {
- errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒";
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+ *
+ * @return 鎸囨爣淇℃伅
+ */
+ @Override
+ public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) {
+ return energyIndexMapper.selectEnergyIndex(query);
}
- if (!errorNodeCode.isEmpty()) {
- errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒";
+ /**
+ * 鏂板鎸囨爣淇℃伅
+ *
+ * @param nodeId
+ * @param energyIndex 鎸囨爣淇℃伅
+ * @return 缁撴灉
+ */
+ @Override
+ public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) {
+ energyIndex.setNodeId(nodeId);
+ energyIndexMapper.insertEnergyIndex(energyIndex);
+ return energyIndexMapper.insertNodeIndex(nodeId, energyIndex.getIndexId());
}
- if (StringUtils.isNotBlank(errMsg)) {
- return AjaxResult.error(errMsg);
- }
- return AjaxResult.success("瀵煎叆鎴愬姛锛�");
- }
-
- @Override
- public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) {
- if (indexCodes.isEmpty()) {
- return new ArrayList<>();
+ /**
+ * 淇敼鎸囨爣淇℃伅
+ *
+ * @param energyIndex 鎸囨爣淇℃伅
+ * @return 缁撴灉
+ */
+ @Override
+ public int updateEnergyIndex(EnergyIndex energyIndex) {
+ return energyIndexMapper.updateEnergyIndex(energyIndex);
}
- return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes);
- }
+ /**
+ * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
+ *
+ * @param nodeId
+ * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
+ * @return 缁撴灉
+ */
+ @Override
+ public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) {
+ return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds);
+ }
- /**
- * @description: hmj 鍒嗛〉鏌ヨ
- * @param query
- * @param pageNum
- * @param pageSize
- * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex>
- * @author: hmj
- * @date: 2024/10/11 23:56
- */
- @Override
- public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) {
- return energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum,pageSize),query);
- }
+ @Override
+ public boolean energyIndexHasExist(String code) {
+ int count = energyIndexMapper.energyIndexHasExist(code);
+ return count > 0;
+ }
- @Override
- public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds,String code,
- String name,Long pageNum, Long pageSize) {
- LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.in(EnergyIndex::getMeterId,meterIndexIds);
- queryWrapper.like(StringUtils.isNotEmpty(code),EnergyIndex::getCode,code);
- queryWrapper.like(StringUtils.isNotEmpty(name),EnergyIndex::getName,name);
- return energyIndexMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
- }
+ @Override
+ public boolean energyIndexHasExist(String indexId, String code) {
+ int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code);
+ return count > 0;
+ }
- @Override
- public List<EnergyIndex> getIndexByCode(String code, String nodeId) {
- List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByCode(code,nodeId);
+ @Override
+ public AjaxResult addMeterIndex(String meterId) {
+ MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId);
+ if (meterImplement == null) {
+ return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�");
+ }
- return energyIndexList;
- }
+ DaqTemplate query = new DaqTemplate();
+ query.setDeviceType(meterImplement.getMeterType());
+ List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query);
+ if (daqTemplates.isEmpty()) {
+ return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒");
+ }
+
+ List<EnergyIndex> energyIndices = new ArrayList<>();
+ daqTemplates.forEach(daqTemplate -> {
+ EnergyIndex energyIndex = new EnergyIndex();
+ energyIndex.setIndexId(UUID.randomUUID().toString());
+ energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode());
+ energyIndex.setName(daqTemplate.getName());
+ energyIndex.setUnitId(daqTemplate.getUnit());
+ energyIndex.setIndexType(IndexType.COLLECT);
+ energyIndex.setMeterId(meterId);
+ energyIndices.add(energyIndex);
+ });
+
+ energyIndexMapper.deleteIndexByMeterId(meterId);
+ energyIndexMapper.insertEnergyIndices(energyIndices);
+ return AjaxResult.success();
+ }
+
+ @Override
+ public List<EnergyIndex> getMeterIndex(String meterId) {
+ return energyIndexMapper.getMeterIndex(meterId);
+ }
+
+ @Override
+ public boolean modelHasConfig(String modelCode) {
+ int count = energyIndexMapper.modelHasConfig(modelCode);
+ return count > 0;
+ }
+
+ @Override
+ public List<EnergyIndex> selectCollectIndex(String deviceId) {
+ return energyIndexMapper.selectCollectIndex(deviceId);
+ }
+
+ @Override
+ public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) {
+ return energyIndexMapper.getEnergyIndexByIds(indexIds);
+ }
+
+ @Override
+ public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) {
+ if (indexCodes.isEmpty()) {
+ return new ArrayList<>();
+ }
+
+ return energyIndexMapper.getEnergyIndexByCodes(indexCodes);
+ }
+
+ @Override
+ public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) {
+ return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId);
+ }
+
+ @Override
+ public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) {
+ return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter);
+ }
+
+ @Override
+ public void removeNodeIndex(String nodeId, List<String> removeLink) {
+ energyIndexMapper.removeNodeIndex(nodeId, removeLink);
+ }
+
+ @Override
+ public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) {
+ List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode)
+ .collect(Collectors.toList());
+ List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId)
+ .collect(Collectors.toList());
+ List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes);
+ List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes);
+ Map<String, String> nodeCodeToId = modelNodes.stream()
+ .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId));
+ Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode)
+ .collect(Collectors.toSet());
+
+ List<EnergyIndex> insertData = new ArrayList<>();
+ List<EnergyIndex> updateData = new ArrayList<>();
+ List<String> errorNodeCode = new ArrayList<>();
+ List<String> insertIndexCode = new ArrayList<>();
+ AtomicBoolean existDuplicateCode = new AtomicBoolean(false);
+ energyIndexList.forEach(energyIndex -> {
+ if (cacheIndexCodes.contains(energyIndex.getCode())) {
+ updateData.add(energyIndex);
+ } else {
+ String nodeCode = energyIndex.getNodeId();
+ if (nodeCodeToId.containsKey(nodeCode)) {
+ if (!insertIndexCode.contains(energyIndex.getCode())) {
+ insertIndexCode.add(energyIndex.getCode());
+ energyIndex.setIndexId(UUID.randomUUID().toString());
+ energyIndex.setNodeId(nodeCodeToId.get(nodeCode));
+ insertData.add(energyIndex);
+ } else {
+ existDuplicateCode.set(true);
+ }
+ } else if (!errorNodeCode.contains(nodeCode)) {
+ errorNodeCode.add(nodeCode);
+ }
+ }
+ });
+
+ if (updateSupport && !updateData.isEmpty()) {
+ updateData.forEach(energyIndexMapper::updateEnergyIndex);
+ }
+
+ if (!insertData.isEmpty()) {
+ energyIndexMapper.saveEnergyIndex(insertData);
+ }
+
+ String errMsg = "";
+ if (existDuplicateCode.get()) {
+ errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒";
+ }
+
+ if (!errorNodeCode.isEmpty()) {
+ errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒";
+ }
+
+ if (StringUtils.isNotBlank(errMsg)) {
+ return AjaxResult.error(errMsg);
+ }
+ return AjaxResult.success("瀵煎叆鎴愬姛锛�");
+ }
+
+ @Override
+ public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) {
+ if (indexCodes.isEmpty()) {
+ return new ArrayList<>();
+ }
+
+ return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes);
+ }
+
+ /**
+ * @param query
+ * @param pageNum
+ * @param pageSize
+ * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex>
+ * @description: hmj 鍒嗛〉鏌ヨ
+ * @author: hmj
+ * @date: 2024/10/11 23:56
+ */
+ @Override
+ public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) {
+ return energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum, pageSize), query);
+ }
+
+ @Override
+ public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds, String code,
+ String name, Long pageNum, Long pageSize) {
+ LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.in(EnergyIndex::getMeterId, meterIndexIds);
+ queryWrapper.like(StringUtils.isNotEmpty(code), EnergyIndex::getCode, code);
+ queryWrapper.like(StringUtils.isNotEmpty(name), EnergyIndex::getName, name);
+ return energyIndexMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
+ }
+
+ @Override
+ public List<EnergyIndex> getIndexByCode(String code, String nodeId) {
+ List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByCode(code, nodeId);
+
+ return energyIndexList;
+ }
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 璁惧id
+ * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+ * @return
+ */
+ @Override
+ public EnergyIndex getDeviceIndexByCode(String nodeId, String meterId, String indexCode) {
+
+ List<EnergyIndex> energyIndexList = listDeviceIndexByCode(nodeId, meterId, indexCode);
+ EnergyIndex energyIndex = energyIndexList.stream().findFirst().orElse(null);
+ if (ObjectUtils.isEmpty(energyIndex)) {
+ energyIndex = new EnergyIndex();
+ }
+ return energyIndex;
+ }
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 璁惧id
+ * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+ * @return
+ */
+ public List<EnergyIndex> listDeviceIndexByCode(String nodeId, String meterId, String indexCode) {
+ List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByMeterIdIndexCode(meterId,indexCode,nodeId);
+ return energyIndexList;
+ }
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 璁惧id
+ * @return
+ */
+ @Override
+ public List<EnergyIndex> listDeviceIndex(String nodeId, String meterId) {
+ List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByMeterIdIndexCode(meterId,null,nodeId);
+ return energyIndexList;
+ }
}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java
index b11d097..98b4e01 100644
--- a/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java
@@ -38,4 +38,16 @@
List<ElectricityDataItem> getDataStatisticsDeviationAnalysis(@Param("indexIdSet") Set<String> indexIdSet,
@Param("timeType") String timeType);
+ /**
+ * 鏌ヨ鎴愭湰瓒嬪娍
+ * @param beginTime
+ * @param endTime
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param nodeId 鑺傜偣Id
+ * @param energyType 鑳芥簮绫诲瀷
+ * @return
+ */
+ List<ElectricityDataItem> getCostTrends(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
+ @Param("timeType") String timeType, @Param("nodeId") String nodeId,@Param("energyType") String energyType);
+
}
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java
index 7dca861..13c86d5 100644
--- a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java
@@ -41,6 +41,11 @@
*/
PeakValleyHourVO segmentAnalysisHour(PeakValleyDTO dto);
+ /**
+ * 灏栧嘲骞宠胺鍒嗘椂缁熻瀵煎嚭
+ * @param dto
+ * @return
+ */
List<PeakValleyHourDataVO> segmentAnalysisHourExport(PeakValleyDTO dto);
PeakValleyDayVO segmentAnalysisDayCustomize(PeakValleyDTO dto);
diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java
index 051b89b..4753201 100644
--- a/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java
@@ -134,14 +134,23 @@
List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
- List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
+ // 鏍规嵁灏忔椂鏁版嵁璁$畻澶╃殑鏁版嵁
+ List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, TimeType.HOUR.name());
electricityDataMap = dataItemList.stream()
.collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
}
while (!startTime.after(endTime)) {
- String mapKey = DateUtil.formatDateTime(startTime);
- List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
+
+ Date nextTime = DateUtil.offsetDay(startTime, 1);
+ List<ElectricityDataItem> dataItemList = new ArrayList<>();
+ for (Map.Entry<String, List<ElectricityDataItem>> entry : electricityDataMap.entrySet()) {
+ String key = entry.getKey();
+ if ((DateUtils.parseDate(key).after(startTime) || DateUtils.parseDate(key).equals(startTime)) && DateUtils.parseDate(key).before(nextTime)) {
+ List<ElectricityDataItem> list = entry.getValue();
+ dataItemList.addAll(list);
+ }
+ }
BigDecimal sharpFee = BigDecimal.ZERO;
BigDecimal sharpPower = BigDecimal.ZERO;
@@ -157,45 +166,19 @@
String electricityType = electricityDataItem.getElectricityType();
if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
-// sharpFee = sharpFee.add(electricityDataItem.getCost());
-
+ sharpFee = sharpFee.add(electricityDataItem.getCost());
sharpPower = sharpPower.add(electricityDataItem.getElectricity());
} else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
-// peakFee = peakFee.add(electricityDataItem.getCost());
+ peakFee = peakFee.add(electricityDataItem.getCost());
peakPower = peakPower.add(electricityDataItem.getElectricity());
} else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
-// flatFee = flatFee.add(electricityDataItem.getCost());
+ flatFee = flatFee.add(electricityDataItem.getCost());
flatPower = flatPower.add(electricityDataItem.getElectricity());
} else {
-// valleyFee = valleyFee.add(electricityDataItem.getCost());
+ valleyFee = valleyFee.add(electricityDataItem.getCost());
valleyPower = valleyPower.add(electricityDataItem.getElectricity());
}
}
- //2024-11-12鏂板
- CostPriceRelevancyVo voS = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.SHARP.name());
- if(voS!=null){
- sharpFee = voS.getPrice().multiply(sharpPower);
- }
- CostPriceRelevancyVo voP = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.PEAK.name());
- if(voP!=null){
- peakFee = voP.getPrice().multiply(peakPower);
- }
- CostPriceRelevancyVo voF = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.FLAT.name());
- if(voF!=null){
- flatFee = voF.getPrice().multiply(flatPower);
- }
- CostPriceRelevancyVo voV = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.VALLEY.name());
- if(voV!=null){
- valleyFee = voV.getPrice().multiply(valleyPower);
- }
-// CostPriceRelevancyVo voD = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.DEEP.name());
-// if(voV!=null){
-// DeepFee = voV.getPrice().multiply(valleyPower);
-// }
-
-
-
-
}
PeakValleyDayDataVO peakAndValleyReportVO = new PeakValleyDayDataVO(startTime, sharpFee, sharpPower,
peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
@@ -355,39 +338,19 @@
String electricityType = electricityDataItem.getElectricityType();
if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
-// sharpFee = sharpFee.add(electricityDataItem.getCost());
+ sharpFee = sharpFee.add(electricityDataItem.getCost());
sharpPower = sharpPower.add(electricityDataItem.getElectricity());
} else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
-// peakFee = peakFee.add(electricityDataItem.getCost());
+ peakFee = peakFee.add(electricityDataItem.getCost());
peakPower = peakPower.add(electricityDataItem.getElectricity());
} else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
-// flatFee = flatFee.add(electricityDataItem.getCost());
+ flatFee = flatFee.add(electricityDataItem.getCost());
flatPower = flatPower.add(electricityDataItem.getElectricity());
} else {
-// valleyFee = valleyFee.add(electricityDataItem.getCost());
+ valleyFee = valleyFee.add(electricityDataItem.getCost());
valleyPower = valleyPower.add(electricityDataItem.getElectricity());
}
}
- //2024-11-12鏂板
- CostPriceRelevancyVo voS = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.SHARP.name());
- if(voS!=null){
- sharpFee = voS.getPrice().multiply(sharpPower);
- }
- CostPriceRelevancyVo voP = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.PEAK.name());
- if(voP!=null){
- peakFee = voP.getPrice().multiply(peakPower);
- }
- CostPriceRelevancyVo voF = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.FLAT.name());
- if(voF!=null){
- flatFee = voF.getPrice().multiply(flatPower);
- }
- CostPriceRelevancyVo voV = costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.VALLEY.name());
- if(voV!=null){
- valleyFee = voV.getPrice().multiply(valleyPower);
- }
-
-
-
}
PeakValleyHourDataVO peakAndValleyReportVO = new PeakValleyHourDataVO(startTime, sharpFee, sharpPower,
peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/data/RealtimeDatabaseManager.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/data/RealtimeDatabaseManager.java
deleted file mode 100644
index f3914ff..0000000
--- a/zhitan-system/src/main/java/com/zhitan/realtimedata/data/RealtimeDatabaseManager.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package com.zhitan.realtimedata.data;
-
-import com.influxdb.client.InfluxDBClient;
-import com.influxdb.client.InfluxDBClientFactory;
-import com.influxdb.client.domain.HealthCheck;
-import com.zhitan.common.enums.CollectionModes;
-import com.zhitan.common.enums.RetrievalModes;
-import com.zhitan.realtimedata.config.RtdbConfig;
-import com.zhitan.realtimedata.domain.TagValue;
-import com.zhitan.realtimedata.service.RealtimeDatabase;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * @author 鑼冩柊瀵� 瀹炴椂鏁版嵁搴撹闂鐞�.
- */
-@Component
-public class RealtimeDatabaseManager {
-
- private final RealtimeDatabase connection;
-
- private final Logger logger = LogManager.getLogger(RealtimeDatabaseManager.class);
-
- public RealtimeDatabaseManager(RtdbConfig config) {
- connection = new VirtualRtdb();
- try {
- InfluxDBClient influxDBClient = InfluxDBClientFactory.create(config.getHost(),
- config.getToken().toCharArray(), config.getOrg(), config.getBucket());
-
- logger.error("--------------------瀹炴椂搴撹繛鎺ユ垚鍔�--------------------");
- HealthCheck health = influxDBClient.health();
- if (health.getStatus() == HealthCheck.StatusEnum.FAIL) {
- influxDBClient.close();
- }
- } catch (Exception e) {
- logger.error(e);
- }
- }
-
- public TagValue retrieve(String tagCode) {
- List<String> tagCodes = new ArrayList<>();
- tagCodes.add(tagCode);
- List<TagValue> tagValues = retrieve(tagCodes);
- if (!tagValues.isEmpty()) {
- return tagValues.get(0);
- }
-
- return null;
- }
-
- public List<TagValue> retrieve(List<String> tagCodes) {
- List<TagValue> tagValues = new ArrayList<>();
- try {
- tagValues = connection.retrieve(tagCodes);
- } catch (Exception e) {
- logger.error(e);
- }
-
- return tagValues;
- }
-
- public TagValue retrieve(String tagCode, Date dataTime, String timeCode) {
- List<String> tagCodes = new ArrayList<>();
- tagCodes.add(tagCode);
- List<TagValue> tagValues = retrieve(tagCodes, dataTime, timeCode);
- if (!tagValues.isEmpty()) {
- return tagValues.get(0);
- }
-
- return null;
- }
-
- public List<TagValue> retrieve(List<String> tagCodes, Date dataTime, String timeCode) {
- List<TagValue> tagValues = new ArrayList<>();
- try {
- List<TagValue> tmp = connection.retrieve(tagCodes, dataTime, timeCode);
- for (String tagCode : tagCodes) {
- Optional<TagValue> tagValue = tmp.stream()
- .filter(f -> StringUtils.equalsIgnoreCase(f.getTagCode(), tagCode)).findAny();
- TagValue value;
- if (!tagValue.isPresent()) {
- value = new TagValue();
- value.setTagCode(tagCode);
- value.setDataTime(dataTime);
- } else {
- value = tagValue.get();
- }
-
- tagValues.add(value);
- }
- } catch (Exception e1) {
- logger.error(e1);
- }
-
- return tagValues;
- }
-
- public List<TagValue> retrieve(String tagCode, Date beginTime, Date endTime,
- RetrievalModes retrievalModes, int pointCount) {
- List<String> tagCodes = new ArrayList<>();
- tagCodes.add(tagCode);
- return retrieve(tagCodes, beginTime, endTime, retrievalModes, pointCount);
- }
-
- public List<TagValue> retrieve(List<String> tagCodes, Date beginTime, Date endTime,
- RetrievalModes retrievalModes, int pointCount) {
- List<TagValue> tagValues = new ArrayList<>();
- try {
- tagValues = connection.retrieve(tagCodes, beginTime, endTime, retrievalModes, pointCount);
- } catch (Exception e1) {
- logger.error(e1);
- }
-
- return tagValues;
- }
-
- public TagValue statistics(String tagCode, Date beginTime, Date endTime,
- CollectionModes collectionModes) {
- List<String> tagCodes = new ArrayList<>();
- tagCodes.add(tagCode);
- List<TagValue> tagValues = statistics(tagCodes, beginTime, endTime, collectionModes);
- if (!tagValues.isEmpty()) {
- return tagValues.get(0);
- }
-
- return null;
- }
-
- public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime,
- CollectionModes collectionModes) {
- List<TagValue> tagValues = new ArrayList<>();
- try {
- tagValues = connection.statistics(tagCodes, beginTime, endTime, collectionModes);
- } catch (Exception e1) {
- logger.error(e1);
- }
-
- return tagValues;
- }
-
- public void storeData(List<TagValue> tagValues) {
- try {
- connection.storeData(tagValues);
- } catch (Exception e1) {
- logger.error(e1);
- }
- }
-
- public void insertData(List<TagValue> tagValues) {
- try {
- connection.insertData(tagValues);
- } catch (Exception e1) {
- logger.error(e1);
- }
- }
-}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java
index e5127f0..08eac67 100644
--- a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/DataItem.java
@@ -17,8 +17,8 @@
@ApiModelProperty(value = "鎸囨爣id")
private String indexId;
- @ApiModelProperty(value = "鎸囨爣搴搃d")
- private String indexStorageId;
+ @ApiModelProperty(value = "鑳芥簮鍝佺")
+ private String energyType;
@ApiModelProperty(value = "鎸囨爣code")
private String indexCode;
@ApiModelProperty(value = "鎸囨爣鍚嶇О")
@@ -54,12 +54,12 @@
this.indexId = indexId;
}
- public String getIndexStorageId() {
- return indexStorageId;
+ public String getEnergyType() {
+ return energyType;
}
- public void setIndexStorageId(String indexStorageId) {
- this.indexStorageId = indexStorageId;
+ public void setEnergyType(String energyType) {
+ this.energyType = energyType;
}
public String getIndexCode() {
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java
index dc45bc7..0f32c0f 100644
--- a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java
@@ -2,6 +2,7 @@
import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.GroupTimeType;
import com.zhitan.common.enums.RetrievalModes;
import com.zhitan.realtimedata.domain.TagValue;
@@ -94,6 +95,18 @@
CollectionModes collectionModes);
/**
+ * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鎸夌収鏌愪竴鏃堕棿鍛ㄦ湡鐨勭粺璁℃暟鎹�.
+ *
+ * @param tagCodes 娴嬬偣缂栧彿闆嗗悎
+ * @param beginTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿,鍖呮嫭缁撴潫鏃堕棿
+ * @param modes 缁熻绫诲瀷
+ * @param timeType 鍒嗙粍鏃堕棿鍛ㄦ湡锛堝垎銆佹椂銆佸ぉ锛�
+ * @return 娴嬬偣缁熻缁撴灉
+ */
+ List<TagValue> statistics(String tagCodes, Date beginTime, Date endTime, CollectionModes modes, GroupTimeType timeType);
+
+ /**
* 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�.
*
* @param tagValues 娴嬬偣瀹炴椂鏁版嵁
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java
index 7128652..a06574d 100644
--- a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java
@@ -1,18 +1,20 @@
package com.zhitan.realtimedata.service.impl;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Lists;
import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.GroupTimeType;
import com.zhitan.common.enums.RetrievalModes;
-import com.zhitan.realtimedata.data.RealtimeDatabaseManager;
import com.zhitan.realtimedata.data.influxdb.InfluxDBRepository;
import com.zhitan.realtimedata.domain.TagValue;
import com.zhitan.realtimedata.service.RealtimeDatabaseService;
import org.apache.commons.collections4.CollectionUtils;
+import org.joda.time.DateTime;
+import org.joda.time.Seconds;
import org.springframework.stereotype.Service;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
/**
* 瀹炴椂鏁版嵁搴撳彇鏁版湇鍔″疄鐜扮被.
@@ -22,11 +24,10 @@
private final InfluxDBRepository repository;
- private final RealtimeDatabaseManager realtimeDatabaseManager;
- public RealtimeDatabaseServiceImpl(InfluxDBRepository repository, RealtimeDatabaseManager realtimeDatabaseManager) {
+ public RealtimeDatabaseServiceImpl(InfluxDBRepository repository
+ ) {
this.repository = repository;
- this.realtimeDatabaseManager = realtimeDatabaseManager;
}
/**
@@ -114,7 +115,7 @@
@Override
public TagValue statistics(String tagCode, Date beginTime, Date endTime, CollectionModes collectionModes) {
List<TagValue> tagValues = repository.statistics(Collections.singletonList(tagCode), beginTime, endTime, collectionModes);
- return CollectionUtils.isEmpty(tagValues) ? tagValues.get(0) : null;
+ return CollectionUtils.isNotEmpty(tagValues) ? tagValues.get(0) : null;
}
/**
@@ -129,6 +130,20 @@
@Override
public List<TagValue> statistics(List<String> tagCodes, Date beginTime, Date endTime, CollectionModes collectionModes) {
return repository.statistics(tagCodes, beginTime, endTime, collectionModes);
+ }
+
+ @Override
+ public List<TagValue> statistics(String tagCodes, Date beginTime, Date endTime, CollectionModes modes, GroupTimeType timeType) {
+ try {
+ List<String> tagCodeList = Arrays.asList(tagCodes.split(StrUtil.COMMA).clone());
+ List<TagValue> tagValues = repository.statistics(tagCodeList, beginTime, endTime, modes, timeType);
+ if (ObjectUtil.isEmpty(tagValues)) {
+ tagValues = new ArrayList<>();
+ }
+ return tagValues;
+ } catch (Exception e) {
+ return new ArrayList<>();
+ }
}
/**
@@ -154,6 +169,14 @@
@Override
public List<TagValue> retrieve(String tagCode, Date beginTime, Date endTime,
RetrievalModes retrievalModes, int pointCount) {
- return realtimeDatabaseManager.retrieve(tagCode, beginTime, endTime, retrievalModes, pointCount);
+ repository.getHistoryData(Collections.singletonList(tagCode), beginTime, endTime, pointCount);
+ pointCount = retrievalModes == RetrievalModes.Full ? 200 : pointCount;
+ int span =
+ Seconds.secondsBetween(new DateTime(beginTime), new DateTime(endTime)).getSeconds();
+ int interval = span / pointCount;
+ List<String> tagCodes = new ArrayList<>();
+ tagCodes.add(tagCode);
+ List<TagValue> historyData = repository.getHistoryData(tagCodes, beginTime, endTime, interval);
+ return historyData;
}
}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/common/DateTimeUtil.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/common/DateTimeUtil.java
new file mode 100644
index 0000000..d38bfce
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/common/DateTimeUtil.java
@@ -0,0 +1,750 @@
+package com.zhitan.statisticalAnalysis.common;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.utils.IntegerUtil;
+import com.zhitan.common.utils.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * @Description: 鏃堕棿宸ュ叿绫�
+ * @author: yxw
+ * @date: 2022骞�02鏈�02鏃� 12:23
+ */
+@Slf4j
+public class DateTimeUtil {
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡
+ */
+ public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss";
+ /**
+ * 鏍煎紡鍖栨棩鏈熷埌鍒嗛挓
+ */
+ public static final String COMMON_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm";
+ /**
+ * 鏃ユ湡鏍煎紡 - 灏忔椂:鍒嗛挓
+ */
+ public static final String COMMON_PATTERN_HOUR_MINUTE = "HH:mm";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 骞翠唤
+ */
+ public static final String COMMON_PATTERN_YEAR = "yyyy";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏌愪竴骞�,
+ */
+ public static final String COMMON_PATTERN_CERTAIN_YEAR = "yy";
+
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_MONTH = "yyyyMM";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH = "yyyy-MM";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH_WORD = "yyyy-MM鏈�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH_ZH = "yyyy骞碝M鏈�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_DAY = "yyyyMMdd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_TO_DAY = "yyyy-MM-dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_TO_DAY_WORD = "yyyy-MM-dd鏃�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堟棩
+ */
+ public static final String COMMON_PATTERN_MONTH_DAY = "MM-dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶╂煇涓�澶�,
+ */
+ public static final String COMMON_PATTERN_DAY_OF_MONTH = "dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_HOUR = "yyyyMMddHH";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR = "yyyy-MM-dd HH";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR_WORD = "yyyy-MM-dd HH鏃�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR_TEXT = "yyyy骞碝M鏈坉d鏃� HH鏃�";
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿,鏃堕棿鏍煎紡锛歽yyy-MM-dd HH:mm:ss
+ *
+ * @return
+ */
+ public static String getNowDateTime() {
+ return getNowDateTime(COMMON_PATTERN);
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿
+ *
+ * @param pattern 鏃堕棿鏍煎紡
+ * @return
+ */
+ public static String getNowDateTime(String pattern) {
+ //璁剧疆鏃ユ湡鏍煎紡
+ SimpleDateFormat df = new SimpleDateFormat(pattern);
+ String dateTime = df.format(new Date());
+ return dateTime;
+ }
+
+ /**
+ * 鑾峰彇浠婂勾鐨勫勾浠藉��
+ *
+ * @return
+ */
+ public static String getNowYear() {
+ return getNowDateTime(COMMON_PATTERN_YEAR);
+ }
+
+ /**
+ * 鑾峰彇浠婂勾鐨勬湀浠藉��
+ *
+ * @return
+ */
+ public static String getNowMonth() {
+ return getNowDateTime(COMMON_PATTERN_MONTH);
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愭椂闂寸被鍨�,榛樿鏍煎紡锛歽yyy-MM-dd HH:mm:ss
+ *
+ * @param dateTimeStr
+ * @return
+ */
+ public static Date toDateTime(String dateTimeStr) {
+ DateTime dt = null;
+ try {
+ dt = DateTime.of(dateTimeStr, COMMON_PATTERN);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愭椂闂寸被鍨�
+ *
+ * @param dateTimeStr
+ * @return
+ */
+ public static Date toDateTime(String dateTimeStr, String pattern) {
+ DateTime dt = null;
+ try {
+ dt = DateTime.of(dateTimeStr, pattern);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愮壒瀹氭牸寮忕殑鏃堕棿瀛楃涓茬被鍨�
+ *
+ * @param dateTimeStr 鏃堕棿瀛楃涓�
+ * @param sourcePattern 瀛楃涓叉椂闂存牸寮�
+ * @param toPattern 瑕佽浆鎴愪粈涔堟牸寮忕殑鏃堕棿
+ * @return
+ */
+ public static String toDateTimeStr(String dateTimeStr, String sourcePattern, String toPattern) {
+ String str = CommonConst.EMPTY;
+ try {
+ DateTime dt = DateTime.of(dateTimeStr, sourcePattern);
+ str = getDateTime(dt, toPattern);
+ } catch (Exception e) {
+
+ }
+ return str;
+ }
+
+ /**
+ * 鏃堕棿杞垚鎸囧畾鐨勬牸寮�
+ *
+ * @param pattern 鏃堕棿鏍煎紡
+ * @return
+ */
+ public static String getDateTime(Date dt, String pattern) {
+ //璁剧疆鏃ユ湡鏍煎紡
+ SimpleDateFormat df = new SimpleDateFormat(pattern);
+ return df.format(dt);
+ }
+
+ /**
+ * 鏃堕棿杞垚yyyy-MM-dd HH:mm:ss鏍煎紡
+ *
+ * @return
+ */
+ public static String getDateTime(Date dt) {
+ if (ObjectUtil.isEmpty(dt)) {
+ return CommonConst.EMPTY;
+ }
+ return getDateTime(dt, COMMON_PATTERN);
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿鎵�灞炴湀浠界殑鏈�鍚庝竴澶�
+ *
+ * @return
+ */
+ public static int getDateTimeLastDay(Date dt) {
+ String month = getMonth(dt);
+ String firstDate = month + "01";
+ Date nextMonthFirstDate = addMonths(toDateTime(firstDate, COMMON_PATTERN_DAY), CommonConst.DIGIT_1);
+ Date currentMonthLastDate = addDays(nextMonthFirstDate, CommonConst.DIGIT_MINUS_1);
+ int day = IntegerUtil.toInt(getDateTime(currentMonthLastDate, COMMON_PATTERN_DAY_OF_MONTH));
+ return day;
+ }
+
+ /**
+ * 鑾峰彇骞翠唤鍊�
+ *
+ * @return
+ */
+ public static String getYear(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_YEAR);
+ }
+
+ /**
+ * 鑾峰彇鏈堜唤鍊� 202202
+ *
+ * @return
+ */
+ public static String getMonth(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_MONTH);
+ }
+
+ /**
+ * 鑾峰彇澶�,鏍煎紡锛歽yyyMMdd
+ *
+ * @return
+ */
+ public static String toDay(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_DAY);
+ }
+
+ /**
+ * 鑾峰彇灏忔椂:yyyyMMddHH
+ *
+ * @return
+ */
+ public static String toHour(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_HOUR);
+ }
+
+ /**
+ * 杞垚瀛楃涓茬被鍨嬪��
+ *
+ * @return
+ */
+ public static String toString(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫勾鏁�
+ *
+ * @param dateTime
+ * @param years
+ * @return
+ */
+ public static Date addYears(Date dateTime, int years) {
+ return calcDate(dateTime, years, Calendar.YEAR);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勬湀鏁�
+ *
+ * @param dateTime
+ * @param months
+ * @return
+ */
+ public static Date addMonths(Date dateTime, int months) {
+ return calcDate(dateTime, months, Calendar.MONTH);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫ぉ鏁�
+ *
+ * @param dateTime
+ * @param days
+ * @return
+ */
+ public static Date addDays(Date dateTime, int days) {
+ return calcDate(dateTime, days, Calendar.DATE);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟
+ *
+ * @param dateTime
+ * @param hours
+ * @return
+ */
+ public static Date addHours(Date dateTime, int hours) {
+ return calcDate(dateTime, hours, Calendar.HOUR);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫垎閽熸暟
+ *
+ * @param dateTime
+ * @param minutes
+ * @return
+ */
+ public static Date addMinutes(Date dateTime, int minutes) {
+ return calcDate(dateTime, minutes, Calendar.MINUTE);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟
+ *
+ * @param dateTime
+ * @param seconds
+ * @return
+ */
+ public static Date addSeconds(Date dateTime, int seconds) {
+ return calcDate(dateTime, seconds, Calendar.SECOND);
+ }
+
+ /**
+ * 璁$畻鏃ユ湡閫氱敤鏂规硶
+ *
+ * @param dateTime
+ * @param addValue
+ * @param calendarType 璁$畻绫诲瀷锛欳alendar.YEAR锛孋alendar.MONTH,Calendar.DAY
+ * @return
+ */
+ private static Date calcDate(Date dateTime, int addValue, int calendarType) {
+ Date dt = null;
+ try {
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(dateTime);
+ //鎶婃棩鏈熷線鍚庡鍔犱竴骞达紝鏁存暟寰�鍚庢帹锛岃礋鏁板線鍓嶇Щ
+ calendar.add(calendarType, addValue);
+ // 鑾峰彇鐩稿姞鎴栬�呯浉鍑忎箣鍚庣殑鏃堕棿鍊�
+ Date tempDt = calendar.getTime();
+ // 鎶婃椂闂磋浆鎴愭墍闇�瑕佺殑鏍煎紡
+ String temp = getDateTime(tempDt, COMMON_PATTERN);
+ dt = toDateTime(temp);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋澶╃殑绗嚑涓皬鏃�
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getHourOfDay(Date dateTime) {
+ return getDateValue(dateTime, Calendar.HOUR_OF_DAY);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋鏈堢殑绗嚑澶�
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getDayOfMonth(Date dateTime) {
+ return getDateValue(dateTime, Calendar.DAY_OF_MONTH);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋鍛ㄧ殑绗嚑澶�
+ * 涓�鍛ㄧ殑绗竴澶╂槸鍛ㄦ棩
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getDayOfWeek(Date dateTime) {
+ return getDateValue(dateTime, Calendar.DAY_OF_WEEK);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡勾鐨勭鍑犱釜鏈�
+ * 鏈堜唤鍊�+1鏄湡瀹炵殑褰撳墠鏈�
+ *
+ * @param dateTime
+ * @return 宸茬粡鍦ㄧ郴缁熶腑鑾峰彇鍊肩殑鍩虹涓婂姞1浜嗭紝鐜板湪鏄湡瀹炵殑褰撳墠鏈堜唤鍊�
+ */
+ public static int getMonthOfYear(Date dateTime) {
+ return getDateValue(dateTime, Calendar.MONTH) + 1;
+ }
+
+ /**
+ * 鑾峰彇褰撳ぉ鐨勭鍑犱釜灏忔椂/褰撴湀鐨勭鍑犲ぉ/褰撳勾鐨勭鍑犱釜鏈�
+ *
+ * @param dateTime 濡傛灉鏃堕棿鍊间负绌猴紝榛樿褰撳墠鏃堕棿
+ * @param calendarType
+ * @return
+ */
+ private static int getDateValue(Date dateTime, int calendarType) {
+ int value = 0;
+ try {
+ if (ObjectUtil.isEmpty(dateTime)) {
+ dateTime = new Date();
+ }
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(dateTime);
+ value = calendar.get(calendarType);
+ } catch (Exception e) {
+
+ }
+ return value;
+ }
+
+ /**
+ * 瀵规瘮time1 鍜� time2 鐨勫ぇ灏�
+ *
+ * @param time1
+ * @param time2
+ * @return -1:time1灏忎簬time2;0:time1绛変簬time2;1:time1澶т簬time2;
+ */
+ public static int compareDateDiff(Date time1, Date time2) {
+ long diff = time1.getTime() - time2.getTime();
+ int res = 0;
+ if (diff > 0) {
+ res = 1;
+ } else if (diff < 0) {
+ res = -1;
+ }
+ return res;
+ }
+
+ /**
+ * 鑾峰彇鏌ヨdata_item鎵�闇�瑕佺殑timecode鍊�
+ *
+ * @param timeType 鏃ユ湡绫诲瀷
+ * @param date 鏃堕棿
+ * @return
+ */
+ public static String getTimeCode(String timeType, Date date) {
+ String timeCode = CommonConst.EMPTY;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ timeCode = CommonConst.WORD_H + getDateTime(date, COMMON_PATTERN_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ timeCode = CommonConst.WORD_D + getDateTime(date, COMMON_PATTERN_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ timeCode = CommonConst.WORD_M + getDateTime(date, COMMON_PATTERN_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ timeCode = CommonConst.WORD_Y + getDateTime(date, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return timeCode;
+ }
+
+ /**
+ * 鑾峰彇鏌ヨ鏃ユ湀骞存姤琛ㄦ墍闇�瑕佺殑timecode鍊�
+ *
+ * @param timeType 鏃ユ湡绫诲瀷
+ * @param date 鏃堕棿
+ * @return
+ */
+ public static String getReportTimeCode(String timeType, Date date) {
+ String timeCode = CommonConst.EMPTY;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ timeCode = getDateTime(date, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return timeCode;
+ }
+
+ /**
+ * 鑾峰彇鏃堕棿瀵瑰簲鐨勭幆姣旀椂闂�
+ *
+ * @param timeType HOUR/DAY/MONTH/YEAR
+ * @param date 鏃堕棿鍊�
+ * @return
+ */
+ public static Date getLoopTime(String timeType, Date date) {
+ Date dt = null;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = addHours(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = addDays(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = addMonths(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = addYears(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鑾峰彇鏁寸偣鏃堕棿
+ *
+ * @param timeType HOUR/DAY/MONTH/YEAR
+ * @param date 鏃堕棿鍊�
+ * @return
+ */
+ public static Date getHourTime(String timeType, Date date) {
+ Date dt = null;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ String tempStr = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_HOUR);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_DAY);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_MONTH);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ tempStr = getDateTime(date, COMMON_PATTERN_YEAR);
+ dt = toDateTime(tempStr, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 璁$畻涓や釜鏃堕棿闂撮殧澶╂暟锛堟棩鏈熸牸寮忔瘮杈冿級
+ *
+ * @param beginTime
+ * @param endTime
+ * @return
+ */
+ public static int daysBetween(Date beginTime, Date endTime) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(beginTime);
+ long beginStamp = calendar.getTimeInMillis();
+ calendar.setTime(endTime);
+ long endStamp = calendar.getTimeInMillis();
+ long betweenDays = (endStamp - beginStamp) / (1000 * 3600 * 24);
+ return Integer.parseInt(String.valueOf(betweenDays));
+ }
+
+ /**
+ * 璁$畻涓や釜鏃堕棿闂撮殧澶╂暟锛堝瓧绗︿覆鏍煎紡姣旇緝锛�
+ *
+ * @param beginTime
+ * @param endTime
+ * @return
+ */
+ public static int daysBetween(String beginTime, String endTime) {
+ try {
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ Date begin = format.parse(beginTime);
+ Date end = format.parse(endTime);
+ return daysBetween(begin, end);
+ } catch (ParseException exception) {
+ log.error("璁$畻涓や釜鏃堕棿闂撮殧澶╂暟" + exception.getMessage());
+ return 0;
+ }
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷鎶婂瓧绗︿覆杞垚瀵瑰簲鐨勬椂闂�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿瀛楃涓�
+ * @return
+ */
+ public static Date getTime(String timeType, String time) {
+ Date dt = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = toDateTime(time, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = toDateTime(time, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = toDateTime(time, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = toDateTime(time, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷鎶婅繛缁殑鏃ユ湡瀛楃涓茶浆鎴愬搴旂殑鏃堕棿 锛�202303銆�20230303銆�2023030301銆�202303030101锛�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿瀛楃涓�
+ * @return
+ */
+ public static Date getTimeByContinuousTimeCode(String timeType, String time) {
+ Date dt = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = toDateTime(time, COMMON_PATTERN_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = toDateTime(time, COMMON_PATTERN_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = toDateTime(time, COMMON_PATTERN_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = toDateTime(time, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷杩斿洖澶┿�佹湀銆佸勾鏈�鍚庣殑鏃堕棿
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿
+ * @return
+ */
+ public static Date getEndTimeByType(String timeType, Date time) {
+ Date dt = null;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = DateUtil.endOfDay(time);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = DateUtil.endOfMonth(time);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = DateUtil.endOfYear(time);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鍛ㄦ湡绫诲瀷瀵圭敓浜у懆鏈熻繘琛屽姞鍑忚绠�
+ * 濉姤鍛ㄦ湡绫诲瀷锛圚OUR灏忔椂銆丏AY澶┿�丮ONTH鏈堛�乊EAR骞达級
+ *
+ * @param date 鐢熶骇鍛ㄦ湡
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param val 璁$畻鍊�
+ * @return
+ */
+ public static Date productionCycleCal(Date date, String cycleType,int val) {
+ Date momDate = date;
+ switch (cycleType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ momDate = DateUtils.addHours(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ momDate = DateUtils.addDays(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ momDate = DateUtils.addMonths(date, val);
+ break;
+ }
+ return momDate;
+ }
+
+ /**
+ * 鏍规嵁鍛ㄦ湡绫诲瀷瀵圭敓浜у懆鏈熻繘琛屽姞鍑忚绠� 骞朵笖杩涗綅 渚嬪锛� HOUR +1杩涗綅灏辨槸 鍔犱竴澶�
+ * 濉姤鍛ㄦ湡绫诲瀷锛圚OUR灏忔椂銆丏AY澶┿�丮ONTH鏈堛�乊EAR骞达級
+ *
+ * @param date 鐢熶骇鍛ㄦ湡
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param val 璁$畻鍊�
+ * @return
+ */
+ public static Date productionCycleCalCarry(Date date, String cycleType,int val) {
+ Date momDate = date;
+ switch (cycleType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ momDate = DateUtils.addDays(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ momDate = DateUtils.addMonths(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ momDate = DateUtils.addYears(date, val);
+ break;
+ }
+ return momDate;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java
new file mode 100644
index 0000000..968c4d7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java
@@ -0,0 +1,60 @@
+package com.zhitan.statisticalAnalysis.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhitan.common.enums.TimeType;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+/**
+ * 鑳芥祦鍥炬煡璇�
+ */
+@Data
+public class FlowChartsDTO {
+
+ /**
+ * 鑳芥簮绫诲瀷鍚嶇О
+ */
+ @EnumValue
+ @ApiModelProperty(value = "鏃堕棿绫诲瀷")
+ private TimeType timeType;
+
+ /**
+ * 鏌ヨ鏃堕棿
+ */
+ @NotNull(message = "鏌ヨ鏃堕棿涓嶈兘涓虹┖")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(value = "鏌ヨ鏃堕棿")
+ private LocalDate queryTime;
+
+ /**
+ * 鑳芥簮绫诲瀷
+ */
+ @NotBlank(message = "鑳芥簮绫诲瀷涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "鑳芥簮绫诲瀷")
+ private String energyType;
+
+ /**
+ * 鑺傜偣id
+ */
+ @ApiModelProperty(value = "鑺傜偣id")
+ private String nodeId;
+
+ @NotBlank(message = "妯″瀷缂栫爜涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "妯″瀷缂栫爜")
+ private String modelCode;
+
+ public TimeType getTimeType() {
+ if (ObjectUtils.isEmpty(timeType)) {
+ return TimeType.DAY;
+ }
+ return timeType;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/CostTrendEnergyTypeItem.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/CostTrendEnergyTypeItem.java
new file mode 100644
index 0000000..6ccf9a9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/CostTrendEnergyTypeItem.java
@@ -0,0 +1,47 @@
+package com.zhitan.statisticalAnalysis.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+/**
+ * 鎴愭湰瓒嬪娍-鑳芥簮绫诲瀷
+ *
+ * @Author: Zhujw
+ * @Date: 2023/2/14
+ */
+@Data
+@ApiModel(value = "鎴愭湰瓒嬪娍-鑳芥簮绫诲瀷", description = "鎴愭湰瓒嬪娍-鑳芥簮绫诲瀷")
+public class CostTrendEnergyTypeItem implements Serializable {
+
+ /**
+ * 鑳芥簮绫诲瀷
+ */
+ @ApiModelProperty(value = "鑳芥簮绫诲瀷")
+ private String energyType;
+
+ /**
+ * 鑳芥簮鍚嶇О
+ */
+ @ApiModelProperty(value = "鑳芥簮鍚嶇О")
+ private String energyName;
+
+ /**
+ * 绱Н閲�
+ */
+ @ApiModelProperty(value = "绱Н閲�")
+ @JsonFormat(shape = JsonFormat.Shape.STRING)
+ private BigDecimal accumulation;
+
+ /**
+ * 璐圭敤
+ */
+ @ApiModelProperty(value = "璐圭敤")
+ @JsonFormat(shape = JsonFormat.Shape.STRING)
+ private BigDecimal cost;
+}
\ No newline at end of file
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java
new file mode 100644
index 0000000..ccc4a25
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java
@@ -0,0 +1,83 @@
+package com.zhitan.statisticalAnalysis.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * 璐圭敤鍒嗘瀽-鎴愭湰瓒嬪娍鍒嗘瀽缁熻鍥捐繑鍥炲�间俊鎭�
+ *
+ * @Author: Zhujw
+ * @Date: 2023/2/14
+*/
+@Data
+@ApiModel(value = "璐圭敤鍒嗘瀽-鎴愭湰瓒嬪娍鍒嗘瀽缁熻鍥捐繑鍥炲�间俊鎭�", description = "璐圭敤鍒嗘瀽-鎴愭湰瓒嬪娍鍒嗘瀽缁熻鍥捐繑鍥炲�间俊鎭�")
+public class EnergyConsumeTrendDetailItem {
+
+ /**
+ * 鑳芥簮绫诲瀷
+ */
+ @ApiModelProperty(value = "鑳芥簮绫诲瀷")
+ private String energyType;
+
+ /**
+ * 鑳芥簮鍗曚綅
+ */
+ @ApiModelProperty(value = "鑳芥簮鍗曚綅")
+ private String energyUnit;
+
+ /**
+ * 绱Н閲忔爣绛�
+ */
+ @ApiModelProperty(value = "绱Н閲忔爣绛�")
+ private String accumulationLabel;
+
+ /**
+ * 璐圭敤鏍囩
+ */
+ @ApiModelProperty(value = "璐圭敤鏍囩")
+ private String costLabel;
+
+ /**
+ * 绱Н閲�
+ */
+ @ApiModelProperty(value = "绱Н閲�")
+ @JsonFormat(shape = JsonFormat.Shape.STRING)
+ private BigDecimal accumulation;
+
+ /**
+ * 璐圭敤
+ */
+ @ApiModelProperty(value = "璐圭敤")
+ @JsonFormat(shape = JsonFormat.Shape.STRING)
+ private BigDecimal cost;
+
+ /**
+ * 绱Н閲弅ey闆嗗悎
+ */
+ @ApiModelProperty(value = "绱Н閲弅ey闆嗗悎")
+ private List<String> accumulationKeyList;
+
+ /**
+ * 绱Н閲弙alue闆嗗悎
+ */
+ @ApiModelProperty(value = "绱Н閲弙alue闆嗗悎")
+ private List<BigDecimal> accumulationValueList;
+
+ /**
+ * 璐圭敤key闆嗗悎
+ */
+ @ApiModelProperty(value = "璐圭敤key闆嗗悎")
+ private List<String> costKeyList;
+
+ /**
+ * 璐圭敤value闆嗗悎
+ */
+ @ApiModelProperty(value = "璐圭敤value闆嗗悎")
+ private List<BigDecimal> costValueList;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeVO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeVO.java
new file mode 100644
index 0000000..c38a70e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeVO.java
@@ -0,0 +1,43 @@
+package com.zhitan.statisticalAnalysis.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+ * 鑳借�楀疄浣撶被
+ *
+ * @Author: Zhujw
+ * @Date: 2023/1/28
+ */
+@Data
+public class EnergyConsumeVO implements Serializable {
+
+ /**
+ * 璁¢噺鍣ㄥ叿id
+ */
+ private String deviceId;
+
+ /**
+ * 鑳芥簮绫诲瀷
+ */
+ private String energyType;
+
+ /**
+ * 鏃堕棿缂栫爜
+ */
+ private Date dataTime;
+
+ /**
+ * 璐圭敤
+ */
+ private BigDecimal costValue;
+
+ /**
+ * 绱閲�
+ */
+ private BigDecimal accumulationValue;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendItem.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendItem.java
new file mode 100644
index 0000000..2d5b8d4
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendItem.java
@@ -0,0 +1,51 @@
+package com.zhitan.statisticalAnalysis.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 鎴愭湰瓒嬪娍鍒嗘瀽-琛ㄦ牸淇℃伅
+ *
+ * @Author: Zhujw
+ * @Date: 2023/2/14
+ */
+@Data
+@ApiModel(value = "鎴愭湰瓒嬪娍鍒嗘瀽-琛ㄦ牸淇℃伅", description = "鎴愭湰瓒嬪娍鍒嗘瀽-琛ㄦ牸淇℃伅")
+public class EnergyCostTrendItem {
+
+ /**
+ * 鐢ㄨ兘鍗曞厓id
+ */
+ @ApiModelProperty(value = "鐢ㄨ兘鍗曞厓id")
+ private String energyUnitId;
+
+ /**
+ * 鐢ㄨ兘鍗曞厓鍚嶇О
+ */
+ @ApiModelProperty(value = "鐢ㄨ兘鍗曞厓鍚嶇О")
+ private String energyUnitName;
+
+ /**
+ * 鎬昏垂鐢�
+ */
+ @ApiModelProperty(value = "鎬昏垂鐢�")
+ @JsonFormat(shape = JsonFormat.Shape.STRING)
+ private BigDecimal total;
+
+ /**
+ * 鏃堕棿
+ */
+ @ApiModelProperty(value = "鏃堕棿")
+ private String dateCode;
+
+ /**
+ * 鑳芥簮绫诲瀷
+ */
+ @ApiModelProperty(value = "鑳芥簮绫诲瀷")
+ private List<CostTrendEnergyTypeItem> itemList;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendPage.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendPage.java
new file mode 100644
index 0000000..a865034
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendPage.java
@@ -0,0 +1,22 @@
+package com.zhitan.statisticalAnalysis.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�15鏃� 10:07
+ */
+@Data
+public class EnergyCostTrendPage {
+ /**
+ * 鏁版嵁鍒楄〃
+ */
+ private List<EnergyCostTrendItem> itemList;
+ /**
+ * 璁板綍鎬绘暟閲�
+ */
+ private long total;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java
new file mode 100644
index 0000000..4696561
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java
@@ -0,0 +1,34 @@
+package com.zhitan.statisticalAnalysis.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+
+/**
+ * 鑳芥祦鍥炬煡璇�
+ */
+@Data
+public class FlowChartsItemVO {
+
+ /**
+ * 婧愬ご
+ */
+ @ApiModelProperty(value = "婧愬ご")
+ private String source;
+
+ /**
+ * 鐩爣
+ */
+ @ApiModelProperty(value = "鐩爣")
+ private String target;
+
+ /**
+ * 鍊�
+ */
+ @NotBlank(message = "鍊�")
+ @ApiModelProperty(value = "鍊�")
+ private BigDecimal value;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java
new file mode 100644
index 0000000..a0bf88e
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java
@@ -0,0 +1,68 @@
+package com.zhitan.statisticalAnalysis.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 鑳芥祦鍥炬煡璇�
+ */
+@Data
+public class FlowChartsVO {
+
+ // 鎬荤疮绉噺
+ @ApiModelProperty(value = "鎬荤疮绉噺")
+ private BigDecimal totalAccumulatedAmount;
+
+ // 瀛愯妭鐐圭疮绉噺
+ @ApiModelProperty(value = "瀛愯妭鐐圭疮绉噺")
+ private BigDecimal childNodeAccumulatedAmount;
+
+ // 宸��
+ @ApiModelProperty(value = "宸��")
+ private BigDecimal difference;
+
+ // 鑳借�楁崯澶辨瘮渚�
+ @ApiModelProperty(value = "鑳借�楁崯澶辨瘮渚�")
+ private BigDecimal energyLossRatio;
+
+ private List<FlowChartsItemVO> itemVOList;
+
+ public BigDecimal getTotalAccumulatedAmount() {
+ if (totalAccumulatedAmount == null){
+ return BigDecimal.ZERO;
+ }
+ return totalAccumulatedAmount;
+ }
+
+ public BigDecimal getChildNodeAccumulatedAmount() {
+ if (childNodeAccumulatedAmount == null){
+ return BigDecimal.ZERO;
+ }
+ return childNodeAccumulatedAmount;
+ }
+
+ public BigDecimal getDifference() {
+ return difference = totalAccumulatedAmount.subtract(childNodeAccumulatedAmount);
+ }
+
+ public BigDecimal getEnergyLossRatio() {
+ if (BigDecimal.ZERO.compareTo(totalAccumulatedAmount) == 0
+ || BigDecimal.ZERO.compareTo(difference) == 0){
+ return BigDecimal.ZERO;
+ }
+ return energyLossRatio = difference.divide(totalAccumulatedAmount, 2, RoundingMode.HALF_UP);
+ }
+
+ public FlowChartsVO() {
+ this.totalAccumulatedAmount = BigDecimal.ZERO;
+ this.childNodeAccumulatedAmount = BigDecimal.ZERO;
+ this.difference = BigDecimal.ZERO;
+ this.energyLossRatio = BigDecimal.ZERO;
+ this.itemVOList = Collections.emptyList();
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/IEnergyConsumeDataService.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/IEnergyConsumeDataService.java
new file mode 100644
index 0000000..e7c0174
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/IEnergyConsumeDataService.java
@@ -0,0 +1,35 @@
+package com.zhitan.statisticalAnalysis.service;
+
+import com.zhitan.statisticalAnalysis.domain.vo.*;
+
+import java.util.List;
+
+/**
+ * 鑳芥簮娑堣�楃粺璁$浉鍏虫煡璇�
+ */
+public interface IEnergyConsumeDataService {
+
+ /**
+ * 鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級- 鑾峰彇琛ㄦ牸鍒楄〃鏁版嵁
+ *
+ * @param pageNo 椤电爜鏁�
+ * @param pageSize 姣忛〉鏁版嵁澶氬皯
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param energyType 鑳芥簮绫诲瀷
+ * @param modelCode 妯″瀷Code
+ * @return
+ */
+ EnergyCostTrendPage listEnergyCostTrend(int pageNo, int pageSize, String timeCode, String timeType,String energyType, String modelCode);
+
+ /**
+ * 鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級
+ *
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param modelCode 妯″瀷Code
+ * @param energyType 鑳芥簮绫诲瀷
+ * @return
+ */
+ List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
new file mode 100644
index 0000000..bb3a01f
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
@@ -0,0 +1,315 @@
+package com.zhitan.statisticalAnalysis.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.mapper.SysEnergyMapper;
+import com.zhitan.carbonemission.domain.CarbonEmission;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.utils.StringUtils;
+import com.zhitan.dataitem.mapper.DataItemMapper;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.domain.NodeIndex;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.model.mapper.NodeIndexMapper;
+import com.zhitan.peakvalley.domain.ElectricityDataItem;
+import com.zhitan.peakvalley.mapper.PeakValleyMapper;
+import com.zhitan.statisticalAnalysis.common.DateTimeUtil;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import com.zhitan.statisticalAnalysis.domain.vo.*;
+import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�12鏃� 14:15
+ */
+@Service
+@AllArgsConstructor
+public class EnergyConsumeDataServiceImpl implements IEnergyConsumeDataService {
+
+ private DataItemMapper dataItemMapper;
+ private ModelNodeMapper modelNodeMapper;
+ private NodeIndexMapper nodeIndexMapper;
+ private PeakValleyMapper peakValleyMapper;
+ private SysEnergyMapper sysEnergyMapper;
+
+ /**
+ * 鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級- 鑾峰彇琛ㄦ牸鍒楄〃鏁版嵁
+ *
+ * @param pageNo 椤电爜鏁�
+ * @param pageSize 姣忛〉鏁版嵁澶氬皯
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param energyType 鑳芥簮绫诲瀷
+ * @param modelCode 妯″瀷Code
+ * @return
+ */
+ @Override
+ public EnergyCostTrendPage listEnergyCostTrend(int pageNo, int pageSize, String timeCode, String timeType, String energyType,
+ String modelCode) {
+ //鑳芥簮绫诲瀷淇℃伅
+ SysEnergy sysEnergy = new SysEnergy();
+ if (StringUtils.isNotEmpty(energyType)) {
+ sysEnergy.setEnersno(energyType);
+ }
+ List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy);
+ if (sysEnergies.isEmpty()) {
+ throw new RuntimeException("鏈煡璇㈠埌鑳芥簮淇℃伅");
+ }
+ //鑺傜偣淇℃伅
+ List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode)
+ .isNull(ModelNode::getParentId));
+ if (ObjectUtils.isEmpty(modelNodes)) {
+ throw new RuntimeException("鏈煡璇㈠埌鑺傜偣淇℃伅");
+ }
+ ModelNode modelNodeInfo = modelNodes.stream().findFirst().get();
+ //鐐逛綅淇℃伅
+ List<NodeIndex> nodeIndices = nodeIndexMapper.selectList(Wrappers.<NodeIndex>lambdaQuery()
+ .eq(NodeIndex::getNodeId, modelNodeInfo.getNodeId()));
+ if (nodeIndices.isEmpty()) {
+ throw new RuntimeException("鏈煡璇㈠埌鐐逛綅淇℃伅");
+ }
+
+ // 鎬昏垂鐢�
+ BigDecimal totalCost = BigDecimal.ZERO;
+ // 閬嶅巻鑳芥簮绫诲瀷
+ List<CostTrendEnergyTypeItem> itemList = new ArrayList<>();
+ for (SysEnergy sysEnergyInfo : sysEnergies) {
+ CostTrendEnergyTypeItem item = new CostTrendEnergyTypeItem();
+ item.setEnergyType(sysEnergyInfo.getEnersno());
+ item.setEnergyName(sysEnergyInfo.getEnername());
+ // 澶勭悊鏃堕棿
+ Date bsTime = DateTimeUtil.getTime(timeType, timeCode);
+ Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime);
+ totalCost = getEnergyUnitCostTrendAnalysisValueInfo(timeType, bsTime, endTime, totalCost, nodeIndices, modelNodeInfo.getNodeId(), sysEnergyInfo, item);
+ itemList.add(item);
+ }
+ // 閬嶅巻鐢ㄨ兘鍗曞厓鑾峰彇琛ㄦ牸涓殑鏁版嵁
+ List<EnergyCostTrendItem> trendItemList = new ArrayList<>();
+ EnergyCostTrendItem energyCostTrendItem = new EnergyCostTrendItem();
+ energyCostTrendItem.setDateCode(timeCode);
+ energyCostTrendItem.setTotal(totalCost.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
+ energyCostTrendItem.setItemList(itemList);
+ trendItemList.add(energyCostTrendItem);
+
+ EnergyCostTrendPage energyCostTrendPage = new EnergyCostTrendPage();
+ energyCostTrendPage.setTotal(1);
+ energyCostTrendPage.setItemList(trendItemList);
+ return energyCostTrendPage;
+ }
+
+ /**
+ * 鑾峰彇鐢ㄨ兘鍗曞厓鎴愭湰瓒嬪娍鍒嗘瀽绱Н閲忋�佽垂鐢ㄤ俊鎭�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param bsTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿
+ * @param totalCost 鎬昏垂鐢�
+ * @param nodeIndices 鑺傜偣鐐逛綅闆嗗悎
+ * @param nodeId 鑺傜偣id
+ * @param sysEnergyInfo 鑳芥簮绫诲瀷淇℃伅
+ * @param item 杩斿洖瀵硅薄
+ * @return
+ */
+ private BigDecimal getEnergyUnitCostTrendAnalysisValueInfo(String timeType, Date bsTime, Date endTime, BigDecimal totalCost,
+ List<NodeIndex> nodeIndices, String nodeId, SysEnergy sysEnergyInfo,
+ CostTrendEnergyTypeItem item) {
+ BigDecimal costValue = BigDecimal.ZERO;
+ BigDecimal accumulationValue = BigDecimal.ZERO;
+ //鐢碉細鍙湁HOUR鏁版嵁鏈夋晥锛涘叾浠栬兘婧愮被鍨嬶細HOUR銆丏AY鏈夋暟鎹�
+ switch (sysEnergyInfo.getEnersno()) {
+ case "electric":
+ List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getDataStatistics(nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toSet()), bsTime, endTime, TimeTypeConst.TIME_TYPE_HOUR);
+ costValue = electricityDataItems.stream().map(ElectricityDataItem::getCost).reduce(BigDecimal.ZERO, BigDecimal::add);
+ accumulationValue = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).reduce(BigDecimal.ZERO, BigDecimal::add);
+ break;
+ default:
+ accumulationValue = dataItemMapper.getDataItemTimeRangeValueByNodeId(bsTime, endTime, TimeTypeConst.TIME_TYPE_DAY, nodeId, sysEnergyInfo.getEnersno());
+ costValue = accumulationValue.multiply(sysEnergyInfo.getPrice());
+ break;
+ }
+ costValue = costValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+ totalCost = totalCost.add(costValue);
+ item.setCost(costValue);
+ item.setAccumulation(accumulationValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
+ return totalCost;
+ }
+
+ /**
+ * 鎴愭湰瓒嬪娍鍒嗘瀽锛堣兘婧愭秷鑰楁垚鏈級
+ *
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param modelCode 妯″瀷Code
+ * @param energyType 鑳芥簮绫诲瀷
+ * @return
+ */
+ @Override
+ public List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType) {
+ //鑳芥簮绫诲瀷淇℃伅
+ SysEnergy sysEnergy = new SysEnergy();
+ if (StringUtils.isNotEmpty(energyType)) {
+ sysEnergy.setEnersno(energyType);
+ }
+ List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy);
+ if (sysEnergies.isEmpty()) {
+ throw new RuntimeException("鏈煡璇㈠埌鑳芥簮淇℃伅");
+ }
+
+ //鑺傜偣淇℃伅
+ List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode)
+ .isNull(ModelNode::getParentId));
+ if (modelNodes.isEmpty()) {
+ throw new RuntimeException("鏈煡璇㈠埌鑺傜偣淇℃伅");
+ }
+ String nodeId = modelNodes.stream().findFirst().get().getNodeId();
+
+ // 鑳借�椾俊鎭�
+ List<EnergyConsumeTrendDetailItem> itemList = new ArrayList<>();
+ Date startTime = DateTimeUtil.getTime(timeType, timeCode);
+ Date endTime = DateTimeUtil.getEndTimeByType(timeType, startTime);
+ //鐢碉細鍙湁HOUR鏁版嵁鏈夋晥锛涘叾浠栬兘婧愮被鍨嬶細HOUR銆丏AY鏈夋暟鎹�
+ String queryTimeType = TimeTypeConst.TIME_TYPE_HOUR;
+ for (SysEnergy sysEnergyInfo : sysEnergies) {
+ List<EnergyConsumeVO> energyConsumeVOList = new ArrayList<>();
+ switch (sysEnergyInfo.getEnersno()) {
+ case "electric":
+ List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, queryTimeType, nodeId, sysEnergyInfo.getEnersno());
+ if (!electricityDataItems.isEmpty()) {
+ electricityDataItems.forEach(electricityDataItem -> {
+ EnergyConsumeVO temp = new EnergyConsumeVO();
+ temp.setDataTime(electricityDataItem.getDataTime());
+ temp.setCostValue(electricityDataItem.getCost());
+ temp.setAccumulationValue(electricityDataItem.getElectricity());
+ energyConsumeVOList.add(temp);
+ });
+ }
+ break;
+ default:
+ if (timeType.equals(TimeTypeConst.TIME_TYPE_MONTH) || timeType.equals(TimeTypeConst.TIME_TYPE_YEAR)) {
+ queryTimeType = TimeTypeConst.TIME_TYPE_DAY;
+ }
+ List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, queryTimeType, nodeId, sysEnergyInfo.getEnersno());
+ if (!dataItems.isEmpty()) {
+ dataItems.forEach(electricityDataItem -> {
+ EnergyConsumeVO temp = new EnergyConsumeVO();
+ temp.setDataTime(electricityDataItem.getDataTime());
+ temp.setCostValue(new BigDecimal(electricityDataItem.getValue()));
+ temp.setAccumulationValue(new BigDecimal(electricityDataItem.getValue()).multiply(sysEnergyInfo.getPrice()));
+ energyConsumeVOList.add(temp);
+ });
+ }
+ break;
+ }
+ BigDecimal cost = energyConsumeVOList.stream().map(EnergyConsumeVO::getCostValue)
+ .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+ BigDecimal accumulation = energyConsumeVOList.stream().map(EnergyConsumeVO::getAccumulationValue)
+ .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+ // 缁勮缁熻鍥句俊鎭�
+ EnergyConsumeTrendDetailItem item = new EnergyConsumeTrendDetailItem();
+ item.setEnergyType(sysEnergyInfo.getEnersno());
+ item.setEnergyUnit(sysEnergyInfo.getMuid());
+ item.setCostLabel(sysEnergyInfo.getEnername() + "璐�");
+ item.setAccumulationLabel(sysEnergyInfo.getEnername() + "鐢ㄩ噺");
+ item.setCost(cost);
+ item.setAccumulation(accumulation);
+ // 缁勮鍥捐〃淇℃伅
+ getTrendAnalysisCharInfoByEnergyType(startTime, timeType, energyConsumeVOList, item);
+ itemList.add(item);
+ }
+ return itemList;
+ }
+
+ /**
+ * 缁勮鎴愭湰瓒嬪娍鍒嗘瀽-缁熻鍥句俊鎭�
+ *
+ * @param bsTime 鏃堕棿
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param dataItems 鑳借��
+ * @param item 杩斿洖瀵硅薄
+ */
+ private void getTrendAnalysisCharInfoByEnergyType(Date bsTime, String timeType,
+ List<EnergyConsumeVO> dataItems, EnergyConsumeTrendDetailItem item) {
+ List<String> costKeyList = new ArrayList<>();
+ List<String> accumulationKeyList = new ArrayList<>();
+ List<BigDecimal> costValueList = new ArrayList<>();
+ List<BigDecimal> accumulationValueList = new ArrayList<>();
+ Map<String, List<EnergyConsumeVO>> energyConsumeVOMap;
+ //鎸夋椂闂寸被鍨嬬粍缁囪繑鍥炴暟鎹�
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
+ for (int i = 0; i < CommonConst.DIGIT_24; i++) {
+ String formatDate = i + CommonConst.TIME_UNIT_SHOW_HOUR;
+ costKeyList.add(formatDate);
+ accumulationKeyList.add(formatDate);
+ String key = DateUtil.formatDateTime(DateUtil.offsetHour(bsTime, i));
+ calculateCostAndAccumulation(energyConsumeVOMap, key, costValueList, accumulationValueList);
+ }
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDate(li.getDataTime())));
+ Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime);
+ while (bsTime.before(endTime)) {
+ String formatDate = DateUtil.formatDate(bsTime);
+ costKeyList.add(formatDate);
+ accumulationKeyList.add(formatDate);
+ calculateCostAndAccumulation(energyConsumeVOMap, formatDate, costValueList, accumulationValueList);
+ bsTime = DateUtil.offsetDay(bsTime, CommonConst.DIGIT_1);
+ }
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.COMMON_PATTERN_TO_MONTH_ZH);
+ energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> formatter.format(li.getDataTime())));
+ for (int i = 0; i < CommonConst.DIGIT_12; i++) {
+ Date newDate = DateUtil.offsetMonth(bsTime, i);
+ String formatDate = DateUtil.format(newDate, DateTimeUtil.COMMON_PATTERN_TO_MONTH_ZH);
+ costKeyList.add(formatDate);
+ accumulationKeyList.add(formatDate);
+ calculateCostAndAccumulation(energyConsumeVOMap, formatDate, costValueList, accumulationValueList);
+ }
+ break;
+ default:
+ break;
+ }
+
+ item.setCostKeyList(costKeyList);
+ item.setCostValueList(costValueList);
+ item.setAccumulationKeyList(accumulationKeyList);
+ item.setAccumulationValueList(accumulationValueList);
+ }
+
+ /**
+ * 璁$畻璐圭敤鍜岀敤閲�
+ *
+ * @param energyConsumeVOMap
+ * @param formatDate
+ * @param costValueList
+ * @param accumulationValueList
+ */
+ private static void calculateCostAndAccumulation(Map<String, List<EnergyConsumeVO>> energyConsumeVOMap, String formatDate, List<BigDecimal> costValueList, List<BigDecimal> accumulationValueList) {
+ List<EnergyConsumeVO> energyConsumeList = Optional.ofNullable(energyConsumeVOMap.get(formatDate))
+ .orElse(Collections.emptyList());
+ BigDecimal totalCost = energyConsumeList.stream()
+ .map(EnergyConsumeVO::getCostValue)
+ .reduce(BigDecimal.ZERO, BigDecimal::add)
+ .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+
+ BigDecimal totalAccumulation = energyConsumeList.stream()
+ .map(EnergyConsumeVO::getAccumulationValue)
+ .reduce(BigDecimal.ZERO, BigDecimal::add)
+ .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+ costValueList.add(totalCost);
+ accumulationValueList.add(totalAccumulation);
+ }
+}
diff --git a/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml b/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml
index 9635b86..da977d8 100644
--- a/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.basicdata.mapper.MeterImplementMapper">
- <resultMap type="MeterImplement" id="MeterImplementResult">
+ <resultMap type="com.zhitan.basicdata.domain.MeterImplement" id="MeterImplementResult">
<result property="id" column="id" />
<result property="code" column="code" />
<result property="meterName" column="meter_name" />
@@ -31,7 +31,7 @@
<result property="gatewayId" column="gateway_id" />
<result property="gatewayName" column="gateway_name" />
</resultMap>
- <resultMap type="MeterImplementExcel" id="MeterImplementResultExcel">
+ <resultMap type="com.zhitan.basicdata.domain.MeterImplementExcel" id="MeterImplementResultExcel">
<result property="id" column="id" />
<result property="code" column="code" />
<result property="meterName" column="meter_name" />
@@ -59,7 +59,7 @@
select id,energy_type, code, meter_name, meter_type, model_number, measure_range, manufacturer, person_charge, installaction_location, start_time, check_cycle, reminder_cycle, meter_status, del_flage, remark, putrun_time,create_time, create_by, update_time, update_by,(start_time+check_cycle-reminder_cycle)<=current_date as txflage,wire_diameter,max_allowable_power,gateway_id,gateway_name from meter_implement
</sql>
- <select id="selectMeterImplementList" parameterType="MeterImplement" resultMap="MeterImplementResult">
+ <select id="selectMeterImplementList" parameterType="com.zhitan.basicdata.domain.MeterImplement" resultMap="MeterImplementResult">
<include refid="selectMeterImplementVo"/>
<where>
del_flage='N'
@@ -73,7 +73,7 @@
order by code
</select>
- <select id="exectMeterImplementList" parameterType="MeterImplement" resultMap="MeterImplementResultExcel">
+ <select id="exectMeterImplementList" parameterType="com.zhitan.basicdata.domain.MeterImplement" resultMap="MeterImplementResultExcel">
select id,energy_type, code, meter_name, fun_getDiceData('sys_device_type',meter_status) as meter_type, model_number, measure_range, manufacturer,
person_charge, installaction_location, to_char(start_time,'YYYY-MM-DD') start_time, check_cycle, reminder_cycle, fun_getDiceData('meter_status',meter_status) as meter_status,
del_flage, remark, create_time, create_by, update_time, update_by,wire_diameter,max_allowable_power,gateway_name
@@ -95,7 +95,7 @@
where id = #{id}
</select>
- <select id="selectMeterImplementByCode" parameterType="MeterImplement" resultMap="MeterImplementResult">
+ <select id="selectMeterImplementByCode" parameterType="com.zhitan.basicdata.domain.MeterImplement" resultMap="MeterImplementResult">
<include refid="selectMeterImplementVo"/>
where code = #{code}
<if test="id != null and id != ''"> and id != #{id} or id is null</if>
@@ -133,8 +133,16 @@
installaction_location = #{installactionLocation}
</where>
</select>
+ <select id="selectByNodeId" resultType="com.zhitan.basicdata.domain.MeterImplement">
+ <include refid="selectMeterImplementVo"/>
+ mi
+ left join node_device nd on mi.id = nd.device_id
+ where
+ mi.del_flage = 'N'
+ AND nd.node_id = #{nodeId}
+ </select>
- <insert id="insertMeterImplement" parameterType="MeterImplement">
+ <insert id="insertMeterImplement" parameterType="com.zhitan.basicdata.domain.MeterImplement">
insert into meter_implement
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">id,</if>
@@ -192,7 +200,7 @@
</trim>
</insert>
- <update id="updateMeterImplement" parameterType="MeterImplement">
+ <update id="updateMeterImplement" parameterType="com.zhitan.basicdata.domain.MeterImplement">
update meter_implement
<trim prefix="SET" suffixOverrides=",">
<if test="code != null and code != ''">code = #{code},</if>
diff --git a/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml
index 0380045..99bdde1 100644
--- a/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml
@@ -35,7 +35,7 @@
<result column="value0" property="value0"/>
</resultMap>
<!--鍏ㄥ巶鑳借�楃粺璁�-->
- <select id="getdailyComprehensiveList" resultMap="dataItemMap">
+ <select id="getDailyComprehensiveList" resultType="com.zhitan.comprehensivestatistics.domain.DailyComprehensive">
SELECT
aa.index_id,
aa.index_name,
@@ -72,7 +72,7 @@
ORDER BY aa.order_num ASC
</select>
- <select id="getListChart" resultMap="dataItemMap">
+ <select id="getListChart" resultType="com.zhitan.comprehensivestatistics.domain.DailyComprehensive">
SELECT
di.index_id,
ci.name AS "index_name",
diff --git a/zhitan-system/src/main/resources/mapper/comprehensivestatistics/MonthlyComprehensiveMapper.xml b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/MonthlyComprehensiveMapper.xml
new file mode 100644
index 0000000..7de48b9
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/MonthlyComprehensiveMapper.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.comprehensivestatistics.mapper.MonthlyComprehensiveMapper">
+ <resultMap id="dataItemMap" type="com.zhitan.comprehensivestatistics.domain.MonthlyComprehensive">
+ <result column="index_id" property="indexId"/>
+ <result column="index_name" property="indexName"/>
+ <result column="time_type" property="timeType"/>
+ <result column="time_code" property="timeCode"/>
+ <result column="unit_id" property="unitId"/>
+ <result column="value1" property="value1"/>
+ <result column="value2" property="value2"/>
+ <result column="value3" property="value3"/>
+ <result column="value4" property="value4"/>
+ <result column="value5" property="value5"/>
+ <result column="value6" property="value6"/>
+ <result column="value7" property="value7"/>
+ <result column="value8" property="value8"/>
+ <result column="value9" property="value9"/>
+ <result column="value10" property="value10"/>
+ <result column="value11" property="value11"/>
+ <result column="value12" property="value12"/>
+ <result column="value13" property="value13"/>
+ <result column="value14" property="value14"/>
+ <result column="value15" property="value15"/>
+ <result column="value16" property="value16"/>
+ <result column="value17" property="value17"/>
+ <result column="value18" property="value18"/>
+ <result column="value19" property="value19"/>
+ <result column="value20" property="value20"/>
+ <result column="value21" property="value21"/>
+ <result column="value22" property="value22"/>
+ <result column="value23" property="value23"/>
+ <result column="value24" property="value24"/>
+ <result column="value25" property="value25"/>
+ <result column="value26" property="value26"/>
+ <result column="value27" property="value27"/>
+ <result column="value28" property="value28"/>
+ <result column="value29" property="value29"/>
+ <result column="value30" property="value30"/>
+ <result column="value31" property="value31"/>
+ </resultMap>
+ <!--鍏ㄥ巶鑳借�楃粺璁�-->
+ <select id="getMonthlyComprehensiveList" resultMap="dataItemMap">
+ SELECT
+ aa.index_id,
+ aa.index_name,
+ <foreach item="item" index="index" collection="dataList">
+ COALESCE ( MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ), null ) AS ${item.value},
+ </foreach>
+ aa.time_type,
+ aa.order_num orderNum
+ FROM
+ (
+ SELECT
+ ni.index_id,
+ ei."name" AS "index_name",
+ di."value",
+ di.data_time,
+ di.time_type,
+ mn.order_num
+ FROM
+ model_node mn
+ LEFT JOIN node_index ni ON ni.node_id = mn.node_id
+ LEFT JOIN energy_index ei ON ei.index_id = ni.index_id
+ LEFT JOIN data_item di ON ni.index_id = di.index_id
+ WHERE
+ mn.parent_id = #{nodeId}
+ AND di.data_time >= #{beginTime}
+ AND di.data_time <= #{endTime}
+ AND di.time_type = #{timeType}
+ <if test="indexStorageId !='' and indexStorageId !=null">
+ and ei.energy_id=#{indexStorageId}
+ </if>
+ ) aa
+ GROUP BY
+ aa.index_id, aa.index_name, aa.time_type, aa.order_num
+ ORDER BY aa.order_num ASC
+ </select>
+
+ <select id="getListChart" resultMap="dataItemMap">
+ SELECT
+ di.index_id,
+ ci.name AS "index_name",
+ ci.unit_id,
+ di."value",
+ di.data_time,
+ di.time_type,
+ di.time_code
+ FROM
+ data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+ WHERE
+ di.index_id =#{indexId}
+ AND di.data_time <= #{endTime}
+ AND di.data_time >= #{beginTime}
+ AND di.time_type = #{timeType}
+ ORDER BY
+ di.time_code;
+ </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/comprehensivestatistics/YearComprehensiveMapper.xml b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/YearComprehensiveMapper.xml
new file mode 100644
index 0000000..e36e03c
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/YearComprehensiveMapper.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.comprehensivestatistics.mapper.YearComprehensiveMapper">
+ <resultMap id="dataItemMap" type="com.zhitan.comprehensivestatistics.domain.YearComperhensive">
+ <result column="index_id" property="indexId"/>
+ <result column="index_name" property="indexName"/>
+ <result column="time_type" property="timeType"/>
+ <result column="time_code" property="timeCode"/>
+ <result column="unit_id" property="unitId"/>
+ <result column="value1" property="value1"/>
+ <result column="value2" property="value2"/>
+ <result column="value3" property="value3"/>
+ <result column="value4" property="value4"/>
+ <result column="value5" property="value5"/>
+ <result column="value6" property="value6"/>
+ <result column="value7" property="value7"/>
+ <result column="value8" property="value8"/>
+ <result column="value9" property="value9"/>
+ <result column="value10" property="value10"/>
+ <result column="value11" property="value11"/>
+ <result column="value12" property="value12"/>
+ </resultMap>
+ <!--鍏ㄥ巶鑳借�楃粺璁�-->
+ <select id="getYearComprehensiveList" resultMap="dataItemMap">
+ SELECT
+ aa.index_id,
+ aa.index_name,
+ <foreach item="item" index="index" collection="dataList">
+ COALESCE ( MAX ( CASE WHEN data_time = #{item.dataTime} THEN "value" END ), null ) AS ${item.value},
+ </foreach>
+ aa.time_type,
+ aa.order_num orderNum
+ FROM
+ (
+ SELECT
+ ni.index_id,
+ ei."name" AS "index_name",
+ di."value",
+ di.data_time,
+ di.time_type,
+ mn.order_num
+ FROM
+ model_node mn
+ LEFT JOIN node_index ni ON ni.node_id = mn.node_id
+ LEFT JOIN energy_index ei ON ei.index_id = ni.index_id
+ LEFT JOIN data_item di ON ni.index_id = di.index_id
+ WHERE
+ mn.parent_id = #{nodeId}
+ AND di.data_time >= #{beginTime}
+ AND di.data_time <= #{endTime}
+ AND di.time_type = #{timeType}
+ <if test="indexStorageId !='' and indexStorageId !=null">
+ and ei.energy_id=#{indexStorageId}
+ </if>
+ ) aa
+ GROUP BY aa.index_id, aa.index_name, aa.time_type, aa.order_num
+ ORDER BY aa.order_num ASC
+ </select>
+
+ <select id="getListChart" resultMap="dataItemMap">
+ SELECT
+ di.index_id,
+ ci.name AS "index_name",
+ ci.unit_id,
+ di."value",
+ di.data_time,
+ di.time_type,
+ di.time_code
+ FROM
+ data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id
+ WHERE
+ di.index_id =#{indexId}
+ AND di.data_time < #{endTime}
+ AND di.data_time >= #{beginTime}
+ AND di.time_type = #{timeType}
+ ORDER BY
+ di.time_code;
+ </select>
+</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml b/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml
index 37b928f..e06ddbe 100644
--- a/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml
@@ -215,4 +215,22 @@
AND ( begin_time BETWEEN #{beginTime} AND #{endTime} )
AND time_type = #{timeType}
</select>
+
+ <select id="getDataItemTimeRangeValueByNodeId" resultType="java.math.BigDecimal">
+ SELECT
+ COALESCE (SUM ( "value" ), 0)
+ FROM
+ "data_item" di
+ JOIN energy_index ei ON di.index_id = ei.index_id
+ WHERE
+ di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{nodeId})
+ <if test="energyType !='' and energyType !=null and energyType =='allType'">
+ AND ei.energy_id != ''
+ </if>
+ <if test="energyType !='' and energyType !=null and energyType !='allType'">
+ AND ei.energy_id = #{energyType}
+ </if>
+ AND (di.data_time BETWEEN #{beginTime} AND #{endTime})
+ AND di.time_type = #{timeType}
+ </select>
</mapper>
\ No newline at end of file
diff --git a/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml b/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
index 3ea43ac..78d0144 100644
--- a/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
@@ -391,4 +391,21 @@
</if>
</where>
</select>
+ <select id="getIndexByMeterIdIndexCode" resultType="com.zhitan.model.domain.EnergyIndex">
+ SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
+ LEFT JOIN node_device nd on ei.meter_id = nd.device_id
+ LEFT JOIN meter_implement mi on mi."id" = nd.device_id
+ <where>
+ <if test="nodeId != null and nodeId != ''">and nd.node_id = #{nodeId}</if>
+ <if test="indexCode != null and indexCode != ''">
+ and (mi.meter_name like concat('%', #{indexCode}, '%')
+ or ei.code like concat('%', #{indexCode}, '%')
+ or ei.name like concat('%', #{indexCode}, '%')
+ )
+ </if>
+ <if test="meterId != null and meterId != ''">
+ and ei.meter_id = #{meterId}
+ </if>
+ </where>
+ </select>
</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
index 01c8c59..f0fe5ef 100644
--- a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
@@ -89,9 +89,9 @@
resultType="com.zhitan.model.domain.EnergyIndex">
select ei.index_id as indexId, code, name, index_type as indexType
from energy_index ei
- left join node_index ni on ei.index_id = ni.index_id
+ left join node_index ni on ei.index_id = ni.index_id
where ni.node_id = #{nodeId}
- and ei.index_type = #{indexType}
+ and ei.index_type = #{indexType}
<if test="code != null and code != ''">
and code like concat('%', #{code}, '%')
</if>
@@ -332,11 +332,12 @@
node_category nodeCategory
FROM "model_node"
WHERE model_code = #{indexCode}
- AND parent_id IS NULL LIMIT 1;
+ AND parent_id IS NULL
+ LIMIT 1;
</select>
<select id="selectIndexByModelCodeAndNodeId"
resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
- SELECT mn.node_id nodeId,
+ SELECT mn.node_id nodeId,
mn."name",
ni.index_id indexId
FROM model_node mn
@@ -347,15 +348,15 @@
<select id="getSettingDeviceIndex" resultType="com.zhitan.basicdata.domain.MeterImplement">
SELECT distinct
- m."id",
- m.code,
- m.meter_name AS meterName,
- m.meter_type meterType,
- m.wire_diameter wireDiameter,
- m.max_allowable_power maxAllowablePower
+ m."id",
+ m.code,
+ m.meter_name AS meterName,
+ m.meter_type meterType,
+ m.wire_diameter wireDiameter,
+ m.max_allowable_power maxAllowablePower
FROM meter_implement m
- LEFT JOIN energy_index ei ON ei.meter_id = m."id"
- LEFT JOIN node_index ni ON ni.index_id = ei.index_id
+ LEFT JOIN energy_index ei ON ei.meter_id = m."id"
+ LEFT JOIN node_index ni ON ni.index_id = ei.index_id
WHERE ni.node_id = #{nodeId}
<if test="energyType!=null and energyType!=''">
AND M.energy_type = #{energyType}
@@ -365,11 +366,12 @@
<delete id="delIndexNodeIdAndIndexType">
delete
from node_index
- where node_id = #{nodeId} and index_id in (
- select ni.index_id
- from node_index ni left join energy_index ei on ni.index_id = ei.index_id
- where node_id = #{nodeId} and ei.index_type = #{indexType}
- );
+ where node_id = #{nodeId}
+ and index_id in (select ni.index_id
+ from node_index ni
+ left join energy_index ei on ni.index_id = ei.index_id
+ where node_id = #{nodeId}
+ and ei.index_type = #{indexType});
</delete>
<insert id="setIndexAndNodeId">
<foreach collection="indexIds" item="indexId" separator=";">
@@ -379,11 +381,11 @@
</insert>
<select id="getModelNodeIndexIdByNodeId" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
- SELECT mn.node_id nodeId,
- mn."name" "name",
- ni.index_id indexId,
- ei.energy_id energyId,
- ei.index_type indexType
+ SELECT mn.node_id nodeId,
+ mn."name" "name",
+ ni.index_id indexId,
+ ei.energy_id energyId,
+ ei.index_type indexType
FROM "model_node" mn
LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
LEFT JOIN energy_index ei on ni.index_id = ei.index_id
@@ -400,16 +402,17 @@
FROM "model_node" mn
LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
left join energy_index ei on ni.index_id = ei.index_id
- WHERE mn.parent_id = #{parentId} and ei.index_type = 'STATISTIC'
+ WHERE mn.parent_id = #{parentId}
+ and ei.index_type = 'STATISTIC'
</select>
<select id="getFirstModeNodeInfo" resultType="com.zhitan.model.domain.ModelNode">
<include refid="selectModelNodeVo"/>
- where model_code = #{modelCode} AND parent_id is null
+ where model_code = #{modelCode} AND parent_id is null
order by order_num
</select>
<select id="selectIndexByNodeIds" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
- SELECT mn.node_id nodeId,
- mn."name" "name",
+ SELECT mn.node_id nodeId,
+ mn."name" "name",
ni.index_id indexId,
ei.energy_id
FROM "model_node" mn
@@ -417,15 +420,49 @@
left join energy_index ei on ni.index_id = ei.index_id
<where>
mn.model_code = #{modelCode}
- AND mn.node_id in
- <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")">
- #{item}
- </foreach>
- <if test="modelCode!=null and modelCode!='' and nodeIds.size>0">
- and ei.index_type='STATISTIC'
- </if>
+ AND mn.node_id in
+ <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ <if test="modelCode!=null and modelCode!='' and nodeIds.size>0">
+ and ei.index_type='STATISTIC'
+ </if>
</where>
</select>
+
+ <select id="getDataItemByParentNodeId" resultType="com.zhitan.dataitem.domain.vo.NodeIndexValueVO">
+ SELECT mn.node_id nodeId,
+ mn."name" nodeName,
+ di.index_id indexId,
+ di."value" value
+ FROM model_node mn
+ LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+ LEFT JOIN "energy_index" ei ON ei.index_id = ni.index_id
+ LEFT JOIN "data_item" di ON ei.index_id = di.index_id
+ WHERE mn.parent_id = #{parentId}
+ AND ei.energy_id = #{energyType}
+ AND ei.index_type = 'STATISTIC'
+ AND di.time_type = #{timeType.name}
+ AND di.data_time >= #{dateTimeMap.startTime}
+ AND di.data_time <= #{dateTimeMap.endTime}
+ </select>
+
+ <select id="getDataItemByNodeId" resultType="com.zhitan.dataitem.domain.vo.NodeIndexValueVO">
+ SELECT mn.node_id nodeId,
+ mn."name" nodeName,
+ di.index_id indexId,
+ di."value" value
+ FROM "model_node" mn
+ LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+ LEFT JOIN "energy_index" ei ON ei.index_id = ni.index_id
+ LEFT JOIN "data_item" di ON ei.index_id = di.index_id
+ WHERE mn.node_id = #{nodeId}
+ AND ei.energy_id = #{energyType}
+ AND ei.index_type = 'STATISTIC'
+ AND di.time_type = #{timeType.name}
+ AND di.data_time >= #{dateTimeMap.startTime}
+ AND di.data_time <= #{dateTimeMap.endTime}
+ </select>
</mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml b/zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml
new file mode 100644
index 0000000..71e9b64
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.model.mapper.NodeIndexMapper">
+
+ <resultMap type="com.zhitan.model.domain.NodeIndex" id="NodeIndexMap">
+ <result property="nodeId" column="node_id" jdbcType="VARCHAR"/>
+ <result property="indexId" column="index_id" jdbcType="VARCHAR"/>
+ </resultMap>
+</mapper>
+
diff --git a/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml b/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml
index 2676c7d..d478107 100644
--- a/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml
@@ -49,4 +49,30 @@
AND time_type = #{timeType}
</select>
+ <select id="getCostTrends"
+ resultType="com.zhitan.peakvalley.domain.ElectricityDataItem">
+ SELECT
+ di.index_code,
+ di.time_code,
+ di.electricity_type,
+ di.data_time,
+ di.electricity,
+ di.cost,
+ di.time_type,
+ di.price,
+ di.remark
+ FROM
+ "electricity_data_item" di
+ JOIN energy_index ei ON di.index_id = ei.index_id
+ WHERE
+ di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{nodeId})
+ <if test="energyType !='' and energyType !=null and energyType =='allType'">
+ AND ei.energy_id != ''
+ </if>
+ <if test="energyType !='' and energyType !=null and energyType !='allType'">
+ AND ei.energy_id = #{energyType}
+ </if>
+ AND (di.data_time BETWEEN #{beginTime} AND #{endTime})
+ AND di.time_type = #{timeType}
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3