From 8a6c688d9fc28cfd7647105536fd35374d8d0f0c Mon Sep 17 00:00:00 2001 From: zhitan-cloud <394600+ustcyc@user.noreply.gitee.com> Date: 星期三, 12 二月 2025 05:20:31 +0800 Subject: [PATCH] !63 !62 综合能耗日月年 Merge pull request !63 from letsgocoding/develop1.0 --- zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java | 567 +- zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java | 29 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 | 413 ++ zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java | 64 zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java | 103 zhitan-vue/public/logo.png | 0 zhitan-vue/src/views/alarmmanage/measuremen/measuremen.vue | 417 +- 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 | 150 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/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java | 68 zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/YearComprehensiveController.java | 161 zhitan-vue/src/views/index.vue | 4 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/service/impl/YearComprehensiveServiceImpl.java | 68 zhitan-vue/src/views/realtimemonitor/realtimemonitor/components/chart-modal.vue | 286 zhitan-vue/src/views/svg/equipmentfile/chartView.vue | 314 + zhitan-vue/package.json | 2 zhitan-vue/src/api/svg/equipmentfile.js | 40 zhitan-vue/src/views/login.vue | 38 zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java | 20 zhitan-vue/src/api/comprehensiveStatistics/processEnergyConsumption.js | 19 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java | 55 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-vue/src/utils/ruoyi.js | 207 zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java | 34 zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java | 177 zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java | 30 zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java | 18 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/dataitem/domain/vo/NodeIndexValueVO.java | 32 zhitan-vue/src/views/carbonemission/carbonEmission.vue | 268 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/YearComprehensiveMapper.java | 51 zhitan-vue/src/views/comprehensive/yearComprehensive/index.vue | 245 + zhitan-vue/src/components/FileUpload/index.vue | 12 zhitan-system/src/main/resources/mapper/comprehensivestatistics/MonthlyComprehensiveMapper.xml | 101 zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml | 103 zhitan-vue/index.html | 385 +- zhitan-vue/src/views/comprehensive/dailyComprehensive/index.vue | 245 + zhitan-vue/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js | 17 zhitan-vue/src/views/comprehensive/comps/LineChart.vue | 173 zhitan-vue/src/views/svg/components/configure.vue | 204 + zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java | 70 zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java | 3 zhitan-vue/src/assets/images/login-background.jpg | 0 zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java | 2 zhitan-vue/src/views/svg/components/configureView.vue | 124 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/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-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 | 9 zhitan-vue/src/assets/styles/ruoyi.scss | 7 zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java | 21 zhitan-vue/src/views/comprehensive/monthlyComprehensive/index.vue | 241 + zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java | 3 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-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java | 258 + zhitan-vue/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js | 17 zhitan-vue/src/views/peakvalley/timeSharing/timeSharing.vue | 329 - zhitan-vue/src/views/svg/equipmentfile/index.vue | 243 + zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java | 15 zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java | 5 zhitan-vue/src/api/comprehensiveStatistics/comprehensive.js | 70 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/java/com/zhitan/comprehensivestatistics/service/impl/MonthlyComprehensiveServiceImpl.java | 42 zhitan-vue/src/views/alarmmanage/energyconsumption/energyConsumption.vue | 415 +- zhitan-vue/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js | 26 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-vue/src/views/peakvalley/period/period.vue | 308 - zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java | 14 /dev/null | 293 - zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/domain/YearComperhensive.java | 214 + 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/statisticalAnalysis/EnergyDataItemController.java | 39 97 files changed, 8,566 insertions(+), 2,200 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/MonthlyComprehensiveController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/comprehensivestatistics/MonthlyComprehensiveController.java new file mode 100644 index 0000000..8e41cf7 --- /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.getIndexStorageId()); + 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.getIndexStorageId()); + 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.getIndexStorageId()); + 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..fc5a46c --- /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.getIndexStorageId()); + 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.getIndexStorageId()); + 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.getIndexStorageId()); + 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/energyMonitor/ElectricLoadController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java index 6434f20..b20411c 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,12 @@ 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.service.IElectricLoadService; +import com.zhitan.model.domain.EnergyIndex; import com.zhitan.model.service.IEnergyIndexService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -26,33 +29,29 @@ @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); + 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..fca2c2d --- /dev/null +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java @@ -0,0 +1,64 @@ +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/keyequipment/YearKeyEquipmentController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/keyequipment/YearKeyEquipmentController.java index 00afae6..8f0c4c5 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,8 +1,10 @@ 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; +import com.zhitan.comprehensivestatistics.domain.YearComperhensive; import com.zhitan.keyequipment.domain.YearKeyEquipment; import com.zhitan.keyequipment.service.IYearKeyEquipmentService; import com.zhitan.model.domain.EnergyIndex; @@ -53,9 +55,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) { @@ -78,6 +84,7 @@ @GetMapping("/listChart") @ApiOperation(value = "閲嶇偣璁惧鑳借�楃粺璁★紙骞达級鍥捐〃") public AjaxResult listChart(DataItem dataItem){ + List<YearKeyEquipment> list = yearKeyEquipmentService.getListChart(dataItem.getIndexId(),dataItem.getBeginTime(),dataItem.getEndTime(), dataItem.getTimeType(),dataItem.getIndexStorageId()); return AjaxResult.success(list); } 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/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/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/utils/ChartUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java new file mode 100644 index 0000000..a099168 --- /dev/null +++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java @@ -0,0 +1,177 @@ +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_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/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..94f00fe 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> { /** * 闃舵鏁版嵁褰曞叆 * 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..27fb12a 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,125 @@ 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("鏈煡璇㈠埌妯″瀷淇℃伅"); + } + Optional<ModelNode> modelNodeInfo = modelNodes.stream().findFirst(); + String nodeId = modelNodeInfo.map(ModelNode::getNodeId).toString(); + dto.setNodeId(nodeId); + String energyType = dto.getEnergyType(); + LocalDate queryTime = dto.getQueryTime(); + TimeType timeType = dto.getTimeType(); + + // 鑾峰彇鑺傜偣淇℃伅 + ModelNode modelNode = modelNodeMapper.selectModelNodeById(nodeId); + if (ObjectUtils.isEmpty(modelNode)) { + return flowChartsVO; + } + // 鑾峰彇鏌ヨ鏃堕棿 + 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..f3c4448 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java @@ -0,0 +1,18 @@ +package com.zhitan.energyMonitor.service; + +import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO; +import com.zhitan.model.domain.EnergyIndex; + +/** + * @Description: + * @Author: jeecg-boot + * @Date: 2022-04-19 + * @Version: V1.0 + */ +public interface IElectricLoadService { + + /** + * 鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁 + */ + ListElectricLoadVO list(String timeType, String timeCode, EnergyIndex energyIndex); +} 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..a01fd03 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java @@ -0,0 +1,258 @@ +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.service.IElectricLoadService; +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; + +/** + * @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) { + 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(energyIndex.getMeterId()); + + 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.getValue())) { + temp.setAvg(String.valueOf(DoubleUtil.formatDouble(rt2.getValue()))); + } + if (ObjectUtils.isNotEmpty(rt3.getValue())) { + temp.setMax(String.valueOf(DoubleUtil.formatDouble(rt3.getValue()))); + } + if (ObjectUtils.isNotEmpty(rt4.getValue())) { + 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); + } + } + + +} 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..5a21836 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java @@ -0,0 +1,413 @@ +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 (ObjectUtil.isEmpty(energyIndexList)) { + return vo; + } + // 鑾峰彇鐢靛帇涓嶅钩琛℃暟鎹� + 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()); + } + List<String> tagCodeList = energyIndexList.stream().map(EnergyIndex::getCode).collect(Collectors.toList()); + tagCodeList.add(CommonConst.STR_NUMBER_MINUS_ONE); + String tagCodes = String.join(StrUtil.COMMA, tagCodeList); + + 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(tagCodes, 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("_A")).collect(Collectors.toList()); + List<TagValue> currentBTagValueList = currentTagValueList.stream().filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith("_B")).collect(Collectors.toList()); + List<TagValue> currentCTagValueList = currentTagValueList.stream().filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith("_C")).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/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..aa5f76f 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,333 @@ @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) { + return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery() + .eq(EnergyIndex::getNodeId, nodeId) + .eq(EnergyIndex::getMeterId, meterId) + .like(EnergyIndex::getCode, indexCode)); + } + + /** + * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣� + * + * @param nodeId 鑺傜偣id + * @param meterId 璁惧id + * @return + */ + @Override + public List<EnergyIndex> listDeviceIndex(String nodeId, String meterId) { + return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery() + .eq(EnergyIndex::getNodeId, nodeId) + .eq(EnergyIndex::getMeterId, meterId)); + } } 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/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..9e16113 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,7 +1,10 @@ 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; @@ -10,9 +13,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 瀹炴椂鏁版嵁搴撳彇鏁版湇鍔″疄鐜扮被. @@ -131,6 +132,20 @@ 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<>(); + } + } + /** * 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�. * 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/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/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/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-vue/index.html b/zhitan-vue/index.html index 3b22332..756ed87 100644 --- a/zhitan-vue/index.html +++ b/zhitan-vue/index.html @@ -1,215 +1,214 @@ <!DOCTYPE html> <html> - -<head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> - <meta name="renderer" content="webkit"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> - <link rel="icon" href="/favicon.ico"> - <title>绠$悊绯荤粺</title> - <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]--> - <style> - html, - body, - #app { - height: 100%; - margin: 0px; - padding: 0px; - } - - .chromeframe { - margin: 0.2em 0; - background: #ccc; - color: #000; - padding: 0.2em 0; - } - - #loader-wrapper { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 999999; - } - - #loader { - display: block; - position: relative; - left: 50%; - top: 50%; - width: 150px; - height: 150px; - margin: -75px 0 0 -75px; - border-radius: 50%; - border: 3px solid transparent; - border-top-color: #FFF; - -webkit-animation: spin 2s linear infinite; - -ms-animation: spin 2s linear infinite; - -moz-animation: spin 2s linear infinite; - -o-animation: spin 2s linear infinite; - animation: spin 2s linear infinite; - z-index: 1001; - } - - #loader:before { - content: ""; - position: absolute; - top: 5px; - left: 5px; - right: 5px; - bottom: 5px; - border-radius: 50%; - border: 3px solid transparent; - border-top-color: #FFF; - -webkit-animation: spin 3s linear infinite; - -moz-animation: spin 3s linear infinite; - -o-animation: spin 3s linear infinite; - -ms-animation: spin 3s linear infinite; - animation: spin 3s linear infinite; - } - - #loader:after { - content: ""; - position: absolute; - top: 15px; - left: 15px; - right: 15px; - bottom: 15px; - border-radius: 50%; - border: 3px solid transparent; - border-top-color: #FFF; - -moz-animation: spin 1.5s linear infinite; - -o-animation: spin 1.5s linear infinite; - -ms-animation: spin 1.5s linear infinite; - -webkit-animation: spin 1.5s linear infinite; - animation: spin 1.5s linear infinite; - } - - - @-webkit-keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - -ms-transform: rotate(0deg); - transform: rotate(0deg); + <head> + <meta charset="utf-8" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> + <meta name="renderer" content="webkit" /> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> + <link rel="icon" href="/logo.png" /> + <title>绠$悊绯荤粺</title> + <!--[if lt IE 11 + ]><script> + window.location.href = "/html/ie.html" + </script><! + [endif]--> + <style> + html, + body, + #app { + height: 100%; + margin: 0px; + padding: 0px; } - 100% { - -webkit-transform: rotate(360deg); - -ms-transform: rotate(360deg); - transform: rotate(360deg); - } - } - - @keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - -ms-transform: rotate(0deg); - transform: rotate(0deg); + .chromeframe { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; } - 100% { - -webkit-transform: rotate(360deg); - -ms-transform: rotate(360deg); - transform: rotate(360deg); + #loader-wrapper { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 999999; } - } + #loader { + display: block; + position: relative; + left: 50%; + top: 50%; + width: 150px; + height: 150px; + margin: -75px 0 0 -75px; + border-radius: 50%; + border: 3px solid transparent; + border-top-color: #fff; + -webkit-animation: spin 2s linear infinite; + -ms-animation: spin 2s linear infinite; + -moz-animation: spin 2s linear infinite; + -o-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; + z-index: 1001; + } - #loader-wrapper .loader-section { - position: fixed; - top: 0; - width: 51%; - height: 100%; - background: #7171C6; - z-index: 1000; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } + #loader:before { + content: ""; + position: absolute; + top: 5px; + left: 5px; + right: 5px; + bottom: 5px; + border-radius: 50%; + border: 3px solid transparent; + border-top-color: #fff; + -webkit-animation: spin 3s linear infinite; + -moz-animation: spin 3s linear infinite; + -o-animation: spin 3s linear infinite; + -ms-animation: spin 3s linear infinite; + animation: spin 3s linear infinite; + } - #loader-wrapper .loader-section.section-left { - left: 0; - } + #loader:after { + content: ""; + position: absolute; + top: 15px; + left: 15px; + right: 15px; + bottom: 15px; + border-radius: 50%; + border: 3px solid transparent; + border-top-color: #fff; + -moz-animation: spin 1.5s linear infinite; + -o-animation: spin 1.5s linear infinite; + -ms-animation: spin 1.5s linear infinite; + -webkit-animation: spin 1.5s linear infinite; + animation: spin 1.5s linear infinite; + } - #loader-wrapper .loader-section.section-right { - right: 0; - } + @-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } + } - .loaded #loader-wrapper .loader-section.section-left { - -webkit-transform: translateX(-100%); - -ms-transform: translateX(-100%); - transform: translateX(-100%); - -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); - transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); - } + @keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } - .loaded #loader-wrapper .loader-section.section-right { - -webkit-transform: translateX(100%); - -ms-transform: translateX(100%); - transform: translateX(100%); - -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); - transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); - } + 100% { + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } + } - .loaded #loader { - opacity: 0; - -webkit-transition: all 0.3s ease-out; - transition: all 0.3s ease-out; - } + #loader-wrapper .loader-section { + position: fixed; + top: 0; + width: 51%; + height: 100%; + background: #7171c6; + z-index: 1000; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } - .loaded #loader-wrapper { - visibility: hidden; - -webkit-transform: translateY(-100%); - -ms-transform: translateY(-100%); - transform: translateY(-100%); - -webkit-transition: all 0.3s 1s ease-out; - transition: all 0.3s 1s ease-out; - } + #loader-wrapper .loader-section.section-left { + left: 0; + } - .no-js #loader-wrapper { - display: none; - } + #loader-wrapper .loader-section.section-right { + right: 0; + } - .no-js h1 { - color: #222222; - } + .loaded #loader-wrapper .loader-section.section-left { + -webkit-transform: translateX(-100%); + -ms-transform: translateX(-100%); + transform: translateX(-100%); + -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + } - #loader-wrapper .load_title { - font-family: 'Open Sans'; - color: #FFF; - font-size: 19px; - width: 100%; - text-align: center; - z-index: 9999999999999; - position: absolute; - top: 60%; - opacity: 1; - line-height: 30px; - } + .loaded #loader-wrapper .loader-section.section-right { + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); + -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + } - #loader-wrapper .load_title span { - font-weight: normal; - font-style: italic; - font-size: 13px; - color: #FFF; - opacity: 0.5; - } - </style> -</head> + .loaded #loader { + opacity: 0; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + } -<body> - <div id="app"> - <div id="loader-wrapper"> - <div id="loader"></div> - <div class="loader-section section-left"></div> - <div class="loader-section section-right"></div> - <div class="load_title">姝e湪鍔犺浇,璇疯�愬績绛夊緟</div> + .loaded #loader-wrapper { + visibility: hidden; + -webkit-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); + -webkit-transition: all 0.3s 1s ease-out; + transition: all 0.3s 1s ease-out; + } + + .no-js #loader-wrapper { + display: none; + } + + .no-js h1 { + color: #222222; + } + + #loader-wrapper .load_title { + font-family: "Open Sans"; + color: #fff; + font-size: 19px; + width: 100%; + text-align: center; + z-index: 9999999999999; + position: absolute; + top: 60%; + opacity: 1; + line-height: 30px; + } + + #loader-wrapper .load_title span { + font-weight: normal; + font-style: italic; + font-size: 13px; + color: #fff; + opacity: 0.5; + } + </style> + </head> + + <body> + <div id="app"> + <div id="loader-wrapper"> + <div id="loader"></div> + <div class="loader-section section-left"></div> + <div class="loader-section section-right"></div> + <div class="load_title">姝e湪鍔犺浇,璇疯�愬績绛夊緟</div> + </div> </div> - </div> - <script type="module" src="/src/main.js"></script> -</body> - -</html> \ No newline at end of file + <script type="module" src="/src/main.js"></script> + </body> +</html> diff --git a/zhitan-vue/package.json b/zhitan-vue/package.json index c9e26a4..1f3c3cb 100644 --- a/zhitan-vue/package.json +++ b/zhitan-vue/package.json @@ -7,7 +7,7 @@ "type": "module", "scripts": { "dev": "vite", - "build:prod": "vite build", + "build": "vite build", "build:stage": "vite build --mode staging", "preview": "vite preview" }, diff --git a/zhitan-vue/public/logo.png b/zhitan-vue/public/logo.png new file mode 100644 index 0000000..2e6aab6 --- /dev/null +++ b/zhitan-vue/public/logo.png Binary files differ diff --git a/zhitan-vue/src/api/comprehensiveStatistics/comprehensive.js b/zhitan-vue/src/api/comprehensiveStatistics/comprehensive.js new file mode 100644 index 0000000..bd8dbb5 --- /dev/null +++ b/zhitan-vue/src/api/comprehensiveStatistics/comprehensive.js @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +//鍏ㄥ巶缁煎悎鑳借�楃粺璁� +export function getDataList(query) { + return request({ + url: '/statisticalData/comprehensiveStatistics/list', + method: 'get', + params: query + }) +} + +//鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘 +export function getlistChart(query) { + return request({ + url: '/statisticalData/comprehensiveStatistics/listChart', + method: 'get', + params: query + }) +} +export function exportList(query) { + return request({ + url: '/statisticalData/comprehensiveStatistics/export', + method: 'get', + params: query + }) +} +export function getEnergyList(query) { + return request({ + url: '/statisticalData/comprehensiveStatistics/getList', + method: 'get', + params: query + }) +} +//閲嶇偣璁惧鑳借�楁帓鍚� +export function energyList(query) { + return request({ + url: '/statisticalData/comprehensiveStatistics/energyList', + method: 'get', + params: query + }) +} +//璁惧 +export function getFacilityArchives() { + return request({ + url: '/statisticalData/comprehensiveStatistics/getFacilityArchives', + method: 'get' + }) +} +//閲嶇偣璁惧 +export function getPointFacility() { + return request({ + url: '/statisticalData/comprehensiveStatistics/getPointFacility', + method: 'get' + }) +} +export function getDeviceList(query) { + return request({ + url: '/statisticalData/comprehensiveStatistics/getDeviceList', + method: 'get', + params: query + }) +} +//鑾峰彇妯″瀷涓嬬殑鑳芥簮鍝佺 +export function energyDevice(query) { + return request({ + url: '/statisticalData/comprehensiveStatistics/energyDevice', + method: 'get', + params: query + }) +} diff --git a/zhitan-vue/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js b/zhitan-vue/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js new file mode 100644 index 0000000..701aa46 --- /dev/null +++ b/zhitan-vue/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js @@ -0,0 +1,26 @@ +import request from "@/utils/request" + +//鏌ヨ鏃ユ姤琛� +export function getDataList(query) { + return request({ + url: "/comprehensive/dailyComprehensive/list", + method: "get", + params: query, + }) +} +export function getlistChart(query) { + return request({ + url: "/comprehensive/dailyComprehensive/listChart", + method: "get", + params: query, + }) +} + +// 瀵煎嚭缁煎悎鎶ヨ〃 +export function exportList(query) { + return request({ + url: "/report/dailyReport/export", + method: "get", + params: query, + }) +} diff --git a/zhitan-vue/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js b/zhitan-vue/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js new file mode 100644 index 0000000..b3a5668 --- /dev/null +++ b/zhitan-vue/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' + +//鏌ヨ鏃ユ姤琛� +export function getDataList(query) { + return request({ + url: '/comprehensive/monthlyComprehensive/list', + method: 'get', + params: query + }) +} +export function getlistChart(query) { + return request({ + url: '/comprehensive/monthlyComprehensive/listChart', + method: 'get', + params: query + }) +} diff --git a/zhitan-vue/src/api/comprehensiveStatistics/processEnergyConsumption.js b/zhitan-vue/src/api/comprehensiveStatistics/processEnergyConsumption.js new file mode 100644 index 0000000..38858e5 --- /dev/null +++ b/zhitan-vue/src/api/comprehensiveStatistics/processEnergyConsumption.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + +//鍏ㄥ巶缁煎悎鑳借�楃粺璁� +export function getDataList(query) { + return request({ + url: '/statisticalData/processEnergyConsumption/list', + method: 'get', + params: query + }) +} + +//鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘 +export function getlistChart(query) { + return request({ + url: '/statisticalData/processEnergyConsumption/listChart', + method: 'get', + params: query + }) +} diff --git a/zhitan-vue/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js b/zhitan-vue/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js new file mode 100644 index 0000000..03cb827 --- /dev/null +++ b/zhitan-vue/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' + +//鏌ヨ鏃ユ姤琛� +export function getDataList(query) { + return request({ + url: '/comprehensive/yearComprehensive/list', + method: 'get', + params: query + }) +} +export function getlistChart(query) { + return request({ + url: '/comprehensive/yearComprehensive/listChart', + method: 'get', + params: query + }) +} diff --git a/zhitan-vue/src/api/svg/equipmentfile.js b/zhitan-vue/src/api/svg/equipmentfile.js new file mode 100644 index 0000000..ecdeb36 --- /dev/null +++ b/zhitan-vue/src/api/svg/equipmentfile.js @@ -0,0 +1,40 @@ +import request from "@/utils/request" + +// 淇敼缁勬�佸浘 +export function updateEquipmentfile(data) { + return request({ + url: "/basicSetup/equipmentfile", + method: "put", + data: data, + }) +} + +export function getAllCollectTag(data) { + return request({ + url: "/basicsetting/energyindex/filter", + method: "get", + params: data, + }) +} + +export function saveSettingApi(nodeId, data) { + return request({ + url: "/basicSetup/equipmentfile/setting/" + nodeId, + method: "put", + data: data, + }) +} + +export function getConfigure(nodeId) { + return request({ + url: "/basicSetup/equipmentfile/configure/" + nodeId, + method: "get", + }) +} + +export function getLiveData(tagCodes) { + return request({ + url: "/rtdb/retrieve/" + tagCodes, + method: "get", + }) +} diff --git a/zhitan-vue/src/assets/images/login-background.jpg b/zhitan-vue/src/assets/images/login-background.jpg new file mode 100644 index 0000000..9194e14 --- /dev/null +++ b/zhitan-vue/src/assets/images/login-background.jpg Binary files differ diff --git a/zhitan-vue/src/assets/images/login-background.png b/zhitan-vue/src/assets/images/login-background.png deleted file mode 100644 index b27391b..0000000 --- a/zhitan-vue/src/assets/images/login-background.png +++ /dev/null Binary files differ diff --git a/zhitan-vue/src/assets/images/login-bg.jpg b/zhitan-vue/src/assets/images/login-bg.jpg deleted file mode 100644 index d3ab6e6..0000000 --- a/zhitan-vue/src/assets/images/login-bg.jpg +++ /dev/null Binary files differ diff --git a/zhitan-vue/src/assets/styles/ruoyi.scss b/zhitan-vue/src/assets/styles/ruoyi.scss index d83440a..505048c 100644 --- a/zhitan-vue/src/assets/styles/ruoyi.scss +++ b/zhitan-vue/src/assets/styles/ruoyi.scss @@ -312,6 +312,10 @@ // tr:hover > td { // background-color: #141E4A; // } + + .el-table-fixed-column--left { + background-color: #110f2e !important; + } } } @@ -858,6 +862,9 @@ // tr:hover > td { // background-color: #141E4A; // } + .el-table-fixed-column--left { + background-color: #fff; + } } } diff --git a/zhitan-vue/src/components/FileUpload/index.vue b/zhitan-vue/src/components/FileUpload/index.vue index 044aeda..a1746dd 100644 --- a/zhitan-vue/src/components/FileUpload/index.vue +++ b/zhitan-vue/src/components/FileUpload/index.vue @@ -13,9 +13,14 @@ :headers="headers" class="upload-file-uploader" ref="fileUpload" + :drag="draggable" > <!-- 涓婁紶鎸夐挳 --> - <el-button type="primary">閫夊彇鏂囦欢</el-button> + <el-button v-if="!draggable" type="primary">閫夊彇鏂囦欢</el-button> + <div v-else> + <el-icon class="el-icon--upload"><upload-filled /></el-icon> + <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> + </div> </el-upload> <!-- 涓婁紶鎻愮ず --> <div class="el-upload__tip" v-if="showTip"> @@ -66,6 +71,11 @@ type: Boolean, default: true, }, + // 鏄惁鎷栨嫿涓婁紶 + draggable: { + type: Boolean, + default: false, + }, }) const { proxy } = getCurrentInstance() diff --git a/zhitan-vue/src/utils/ruoyi.js b/zhitan-vue/src/utils/ruoyi.js index 4efca08..74f7c30 100644 --- a/zhitan-vue/src/utils/ruoyi.js +++ b/zhitan-vue/src/utils/ruoyi.js @@ -1,5 +1,3 @@ - - /** * 閫氱敤js鏂规硶灏佽澶勭悊 * Copyright (c) 2019 ruoyi @@ -10,17 +8,20 @@ if (arguments.length === 0 || !time) { return null } - const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' + const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}" let date - if (typeof time === 'object') { + if (typeof time === "object") { date = time } else { - if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + if (typeof time === "string" && /^[0-9]+$/.test(time)) { time = parseInt(time) - } else if (typeof time === 'string') { - time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); + } else if (typeof time === "string") { + time = time + .replace(new RegExp(/-/gm), "/") + .replace("T", " ") + .replace(new RegExp(/\.[\d]{3}/gm), "") } - if ((typeof time === 'number') && (time.toString().length === 10)) { + if (typeof time === "number" && time.toString().length === 10) { time = time * 1000 } date = new Date(time) @@ -32,14 +33,16 @@ h: date.getHours(), i: date.getMinutes(), s: date.getSeconds(), - a: date.getDay() + a: date.getDay(), } const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { let value = formatObj[key] // Note: getDay() returns 0 on Sunday - if (key === 'a') { return ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�'][value] } + if (key === "a") { + return ["鏃�", "涓�", "浜�", "涓�", "鍥�", "浜�", "鍏�"][value] + } if (result.length > 0 && value < 10) { - value = '0' + value + value = "0" + value } return value || 0 }) @@ -49,89 +52,92 @@ // 琛ㄥ崟閲嶇疆 export function resetForm(refName) { if (this.$refs[refName]) { - this.$refs[refName].resetFields(); + this.$refs[refName].resetFields() } } // 娣诲姞鏃ユ湡鑼冨洿 export function addDateRange(params, dateRange, propName) { - let search = params; - search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; - dateRange = Array.isArray(dateRange) ? dateRange : []; - if (typeof (propName) === 'undefined') { - search.params['beginTime'] = dateRange[0]; - search.params['endTime'] = dateRange[1]; + let search = params + search.params = + typeof search.params === "object" && search.params !== null && !Array.isArray(search.params) ? search.params : {} + dateRange = Array.isArray(dateRange) ? dateRange : [] + if (typeof propName === "undefined") { + search.params["beginTime"] = dateRange[0] + search.params["endTime"] = dateRange[1] } else { - search.params['begin' + propName] = dateRange[0]; - search.params['end' + propName] = dateRange[1]; + search.params["begin" + propName] = dateRange[0] + search.params["end" + propName] = dateRange[1] } - return search; + return search } // 鍥炴樉鏁版嵁瀛楀吀 export function selectDictLabel(datas, value) { if (value === undefined) { - return ""; + return "" } - var actions = []; + var actions = [] Object.keys(datas).some((key) => { - if (datas[key].value == ('' + value)) { - actions.push(datas[key].label); - return true; + if (datas[key].value == "" + value) { + actions.push(datas[key].label) + return true } }) if (actions.length === 0) { - actions.push(value); + actions.push(value) } - return actions.join(''); + return actions.join("") } // 鍥炴樉鏁版嵁瀛楀吀锛堝瓧绗︿覆鏁扮粍锛� export function selectDictLabels(datas, value, separator) { - if (value === undefined || value.length ===0) { - return ""; + if (value === undefined || value.length === 0) { + return "" } if (Array.isArray(value)) { - value = value.join(","); + value = value.join(",") } - var actions = []; - var currentSeparator = undefined === separator ? "," : separator; - var temp = value.split(currentSeparator); + var actions = [] + var currentSeparator = undefined === separator ? "," : separator + var temp = value.split(currentSeparator) Object.keys(value.split(currentSeparator)).some((val) => { - var match = false; + var match = false Object.keys(datas).some((key) => { - if (datas[key].value == ('' + temp[val])) { - actions.push(datas[key].label + currentSeparator); - match = true; + if (datas[key].value == "" + temp[val]) { + actions.push(datas[key].label + currentSeparator) + match = true } }) if (!match) { - actions.push(temp[val] + currentSeparator); + actions.push(temp[val] + currentSeparator) } }) - return actions.join('').substring(0, actions.join('').length - 1); + return actions.join("").substring(0, actions.join("").length - 1) } // 瀛楃涓叉牸寮忓寲(%s ) export function sprintf(str) { - var args = arguments, flag = true, i = 1; + var args = arguments, + flag = true, + i = 1 str = str.replace(/%s/g, function () { - var arg = args[i++]; - if (typeof arg === 'undefined') { - flag = false; - return ''; + var arg = args[i++] + if (typeof arg === "undefined") { + flag = false + return "" } - return arg; - }); - return flag ? str : ''; + return arg + }) + return flag ? str : "" } // 杞崲瀛楃涓诧紝undefined,null绛夎浆鍖栦负"" export function parseStrEmpty(str) { if (!str || str == "undefined" || str == "null") { - return ""; + return "" } - return str; + return str } // 鏁版嵁鍚堝苟 @@ -139,16 +145,16 @@ for (var p in target) { try { if (target[p].constructor == Object) { - source[p] = mergeRecursive(source[p], target[p]); + source[p] = mergeRecursive(source[p], target[p]) } else { - source[p] = target[p]; + source[p] = target[p] } } catch (e) { - source[p] = target[p]; + source[p] = target[p] } } - return source; -}; + return source +} /** * 鏋勯�犳爲鍨嬬粨鏋勬暟鎹� @@ -159,88 +165,105 @@ */ export function handleTree(data, id, parentId, children) { let config = { - id: id || 'id', - parentId: parentId || 'parentId', - childrenList: children || 'children' - }; + id: id || "id", + parentId: parentId || "parentId", + childrenList: children || "children", + } - var childrenListMap = {}; - var nodeIds = {}; - var tree = []; + var childrenListMap = {} + var nodeIds = {} + var tree = [] for (let d of data) { - let parentId = d[config.parentId]; + let parentId = d[config.parentId] if (childrenListMap[parentId] == null) { - childrenListMap[parentId] = []; + childrenListMap[parentId] = [] } - nodeIds[d[config.id]] = d; - childrenListMap[parentId].push(d); + nodeIds[d[config.id]] = d + childrenListMap[parentId].push(d) } for (let d of data) { - let parentId = d[config.parentId]; + let parentId = d[config.parentId] if (nodeIds[parentId] == null) { - tree.push(d); + tree.push(d) } } for (let t of tree) { - adaptToChildrenList(t); + adaptToChildrenList(t) } function adaptToChildrenList(o) { if (childrenListMap[o[config.id]] !== null) { - o[config.childrenList] = childrenListMap[o[config.id]]; + o[config.childrenList] = childrenListMap[o[config.id]] } if (o[config.childrenList]) { for (let c of o[config.childrenList]) { - adaptToChildrenList(c); + adaptToChildrenList(c) } } } - return tree; + return tree } /** -* 鍙傛暟澶勭悊 -* @param {*} params 鍙傛暟 -*/ + * 鍙傛暟澶勭悊 + * @param {*} params 鍙傛暟 + */ export function tansParams(params) { - let result = '' + let result = "" for (const propName of Object.keys(params)) { - const value = params[propName]; - var part = encodeURIComponent(propName) + "="; - if (value !== null && value !== "" && typeof (value) !== "undefined") { - if (typeof value === 'object') { + const value = params[propName] + var part = encodeURIComponent(propName) + "=" + if (value !== null && value !== "" && typeof value !== "undefined") { + if (typeof value === "object") { for (const key of Object.keys(value)) { - if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { - let params = propName + '[' + key + ']'; - var subPart = encodeURIComponent(params) + "="; - result += subPart + encodeURIComponent(value[key]) + "&"; + if (value[key] !== null && value[key] !== "" && typeof value[key] !== "undefined") { + let params = propName + "[" + key + "]" + var subPart = encodeURIComponent(params) + "=" + result += subPart + encodeURIComponent(value[key]) + "&" } } } else { - result += part + encodeURIComponent(value) + "&"; + result += part + encodeURIComponent(value) + "&" } } } return result } - // 杩斿洖椤圭洰璺緞 export function getNormalPath(p) { - if (p.length === 0 || !p || p == 'undefined') { + if (p.length === 0 || !p || p == "undefined") { return p - }; - let res = p.replace('//', '/') - if (res[res.length - 1] === '/') { + } + let res = p.replace("//", "/") + if (res[res.length - 1] === "/") { return res.slice(0, res.length - 1) } - return res; + return res } // 楠岃瘉鏄惁涓篵lob鏍煎紡 export function blobValidate(data) { - return data.type !== 'application/json' + return data.type !== "application/json" +} + +// 閫氱敤涓嬭浇鏂规硶 +const baseURL = import.meta.env.VITE_APP_BASE_API +export function download(fileName) { + window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true +} + +// 閫氱敤涓嬭浇鏂规硶 showfileName锛氫笅杞藉悗鐨勬枃浠跺悕绉板甫鎵╁睍鍚�;filePath:瑕佷笅杞芥枃浠剁殑缁濆璺緞,甯︾潃鏂囦欢鍚嶅拰鎵╁睍鍚嶏紱deleteflage涓嬭浇瀹屾垚鍚庢槸鍚﹀垹闄ゆ枃浠� +export function fileDownload(showfileName, filePath, deleteflage) { + window.location.href = + baseURL + + "/common/downloadAssign?showFileName=" + + encodeURI(showfileName) + + "&filePath=" + + encodeURI(filePath) + + "&delete=" + + deleteflage } diff --git a/zhitan-vue/src/views/alarmmanage/energyconsumption/energyConsumption.vue b/zhitan-vue/src/views/alarmmanage/energyconsumption/energyConsumption.vue index 38a308a..4a3a835 100644 --- a/zhitan-vue/src/views/alarmmanage/energyconsumption/energyConsumption.vue +++ b/zhitan-vue/src/views/alarmmanage/energyconsumption/energyConsumption.vue @@ -8,16 +8,28 @@ <div class="form-card"> <el-form :model="form" ref="queryRef" :inline="true" label-width="85px"> <el-form-item label="鏈熼棿" prop="timeType"> - <el-select v-model="queryParams.timeType" placeholder="鏈熼棿" clearable style="width: 100%" - @change="handleTimeType"> + <el-select + v-model="queryParams.timeType" + placeholder="鏈熼棿" + clearable + style="width: 100%" + @change="handleTimeType" + > <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="鏃堕棿"> - <el-date-picker v-model="queryParams.dataTime" :clearable="false" + <el-date-picker + v-model="queryParams.dataTime" + :clearable="false" :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" - :format="queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD'" - value-format="YYYY-MM-DD" placeholder="鏃堕棿" style="width: 100%" /> + :format=" + queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' + " + value-format="YYYY-MM-DD" + placeholder="鏃堕棿" + style="width: 100%" + /> </el-form-item> <el-form-item> <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button> @@ -55,70 +67,69 @@ </template> <script setup> -import * as echarts from 'echarts'; -import { onMounted, reactive, ref } from 'vue'; -import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; -const { proxy } = getCurrentInstance(); -const { period } = proxy.useDict("period"); -let { alarm_record_category } = proxy.useDict("alarm_record_category"); +import * as echarts from "echarts" +import { onMounted, reactive, ref } from "vue" +import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" +const { proxy } = getCurrentInstance() +const { period } = proxy.useDict("period") +let { alarm_record_category } = proxy.useDict("alarm_record_category") let energyTypeList = ref([]) function getEnergyTypeList() { listEnergyTypeList().then((res) => { - energyTypeList.value = res.data; - }); + energyTypeList.value = res.data + }) } getEnergyTypeList() function formatterLabel(list, value) { - console.log(list, value); + console.log(list, value) - let dict = list.find(item => item.enersno == value) - return dict ? dict.enername : '' + let dict = list.find((item) => item.enersno == value) + return dict ? dict.enername : "" } - let queryParams = ref({ timeType: null, dataTime: null, - nodeId: null + nodeId: null, }) -import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage"; -import { el } from 'element-plus/es/locales.mjs'; -let form = ref({}); +import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage" +import { el } from "element-plus/es/locales.mjs" +let form = ref({}) let currentNode = ref() function handleTimeType(e) { - queryParams.value.timeType = e; - queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); + queryParams.value.timeType = e + queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") } function handleNodeClick(e) { currentNode.value = e queryParams.value.nodeId = e.id - handleTimeType('YEAR') + handleTimeType("YEAR") getByNodeIdFun() } function getByNodeIdFun() { - getByNodeId(queryParams.value).then(res => { + getByNodeId(queryParams.value).then((res) => { let alarmList = [] let energyList = [] let alarmNumberList = { data: [], - xAxisData: [] + xAxisData: [], } - console.log(111, res); + console.log(111, res) if (res.code == 200) { let { data } = res - alarmList = data.alarmProportion.map(item => { + alarmList = data.alarmProportion.map((item) => { return { name: proxy.selectDictLabel(alarm_record_category.value, item.energyName), - value: item.percentage + value: item.percentage, } }) - energyList = data.energyProportion.map(item => { + energyList = data.energyProportion.map((item) => { return { name: formatterLabel(energyTypeList.value, item.energyName), - value: item.percentage + value: item.percentage, } }) for (const item of data.chartDataList) { @@ -126,9 +137,9 @@ alarmNumberList.data.push(item.yvalue) } - pieChart('Chart1', alarmList, '鎶ヨ绫诲瀷鍗犳瘮') - pieChart('Chart2', energyList, '鑳芥簮绫诲瀷鍗犳瘮') - getChart('Chart3', alarmNumberList) + pieChart("Chart1", alarmList, "鎶ヨ绫诲瀷鍗犳瘮") + pieChart("Chart2", energyList, "鑳芥簮绫诲瀷鍗犳瘮") + getChart("Chart3", alarmNumberList) } }) } @@ -138,227 +149,233 @@ getByNodeIdFun() } function resetQuery() { - handleTimeType('YEAR') + handleTimeType("YEAR") getByNodeIdFun() } - function pieChart(Id, data, name) { - let total = 0; + let total = 0 data.forEach(function (val, idx, arr) { - total += val.value; + total += val.value }) - const myChart = echarts.init(document.getElementById(Id)); + const myChart = echarts.init(document.getElementById(Id)) myChart.setOption({ - color: ['#4D94FF', '#00C27C', '#F0142F', '#F2D261', '#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0'], + color: [ + "#4D94FF", + "#00C27C", + "#F0142F", + "#F2D261", + "#0E7CE2", + "#FF8352", + "#E271DE", + "#F8456B", + "#00FFFF", + "#4AEAB0", + ], grid: { - top: '20%', - left: '1%', - right: '1%', - bottom: '0%', - containLabel: true + top: "20%", + left: "1%", + right: "1%", + bottom: "0%", + containLabel: true, }, tooltip: { - trigger: 'item' + trigger: "item", }, legend: { - orient: 'vertical', - top: 'center', - icon: 'circle', + orient: "vertical", + top: "center", + icon: "circle", itemWidth: 14, itemHeight: 14, - right: '2%', + right: "2%", itemGap: 10, textStyle: { - align: 'left', - verticalAlign: 'middle', + align: "left", + verticalAlign: "middle", rich: { name: { - color: '#999', + color: "#999", fontSize: 14, }, value: { - color: '#999', + color: "#999", fontSize: 14, }, rate: { - color: '#999', + color: "#999", fontSize: 14, }, }, }, formatter: (name) => { if (data.length) { - let target, percent; + let target, percent for (let i = 0; i < data.length; i++) { if (data[i].name === name) { - target = data[i].value; - percent = ((target / total) * 100).toFixed(2); + target = data[i].value + percent = ((target / total) * 100).toFixed(2) } } - return `{name|${name} }{value| ${target}} {rate| ${percent}%}`; - + return `{name|${name} }{value| ${target}} {rate| ${percent}%}` } else { - return `{name|${name} }{value| ${0}} {rate| ${0}%}`; - + return `{name|${name} }{value| ${0}} {rate| ${0}%}` } }, }, - series: [{ - name, - type: 'pie', - radius: ['45%', '70%'], - center: ['35%', '50%'], - avoidLabelOverlap: false, - label: { - show: false, - overflow: 'none', - formatter: '{b} {d}% \n {c} tce', + series: [ + { + name, + type: "pie", + radius: ["45%", "70%"], + center: ["35%", "50%"], + avoidLabelOverlap: false, + label: { + show: false, + overflow: "none", + formatter: "{b} {d}% \n {c} tce", + }, + data, }, - data, - }] + ], }) } function getChart(Id, dataList) { - const myChart3 = echarts.init(document.getElementById(Id)); - myChart3.setOption( - { - - grid: { - left: '3%', - right: '2%', - bottom: '2%', - containLabel: true + const myChart3 = echarts.init(document.getElementById(Id)) + myChart3.setOption({ + grid: { + left: "3%", + right: "2%", + bottom: "2%", + containLabel: true, + }, + tooltip: { + trigger: "axis", + }, + xAxis: { + type: "category", + // boundaryGap: false, + data: dataList.xAxisData, + axisPointer: { + type: "shadow", }, - tooltip: { - trigger: 'axis', - + axisTick: { + show: false, + alignWithLabel: true, + length: 5, }, - xAxis: { - type: 'category', - // boundaryGap: false, - data: dataList.xAxisData, - axisPointer: { - type: 'shadow' + // 鍧愭爣杞村埢搴︾嚎鏍峰紡 + axisTick: { + show: false, + length: 5, + lineStyle: { + color: "#ddd", }, - axisTick: { - show: false, - alignWithLabel: true, - length: 5 - }, - // 鍧愭爣杞村埢搴︾嚎鏍峰紡 - axisTick: { - show: false, - length: 5, - lineStyle: { - color: '#ddd' - } - }, - - // 鍒嗗壊绾� - splitLine: { - show: false, - lineStyle: { - type: 'dashed', - color: 'rgba(220,222,226,0.4)' - } - }, - axisLabel: { - color: '#999', - fontSize: 14, - padding: [5, 0, 0, 0], - // formatter: '{value} ml' - } }, - yAxis: { - type: 'value', - name: '锛堟锛�', - // 璁剧疆鍚嶇О鏍峰紡 - nameTextStyle: { - color: ' #CEE3FF', - fontSize: 14, - padding: [0, 0, 5, 0], - }, - // 鍧愭爣杞村埢搴� - axisTick: { - show: false, - alignWithLabel: true, - length: 5 - }, - // 鍧愭爣杞村埢搴︾嚎鏍峰紡 - axisTick: { - show: false, - length: 5, - lineStyle: { - color: '' - } - }, - // 鍒嗗壊绾� - splitLine: { - show: true, - lineStyle: { - type: 'dashed', - color: 'rgba(220,222,226,0.4)' - } + // 鍒嗗壊绾� + splitLine: { + show: false, + lineStyle: { + type: "dashed", + color: "rgba(220,222,226,0.4)", }, - - // 鍧愭爣杞村埢搴﹂棿闅� - // interval: '50', - // // 鍧愭爣杞存渶灏忓�� - // min: 'dataMin', - // // 鍧愭爣杞存渶澶у�� - // max: 'dataMax', - // // 鍧愭爣杞村皬鏁扮偣绮惧害 - // precision: 0, - // // 鍧愭爣杞村埢搴︽枃鏈殑甯冨眬鏈濆悜 - // position: 'left' - axisLabel: { - color: '#B2B8C2', - fontSize: 14, - // formatter: '{value} ml' - } }, - series: [ - { - name: "鎶ヨ娆℃暟", - type: "bar", - barWidth: '17', - stack: 'number', - data: dataList.data, - tooltip: { - show: false, - } + axisLabel: { + color: "#999", + fontSize: 14, + padding: [5, 0, 0, 0], + // formatter: '{value} ml' + }, + }, + yAxis: { + type: "value", + name: "锛堟锛�", + // 璁剧疆鍚嶇О鏍峰紡 + nameTextStyle: { + color: " #CEE3FF", + fontSize: 14, + padding: [0, 0, 5, 0], + }, + // 鍧愭爣杞村埢搴� + axisTick: { + show: false, + alignWithLabel: true, + length: 5, + }, + // 鍧愭爣杞村埢搴︾嚎鏍峰紡 + axisTick: { + show: false, + length: 5, + lineStyle: { + color: "", }, - { - name: '鎶ヨ娆℃暟', - type: 'line', - symbol: 'none', // 璁剧疆涓� 'none' 鍘绘帀鍦嗙偣 - lineStyle: { - color: '#EE0303' - }, - data: dataList.data, - }, - ] - }) + }, - window.addEventListener("resize", () => { - myChart1.resize(); - myChart2.resize(); - myChart3.resize(); - }, { passive: true }); + // 鍒嗗壊绾� + splitLine: { + show: true, + lineStyle: { + type: "dashed", + color: "rgba(220,222,226,0.4)", + }, + }, + + // 鍧愭爣杞村埢搴﹂棿闅� + // interval: '50', + // // 鍧愭爣杞存渶灏忓�� + // min: 'dataMin', + // // 鍧愭爣杞存渶澶у�� + // max: 'dataMax', + // // 鍧愭爣杞村皬鏁扮偣绮惧害 + // precision: 0, + // // 鍧愭爣杞村埢搴︽枃鏈殑甯冨眬鏈濆悜 + // position: 'left' + axisLabel: { + color: "#B2B8C2", + fontSize: 14, + // formatter: '{value} ml' + }, + }, + series: [ + { + name: "鎶ヨ娆℃暟", + type: "bar", + barWidth: "12", + stack: "number", + data: dataList.data, + tooltip: { + show: false, + }, + }, + { + name: "鎶ヨ娆℃暟", + type: "line", + symbol: "none", // 璁剧疆涓� 'none' 鍘绘帀鍦嗙偣 + lineStyle: { + color: "#EE0303", + }, + data: dataList.data, + }, + ], + }) + + window.addEventListener( + "resize", + () => { + myChart1.resize() + myChart2.resize() + myChart3.resize() + }, + { passive: true } + ) } - - - - </script> <style scoped lang="scss"> @import "@/assets/styles/page.scss"; - .chart-box { - height: calc((100vh - 410px)/2) !important; + height: calc((100vh - 410px) / 2) !important; } -</style> \ No newline at end of file +</style> diff --git a/zhitan-vue/src/views/alarmmanage/measuremen/measuremen.vue b/zhitan-vue/src/views/alarmmanage/measuremen/measuremen.vue index b46e7a2..cbd3852 100644 --- a/zhitan-vue/src/views/alarmmanage/measuremen/measuremen.vue +++ b/zhitan-vue/src/views/alarmmanage/measuremen/measuremen.vue @@ -8,16 +8,28 @@ <div class="form-card"> <el-form :model="form" ref="queryRef" :inline="true" label-width="85px"> <el-form-item label="鏈熼棿" prop="timeType"> - <el-select v-model="queryParams.timeType" placeholder="鏈熼棿" clearable style="width: 120px" - @change="handleTimeType"> + <el-select + v-model="queryParams.timeType" + placeholder="鏈熼棿" + clearable + style="width: 120px" + @change="handleTimeType" + > <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="鏃堕棿"> - <el-date-picker v-model="queryParams.dataTime" :clearable="false" + <el-date-picker + v-model="queryParams.dataTime" + :clearable="false" :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" - :format="queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD'" - value-format="YYYY-MM-DD" placeholder="鏃堕棿" style="width: 100%" /> + :format=" + queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' + " + value-format="YYYY-MM-DD" + placeholder="鏃堕棿" + style="width: 100%" + /> </el-form-item> <el-form-item> <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button> @@ -27,8 +39,10 @@ </div> <div class="mt20 mb20 text-center data-item"> - 鏈敤鑳藉崟鍏冩寚鏍�<span>{{ dataArray.indexCount }}</span>涓紝 - 鏈勾搴︽姤璀�<span>{{ dataArray.yearCount }}</span>娆★紝鏈湀<span>{{ dataArray.monthCount }}</span>娆� + 鏈敤鑳藉崟鍏冩寚鏍�<span>{{ dataArray.indexCount }}</span + >涓紝 鏈勾搴︽姤璀�<span>{{ dataArray.yearCount }}</span + >娆★紝鏈湀<span>{{ dataArray.monthCount }}</span + >娆� </div> <el-row :gutter="24" class="mb20"> <el-col :span="12"> @@ -60,71 +74,70 @@ </template> <script setup> -import * as echarts from 'echarts'; -import { onMounted, reactive, ref } from 'vue'; -import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; -const { proxy } = getCurrentInstance(); -const { period } = proxy.useDict("period"); -let { alarm_record_category } = proxy.useDict("alarm_record_category"); +import * as echarts from "echarts" +import { onMounted, reactive, ref } from "vue" +import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" +const { proxy } = getCurrentInstance() +const { period } = proxy.useDict("period") +let { alarm_record_category } = proxy.useDict("alarm_record_category") let energyTypeList = ref([]) function getEnergyTypeList() { listEnergyTypeList().then((res) => { - energyTypeList.value = res.data; - queryParams.value.energyType = energyTypeList.value[0].enersno; - }); + energyTypeList.value = res.data + queryParams.value.energyType = energyTypeList.value[0].enersno + }) } getEnergyTypeList() function formatterLabel(list, value) { - let dict = list.find(item => item.enersno == value) - return dict ? dict.enername : '' + let dict = list.find((item) => item.enersno == value) + return dict ? dict.enername : "" } - let queryParams = ref({ timeType: null, dataTime: null, - nodeId: null + nodeId: null, }) -import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage"; -import { el } from 'element-plus/es/locales.mjs'; -let form = ref({}); +import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage" +import { el } from "element-plus/es/locales.mjs" +let form = ref({}) let currentNode = ref() function handleTimeType(e) { - queryParams.value.timeType = e; - queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); + queryParams.value.timeType = e + queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") } function handleNodeClick(e) { currentNode.value = e queryParams.value.nodeId = e.id - handleTimeType(period.value[0].value); + handleTimeType(period.value[0].value) getByNodeIdFun() } function getByNodeIdFun() { - getByNodeId(queryParams.value).then(res => { + getByNodeId(queryParams.value).then((res) => { let alarmList = [] let energyList = [] let alarmNumberList = { data: [], - xAxisData: [] + xAxisData: [], } if (res.code == 200) { let { data } = res - alarmList = data.alarmProportion.map(item => { + alarmList = data.alarmProportion.map((item) => { return { name: proxy.selectDictLabel(alarm_record_category.value, item.energyName), value: item.count, - percentage: item.percentage + percentage: item.percentage, } }) - energyList = data.energyProportion.map(item => { + energyList = data.energyProportion.map((item) => { return { name: formatterLabel(energyTypeList.value, item.energyName), value: item.count, - percentage: item.percentage + percentage: item.percentage, } }) for (const item of data.chartDataList) { @@ -132,9 +145,9 @@ alarmNumberList.data.push(item.yvalue) } - pieChart('Chart1', alarmList, '鎶ヨ绫诲瀷鍗犳瘮') - pieChart('Chart2', energyList, '鑳芥簮绫诲瀷鍗犳瘮') - getChart('Chart3', alarmNumberList) + pieChart("Chart1", alarmList, "鎶ヨ绫诲瀷鍗犳瘮") + pieChart("Chart2", energyList, "鑳芥簮绫诲瀷鍗犳瘮") + getChart("Chart3", alarmNumberList) } }) } @@ -144,16 +157,16 @@ getByNodeIdFun() } function resetQuery() { - handleTimeType('YEAR') + handleTimeType("YEAR") getByNodeIdFun() } let dataArray = ref({ indexCount: 0, yearCount: 0, - monthCount: 0 + monthCount: 0, }) function getCountInfoFun() { - getCountInfo(queryParams.value).then(res => { + getCountInfo(queryParams.value).then((res) => { if (res.code == 200) { dataArray.value = res.data } @@ -163,45 +176,56 @@ getCountInfoFun() function pieChart(Id, data, name) { console.log(data) - let total = 0; + let total = 0 data.forEach(function (val, idx, arr) { - total += val.value; + total += val.value }) - const myChart = echarts.init(document.getElementById(Id)); + const myChart = echarts.init(document.getElementById(Id)) myChart.setOption({ - color: ['#4D94FF', '#00C27C', '#F0142F', '#F2D261', '#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0'], + color: [ + "#4D94FF", + "#00C27C", + "#F0142F", + "#F2D261", + "#0E7CE2", + "#FF8352", + "#E271DE", + "#F8456B", + "#00FFFF", + "#4AEAB0", + ], grid: { - top: '20%', - left: '1%', - right: '1%', - bottom: '0%', - containLabel: true + top: "20%", + left: "1%", + right: "1%", + bottom: "0%", + containLabel: true, }, tooltip: { - trigger: 'item' + trigger: "item", }, legend: { - orient: 'vertical', - top: 'center', - icon: 'circle', + orient: "vertical", + top: "center", + icon: "circle", itemWidth: 14, itemHeight: 14, - right: '2%', + right: "2%", itemGap: 10, textStyle: { - align: 'left', - verticalAlign: 'middle', + align: "left", + verticalAlign: "middle", rich: { name: { - color: '#999', + color: "#999", fontSize: 14, }, value: { - color: '#999', + color: "#999", fontSize: 14, }, rate: { - color: '#999', + color: "#999", fontSize: 14, }, }, @@ -209,167 +233,165 @@ formatter: (name) => { for (let i = 0; i < data.length; i++) { if (data[i].name === name) { - return `{name|${data[i].name} }{value| ${data[i].value}} {rate| ${data[i].percentage}%}`; + return `{name|${data[i].name} }{value| ${data[i].value}} {rate| ${data[i].percentage}%}` } } }, }, - series: [{ - name, - type: 'pie', - radius: ['45%', '70%'], - center: ['35%', '50%'], - avoidLabelOverlap: false, - label: { - show: false, - overflow: 'none', - formatter: '{b} {d}% \n {c} tce', + series: [ + { + name, + type: "pie", + radius: ["45%", "70%"], + center: ["35%", "50%"], + avoidLabelOverlap: false, + label: { + show: false, + overflow: "none", + formatter: "{b} {d}% \n {c} tce", + }, + data, }, - data, - }] + ], }) } function getChart(Id, dataList) { - const myChart3 = echarts.init(document.getElementById(Id)); - myChart3.setOption( - { - - grid: { - left: '3%', - right: '2%', - bottom: '2%', - containLabel: true + const myChart3 = echarts.init(document.getElementById(Id)) + myChart3.setOption({ + grid: { + left: "3%", + right: "2%", + bottom: "2%", + containLabel: true, + }, + tooltip: { + trigger: "axis", + }, + xAxis: { + type: "category", + // boundaryGap: false, + data: dataList.xAxisData, + axisPointer: { + type: "shadow", }, - tooltip: { - trigger: 'axis', - + axisTick: { + show: false, + alignWithLabel: true, + length: 5, }, - xAxis: { - type: 'category', - // boundaryGap: false, - data: dataList.xAxisData, - axisPointer: { - type: 'shadow' + // 鍧愭爣杞村埢搴︾嚎鏍峰紡 + axisTick: { + show: false, + length: 5, + lineStyle: { + color: "#ddd", }, - axisTick: { - show: false, - alignWithLabel: true, - length: 5 - }, - // 鍧愭爣杞村埢搴︾嚎鏍峰紡 - axisTick: { - show: false, - length: 5, - lineStyle: { - color: '#ddd' - } - }, - - // 鍒嗗壊绾� - splitLine: { - show: false, - lineStyle: { - type: 'dashed', - color: 'rgba(220,222,226,0.4)' - } - }, - axisLabel: { - color: '#999', - fontSize: 14, - padding: [5, 0, 0, 0], - // formatter: '{value} ml' - } }, - yAxis: { - type: 'value', - name: '锛堟锛�', - // 璁剧疆鍚嶇О鏍峰紡 - nameTextStyle: { - color: ' #CEE3FF', - fontSize: 14, - padding: [0, 0, 5, 0], - }, - // 鍧愭爣杞村埢搴� - axisTick: { - show: false, - alignWithLabel: true, - length: 5 - }, - // 鍧愭爣杞村埢搴︾嚎鏍峰紡 - axisTick: { - show: false, - length: 5, - lineStyle: { - color: '' - } - }, - // 鍒嗗壊绾� - splitLine: { - show: true, - lineStyle: { - type: 'dashed', - color: 'rgba(220,222,226,0.4)' - } + // 鍒嗗壊绾� + splitLine: { + show: false, + lineStyle: { + type: "dashed", + color: "rgba(220,222,226,0.4)", }, - - // 鍧愭爣杞村埢搴﹂棿闅� - // interval: '50', - // // 鍧愭爣杞存渶灏忓�� - // min: 'dataMin', - // // 鍧愭爣杞存渶澶у�� - // max: 'dataMax', - // // 鍧愭爣杞村皬鏁扮偣绮惧害 - // precision: 0, - // // 鍧愭爣杞村埢搴︽枃鏈殑甯冨眬鏈濆悜 - // position: 'left' - axisLabel: { - color: '#B2B8C2', - fontSize: 14, - // formatter: '{value} ml' - } }, - series: [ - { - name: "鎶ヨ娆℃暟", - type: "bar", - barWidth: '17', - stack: 'number', - data: dataList.data, - tooltip: { - show: false, - } + axisLabel: { + color: "#999", + fontSize: 14, + padding: [5, 0, 0, 0], + // formatter: '{value} ml' + }, + }, + yAxis: { + type: "value", + name: "锛堟锛�", + // 璁剧疆鍚嶇О鏍峰紡 + nameTextStyle: { + color: " #CEE3FF", + fontSize: 14, + padding: [0, 0, 5, 0], + }, + // 鍧愭爣杞村埢搴� + axisTick: { + show: false, + alignWithLabel: true, + length: 5, + }, + // 鍧愭爣杞村埢搴︾嚎鏍峰紡 + axisTick: { + show: false, + length: 5, + lineStyle: { + color: "", }, - { - name: '鎶ヨ娆℃暟', - type: 'line', - symbol: 'none', // 璁剧疆涓� 'none' 鍘绘帀鍦嗙偣 - lineStyle: { - color: '#EE0303' - }, - data: dataList.data, - }, - ] - }) + }, - window.addEventListener("resize", () => { - myChart1.resize(); - myChart2.resize(); - myChart3.resize(); - }, { passive: true }); + // 鍒嗗壊绾� + splitLine: { + show: true, + lineStyle: { + type: "dashed", + color: "rgba(220,222,226,0.4)", + }, + }, + + // 鍧愭爣杞村埢搴﹂棿闅� + // interval: '50', + // // 鍧愭爣杞存渶灏忓�� + // min: 'dataMin', + // // 鍧愭爣杞存渶澶у�� + // max: 'dataMax', + // // 鍧愭爣杞村皬鏁扮偣绮惧害 + // precision: 0, + // // 鍧愭爣杞村埢搴︽枃鏈殑甯冨眬鏈濆悜 + // position: 'left' + axisLabel: { + color: "#B2B8C2", + fontSize: 14, + // formatter: '{value} ml' + }, + }, + series: [ + { + name: "鎶ヨ娆℃暟", + type: "bar", + barWidth: "12", + stack: "number", + data: dataList.data, + tooltip: { + show: false, + }, + }, + { + name: "鎶ヨ娆℃暟", + type: "line", + symbol: "none", // 璁剧疆涓� 'none' 鍘绘帀鍦嗙偣 + lineStyle: { + color: "#EE0303", + }, + data: dataList.data, + }, + ], + }) + + window.addEventListener( + "resize", + () => { + myChart1.resize() + myChart2.resize() + myChart3.resize() + }, + { passive: true } + ) } - - - - </script> <style scoped lang="scss"> @import "@/assets/styles/page.scss"; - .chart-box { - height: calc((100vh - 410px)/2) !important; + height: calc((100vh - 410px) / 2) !important; } .data-item { @@ -378,7 +400,7 @@ font-weight: bold; span { - color: #397AEE; + color: #397aee; margin: 0 5px; } } @@ -390,10 +412,9 @@ font-weight: bold; span { - color: #397AEE; + color: #397aee; margin: 0 5px; } } - } -</style> \ No newline at end of file +</style> diff --git a/zhitan-vue/src/views/carbonemission/carbonEmission.vue b/zhitan-vue/src/views/carbonemission/carbonEmission.vue index 8d49140..550abd7 100644 --- a/zhitan-vue/src/views/carbonemission/carbonEmission.vue +++ b/zhitan-vue/src/views/carbonemission/carbonEmission.vue @@ -8,42 +8,40 @@ <div class="form-card"> <el-form :model="queryParams" ref="queryRef" :inline="true"> <el-form-item label="鏈熼棿" prop="timeType"> - <el-select v-model="queryParams.timeType" placeholder="鏈熼棿" clearable style="width: 120px" - @change="handleTimeType"> + <el-select + v-model="queryParams.timeType" + placeholder="鏈熼棿" + clearable + style="width: 120px" + @change="handleTimeType" + > <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="鏃堕棿"> - <el-date-picker v-model="queryParams.dataTime" :type="queryParams.timeType == 'YEAR' - ? 'year' - : queryParams.timeType == 'MONTH' - ? 'month' - : 'date' - " :format="queryParams.timeType == 'YEAR' - ? 'YYYY' - : queryParams.timeType == 'MONTH' - ? 'YYYY-MM' - : 'YYYY-MM-DD' - " value-format="YYYY-MM-DD" placeholder="鏃堕棿" style="width: 100%" /> + <el-date-picker + v-model="queryParams.dataTime" + :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" + :format=" + queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' + " + value-format="YYYY-MM-DD" + placeholder="鏃堕棿" + style="width: 100%" + /> </el-form-item> <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery"> - 鎼滅储 - </el-button> + <el-button type="primary" icon="Search" @click="handleQuery"> 鎼滅储 </el-button> <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button> </el-form-item> <el-form-item> - <el-button type="primary" icon="Download" @click="handleExport"> - 瀵煎嚭 - </el-button> + <el-button type="primary" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button> </el-form-item> </el-form> </div> - <div style=" - height: calc(100vh - 220px) !important; - max-height: calc(100vh - 220px) !important; - overflow-y: auto; - "> + <div + style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" + > <div class="card-list" v-if="listTop.length > 1"> <el-button @click="dialogVisible = true"> 鏌ョ湅鏇村 </el-button> </div> @@ -52,9 +50,12 @@ <template v-for="(item, index) in row" :key="index"> <div class="card-list-item"> <div class="item-top"> - <div class="top-icon" :style="{ - backgroundImage: 'url(' + bgList[index].icon + ')', - }" /> + <div + class="top-icon" + :style="{ + backgroundImage: 'url(' + bgList[index].icon + ')', + }" + /> <div class="top-right"> {{ item.allEneryType }} </div> @@ -69,12 +70,10 @@ <div class="bottom-left">鍚屾瘮</div> <div class="bottom-right" :style="{ color: bgList[index].color }"> {{ Math.abs(item.yoyEnery) }}% - <el-icon v-if="!!item.yoyEnery" :color="item.yoyEnery > 0 - ? 'green' - : item.yoyEnery < 0 - ? 'red' - : '' - "> + <el-icon + v-if="!!item.yoyEnery" + :color="item.yoyEnery > 0 ? 'green' : item.yoyEnery < 0 ? 'red' : ''" + > <Top v-if="item.yoyEnery > 0" /> <Bottom v-if="item.yoyEnery < 0" /> </el-icon> @@ -84,25 +83,23 @@ </template> </div> </template> - <BaseCard :title="queryParams.nodeName + - '-纰虫帓鏀鹃噺鍚岀幆姣�(' + - queryParams.dataTime + - ')' - "> + <BaseCard :title="queryParams.nodeName + '-纰虫帓鏀鹃噺鍚岀幆姣�(' + queryParams.dataTime + ')'"> <div class="chart-box" v-loading="loading"> <div id="Chart1" /> </div> </BaseCard> - <BaseCard :title="queryParams.nodeName + - '-纰虫帓鏀鹃噺缁熻鍒嗘瀽琛�(' + - queryParams.dataTime + - ')' - "> + <BaseCard :title="queryParams.nodeName + '-纰虫帓鏀鹃噺缁熻鍒嗘瀽琛�(' + queryParams.dataTime + ')'"> <div class="table-box"> <el-table :data="listBottom" v-loading="loading"> <el-table-column label="鏃堕棿" align="center" key="xaxis" prop="xaxis" :show-overflow-tooltip="true" /> - <el-table-column label="鐮存帓鏀鹃噺(tCO鈧俥) - " align="center" key="yaxis" prop="yaxis" :show-overflow-tooltip="true" /> + <el-table-column + label="鐮存帓鏀鹃噺(tCO鈧俥) + " + align="center" + key="yaxis" + prop="yaxis" + :show-overflow-tooltip="true" + /> <el-table-column label="鍚屾瘮" align="center" key="yoy" prop="yoy" :show-overflow-tooltip="true" /> <el-table-column label="鐜瘮" align="center" key="qoq" prop="qoq" :show-overflow-tooltip="true" /> </el-table> @@ -117,9 +114,12 @@ <template v-for="(item, index) in row" :key="index"> <div class="card-list-item"> <div class="item-top"> - <div class="top-icon" :style="{ - backgroundImage: 'url(' + bgList[index].icon + ')', - }" /> + <div + class="top-icon" + :style="{ + backgroundImage: 'url(' + bgList[index].icon + ')', + }" + /> <div class="top-right"> {{ item.allEneryType }} </div> @@ -134,12 +134,7 @@ <div class="bottom-left">鍚屾瘮</div> <div class="bottom-right" :style="{ color: bgList[index].color }"> {{ Math.abs(item.yoyEnery) }}% - <el-icon v-if="!!item.yoyEnery" :color="item.yoyEnery > 0 - ? 'green' - : item.yoyEnery < 0 - ? 'red' - : '' - "> + <el-icon v-if="!!item.yoyEnery" :color="item.yoyEnery > 0 ? 'green' : item.yoyEnery < 0 ? 'red' : ''"> <Top v-if="item.yoyEnery > 0" /> <Bottom v-if="item.yoyEnery < 0" /> </el-icon> @@ -153,29 +148,26 @@ </div> </template> <script setup name="carbonEmission"> -import { - listUpCarbonemission, - listMiddleCarbonemission, -} from "@/api/carbonemission/carbonemission"; -import * as echarts from "echarts"; -const { proxy } = getCurrentInstance(); -import { useRoute } from "vue-router"; -const { period } = proxy.useDict("period"); -import useSettingsStore from "@/store/modules/settings"; -const settingsStore = useSettingsStore(); +import { listUpCarbonemission, listMiddleCarbonemission } from "@/api/carbonemission/carbonemission" +import * as echarts from "echarts" +const { proxy } = getCurrentInstance() +import { useRoute } from "vue-router" +const { period } = proxy.useDict("period") +import useSettingsStore from "@/store/modules/settings" +const settingsStore = useSettingsStore() watch( () => settingsStore.sideTheme, (val) => { - getList(); + getList() } -); -const loading = ref(false); -const dialogVisible = ref(false); -import icon1 from "@/assets/images/period/icon1.png"; -import icon2 from "@/assets/images/period/icon2.png"; -import icon3 from "@/assets/images/period/icon3.png"; -import icon4 from "@/assets/images/period/icon4.png"; -import icon5 from "@/assets/images/period/icon5.png"; +) +const loading = ref(false) +const dialogVisible = ref(false) +import icon1 from "@/assets/images/period/icon1.png" +import icon2 from "@/assets/images/period/icon2.png" +import icon3 from "@/assets/images/period/icon3.png" +import icon4 from "@/assets/images/period/icon4.png" +import icon5 from "@/assets/images/period/icon5.png" const bgList = ref([ { icon: icon1, @@ -197,9 +189,9 @@ icon: icon5, color: "#78e801", }, -]); -const listTop = ref([]); -const listBottom = ref([]); +]) +const listTop = ref([]) +const listBottom = ref([]) const data = reactive({ queryParams: { nodeId: null, @@ -208,23 +200,23 @@ dataTime: null, }, query: { ...useRoute().query }, -}); -const { queryParams, query } = toRefs(data); +}) +const { queryParams, query } = toRefs(data) /** 鑺傜偣鍗曞嚮浜嬩欢 */ function handleNodeClick(data) { - queryParams.value.nodeId = data.id; - queryParams.value.nodeName = data.label; - handleTimeType(period.value[0].value); - handleQuery(); + queryParams.value.nodeId = data.id + queryParams.value.nodeName = data.label + handleTimeType(period.value[0].value) + handleQuery() } function handleTimeType(e) { - queryParams.value.timeType = e; - queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); + queryParams.value.timeType = e + queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") } // 纰虫帓鏀剧鐞�-纰虫帓鏀鹃噺鏍哥畻-鍒楄〃 function getList() { - loading.value = true; - listTop.value = []; + loading.value = true + listTop.value = [] listUpCarbonemission( proxy.addDateRange({ ...queryParams.value, @@ -233,15 +225,15 @@ ).then((res) => { res.data.upData.map((item, index) => { if (index % 5 === 0) { - listTop.value.push(res.data.upData.slice(index, index + 5)); + listTop.value.push(res.data.upData.slice(index, index + 5)) } - }); - }); + }) + }) // 鍦ㄥ垵濮嬪寲涔嬪墠锛屽厛dispose鏃х殑瀹炰緥 if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { - echarts.dispose(document.getElementById("Chart1")); + echarts.dispose(document.getElementById("Chart1")) } - const myChart1 = echarts.init(document.getElementById("Chart1")); + const myChart1 = echarts.init(document.getElementById("Chart1")) listMiddleCarbonemission( proxy.addDateRange({ emissionType: "allType", @@ -250,19 +242,19 @@ }) ).then((res) => { if (!!res.code && res.code == 200) { - loading.value = false; - let xaxis = []; - let yaxis = []; - let yoy = []; - let qoq = []; + loading.value = false + let xaxis = [] + let yaxis = [] + let yoy = [] + let qoq = [] if (!!res.data) { res.data.map((item) => { - xaxis.push(item.xaxis); - yaxis.push(!!item.yaxis ? item.yaxis : 0); - yoy.push(!!item.yoy ? item.yoy : 0); - qoq.push(!!item.qoq ? item.qoq : 0); - }); - listBottom.value = res.data; + xaxis.push(item.xaxis) + yaxis.push(!!item.yaxis ? item.yaxis : 0) + yoy.push(!!item.yoy ? item.yoy : 0) + qoq.push(!!item.qoq ? item.qoq : 0) + }) + listBottom.value = res.data } setTimeout(() => { myChart1.setOption({ @@ -273,10 +265,7 @@ type: "shadow", textStyle: { fontSize: 14, - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, }, @@ -292,8 +281,7 @@ itemWidth: 14, itemHeight: 10, textStyle: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, xAxis: { @@ -304,10 +292,7 @@ axisLine: { show: true, lineStyle: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, axisTick: { @@ -320,8 +305,7 @@ show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [5, 0, 0, 0], // formatter: '{value} ml' @@ -333,10 +317,7 @@ name: "tCO鈧俥", type: "value", nameTextStyle: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [0, 0, 5, 0], }, @@ -347,10 +328,7 @@ show: true, lineStyle: { type: "dashed", - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, axisTick: { @@ -360,10 +338,7 @@ show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, }, }, @@ -372,10 +347,7 @@ name: "%", alignTicks: true, nameTextStyle: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [0, 0, 5, 0], }, @@ -389,20 +361,14 @@ show: true, lineStyle: { type: "dashed", - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, splitArea: { show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, }, }, @@ -411,7 +377,7 @@ { name: "纰虫帓鏀鹃噺", type: "bar", - barWidth: "27", + barWidth: "12", itemStyle: { borderRadius: [15, 15, 0, 0], }, @@ -438,29 +404,29 @@ data: qoq, }, ], - }); - }, 100); + }) + }, 100) window.addEventListener( "resize", () => { - myChart1.resize(); + myChart1.resize() }, { passive: true } - ); + ) } - }); + }) } // 纰虫帓鏀剧鐞�-纰虫帓鏀鹃噺鏍哥畻-鎼滅储 function handleQuery() { - getList(); + getList() } // 纰虫帓鏀剧鐞�-纰虫帓鏀鹃噺鏍哥畻-閲嶇疆 function resetQuery() { - proxy.resetForm("queryRef"); - queryParams.value.timeType = null; - queryParams.value.dataTime = null; - handleTimeType(period.value[0].value); - handleQuery(); + proxy.resetForm("queryRef") + queryParams.value.timeType = null + queryParams.value.dataTime = null + handleTimeType(period.value[0].value) + handleQuery() } // 纰虫帓鏀剧鐞�-纰虫帓鏀鹃噺鏍哥畻-瀵煎嚭 function handleExport() { @@ -472,7 +438,7 @@ ...query.value, }, `${queryParams.value.nodeName}-纰虫帓鏀鹃噺鏍哥畻_${new Date().getTime()}.xlsx` - ); + ) } </script> <style scoped lang="scss"> diff --git a/zhitan-vue/src/views/comprehensive/comps/LineChart.vue b/zhitan-vue/src/views/comprehensive/comps/LineChart.vue new file mode 100644 index 0000000..e9cc744 --- /dev/null +++ b/zhitan-vue/src/views/comprehensive/comps/LineChart.vue @@ -0,0 +1,173 @@ +<template> + <div class="chart-box"> + <div id="ChartDom" style="width: 100%; height: 100%"></div> + </div> +</template> + +<script setup> +import * as echarts from "echarts" +const { proxy } = getCurrentInstance() +import useSettingsStore from "@/store/modules/settings" +const settingsStore = useSettingsStore() +const emit = defineEmits() +const props = defineProps({ + chartData: { + type: Object, + default: () => {}, + }, +}) + +watch( + () => props.chartData, + (val) => { + console.log("watch", val) + initChart() + } +) +watch( + () => settingsStore.sideTheme, + (val) => { + initChart() + } +) + +function initChart(value) { + const chartDom = document.getElementById("ChartDom") + if (echarts.getInstanceByDom(chartDom)) { + echarts.dispose(chartDom) + } + const myChart = echarts.init(chartDom) + let option = { + title: { + text: props.chartData.title, + left: "40", + textStyle: { + color: "#2979ff", + }, + }, + color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], + tooltip: { + trigger: "axis", + axisPointer: { + type: "shadow", + }, + }, + legend: { + icon: "rect", + itemWidth: 14, + itemHeight: 10, + textStyle: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + }, + }, + grid: { + top: "40", + left: "50", + right: "40", + bottom: "20", + containLabel: true, + }, + xAxis: { + type: "category", + axisPointer: { + type: "shadow", + }, + axisLine: { + show: true, + lineStyle: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + }, + }, + axisTick: { + show: false, + }, + splitArea: { + show: false, + }, + splitLine: { + show: false, + }, + axisLabel: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + fontSize: 14, + padding: [5, 0, 0, 0], + // formatter: '{value} ml' + }, + data: props.chartData.xData, + }, + yAxis: [ + { + type: "value", + nameTextStyle: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + fontSize: 14, + padding: [0, 0, 5, 0], + }, + axisLine: { + show: false, + }, + splitLine: { + show: true, + lineStyle: { + type: "dashed", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + }, + }, + axisTick: { + show: false, + }, + splitArea: { + show: false, + }, + axisLabel: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + fontSize: 14, + }, + }, + ], + series: [ + { + name: props.chartData.title, + type: "bar", + barWidth: "16", + // tooltip: { + // valueFormatter: function (value) { + // return value + "tce" + // }, + // }, + itemStyle: { + borderRadius: [15, 15, 0, 0], + }, + data: props.chartData.yData, + markPoint: { + data: [ + { type: "max", name: "Max" }, + { type: "min", name: "Min" }, + ], + }, + }, + ], + } + setTimeout(() => { + myChart.setOption(option) + }, 200) + + window.addEventListener( + "resize", + () => { + myChart.resize() + }, + { passive: true } + ) +} +</script> + +<style lang="scss" scoped> +.chart-box { + width: 100%; + height: 400px; + border: 1px solid #eaeaea; + margin-top: 20px; + padding-top: 20px; +} +</style> diff --git a/zhitan-vue/src/views/comprehensive/dailyComprehensive/index.vue b/zhitan-vue/src/views/comprehensive/dailyComprehensive/index.vue new file mode 100644 index 0000000..a3d5183 --- /dev/null +++ b/zhitan-vue/src/views/comprehensive/dailyComprehensive/index.vue @@ -0,0 +1,245 @@ +<template> + <div class="page"> + <div class="form-card"> + <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px"> + <el-form-item label="鑳芥簮绫诲瀷" prop="energyType"> + <el-select v-model="queryParams.energyType" placeholder="璇烽�夋嫨鑳芥簮绫诲瀷"> + <el-option + :label="item.enername" + :value="item.enersno" + v-for="item in energyTypeList" + :key="item.enersno" + /> + </el-select> + </el-form-item> + <el-form-item label="缁熻鏃堕棿"> + <el-date-picker + v-model="queryParams.dataTime" + type="date" + format="YYYY-MM-DD" + value-format="YYYY-MM-DD" + placeholder="閫夋嫨鏃ユ湡" + style="width: 100%" + :clearable="false" + /> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button> + <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button> + </el-form-item> + <!-- <el-form-item> + <el-button type="warning" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button> + </el-form-item> --> + </el-form> + </div> + + <div class="table-bg-style"> + <div class="table-box"> + <el-table :data="energyList" v-loading="loading" border max-height="380px"> + <el-table-column fixed prop="indexName" label="鎸囨爣鍚嶇О" width="210px"> + <template #default="scope"> + <div style="width: 100%; text-align: left"> + <el-button + v-if="scope.row.indexId == queryParams.indexId" + icon="search" + circle + @click="selectChange(scope.row)" + style="color: #fff; background: #409eff; margin-right: 8px" + ></el-button> + <el-button + v-else + icon="search" + circle + @click="selectChange(scope.row)" + style="margin-right: 8px" + ></el-button> + <el-tooltip + v-if="scope.row.indexName.length > 9" + class="item" + effect="dark" + :content="scope.row.indexName" + placement="top-end" + > + <span> + {{ scope.row.indexName.substr(0, 9) + "..." }} + </span> + </el-tooltip> + <span v-else>{{ scope.row.indexName }}</span> + </div> + </template> + </el-table-column> + <el-table-column v-for="index in 24" :key="index" :label="index - 1 + '鏃�'" align="center" min-width="100"> + <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template> + </el-table-column> + </el-table> + + <div> + <line-chart ref="LineChartRef" :chartData="lineChartData" /> + </div> + </div> + </div> + </div> +</template> + +<script setup> +import { + getDataList, + getlistChart, + exportList, +} from "@/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive" +import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" +import LineChart from "../comps/LineChart.vue" +let { proxy } = getCurrentInstance() +const energyTypeList = ref() +function getEnergyTypeList() { + listEnergyTypeList().then((res) => { + energyTypeList.value = res.data + // form.value.indexType = alarm_record_category.value[0].value + // form.value.energyType = energyTypeList.value[0].enersno + getList() + }) +} +getEnergyTypeList() +function numFilter(value) { + // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅 + let realVal = "" + if (!isNaN(value) && value !== "" && value !== null) { + realVal = parseFloat(value).toFixed(2) + } else { + realVal = "--" + } + return realVal +} +let loading = ref(false) +let total = ref(0) +let queryParams = ref({ + indexStorageId: "", + indexCode: "", + pageNum: 1, + pageSize: 10, + dataTime: "", +}) + +const energyList = ref([]) +const lineChartData = ref({}) +function getList() { + queryParams.value.indexCode = proxy.$route.query.modelCode + getDataList({ + ...queryParams.value, + timeType: "HOUR", + }).then((response) => { + energyList.value = response.data + if (response.data && response.data.length !== 0) { + selectChange(response.data[0]) + } + }) +} + +const LineChartRef = ref() +function selectChange(row) { + queryParams.value.indexId = row ? row.indexId : undefined + queryParams.value.timeType = "HOUR" + getlistChart(queryParams.value).then((response) => { + let actualData = [] + let expectedData = [] + let title = "" + response.data.forEach((item) => { + expectedData.push(numFilter(item.value)) + actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "鏃�") + title = item.indexName + "(" + (item.unitId || "") + ")" + }) + + console.log(response) + console.log(actualData) + console.log(expectedData) + + lineChartData.value = { + // xData: [ + // "0鏃�", + // "1鏃�", + // "2鏃�", + // "3鏃�", + // "4鏃�", + // "5鏃�", + // "6鏃�", + // "7鏃�", + // "8鏃�", + // "9鏃�", + // "10鏃�", + // "11鏃�", + // "12鏃�", + // "13鏃�", + // "14鏃�", + // "15鏃�", + // "16鏃�", + // "17鏃�", + // "18鏃�", + // "19鏃�", + // "20鏃�", + // "21鏃�", + // "22鏃�", + // "23鏃�", + // ], + xData: actualData, + yData: expectedData, + title, + } + // LineChartRef.value.initChart() + // this.lineChartData.actualData = actualData; + // this.lineChartData.expectedData = expectedData; + // this.lineChartData.title = title; + // this.$refs.LineChart.initChart(this.lineChartData); + // this.$refs.BarChart.initChart(this.lineChartData); + }) +} + +function getTime() { + var date = new Date() + var year = date.getFullYear() + var month = date.getMonth() + 1 + var date = date.getDate() + month = month < 10 ? "0" + month : month + date = date < 10 ? "0" + date : date + queryParams.value.dataTime = year + "-" + month + "-" + date +} +getTime() + +// 瀵煎嚭鎸夐挳鎿嶄綔 +function handleExport() { + exportList(queryParams.value).then((response) => { + console.log(response) + // download(response.msg); + }) +} + +function handleQuery() { + queryParams.value.pageNum = 1 + getList() +} + +function resetQuery() { + queryParams.value = { + limitName: "", + pageNum: 1, + pageSize: 10, + dataTime: null, + } + getTime() + getList() +} +</script> + +<style lang="scss" scoped> +@import "@/assets/styles/page.scss"; + +.header-box { + :deep .el-form-item__content { + color: #fff; + font-size: 16px; + } +} + +:deep .el-table--fit { + border-bottom: 1px solid #eaeaea; +} +</style> diff --git a/zhitan-vue/src/views/comprehensive/monthlyComprehensive/index.vue b/zhitan-vue/src/views/comprehensive/monthlyComprehensive/index.vue new file mode 100644 index 0000000..c63c0fe --- /dev/null +++ b/zhitan-vue/src/views/comprehensive/monthlyComprehensive/index.vue @@ -0,0 +1,241 @@ +<template> + <div class="page"> + <div class="form-card"> + <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px"> + <el-form-item label="鑳芥簮绫诲瀷" prop="energyType"> + <el-select v-model="queryParams.energyType" placeholder="璇烽�夋嫨鑳芥簮绫诲瀷"> + <el-option + :label="item.enername" + :value="item.enersno" + v-for="item in energyTypeList" + :key="item.enersno" + /> + </el-select> + </el-form-item> + <el-form-item label="缁熻鏃堕棿"> + <el-date-picker + style="width: 100%" + v-model="queryParams.dataTime" + type="month" + :clearable="false" + value-format="yyyy-MM" + placeholder="閫夋嫨鏃ユ湡" + > + </el-date-picker> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button> + <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button> + </el-form-item> + <!-- <el-form-item> + <el-button type="warning" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button> + </el-form-item> --> + </el-form> + </div> + + <div class="table-bg-style"> + <div class="table-box"> + <el-table :data="energyList" v-loading="loading" border max-height="380px"> + <el-table-column fixed prop="indexName" label="鎸囨爣鍚嶇О" width="210px"> + <template #default="scope"> + <div style="width: 100%; text-align: left"> + <el-button + v-if="scope.row.indexId == queryParams.indexId" + icon="search" + circle + @click="selectChange(scope.row)" + style="color: #fff; background: #409eff; margin-right: 8px" + ></el-button> + <el-button + v-else + icon="search" + circle + @click="selectChange(scope.row)" + style="margin-right: 8px" + ></el-button> + <el-tooltip + v-if="scope.row.indexName.length > 9" + class="item" + effect="dark" + :content="scope.row.indexName" + placement="top-end" + > + <span> + {{ scope.row.indexName.substr(0, 9) + "..." }} + </span> + </el-tooltip> + <span v-else>{{ scope.row.indexName }}</span> + </div> + </template> + </el-table-column> + <el-table-column v-for="index in 31" :key="index" :label="index + '鏃�'" align="center" min-width="100"> + <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template> + </el-table-column> + </el-table> + + <div> + <line-chart ref="LineChartRef" :chartData="lineChartData" /> + </div> + </div> + </div> + </div> +</template> + +<script setup> +import { getDataList, getlistChart } from "@/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive" +import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" +import LineChart from "../comps/LineChart.vue" +let { proxy } = getCurrentInstance() +const energyTypeList = ref() +function getEnergyTypeList() { + listEnergyTypeList().then((res) => { + energyTypeList.value = res.data + // form.value.indexType = alarm_record_category.value[0].value + // form.value.energyType = energyTypeList.value[0].enersno + getList() + }) +} +getEnergyTypeList() +function numFilter(value) { + // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅 + let realVal = "" + if (!isNaN(value) && value !== "" && value !== null) { + realVal = parseFloat(value).toFixed(2) + } else { + realVal = "--" + } + return realVal +} +let loading = ref(false) +let total = ref(0) +let queryParams = ref({ + indexStorageId: "", + indexCode: "", + pageNum: 1, + pageSize: 10, + dataTime: "", + timeType: "DAY", +}) + +const energyList = ref([]) +const lineChartData = ref({}) +function getList() { + queryParams.value.indexCode = proxy.$route.query.modelCode + getDataList({ + ...queryParams.value, + }).then((response) => { + energyList.value = response.data.tabledata + if (energyList.value && energyList.value.length !== 0) { + selectChange(energyList.value[0]) + } + }) +} + +const LineChartRef = ref() +function selectChange(row) { + queryParams.value.indexId = row ? row.indexId : undefined + getlistChart(queryParams.value).then((response) => { + let actualData = [] + let expectedData = [] + let title = "" + response.data.forEach((item) => { + expectedData.push(numFilter(item.value)) + actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "鏃�") + title = item.indexName + "(" + (item.unitId || "") + ")" + }) + + console.log(response) + console.log(actualData) + console.log(expectedData) + + lineChartData.value = { + // xData: [ + // "0鏃�", + // "1鏃�", + // "2鏃�", + // "3鏃�", + // "4鏃�", + // "5鏃�", + // "6鏃�", + // "7鏃�", + // "8鏃�", + // "9鏃�", + // "10鏃�", + // "11鏃�", + // "12鏃�", + // "13鏃�", + // "14鏃�", + // "15鏃�", + // "16鏃�", + // "17鏃�", + // "18鏃�", + // "19鏃�", + // "20鏃�", + // "21鏃�", + // "22鏃�", + // "23鏃�", + // ], + xData: actualData, + yData: expectedData, + title, + } + // LineChartRef.value.initChart() + // this.lineChartData.actualData = actualData; + // this.lineChartData.expectedData = expectedData; + // this.lineChartData.title = title; + // this.$refs.LineChart.initChart(this.lineChartData); + // this.$refs.BarChart.initChart(this.lineChartData); + }) +} + +function getTime() { + var date = new Date() + var year = date.getFullYear() + var month = date.getMonth() + 1 + var date = date.getDate() + month = month < 10 ? "0" + month : month + date = date < 10 ? "0" + date : date + queryParams.value.dataTime = year + "-" + month +} +getTime() + +// 瀵煎嚭鎸夐挳鎿嶄綔 +function handleExport() { + exportList(queryParams.value).then((response) => { + console.log(response) + // download(response.msg); + }) +} + +function handleQuery() { + queryParams.value.pageNum = 1 + getList() +} + +function resetQuery() { + queryParams.value = { + limitName: "", + pageNum: 1, + pageSize: 10, + dataTime: null, + timeType: "DAY", + } + getTime() + getList() +} +</script> + +<style lang="scss" scoped> +@import "@/assets/styles/page.scss"; + +.header-box { + :deep .el-form-item__content { + color: #fff; + font-size: 16px; + } +} + +:deep .el-table--fit { + border-bottom: 1px solid #eaeaea; +} +</style> diff --git a/zhitan-vue/src/views/comprehensive/yearComprehensive/index.vue b/zhitan-vue/src/views/comprehensive/yearComprehensive/index.vue new file mode 100644 index 0000000..494e37a --- /dev/null +++ b/zhitan-vue/src/views/comprehensive/yearComprehensive/index.vue @@ -0,0 +1,245 @@ +<template> + <div class="page"> + <div class="form-card"> + <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px"> + <el-form-item label="鑳芥簮绫诲瀷" prop="energyType"> + <el-select v-model="queryParams.energyType" placeholder="璇烽�夋嫨鑳芥簮绫诲瀷"> + <el-option + :label="item.enername" + :value="item.enersno" + v-for="item in energyTypeList" + :key="item.enersno" + /> + </el-select> + </el-form-item> + <el-form-item label="缁熻鏃堕棿"> + <el-date-picker + style="width: 100%" + v-model="queryParams.dataTime" + type="year" + :clearable="false" + value-format="YYYY" + placeholder="閫夋嫨鏃ユ湡" + > + </el-date-picker> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button> + <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button> + </el-form-item> + <!-- <el-form-item> + <el-button type="warning" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button> + </el-form-item> --> + </el-form> + </div> + + <div class="table-bg-style"> + <div class="table-box"> + <el-table :data="energyList" v-loading="loading" border max-height="380px"> + <el-table-column fixed prop="indexName" label="鎸囨爣鍚嶇О" width="210px"> + <template #default="scope"> + <div style="width: 100%; text-align: left"> + <el-button + v-if="scope.row.indexId == queryParams.indexId" + icon="search" + circle + @click="selectChange(scope.row)" + style="color: #fff; background: #409eff; margin-right: 8px" + ></el-button> + <el-button + v-else + icon="search" + circle + @click="selectChange(scope.row)" + style="margin-right: 8px" + ></el-button> + <el-tooltip + v-if="scope.row.indexName.length > 9" + class="item" + effect="dark" + :content="scope.row.indexName" + placement="top-end" + > + <span> + {{ scope.row.indexName.substr(0, 9) + "..." }} + </span> + </el-tooltip> + <span v-else>{{ scope.row.indexName }}</span> + </div> + </template> + </el-table-column> + <el-table-column v-for="index in 12" :key="index" :label="index + '鏈�'" align="center" min-width="100"> + <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template> + </el-table-column> + </el-table> + + <div> + <line-chart ref="LineChartRef" :chartData="lineChartData" /> + </div> + </div> + </div> + </div> +</template> + +<script setup> +import { getDataList, getlistChart } from "@/api/comprehensiveStatistics/yearComprehensive/yearComprehensive" +import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" +import LineChart from "../comps/LineChart.vue" +let { proxy } = getCurrentInstance() +const energyTypeList = ref() +function getEnergyTypeList() { + listEnergyTypeList().then((res) => { + energyTypeList.value = res.data + // form.value.indexType = alarm_record_category.value[0].value + // form.value.energyType = energyTypeList.value[0].enersno + getList() + }) +} +getEnergyTypeList() +function numFilter(value) { + // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅 + let realVal = "" + if (!isNaN(value) && value !== "" && value !== null) { + realVal = parseFloat(value).toFixed(2) + } else { + realVal = "--" + } + return realVal +} +let loading = ref(false) +let queryParams = ref({ + indexStorageId: "", + indexCode: "", + pageNum: 1, + pageSize: 10, + dataTime: "2025-01-0", + timeType: "MONTH", +}) + +const energyList = ref([]) +const lineChartData = ref({}) +function getList() { + queryParams.value.indexCode = proxy.$route.query.modelCode + getDataList({ + ...queryParams.value, + dataTime: queryParams.value.dataTime ? queryParams.value.dataTime + "-01" : "", + }).then((response) => { + energyList.value = response.data + if (response.data && response.data.length !== 0) { + selectChange(response.data[0]) + } + }) +} + +const LineChartRef = ref() +function selectChange(row) { + queryParams.value.indexId = row ? row.indexId : undefined + getlistChart({ + ...queryParams.value, + dataTime: queryParams.value.dataTime ? queryParams.value.dataTime + "-01" : "", + }).then((response) => { + let actualData = [] + let expectedData = [] + let title = "" + response.data.forEach((item) => { + expectedData.push(numFilter(item.value)) + actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "鏃�") + title = item.indexName + "(" + (item.unitId || "") + ")" + }) + + console.log(response) + console.log(actualData) + console.log(expectedData) + + lineChartData.value = { + // xData: [ + // "0鏃�", + // "1鏃�", + // "2鏃�", + // "3鏃�", + // "4鏃�", + // "5鏃�", + // "6鏃�", + // "7鏃�", + // "8鏃�", + // "9鏃�", + // "10鏃�", + // "11鏃�", + // "12鏃�", + // "13鏃�", + // "14鏃�", + // "15鏃�", + // "16鏃�", + // "17鏃�", + // "18鏃�", + // "19鏃�", + // "20鏃�", + // "21鏃�", + // "22鏃�", + // "23鏃�", + // ], + xData: actualData, + yData: expectedData, + title, + } + // LineChartRef.value.initChart() + // this.lineChartData.actualData = actualData; + // this.lineChartData.expectedData = expectedData; + // this.lineChartData.title = title; + // this.$refs.LineChart.initChart(this.lineChartData); + // this.$refs.BarChart.initChart(this.lineChartData); + }) +} + +function getTime() { + var date = new Date() + var year = date.getFullYear() + var month = date.getMonth() + 1 + var date = date.getDate() + month = month < 10 ? "0" + month : month + date = date < 10 ? "0" + date : date + queryParams.value.dataTime = year + "" +} + +// 瀵煎嚭鎸夐挳鎿嶄綔 +function handleExport() { + exportList(queryParams.value).then((response) => { + console.log(response) + // download(response.msg); + }) +} + +function handleQuery() { + queryParams.value.pageNum = 1 + getList() +} + +function resetQuery() { + queryParams.value = { + limitName: "", + pageNum: 1, + pageSize: 10, + dataTime: null, + timeType: "MONTH", + } + getTime() + getList() +} + +getTime() +</script> + +<style lang="scss" scoped> +@import "@/assets/styles/page.scss"; + +.header-box { + :deep .el-form-item__content { + color: #fff; + font-size: 16px; + } +} + +:deep .el-table--fit { + border-bottom: 1px solid #eaeaea; +} +</style> diff --git a/zhitan-vue/src/views/index.vue b/zhitan-vue/src/views/index.vue index 8c988a0..2474cd7 100644 --- a/zhitan-vue/src/views/index.vue +++ b/zhitan-vue/src/views/index.vue @@ -379,7 +379,7 @@ right: "5%", itemWidth: 14, itemHeight: 14, - itemGap: 60, + itemGap: 16, textStyle: { align: "left", verticalAlign: "middle", @@ -777,7 +777,7 @@ right: "10%", itemWidth: 14, itemHeight: 14, - itemGap: 50, + itemGap: 16, textStyle: { align: "left", verticalAlign: "middle", diff --git a/zhitan-vue/src/views/login copy.vue b/zhitan-vue/src/views/login copy.vue deleted file mode 100644 index d9b0c13..0000000 --- a/zhitan-vue/src/views/login copy.vue +++ /dev/null @@ -1,293 +0,0 @@ -<template> - <div class="login"> - <!-- <div - class="login-logo-bg" - v-if="systemInfo && systemInfo.homeLogo" - :style="{ backgroundImage: 'url(' + systemInfo.homeLogo + ')', backgroundSize: '100% 100%' }" - ></div> --> - <img v-if="systemInfo && systemInfo.homeLogo" :src="systemInfo.homeLogo" alt="" class="login-logo-img" /> - <div class="login-font" v-else>{{ systemInfo.systemName || "鑳芥簮绠$悊绯荤粺" }}</div> - <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form"> - <!-- <h3 class="title">鍏呯數妗╁悗鍙扮鐞嗙郴缁�</h3> --> - <el-form-item prop="username"> - <el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="璐﹀彿"> - <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template> - </el-input> - </el-form-item> - <el-form-item prop="password"> - <el-input - v-model="loginForm.password" - type="password" - size="large" - auto-complete="off" - placeholder="瀵嗙爜" - show-password - @keyup.enter="handleLogin" - > - <template #prefix><svg-icon icon-class="password" class="el-input__icon input-icon" /></template> - </el-input> - </el-form-item> - <el-form-item prop="code" v-if="captchaEnabled"> - <el-input - v-model="loginForm.code" - size="large" - auto-complete="off" - placeholder="楠岃瘉鐮�" - style="width: 63%" - @keyup.enter="handleLogin" - > - <template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template> - </el-input> - <div class="login-code"> - <img :src="codeUrl" @click="getCode" class="login-code-img" /> - </div> - </el-form-item> - <el-checkbox v-model="loginForm.rememberMe" style="margin: 0px 0px 25px 0px">璁颁綇瀵嗙爜</el-checkbox> - <el-form-item style="width: 100%"> - <el-button - :loading="loading" - size="large" - type="primary" - style="width: 100%" - color="#626aef" - :dark="isDark" - @click.prevent="handleLogin" - > - <span v-if="!loading">鐧� 褰�</span> - <span v-else>鐧� 褰� 涓�...</span> - </el-button> - </el-form-item> - </el-form> - <!-- 搴曢儴 --> - <div class="el-login-footer"> - <!-- <span>Copyright 漏 2021-2024 ZhiTanCloud All Rights Reserved.</span> --> - <span>{{ systemInfo.copyRight || "Copyright 漏 2017-2024 ZhiTanCloud All Rights Reserved." }}</span> - </div> - </div> -</template> - -<script setup> -import { getCodeImg } from "@/api/login" -import Cookies from "js-cookie" -import { encrypt, decrypt } from "@/utils/jsencrypt" -import useUserStore from "@/store/modules/user" - -const userStore = useUserStore() -const route = useRoute() -const router = useRouter() -const { proxy } = getCurrentInstance() -const systemInfo1 = JSON.parse(Cookies.get("SystemInfo") || "{}") -const systemInfo = { - ...systemInfo1, - homeLogo: systemInfo1.homeLogo - ? systemInfo1.homeLogo.includes("http") - ? systemInfo1.homeLogo - : "https://demo-ems.zhitancloud.com" + systemInfo1.homeLogo - : "", -} -console.log(systemInfo) - -const loginForm = ref({ - username: "admin", - password: "admin123", - rememberMe: false, - code: "", - uuid: "", -}) - -const loginRules = { - username: [{ required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勮处鍙�" }], - password: [{ required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勫瘑鐮�" }], - code: [{ required: true, trigger: "change", message: "璇疯緭鍏ラ獙璇佺爜" }], -} - -const codeUrl = ref("") -const loading = ref(false) -// 楠岃瘉鐮佸紑鍏� -const captchaEnabled = ref(true) -// 娉ㄥ唽寮�鍏� -const register = ref(false) -const redirect = ref(undefined) - -watch( - route, - (newRoute) => { - redirect.value = newRoute.query && newRoute.query.redirect - }, - { immediate: true } -) - -function handleLogin() { - proxy.$refs.loginRef.validate((valid) => { - if (valid) { - loading.value = true - // 鍕鹃�変簡闇�瑕佽浣忓瘑鐮佽缃湪 cookie 涓缃浣忕敤鎴峰悕鍜屽瘑鐮� - if (loginForm.value.rememberMe) { - Cookies.set("username", loginForm.value.username, { expires: 30 }) - Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 }) - Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 }) - } else { - // 鍚﹀垯绉婚櫎 - Cookies.remove("username") - Cookies.remove("password") - Cookies.remove("rememberMe") - } - // 璋冪敤action鐨勭櫥褰曟柟娉� - userStore - .login(loginForm.value) - .then(() => { - const query = route.query - const otherQueryParams = Object.keys(query).reduce((acc, cur) => { - if (cur !== "redirect") { - acc[cur] = query[cur] - } - return acc - }, {}) - router.push({ path: redirect.value || "/", query: otherQueryParams }) - }) - .catch(() => { - loading.value = false - // 閲嶆柊鑾峰彇楠岃瘉鐮� - if (captchaEnabled.value) { - getCode() - } - }) - } - }) -} - -function getCode() { - getCodeImg().then((res) => { - captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled - if (captchaEnabled.value) { - codeUrl.value = "data:image/gif;base64," + res.img - loginForm.value.uuid = res.uuid - } - }) -} - -function getCookie() { - const username = Cookies.get("username") - const password = Cookies.get("password") - const rememberMe = Cookies.get("rememberMe") - loginForm.value = { - username: username === undefined ? loginForm.value.username : username, - password: password === undefined ? loginForm.value.password : decrypt(password), - rememberMe: rememberMe === undefined ? false : Boolean(rememberMe), - } -} - -getCode() -getCookie() -</script> - -<style lang="scss" scoped> -.login { - display: flex; - align-items: center; - height: 100%; - background-image: url("@/assets/images/login-bg.jpg"); - background-size: 100% 100%; - flex-direction: column; - position: relative; - min-width: 700px; - min-height: 700px; -} - -.title { - margin: 0px auto 30px auto; - text-align: center; - color: #707070; -} - -.login-form { - position: absolute; - left: 50%; - top: 60%; - transform: translate(-50%, -50%); - border-radius: 6px; - // background: #ffffff; - width: 400px; - padding: 25px 25px 5px 25px; - - .el-input { - height: 40px; - - input { - height: 40px; - } - } - - .input-icon { - height: 39px; - width: 14px; - margin-left: 0px; - } -} - -.login-tip { - font-size: 13px; - text-align: center; - color: #bfbfbf; -} - -.login-code { - width: 33%; - height: 40px; - float: right; - - img { - cursor: pointer; - vertical-align: middle; - } -} - -.el-login-footer { - height: 40px; - line-height: 40px; - position: fixed; - bottom: 0; - width: 100%; - text-align: center; - color: #fff; - font-family: Arial; - font-size: 12px; - letter-spacing: 1px; -} - -.login-code-img { - height: 40px; - padding-left: 12px; -} - -.login-logo-bg { - width: 514px; - height: 177px; - // background-image: url('@/assets/images/login-logo.png'); - // background-size: 100% 100%; - position: absolute; - left: 50%; - top: 22%; - transform: translate(-50%, -50%); -} -.login-logo-img { - // width: 100%; - // height: 100%; - // transform: translate(-50%, -50%); - max-height: 200px; - margin: 0 auto; - position: absolute; - top: 17%; -} - -.login-font { - font-size: 50px; - color: #fff; - top: 32%; - position: absolute; - left: 50%; - width: 514px; - text-align: center; - transform: translate(-50%, -50%); -} -</style> diff --git a/zhitan-vue/src/views/login.vue b/zhitan-vue/src/views/login.vue index 3e8b868..2fe18dd 100644 --- a/zhitan-vue/src/views/login.vue +++ b/zhitan-vue/src/views/login.vue @@ -11,8 +11,8 @@ <div class="middle-view"> <div class="left-wrapper"> <div class="login-font">{{ systemInfo.systemName || "" }}</div> - <img src="@/assets/images/font01.png" alt="" style="width: 406px" /> - <img src="@/assets/images/img_logo.png" alt="" style="width: 200px; margin-top: 20px" /> + <img src="@/assets/images/font01.png" alt="" style="width: 380px" /> + <img src="@/assets/images/img_logo.png" alt="" style="width: 180px; margin-top: 20px" /> </div> <div class="right-wrapper"> <div class="header"> @@ -44,7 +44,7 @@ size="large" auto-complete="off" placeholder="楠岃瘉鐮�" - style="width: 266px" + style="width: 230px" @keyup.enter="handleLogin" > <!-- <template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template> --> @@ -202,7 +202,7 @@ display: flex; align-items: center; height: 100%; - background-image: url("@/assets/images/login-background.png"); + background-image: url("@/assets/images/login-background.jpg"); background-repeat: no-repeat; background-size: cover; flex-direction: column; @@ -223,31 +223,31 @@ flex-direction: column; } .login-font { - font-size: 34px; + font-size: 32px; font-weight: 700; color: #d5f8ff; - margin-bottom: 12px; + margin-bottom: 10px; } } .right-wrapper { border-radius: 23px; background: #ffffff; - width: 480px; + width: 410px; position: relative; .header { - height: 70px; - line-height: 70px; + height: 56px; + line-height: 56px; border-bottom: 1px solid #f1f1f1; color: #3b3b3b; - font-size: 22px; + font-size: 18px; margin-bottom: 22px; span { display: inline-block; - height: 70px; - line-height: 70px; - border-bottom: 6px solid #3a83fc; - margin-left: 50px; + height: 56px; + line-height: 62px; + border-bottom: 4px solid #3a83fc; + margin-left: 32px; } } } @@ -277,14 +277,14 @@ } .login-form { - padding: 0 50px 30px; + padding: 0 32px 20px; .submit-btn { - width: 382px; - height: 54px; + width: 360px; + height: 44px; background: #3a83fc; border-radius: 3px; - font-size: 20px; + font-size: 18px; box-shadow: 1px 2px 5px #3a83fc; border: none; border-radius: 6px; @@ -342,7 +342,7 @@ text-align: center; color: #fff; font-family: Arial; - font-size: 16px; + font-size: 14px; letter-spacing: 1px; } </style> diff --git a/zhitan-vue/src/views/peakvalley/period/period.vue b/zhitan-vue/src/views/peakvalley/period/period.vue index c550828..749fa2e 100644 --- a/zhitan-vue/src/views/peakvalley/period/period.vue +++ b/zhitan-vue/src/views/peakvalley/period/period.vue @@ -6,11 +6,7 @@ </div> <div class="page-container-right"> <div class="form-card"> - <el-form - :model="queryParams" - ref="queryRef" - :inline="true" - > + <el-form :model="queryParams" ref="queryRef" :inline="true"> <el-form-item label="鏃堕棿" prop="queryTime"> <el-date-picker v-model="queryParams.queryTime" @@ -22,39 +18,22 @@ /> </el-form-item> <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery"> - 鎼滅储 - </el-button> + <el-button type="primary" icon="Search" @click="handleQuery"> 鎼滅储 </el-button> <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button> </el-form-item> </el-form> </div> <div - style=" - height: calc(100vh - 205px) !important; - max-height: calc(100vh - 205px) !important; - overflow-y: auto; - " + style="height: calc(100vh - 205px) !important; max-height: calc(100vh - 205px) !important; overflow-y: auto" v-loading="loading" > <div class="card-list"> - <div - class="card-list-item" - v-for="item in periodList" - :key="item.title" - > + <div class="card-list-item" v-for="item in periodList" :key="item.title"> <div class="item-top"> - <div - class="icon" - :style="{ backgroundImage: 'url(' + item.icon + ')' }" - ></div> + <div class="icon" :style="{ backgroundImage: 'url(' + item.icon + ')' }"></div> <div class="name">{{ item.title }}</div> </div> - <div - class="item-bottom" - v-for="(node, nodeIndex) in item.data" - :key="nodeIndex" - > + <div class="item-bottom" v-for="(node, nodeIndex) in item.data" :key="nodeIndex"> <div class="bottom-left">{{ node.label }}</div> <div class="bottom-right" :style="{ color: item.color }"> {{ node.value }} @@ -62,12 +41,12 @@ </div> </div> </div> - <BaseCard :title="queryParams.nodeName+'-灏栧嘲骞宠胺鐢甸噺鍥�'"> + <BaseCard :title="queryParams.nodeName + '-灏栧嘲骞宠胺鐢甸噺鍥�'"> <div class="chart-box"> <div id="Chart1" /> </div> </BaseCard> - <BaseCard :title="queryParams.nodeName+'-灏栧嘲骞宠胺鐢佃垂鍥�'"> + <BaseCard :title="queryParams.nodeName + '-灏栧嘲骞宠胺鐢佃垂鍥�'"> <div class="chart-box"> <div id="Chart2" /> </div> @@ -78,24 +57,24 @@ </div> </template> <script setup name="period"> -import { listPeriod } from "@/api/peakValley/period"; -import * as echarts from "echarts"; -const { proxy } = getCurrentInstance(); -import { useRoute } from "vue-router"; -import useSettingsStore from "@/store/modules/settings"; -const settingsStore = useSettingsStore(); +import { listPeriod } from "@/api/peakValley/period" +import * as echarts from "echarts" +const { proxy } = getCurrentInstance() +import { useRoute } from "vue-router" +import useSettingsStore from "@/store/modules/settings" +const settingsStore = useSettingsStore() watch( () => settingsStore.sideTheme, (val) => { - getList(); + getList() } -); -const loading = ref(false); -import icon1 from "@/assets/images/period/icon1.png"; -import icon2 from "@/assets/images/period/icon2.png"; -import icon3 from "@/assets/images/period/icon3.png"; -import icon4 from "@/assets/images/period/icon4.png"; -import icon5 from "@/assets/images/period/icon5.png"; +) +const loading = ref(false) +import icon1 from "@/assets/images/period/icon1.png" +import icon2 from "@/assets/images/period/icon2.png" +import icon3 from "@/assets/images/period/icon3.png" +import icon4 from "@/assets/images/period/icon4.png" +import icon5 from "@/assets/images/period/icon5.png" const periodList = ref([ { icon: icon1, @@ -204,7 +183,7 @@ }, ], }, -]); +]) const data = reactive({ queryParams: { nodeId: null, @@ -213,121 +192,90 @@ queryTime: null, }, query: { ...useRoute().query }, -}); -const { queryParams, query } = toRefs(data); +}) +const { queryParams, query } = toRefs(data) /** 鑺傜偣鍗曞嚮浜嬩欢 */ function handleNodeClick(data) { - queryParams.value.nodeId = data.id; - queryParams.value.nodeName = data.label; - queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM"); - handleQuery(); + queryParams.value.nodeId = data.id + queryParams.value.nodeName = data.label + queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM") + handleQuery() } // 宄板钩璋疯兘鑰楀垎鏋�-宄板钩璋锋椂娈电粺璁�-鍒楄〃 function getList() { - loading.value = true; + loading.value = true listPeriod( proxy.addDateRange({ ...queryParams.value, ...query.value, }) ).then((res) => { - loading.value = false; + loading.value = false if (!!res.code && res.code == 200) { if (!!res.data.totalVO) { - periodList.value[0].data[0].value = !!res.data.totalVO - .totalPowerConsumption + periodList.value[0].data[0].value = !!res.data.totalVO.totalPowerConsumption ? res.data.totalVO.totalPowerConsumption - : 0; - periodList.value[0].data[1].value = !!res.data.totalVO.totalCost - ? res.data.totalVO.totalCost - : 0; + : 0 + periodList.value[0].data[1].value = !!res.data.totalVO.totalCost ? res.data.totalVO.totalCost : 0 - periodList.value[1].data[0].value = !!res.data.totalVO - .tipPowerConsumption + periodList.value[1].data[0].value = !!res.data.totalVO.tipPowerConsumption ? res.data.totalVO.tipPowerConsumption - : 0; + : 0 periodList.value[1].data[1].value = - (!!res.data.totalVO.tipPowerProportion - ? res.data.totalVO.tipPowerProportion - : 0) + "%"; - periodList.value[1].data[2].value = !!res.data.totalVO.tipPowerCost - ? res.data.totalVO.tipPowerCost - : 0; + (!!res.data.totalVO.tipPowerProportion ? res.data.totalVO.tipPowerProportion : 0) + "%" + periodList.value[1].data[2].value = !!res.data.totalVO.tipPowerCost ? res.data.totalVO.tipPowerCost : 0 periodList.value[1].data[3].value = - (!!res.data.totalVO.tipPowerCostProportion - ? res.data.totalVO.tipPowerCostProportion - : 0) + "%"; + (!!res.data.totalVO.tipPowerCostProportion ? res.data.totalVO.tipPowerCostProportion : 0) + "%" - periodList.value[2].data[0].value = !!res.data.totalVO - .peakPowerConsumption + periodList.value[2].data[0].value = !!res.data.totalVO.peakPowerConsumption ? res.data.totalVO.peakPowerConsumption - : 0; + : 0 periodList.value[2].data[1].value = - (!!res.data.totalVO.peakPowerProportion - ? res.data.totalVO.peakPowerProportion - : 0) + "%"; - periodList.value[2].data[2].value = !!res.data.totalVO.peakPowerCost - ? res.data.totalVO.peakPowerCost - : 0; + (!!res.data.totalVO.peakPowerProportion ? res.data.totalVO.peakPowerProportion : 0) + "%" + periodList.value[2].data[2].value = !!res.data.totalVO.peakPowerCost ? res.data.totalVO.peakPowerCost : 0 periodList.value[2].data[3].value = - (!!res.data.totalVO.peakPowerCostProportion - ? res.data.totalVO.peakPowerCostProportion - : 0) + "%"; + (!!res.data.totalVO.peakPowerCostProportion ? res.data.totalVO.peakPowerCostProportion : 0) + "%" - periodList.value[3].data[0].value = !!res.data.totalVO - .flatPowerConsumption + periodList.value[3].data[0].value = !!res.data.totalVO.flatPowerConsumption ? res.data.totalVO.flatPowerConsumption - : 0; + : 0 periodList.value[3].data[1].value = - (!!res.data.totalVO.flatPowerProportion - ? res.data.totalVO.flatPowerProportion - : 0) + "%"; - periodList.value[3].data[2].value = !!res.data.totalVO.flatPowerCost - ? res.data.totalVO.flatPowerCost - : 0; + (!!res.data.totalVO.flatPowerProportion ? res.data.totalVO.flatPowerProportion : 0) + "%" + periodList.value[3].data[2].value = !!res.data.totalVO.flatPowerCost ? res.data.totalVO.flatPowerCost : 0 periodList.value[3].data[3].value = - (!!res.data.totalVO.flatPowerCostProportion - ? res.data.totalVO.flatPowerCostProportion - : 0) + "%"; + (!!res.data.totalVO.flatPowerCostProportion ? res.data.totalVO.flatPowerCostProportion : 0) + "%" - periodList.value[4].data[0].value = !!res.data.totalVO - .troughPowerConsumption + periodList.value[4].data[0].value = !!res.data.totalVO.troughPowerConsumption ? res.data.totalVO.troughPowerConsumption - : 0; + : 0 periodList.value[4].data[1].value = - (!!res.data.totalVO.troughPowerProportion - ? res.data.totalVO.troughPowerProportion - : 0) + "%"; - periodList.value[4].data[2].value = !!res.data.totalVO.troughPowerCost - ? res.data.totalVO.troughPowerCost - : 0; + (!!res.data.totalVO.troughPowerProportion ? res.data.totalVO.troughPowerProportion : 0) + "%" + periodList.value[4].data[2].value = !!res.data.totalVO.troughPowerCost ? res.data.totalVO.troughPowerCost : 0 periodList.value[4].data[3].value = - (!!res.data.totalVO.troughPowerCostProportion - ? res.data.totalVO.troughPowerCostProportion - : 0) + "%"; + (!!res.data.totalVO.troughPowerCostProportion ? res.data.totalVO.troughPowerCostProportion : 0) + "%" } // 鍦ㄥ垵濮嬪寲涔嬪墠锛屽厛dispose鏃х殑瀹炰緥 if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { - echarts.dispose(document.getElementById("Chart1")); + echarts.dispose(document.getElementById("Chart1")) } if (echarts.getInstanceByDom(document.getElementById("Chart2"))) { - echarts.dispose(document.getElementById("Chart2")); + echarts.dispose(document.getElementById("Chart2")) } - const myChart1 = echarts.init(document.getElementById("Chart1")); - const myChart2 = echarts.init(document.getElementById("Chart2")); + const myChart1 = echarts.init(document.getElementById("Chart1")) + const myChart2 = echarts.init(document.getElementById("Chart2")) if (!!res.data.powerConsumptionList) { - let xdata = []; - let ytip = []; - let ypeak = []; - let yflat = []; - let ytrough = []; + let xdata = [] + let ytip = [] + let ypeak = [] + let yflat = [] + let ytrough = [] res.data.powerConsumptionList.map((item) => { - xdata.push(Number(item.xdata.slice(-2)) + "鏃�"); - ytip.push(!!item.ytip ? item.ytip : 0); - ypeak.push(!!item.ypeak ? item.ypeak : 0); - yflat.push(!!item.yflat ? item.yflat : 0); - ytrough.push(!!item.ytrough ? item.ytrough : 0); - }); + xdata.push(Number(item.xdata.slice(-2)) + "鏃�") + ytip.push(!!item.ytip ? item.ytip : 0) + ypeak.push(!!item.ypeak ? item.ypeak : 0) + yflat.push(!!item.yflat ? item.yflat : 0) + ytrough.push(!!item.ytrough ? item.ytrough : 0) + }) myChart1.setOption({ color: ["#f52528", "#ff6200", "#ffce0c", "#78e801"], tooltip: { @@ -336,10 +284,7 @@ type: "shadow", textStyle: { fontSize: 14, - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, }, @@ -356,8 +301,7 @@ itemHeight: 10, // right: 0, textStyle: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, xAxis: { @@ -365,10 +309,7 @@ axisLine: { show: true, lineStyle: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, axisTick: { @@ -381,8 +322,7 @@ show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [5, 0, 0, 0], // formatter: '{value} ml' @@ -393,8 +333,7 @@ name: "鑰楃數閲�(KWH)", type: "value", nameTextStyle: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [0, 0, 5, 0], }, @@ -405,10 +344,7 @@ show: true, lineStyle: { type: "dashed", - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, axisTick: { @@ -418,8 +354,7 @@ show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, // formatter: '{value} ml' }, @@ -429,46 +364,46 @@ name: "灏�", type: "bar", stack: "total", - barWidth: "27", + barWidth: "12", data: ytip, }, { name: "宄�", type: "bar", stack: "total", - barWidth: "27", + barWidth: "12", data: ypeak, }, { name: "骞�", type: "bar", stack: "total", - barWidth: "27", + barWidth: "12", data: yflat, }, { name: "璋�", type: "bar", stack: "total", - barWidth: "27", + barWidth: "12", data: ytrough, }, ], - }); + }) } if (!!res.data.costList) { - let xdata = []; - let ytip = []; - let ypeak = []; - let yflat = []; - let ytrough = []; + let xdata = [] + let ytip = [] + let ypeak = [] + let yflat = [] + let ytrough = [] res.data.costList.map((item) => { - xdata.push(Number(item.xdata.slice(-2)) + "鏃�"); - ytip.push(!!item.ytip ? item.ytip : 0); - ypeak.push(!!item.ypeak ? item.ypeak : 0); - yflat.push(!!item.yflat ? item.yflat : 0); - ytrough.push(!!item.ytrough ? item.ytrough : 0); - }); + xdata.push(Number(item.xdata.slice(-2)) + "鏃�") + ytip.push(!!item.ytip ? item.ytip : 0) + ypeak.push(!!item.ypeak ? item.ypeak : 0) + yflat.push(!!item.yflat ? item.yflat : 0) + ytrough.push(!!item.ytrough ? item.ytrough : 0) + }) myChart2.setOption({ color: ["#f52528", "#ff6200", "#ffce0c", "#78e801"], tooltip: { @@ -477,10 +412,7 @@ type: "shadow", textStyle: { fontSize: 14, - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, }, @@ -497,8 +429,7 @@ itemHeight: 10, // right: 0, textStyle: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, xAxis: { @@ -506,10 +437,7 @@ axisLine: { show: true, lineStyle: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, axisTick: { @@ -522,8 +450,7 @@ show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [5, 0, 0, 0], // formatter: '{value} ml' @@ -534,8 +461,7 @@ name: "鐢佃垂(鍏�)", type: "value", nameTextStyle: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [0, 0, 5, 0], }, @@ -546,10 +472,7 @@ show: true, lineStyle: { type: "dashed", - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, axisTick: { @@ -559,8 +482,7 @@ show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, // formatter: '{value} ml' }, @@ -570,49 +492,53 @@ name: "灏�", type: "bar", stack: "total", - barWidth: "27", + barWidth: "12", data: ytip, }, { name: "宄�", type: "bar", stack: "total", - barWidth: "27", + barWidth: "12", data: ypeak, }, { name: "骞�", type: "bar", stack: "total", - barWidth: "27", + barWidth: "12", data: yflat, }, { name: "璋�", type: "bar", stack: "total", - barWidth: "27", + barWidth: "12", data: ytrough, }, ], - }); + }) } - window.addEventListener("resize", () => { - myChart1.resize(); - myChart2.resize(); - },{passive: true}); + window.addEventListener( + "resize", + () => { + myChart1.resize() + myChart2.resize() + }, + { passive: true } + ) } - }); + }) } // 宄板钩璋疯兘鑰楀垎鏋�-宄板钩璋锋椂娈电粺璁�-鎼滅储 function handleQuery() { - getList(); + getList() } // 宄板钩璋疯兘鑰楀垎鏋�-宄板钩璋锋椂娈电粺璁�-閲嶇疆 function resetQuery() { - proxy.resetForm("queryRef"); - queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM"); - handleQuery(); + proxy.resetForm("queryRef") + queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM") + handleQuery() } </script> <style scoped lang="scss"> diff --git a/zhitan-vue/src/views/peakvalley/timeSharing/timeSharing.vue b/zhitan-vue/src/views/peakvalley/timeSharing/timeSharing.vue index 7acba9e..091d88f 100644 --- a/zhitan-vue/src/views/peakvalley/timeSharing/timeSharing.vue +++ b/zhitan-vue/src/views/peakvalley/timeSharing/timeSharing.vue @@ -17,24 +17,16 @@ /> </el-form-item> <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery"> - 鎼滅储 - </el-button> + <el-button type="primary" icon="Search" @click="handleQuery"> 鎼滅储 </el-button> <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button> </el-form-item> <el-form-item> - <el-button type="primary" icon="Download" @click="handleExport"> - 瀵煎嚭 - </el-button> + <el-button type="primary" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button> </el-form-item> </el-form> </div> <div - style=" - height: calc(100vh - 205px) !important; - max-height: calc(100vh - 205px) !important; - overflow-y: auto; - " + style="height: calc(100vh - 205px) !important; max-height: calc(100vh - 205px) !important; overflow-y: auto" v-loading="loading" > <el-row> @@ -55,16 +47,8 @@ <el-col :span="24"> <BaseCard :title="queryParams.nodeName + '-宄板钩璋峰垎鏃剁粺璁�'"> <div class="table-box"> - <el-table - :data="timeSharingList" - style="width: 100%" - show-summary - > - <el-table-column - label="鏃堕棿" - align="center" - show-overflow-tooltip - > + <el-table :data="timeSharingList" style="width: 100%" show-summary> + <el-table-column label="鏃堕棿" align="center" show-overflow-tooltip> <template #default="scope"> {{ proxy.dayjs(scope.row.time).format("HH鏃�") }} </template> @@ -77,12 +61,7 @@ show-overflow-tooltip width="120" /> - <el-table-column - prop="sharpFee" - label="鐢佃垂(鍏�)" - align="center" - show-overflow-tooltip - /> + <el-table-column prop="sharpFee" label="鐢佃垂(鍏�)" align="center" show-overflow-tooltip /> </el-table-column> <el-table-column label="宄�" align="center"> <el-table-column @@ -92,12 +71,7 @@ show-overflow-tooltip width="120" /> - <el-table-column - prop="peakFee" - label="鐢佃垂(鍏�)" - align="center" - show-overflow-tooltip - /> + <el-table-column prop="peakFee" label="鐢佃垂(鍏�)" align="center" show-overflow-tooltip /> </el-table-column> <el-table-column label="骞�" align="center"> <el-table-column @@ -107,12 +81,7 @@ show-overflow-tooltip width="120" /> - <el-table-column - prop="flatFee" - label="鐢佃垂(鍏�)" - align="center" - show-overflow-tooltip - /> + <el-table-column prop="flatFee" label="鐢佃垂(鍏�)" align="center" show-overflow-tooltip /> </el-table-column> <el-table-column label="璋�" align="center"> <el-table-column @@ -122,12 +91,7 @@ show-overflow-tooltip width="120" /> - <el-table-column - prop="valleyFee" - label="鐢佃垂(鍏�)" - align="center" - show-overflow-tooltip - /> + <el-table-column prop="valleyFee" label="鐢佃垂(鍏�)" align="center" show-overflow-tooltip /> </el-table-column> <el-table-column label="鍚堣" align="center"> <el-table-column @@ -137,12 +101,7 @@ show-overflow-tooltip width="120" /> - <el-table-column - prop="totalFee" - label="鎬荤數璐�(鍏�)" - align="center" - show-overflow-tooltip - /> + <el-table-column prop="totalFee" label="鎬荤數璐�(鍏�)" align="center" show-overflow-tooltip /> </el-table-column> <!-- <el-table-column label="鎿嶄綔" align="center"> <template #default="scope"> @@ -159,84 +118,27 @@ </div> </div> </div> - <el-dialog - v-model="timeSharingDialogTableVisible" - title="鏌ョ湅鍒嗘椂缁熻璇︽儏" - width="1300" - > + <el-dialog v-model="timeSharingDialogTableVisible" title="鏌ョ湅鍒嗘椂缁熻璇︽儏" width="1300"> <div class="table-box"> <el-table :data="viewTimeSharingList" style="width: 100%" height="420"> - <el-table-column - label="鏃堕棿" - align="center" - show-overflow-tooltip - width="200" - > + <el-table-column label="鏃堕棿" align="center" show-overflow-tooltip width="200"> <template #default="scope"> {{ scope.row.time }}鏃� </template> </el-table-column> <el-table-column label="灏�" align="center"> - <el-table-column - prop="sharpPower" - label="鑰楃數閲�(kWh)" - align="center" - show-overflow-tooltip - width="120" - /> - <el-table-column - prop="sharpFee" - label="鐢佃垂(鍏�)" - align="center" - show-overflow-tooltip - width="90" - /> + <el-table-column prop="sharpPower" label="鑰楃數閲�(kWh)" align="center" show-overflow-tooltip width="120" /> + <el-table-column prop="sharpFee" label="鐢佃垂(鍏�)" align="center" show-overflow-tooltip width="90" /> </el-table-column> <el-table-column label="宄�" align="center"> - <el-table-column - prop="peakPower" - label="鑰楃數閲�(kWh)" - align="center" - show-overflow-tooltip - width="120" - /> - <el-table-column - prop="peakFee" - label="鐢佃垂(鍏�)" - align="center" - show-overflow-tooltip - width="90" - /> + <el-table-column prop="peakPower" label="鑰楃數閲�(kWh)" align="center" show-overflow-tooltip width="120" /> + <el-table-column prop="peakFee" label="鐢佃垂(鍏�)" align="center" show-overflow-tooltip width="90" /> </el-table-column> <el-table-column label="骞�" align="center"> - <el-table-column - prop="flatPower" - label="鑰楃數閲�(kWh)" - align="center" - show-overflow-tooltip - width="120" - /> - <el-table-column - prop="flatFee" - label="鐢佃垂(鍏�)" - align="center" - show-overflow-tooltip - width="90" - /> + <el-table-column prop="flatPower" label="鑰楃數閲�(kWh)" align="center" show-overflow-tooltip width="120" /> + <el-table-column prop="flatFee" label="鐢佃垂(鍏�)" align="center" show-overflow-tooltip width="90" /> </el-table-column> <el-table-column label="璋�" align="center"> - <el-table-column - prop="valleyPower" - label="鑰楃數閲�(kWh)" - align="center" - show-overflow-tooltip - width="120" - /> - <el-table-column - prop="valleyFee" - label="鐢佃垂(鍏�)" - align="center" - show-overflow-tooltip - width="90" - /> + <el-table-column prop="valleyPower" label="鑰楃數閲�(kWh)" align="center" show-overflow-tooltip width="120" /> + <el-table-column prop="valleyFee" label="鐢佃垂(鍏�)" align="center" show-overflow-tooltip width="90" /> </el-table-column> <el-table-column label="鍚堣" align="center"> <el-table-column @@ -247,38 +149,16 @@ width="120" > <template #default="scope"> - {{ - scope.row.sharpPower + - scope.row.peakPower + - scope.row.flatPower + - scope.row.valleyPower - }} + {{ scope.row.sharpPower + scope.row.peakPower + scope.row.flatPower + scope.row.valleyPower }} </template> </el-table-column> - <el-table-column - prop="totalCost" - label="鎬荤數璐�(鍏�)" - align="center" - show-overflow-tooltip - width="100" - > + <el-table-column prop="totalCost" label="鎬荤數璐�(鍏�)" align="center" show-overflow-tooltip width="100"> <template #default="scope"> - {{ - scope.row.sharpFee + - scope.row.peakFee + - scope.row.flatFee + - scope.row.valleyFee - }} + {{ scope.row.sharpFee + scope.row.peakFee + scope.row.flatFee + scope.row.valleyFee }} </template> </el-table-column> </el-table-column> - <el-table-column - prop="nodeName" - label="鐢ㄨ兘鍗曞厓" - align="center" - show-overflow-tooltip - width="200" - /> + <el-table-column prop="nodeName" label="鐢ㄨ兘鍗曞厓" align="center" show-overflow-tooltip width="200" /> </el-table> </div> </el-dialog> @@ -286,23 +166,23 @@ </template> <script setup name="timeSharing"> -import { listTimeSharing } from "@/api/peakValley/timeSharing"; -import * as echarts from "echarts"; -const { proxy } = getCurrentInstance(); -import { useRoute } from "vue-router"; -import useSettingsStore from "@/store/modules/settings"; -const settingsStore = useSettingsStore(); +import { listTimeSharing } from "@/api/peakValley/timeSharing" +import * as echarts from "echarts" +const { proxy } = getCurrentInstance() +import { useRoute } from "vue-router" +import useSettingsStore from "@/store/modules/settings" +const settingsStore = useSettingsStore() watch( () => settingsStore.sideTheme, (val) => { - getList(); + getList() } -); -const loading = ref(false); -const timeSharingList = ref([]); -const timeSharingDialogTableVisible = ref(false); -const viewTimeSharingList = ref([]); -const nodeOptions = ref(undefined); +) +const loading = ref(false) +const timeSharingList = ref([]) +const timeSharingDialogTableVisible = ref(false) +const viewTimeSharingList = ref([]) +const nodeOptions = ref(undefined) const data = reactive({ queryParams: { nodeId: null, @@ -311,52 +191,52 @@ queryTime: null, }, query: { ...useRoute().query }, -}); -const { queryParams, query } = toRefs(data); +}) +const { queryParams, query } = toRefs(data) /** 閫氳繃鏉′欢杩囨护鑺傜偣 */ const filterNode = (value, data) => { - if (!value) return true; - return data.label.indexOf(value) !== -1; -}; + if (!value) return true + return data.label.indexOf(value) !== -1 +} function handleNodeClick(data) { - queryParams.value.nodeId = data.id; - queryParams.value.nodeName = data.label; - queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); - handleQuery(); + queryParams.value.nodeId = data.id + queryParams.value.nodeName = data.label + queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") + handleQuery() } // 宄板钩璋疯兘鑰楀垎鏋�-宄板钩璋峰垎鏃剁粺璁�-鍒楄〃 function getList() { - loading.value = true; + loading.value = true listTimeSharing( proxy.addDateRange({ ...queryParams.value, ...query.value, }) ).then((res) => { - loading.value = false; + loading.value = false if (!!res.code && res.code == 200) { // 鍦ㄥ垵濮嬪寲涔嬪墠锛屽厛dispose鏃х殑瀹炰緥 if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { - echarts.dispose(document.getElementById("Chart1")); + echarts.dispose(document.getElementById("Chart1")) } if (echarts.getInstanceByDom(document.getElementById("Chart2"))) { - echarts.dispose(document.getElementById("Chart2")); + echarts.dispose(document.getElementById("Chart2")) } - const myChart1 = echarts.init(document.getElementById("Chart1")); - const myChart2 = echarts.init(document.getElementById("Chart2")); + const myChart1 = echarts.init(document.getElementById("Chart1")) + const myChart2 = echarts.init(document.getElementById("Chart2")) if (!!res.data.lineChat) { - let xdata = []; - let ytip = []; - let ypeak = []; - let yflat = []; - let ytrough = []; + let xdata = [] + let ytip = [] + let ypeak = [] + let yflat = [] + let ytrough = [] res.data.lineChat.map((item) => { - xdata.push(Number(item.xdata.slice(-8).substring(0, 2)) + "鏃�"); - ytip.push(!!item.ytip ? item.ytip : 0); - ypeak.push(!!item.ypeak ? item.ypeak : 0); - yflat.push(!!item.yflat ? item.yflat : 0); - ytrough.push(!!item.ytrough ? item.ytrough : 0); - }); + xdata.push(Number(item.xdata.slice(-8).substring(0, 2)) + "鏃�") + ytip.push(!!item.ytip ? item.ytip : 0) + ypeak.push(!!item.ypeak ? item.ypeak : 0) + yflat.push(!!item.yflat ? item.yflat : 0) + ytrough.push(!!item.ytrough ? item.ytrough : 0) + }) myChart1.setOption({ color: ["#f52528", "#ff6200", "#ffce0c", "#78e801"], grid: { @@ -378,8 +258,7 @@ itemHeight: 10, // right: 0, textStyle: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, // data: ['灏�', '宄�', '骞�', '璋�'] }, @@ -388,10 +267,7 @@ axisLine: { show: true, lineStyle: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, axisTick: { @@ -404,8 +280,7 @@ show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [5, 0, 0, 0], // formatter: '{value} ml' @@ -416,8 +291,7 @@ name: "鑰楃數閲�(KWH)", type: "value", nameTextStyle: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, padding: [0, 0, 5, 0], }, @@ -428,10 +302,7 @@ show: true, lineStyle: { type: "dashed", - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, axisTick: { @@ -441,8 +312,7 @@ show: false, }, axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", fontSize: 14, // formatter: '{value} ml' }, @@ -451,33 +321,33 @@ { name: "灏�", // ytip type: "bar", - barWidth: "27", + barWidth: "12", stack: "total", data: ytip, }, { name: "宄�", // ypeak type: "bar", - barWidth: "27", + barWidth: "12", stack: "total", data: ypeak, }, { name: "骞�", // yflat type: "bar", - barWidth: "27", + barWidth: "12", stack: "total", data: yflat, }, { name: "璋�", // ytrough type: "bar", - barWidth: "27", + barWidth: "12", stack: "total", data: ytrough, }, ], - }); + }) } if (!!res.data.pieChat) { myChart2.setOption({ @@ -492,8 +362,7 @@ itemGap: 10, // right: 0, textStyle: { - color: - settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, }, series: [ @@ -505,70 +374,58 @@ label: { overflow: "none", formatter: "{b} {c}% ", - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", }, data: [ { - value: !!res.data.pieChat.tip - ? Number(res.data.pieChat.tip) - : 0, + value: !!res.data.pieChat.tip ? Number(res.data.pieChat.tip) : 0, name: "灏�", }, { - value: !!res.data.pieChat.peak - ? Number(res.data.pieChat.peak) - : 0, + value: !!res.data.pieChat.peak ? Number(res.data.pieChat.peak) : 0, name: "宄�", }, { - value: !!res.data.pieChat.flat - ? Number(res.data.pieChat.flat) - : 0, + value: !!res.data.pieChat.flat ? Number(res.data.pieChat.flat) : 0, name: "骞�", }, { - value: !!res.data.pieChat.trough - ? Number(res.data.pieChat.trough) - : 0, + value: !!res.data.pieChat.trough ? Number(res.data.pieChat.trough) : 0, name: "璋�", }, ], }, ], - }); + }) } if (!!res.data.dataList) { - timeSharingList.value = !!res.data.dataList ? res.data.dataList : []; + timeSharingList.value = !!res.data.dataList ? res.data.dataList : [] } window.addEventListener( "resize", () => { - myChart1.resize(); - myChart2.resize(); + myChart1.resize() + myChart2.resize() }, { passive: true } - ); + ) } - }); + }) } // 宄板钩璋疯兘鑰楀垎鏋�-宄板钩璋峰垎鏃剁粺璁�-鏌ョ湅 function handleView(row) { - queryParams.value.key = row.timeStr; - timeSharingDialogTableVisible.value = true; - viewTimeSharingList.value = [row]; + queryParams.value.key = row.timeStr + timeSharingDialogTableVisible.value = true + viewTimeSharingList.value = [row] } // 宄板钩璋疯兘鑰楀垎鏋�-宄板钩璋峰垎鏃剁粺璁�-鎼滅储 function handleQuery() { - getList(); + getList() } // 宄板钩璋疯兘鑰楀垎鏋�-宄板钩璋峰垎鏃剁粺璁�-閲嶇疆 function resetQuery() { - proxy.resetForm("queryRef"); - (queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM-DD")), - handleQuery(); + proxy.resetForm("queryRef") + ;(queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM-DD")), handleQuery() } // 宄板钩璋疯兘鑰楀垎鏋�-宄板钩璋峰垎鏃剁粺璁�-瀵煎嚭 function handleExport() { @@ -579,7 +436,7 @@ ...query.value, }, `${queryParams.value.nodeName}_宄板钩璋峰垎鏃剁粺璁${new Date().getTime()}.xlsx` - ); + ) } </script> <style scoped lang="scss"> diff --git a/zhitan-vue/src/views/realtimemonitor/realtimemonitor/components/chart-modal.vue b/zhitan-vue/src/views/realtimemonitor/realtimemonitor/components/chart-modal.vue index c1fde4f..1c4a4ab 100644 --- a/zhitan-vue/src/views/realtimemonitor/realtimemonitor/components/chart-modal.vue +++ b/zhitan-vue/src/views/realtimemonitor/realtimemonitor/components/chart-modal.vue @@ -4,19 +4,20 @@ <div class="page"> <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px"> <el-form-item label="鏃ユ湡绛涢��" prop="dataTime"> - <el-date-picker v-model="queryParams.dataTime" value-format="YYYY-MM-DD 00:00:00" type="date" - placeholder="鏃ユ湡绛涢��" style="width: 100%" /> + <el-date-picker + v-model="queryParams.dataTime" + value-format="YYYY-MM-DD 00:00:00" + type="date" + placeholder="鏃ユ湡绛涢��" + style="width: 100%" + /> </el-form-item> <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery"> - 鎼滅储 - </el-button> + <el-button type="primary" icon="Search" @click="handleQuery"> 鎼滅储 </el-button> <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button> </el-form-item> <el-form-item> - <el-button type="primary" icon="Download" @click="handleExport"> - 瀵煎嚭 - </el-button> + <el-button type="primary" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button> </el-form-item> </el-form> <div class="chart-box" v-loading="loading"> @@ -28,173 +29,148 @@ </template> <script setup name="chartModal"> -import * as echarts from "echarts"; -import { getEnergyRealTimeMonitor } from "@/api/realTimeMonitor/realTimeMonitor"; -const { proxy } = getCurrentInstance(); -import useSettingsStore from "@/store/modules/settings"; -const settingsStore = useSettingsStore(); -const dialogTableVisible = ref(false); +import * as echarts from "echarts" +import { getEnergyRealTimeMonitor } from "@/api/realTimeMonitor/realTimeMonitor" +const { proxy } = getCurrentInstance() +import useSettingsStore from "@/store/modules/settings" +const settingsStore = useSettingsStore() +const dialogTableVisible = ref(false) const data = reactive({ title: null, queryParams: { tagCode: null, dataTime: null, }, -}); -const { queryParams, title } = toRefs(data); -const loading = ref(false); -defineExpose({ handleOpen }); +}) +const { queryParams, title } = toRefs(data) +const loading = ref(false) +defineExpose({ handleOpen }) function handleOpen(row) { - title.value = row.name; - dialogTableVisible.value = true; - queryParams.value.nodeName = row.nodeName; - queryParams.value.tagCode = row.indexCode; - queryParams.value.unit = row.unit; - queryParams.value.name = row.name; - queryParams.value.dataTime = proxy - .dayjs(new Date()) - .format("YYYY-MM-DD 00:00:00"); - getList(); + title.value = row.name + dialogTableVisible.value = true + queryParams.value.nodeName = row.nodeName + queryParams.value.tagCode = row.indexCode + queryParams.value.unit = row.unit + queryParams.value.name = row.name + queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD 00:00:00") + getList() } function handleClose() { - dialogTableVisible.value = false; + dialogTableVisible.value = false } // 鑳芥簮瀹炴椂鐩戞帶-鑳芥簮瀹炴椂鐩戞帶-鍒楄〃 function getList() { - loading.value = true; - getEnergyRealTimeMonitor(proxy.addDateRange(queryParams.value)).then( - (res) => { - const myChart1 = echarts.init(document.getElementById("Chart1")); - if (!!res.code && res.code == 200) { - if (!!res.data) { - let xdata = []; - let ydata = []; - res.data.map((item) => { - xdata.push(proxy.dayjs(item.name).format("HH:mm")); - ydata.push(!!item.value ? item.value : 0); - }); - loading.value = false; - myChart1.setOption({ - color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], - grid: { - top: "45", - left: "6%", - right: "5%", - bottom: "10", - containLabel: true, - }, - tooltip: { - trigger: "axis", - axisPointer: { - type: "shadow", - }, - }, - xAxis: { - type: "category", - axisLine: { - show: true, - lineStyle: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", - }, - }, - axisTick: { - show: false, - }, - splitArea: { - show: false, - }, - splitLine: { - show: false, - }, - axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", - fontSize: 14, - padding: [5, 0, 0, 0], - // formatter: '{value} ml' - }, - data: xdata, - }, - yAxis: { - type: "value", - name: - queryParams.value.name + - (!!queryParams.value.unit - ? "(" + queryParams.value.unit + ")" - : ""), - nameTextStyle: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", - fontSize: 14, - padding: [0, 0, 5, 0], - }, - axisLine: { - show: false, - }, - splitLine: { - show: true, - lineStyle: { - type: "dashed", - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", - }, - }, - axisTick: { - show: false, - }, - splitArea: { - show: false, - }, - axisLabel: { - color: - settingsStore.sideTheme == "theme-dark" - ? "#FFFFFF" - : "#222222", - fontSize: 14, - }, - }, - series: [ - { - name: title.value + "鍘嗗彶鏁版嵁鏌ヨ", // ytip - type: "line", - barWidth: "27", - stack: "total", - data: ydata, - }, - ], - }); - } - window.addEventListener( - "resize", - () => { - myChart1.resize(); + loading.value = true + getEnergyRealTimeMonitor(proxy.addDateRange(queryParams.value)).then((res) => { + const myChart1 = echarts.init(document.getElementById("Chart1")) + if (!!res.code && res.code == 200) { + if (!!res.data) { + let xdata = [] + let ydata = [] + res.data.map((item) => { + xdata.push(proxy.dayjs(item.name).format("HH:mm")) + ydata.push(!!item.value ? item.value : 0) + }) + loading.value = false + myChart1.setOption({ + color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], + grid: { + top: "45", + left: "6%", + right: "5%", + bottom: "10", + containLabel: true, }, - { passive: true } - ); + tooltip: { + trigger: "axis", + axisPointer: { + type: "shadow", + }, + }, + xAxis: { + type: "category", + axisLine: { + show: true, + lineStyle: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + }, + }, + axisTick: { + show: false, + }, + splitArea: { + show: false, + }, + splitLine: { + show: false, + }, + axisLabel: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + fontSize: 14, + padding: [5, 0, 0, 0], + // formatter: '{value} ml' + }, + data: xdata, + }, + yAxis: { + type: "value", + name: queryParams.value.name + (!!queryParams.value.unit ? "(" + queryParams.value.unit + ")" : ""), + nameTextStyle: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + fontSize: 14, + padding: [0, 0, 5, 0], + }, + axisLine: { + show: false, + }, + splitLine: { + show: true, + lineStyle: { + type: "dashed", + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + }, + }, + axisTick: { + show: false, + }, + splitArea: { + show: false, + }, + axisLabel: { + color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", + fontSize: 14, + }, + }, + series: [ + { + name: title.value + "鍘嗗彶鏁版嵁鏌ヨ", // ytip + type: "line", + barWidth: "12", + stack: "total", + data: ydata, + }, + ], + }) } + window.addEventListener( + "resize", + () => { + myChart1.resize() + }, + { passive: true } + ) } - ); + }) } // 鑳芥簮瀹炴椂鐩戞帶-鑳芥簮瀹炴椂鐩戞帶-鎼滅储 function handleQuery() { - getList(); + getList() } // 鑳芥簮瀹炴椂鐩戞帶-鑳芥簮瀹炴椂鐩戞帶-閲嶇疆 function resetQuery() { - proxy.resetForm("queryRef"); - (queryParams.value.dataTime = proxy - .dayjs(new Date()) - .format("YYYY-MM-DD 00:00:00")), - handleNodeClick(nodeOptions.value[0]); + proxy.resetForm("queryRef") + ;(queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD 00:00:00")), + handleNodeClick(nodeOptions.value[0]) } // 鑳芥簮瀹炴椂鐩戞帶-鑳芥簮瀹炴椂鐩戞帶-瀵煎嚭 function handleExport() { @@ -202,7 +178,7 @@ "rtdb/realtimeTrend/export", queryParams.value, `${queryParams.value.nodeName}-${queryParams.value.name}_鑳芥簮瀹炴椂鐩戞帶_${new Date().getTime()}.xlsx` - ); + ) } </script> <style scoped lang="scss"> diff --git a/zhitan-vue/src/views/svg/components/configure.vue b/zhitan-vue/src/views/svg/components/configure.vue new file mode 100644 index 0000000..3b4820b --- /dev/null +++ b/zhitan-vue/src/views/svg/components/configure.vue @@ -0,0 +1,204 @@ +<template> + <div> + <div slot="header" class="clearfix"> + <el-button + style="float: right; padding: 8px; margin-left: 8px" + type="text" + icon="el-icon-setting" + @click="saveSetting" + > + 淇濆瓨閰嶇疆 + </el-button> + <el-button + style="float: right; padding: 8px; margin-left: 8px" + type="text" + icon="el-icon-setting" + @click="reset()" + > + 閲嶆柊閫夋嫨搴曞浘 + </el-button> + </div> + <el-row> + <el-col :span="18"> + <!-- v-if="filePath === '绌鸿妭鐐�'" --> + <div style="text-align: center; margin-left: 12px" v-if="filePath === '绌鸿妭鐐�'"> + <FileUpload + :modelValue="fileList" + @update:modelValue="fileUploadChange" + :isShowTip="false" + :limit="1" + :fileSize="20" + :fileType="[]" + :draggable="true" + /> + </div> + + <div id="svgHtml" v-if="filePath !== '绌鸿妭鐐�'"> + <div v-html="svgHtml" /> + </div> + </el-col> + <el-col :span="6" style="height: calc(100vh - 165px); overflow: auto"> + <el-table :data="tags" border> + <el-table-column label="鍙傛暟" align="center" prop="param" /> + <el-table-column label="閲囬泦鐐�" align="center" prop="tag"> + <template #default="scope"> + <el-autocomplete + popper-class="my-autocomplete" + v-model="scope.row['tag']" + :fetch-suggestions="querySearch" + placeholder="璇疯緭鍏ユ寚鏍囩紪鐮�" + placement="bottom-end" + > + <template #default="{ item }"> + <div class="">{{ item.value }}</div> + <span class="" style="color: #409eff; display: block">{{ item.name }}</span> + </template> + </el-autocomplete> + </template> + </el-table-column> + </el-table> + </el-col> + </el-row> + </div> +</template> + +<script setup> +import { getAllCollectTag, getConfigure, saveSettingApi, updateEquipmentfile } from "@/api/svg/equipmentfile" +const { proxy } = getCurrentInstance() +let props = defineProps(["types"]) +const emit = defineEmits(["getList"]) +const currentNode = ref({}) +const filePath = ref("绌鸿妭鐐�") +const svgHtml = ref("") +const form = ref({ + nodeId: "", + fileName: "", + svgType: "", +}) +const tags = ref([]) +const fileList = ref([]) + +function changeModelNode(modelNode) { + currentNode.value = modelNode + filePath.value = "绌鸿妭鐐�" + getConfigure(modelNode.id).then((response) => { + tags.value = [] + svgHtml.value = "" + if (response.code === 200) { + if (response.data) { + filePath.value = response.data.filePath + tags.value = response.data.infoList + getSvg() + } + } else { + proxy.$modal.msgError(response.msg) + } + }) +} +// 鍒濆鍖杝vg +function getSvg() { + /* 鍒涘缓xhr瀵硅薄 */ + const xhr = new XMLHttpRequest() + xhr.open("GET", filePath.value, true) + xhr.send() + /* 鐩戝惉xhr瀵硅薄 */ + xhr.addEventListener("load", () => { + svgHtml.value = xhr.responseText + let values = xhr.responseXML.getElementsByTagName("text") + let tagTemps = [] + for (let i = 0; i < values.length; i++) { + if (values[i].getAttribute("id") != undefined) + tagTemps.push({ + param: values[i].textContent, + tag: "", + tagType: "COLLECT", + }) + } + console.log(tags.value.length, tagTemps.length) + if (tags.value.length === 0 || tags.value.length != tagTemps.length) { + tags.value = [] + tags.value = tagTemps + console.log("222", tags.value.length, tagTemps.length) + } + }) +} +//涓婁紶鎴愬姛鍚� +function fileUploadChange(val) { + if (val.length) { + // this.$refs.upload.clearFiles() + form.value.nodeId = currentNode.value.id + form.value.filePath = val[0].fullUrl + form.value.svgType = "COLLECT" + updateEquipmentfile(form.value).then((result) => { + if (result.code === 200) { + filePath.value = val[0].fullUrl + tags.value = [] + getSvg() + } else { + proxy.$modal.msgError(result.msg) + } + }) + } else { + proxy.$modal.msgError(result.msg) + } +} + +function querySearch(queryString, cb) { + if (queryString) { + getAllCollectTag({ + codeOrName: queryString, + indexType: "COLLECT", + }).then((response) => { + // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹� + let result = response.data + let values = [] + result.forEach((item) => { + values.push({ + value: item.code, + name: item.name, + }) + }) + cb(values) + }) + } +} +function saveSetting() { + saveSettingApi(currentNode.value.id, tags.value).then((response) => { + if (response.code === 200) { + proxy.$modal.msgSuccess(response.msg) + } else { + proxy.$modal.msgError(response.msg) + } + }) +} +function reset() { + filePath.value = "绌鸿妭鐐�" +} + +defineExpose({ changeModelNode }) +</script> + +<style lang="scss" scoped> +.el-autocomplete { + width: 100%; +} + +.my-autocomplete li { + line-height: normal; + padding: 7px; +} + +.my-autocomplete li .name { + text-overflow: ellipsis; + overflow: hidden; +} + +.my-autocomplete li .addr { + font-size: 12px; + color: #b4b4b4; +} + +.my-autocomplete li .highlighted .addr { + color: #ddd; +} +</style> diff --git a/zhitan-vue/src/views/svg/components/configureView.vue b/zhitan-vue/src/views/svg/components/configureView.vue new file mode 100644 index 0000000..46eed3f --- /dev/null +++ b/zhitan-vue/src/views/svg/components/configureView.vue @@ -0,0 +1,124 @@ +<template> + <div> + <div v-if="filePath" v-html="svgHtml" /> + <div v-else>鏆傛湭涓婁紶</div> + </div> +</template> + +<script setup> +import { getConfigure, getLiveData } from "@/api/svg/equipmentfile" +import { onMounted } from "vue" +const { proxy } = getCurrentInstance() +let props = defineProps(["nodeId"]) +const emit = defineEmits(["getList"]) +const currentNode = ref({}) +const filePath = ref("") +const svgHtml = ref("") +const form = ref({ + nodeId: "", + fileName: "", + svgType: "", +}) +const tags = ref([]) +const tagCodes = ref([]) +const valueItems = ref(null) +const timer = ref(null) + +function show(nodeId) { + console.log(nodeId) + tagCodes.value = [] + filePath.value = "" + getConfigure(nodeId).then((response) => { + tags.value = [] + svgHtml.value = "" + if (response.code === 200) { + if (response.data) { + filePath.value = response.data.filePath + tags.value = response.data.infoList + getSvg() + refresh() + } + } else { + proxy.$modal.msgError(response.msg) + } + }) +} + +function refresh() { + if (tagCodes.value.length === 0) { + return + } + getLiveData(tagCodes.value).then((response) => { + if (response.code === 200) { + if (response.data) { + response.data.forEach((tagValue) => { + let value = "" + if (tagValue.value) { + value = parseFloat(tagValue.value).toFixed(2) + } else { + value = "0" + } + + let el = document.getElementById(tagValue.tagCode) + if (el) { + el.textContent = value + } + }) + //杩欏潡鏄崟鐙姞鐨� 鐢ㄦ潵澶勭悊 娌℃湁鎸囨爣鎴栬�呮寚鏍囨病鏈夌粨鏋滅殑 閮借缃�0 + let allText = document.getElementsByTagName("text") + for (let i = 0; i < allText.length; i++) { + // console.log(i + "textContent=" + allText[i].textContent); + if (allText[i].textContent == null || allText[i].textContent == "") { + allText[i].textContent = "0" + } + } + } + } + }) +} + +function refreshData() { + timer.value = setInterval(() => { + refresh() + }, 3000) +} + +onMounted(() => { + refreshData() +}) + +onBeforeUnmount(() => { + clearInterval(timer.value) +}) + +// 鍒濆鍖杝vg +function getSvg() { + /* 鍒涘缓xhr瀵硅薄 */ + const xhr = new XMLHttpRequest() + xhr.open("GET", filePath.value, true) + xhr.send() + /* 鐩戝惉xhr瀵硅薄 */ + xhr.addEventListener("load", () => { + const resXML = xhr.responseXML + let svgDom = resXML.documentElement.cloneNode(true) + let values = svgDom.getElementsByTagName("text") + for (let i = 0; i < values.length; i++) { + let tag = tags.value.filter((f) => f.param === values[i].textContent) + if (tag && tag.length > 0) { + let tagCode = tag[0].tag + values[i].textContent = "" + if (tagCode) { + values[i].setAttribute("id", tagCode) + tagCodes.value.push(tagCode) + } + } + } + let oSerializer = new XMLSerializer() + svgHtml.value = oSerializer.serializeToString(svgDom) + }) +} + +defineExpose({ show }) +</script> + +<style lang="scss" scoped></style> diff --git a/zhitan-vue/src/views/svg/equipmentfile/chartView.vue b/zhitan-vue/src/views/svg/equipmentfile/chartView.vue new file mode 100644 index 0000000..44c9b44 --- /dev/null +++ b/zhitan-vue/src/views/svg/equipmentfile/chartView.vue @@ -0,0 +1,314 @@ +<template> + <div class="page"> + <div class="page-container"> + <div class="page-container-left"> + <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> + </div> + <div class="page-container-right"> + <BaseCard :title="queryParams.nodeName"> + <ConfigureChartView ref="ConfigureChartViewRef" /> + </BaseCard> + </div> + </div> + </div> +</template> +<script setup name="energy-real-time-monitor"> +import ConfigureChartView from "../components/configureView.vue" +import { listEnergyRealTimeMonitor } from "@/api/realTimeMonitor/realTimeMonitor" +import { getConfigure } from "@/api/svg/equipmentfile" +const { proxy } = getCurrentInstance() +import { useRoute } from "vue-router" +import useSettingsStore from "@/store/modules/settings" +const settingsStore = useSettingsStore() +watch( + () => settingsStore.sideTheme, + (val) => { + // getList() + } +) +const loading = ref(false) +const data = reactive({ + queryParams: { + nodeId: null, + nodeName: null, + energyType: null, + }, + query: { ...useRoute().query }, +}) +const { queryParams, query } = toRefs(data) +const ConfigureChartViewRef = ref() +/** 鑺傜偣鍗曞嚮浜嬩欢 */ +function handleNodeClick(data) { + queryParams.value.nodeId = data.id + queryParams.value.nodeName = data.label + if (!data.id) { + return + } + getConfigure(data.id).then((response) => { + if (response.code === 200) { + let tagCodes = [] + if (response.data) { + response.data.infoList.forEach((tag) => { + tagCodes.push(tag.tag) + }) + } else { + tagCodes = [] + } + ConfigureChartViewRef.value.show(data.id) + } else { + proxy.$modal.msgError(response.msg) + } + }) +} +</script> +<style scoped lang="scss"> +@import "@/assets/styles/page.scss"; + +.themeDark { + .card-box { + margin: 0 18px; + padding: 10px 18px; + box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.12); + border-radius: 8px 8px 8px 8px; + border: 1px solid #22408c; + margin-bottom: 20px; + + &-title { + // margin: 10px 0 10px; + color: rgba(255, 255, 255, 0.8); + text-align: left; + font-weight: bold; + font-family: OPPOSans, OPPOSans; + font-weight: 500; + font-size: 16px; + font-style: normal; + text-transform: none; + } + + &-ul { + display: flex; + flex-wrap: wrap; + } + + &-li { + width: 18%; + margin: 1%; + border-radius: 5px; + border: 1px solid #22408c; + margin-bottom: 5px; + background: #1a235d; + box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.12); + border-radius: 8px 8px 8px 8px; + padding: 0 10px; + + .title { + font-size: 14px; + color: rgba(255, 255, 255, 0.8); + font-family: OPPOSans, OPPOSans; + font-weight: 500; + font-size: 16px; + line-height: 19px; + text-align: left; + font-style: normal; + text-transform: none; + } + + .num { + font-size: 22px; + color: #36d3ff; + font-family: OPPOSans, OPPOSans; + font-weight: 800; + font-size: 32px; + text-align: left; + font-style: normal; + text-transform: none; + } + + .time { + color: rgba(255, 253, 253, 0.7); + font-family: Poppins, Poppins; + font-weight: 400; + text-align: left; + font-style: normal; + text-transform: none; + } + } + + dd { + padding: 0; + margin-left: 5px; + margin-bottom: 10px; + } + } + + .hamburger { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 20px; + } + + .hamburger.is-active { + transform: rotate(180deg); + } + + .item-box { + display: flex; + justify-items: center; + align-items: center; + flex-wrap: wrap; + margin: 10px 18px; + + .item-tag { + // width: 13%; + text-align: center; + margin: 5px 8px; + border-radius: 8px; + padding: 7px 10px; + font-family: OPPOSans, OPPOSans; + font-weight: 500; + font-size: 16px; + color: #ffffff; + } + } +} + +.themeLight { + .card-box { + margin: 0 18px; + padding: 10px 18px; + box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.12); + border-radius: 8px 8px 8px 8px; + margin-bottom: 20px; + + &-title { + // margin: 10px 0 10px; + text-align: left; + font-weight: bold; + font-family: OPPOSans, OPPOSans; + font-weight: 500; + font-size: 16px; + font-style: normal; + text-transform: none; + } + + &-ul { + display: flex; + flex-wrap: wrap; + } + + &-li { + width: 240px; + margin-right: 10px; + margin-top: 16px; + border-radius: 5px; + border: 1px solid #ebebeb; + margin-bottom: 5px; + background: #fff; + // box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.12); + border-radius: 8px 8px 8px 8px; + padding: 0 10px; + + .title { + font-size: 14px; + color: #676767; + font-family: OPPOSans, OPPOSans; + font-weight: 500; + font-size: 16px; + line-height: 19px; + text-align: left; + font-style: normal; + text-transform: none; + } + + .num { + font-size: 22px; + color: #3271eb; + font-family: OPPOSans, OPPOSans; + font-weight: 800; + font-size: 32px; + text-align: left; + font-style: normal; + text-transform: none; + } + + .time { + color: #676767; + font-family: Poppins, Poppins; + font-weight: 400; + text-align: left; + font-style: normal; + text-transform: none; + } + } + + dd { + padding: 0; + margin-left: 5px; + margin-bottom: 10px; + } + } + + .hamburger { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 20px; + } + + .hamburger.is-active { + transform: rotate(180deg); + } + + .item-box { + display: flex; + justify-items: center; + align-items: center; + flex-wrap: wrap; + margin: 10px 18px; + + .item-tag { + // width: 13%; + text-align: center; + margin: 5px 8px; + border-radius: 8px; + padding: 7px 3px; + font-family: OPPOSans, OPPOSans; + font-weight: 500; + font-size: 16px; + color: #ffffff; + } + } +} + +.scrollbar-flex-content { + display: flex; + margin: 10px 18px; +} +.scrollbar-demo-item { + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + // width: 100px; + // height: 50px; + // margin: 10px; + text-align: center; + border-radius: 4px; + background: var(--el-color-danger-light-9); + color: var(--el-color-danger); +} + +.item-tag { + // width: 13%; + text-align: center; + margin: 5px 8px; + border-radius: 8px; + padding: 7px 10px; + font-family: OPPOSans, OPPOSans; + font-weight: 500; + font-size: 16px; + color: #ffffff; + cursor: pointer; +} +</style> diff --git a/zhitan-vue/src/views/svg/equipmentfile/index.vue b/zhitan-vue/src/views/svg/equipmentfile/index.vue new file mode 100644 index 0000000..b689a8d --- /dev/null +++ b/zhitan-vue/src/views/svg/equipmentfile/index.vue @@ -0,0 +1,243 @@ +<template> + <div class="page"> + <div class="page-container"> + <div class="page-container-left"> + <div class="tree page-box"> + <div class="select-box mb20"> + 鏁版嵁妯″瀷锛� + <el-select + style="width: 180px" + v-model="modelData" + placeholder="璇烽�夋嫨妯″瀷" + filterable + @change="changeModel" + > + <el-option + v-for="model in modelInfoOptions" + :key="model.modelCode" + :label="model.modelName" + :value="model.modelCode" + /> + </el-select> + </div> + <div class="tree-box" v-loading="treeLoading"> + <el-tree + ref="treeRef" + :props="defaultProps" + :data="treeData" + node-key="id" + highlight-current + :filter-node-method="filterNode" + :default-expanded-keys="treeExpandData" + :expand-on-click-node="false" + @node-click="changeNode" + accordion + > + <template #default="{ node, data }"> + <span> + <el-tooltip + v-if="node.label.length > 16" + class="item" + effect="dark" + :content="node.label" + placement="top-end" + > + <span>{{ node.label.slice(0, 16) + "..." }}</span> + </el-tooltip> + <span v-else id="b">{{ node.label }}</span> + </span> + </template> + </el-tree> + </div> + </div> + </div> + <div class="page-container-right"> + <BaseCard :title="currentNode ? currentNode.label + '--鑺傜偣閰嶇疆' : '鏆傛棤鑺傜偣閰嶇疆'"> + <div class="content-box"> + <ConfigureView ref="configureViewRef" /> + </div> + </BaseCard> + </div> + </div> + </div> +</template> + +<script setup> +import { listModel } from "@/api/modelConfiguration/businessModel" +import { treeList } from "@/api/modelConfiguration/indexWarehouse" +import ConfigureView from "../components/configure.vue" +import { nextTick } from "vue" +import { useRoute } from "vue-router" +let { proxy } = getCurrentInstance() +let treeLoading = ref(true) +let modelData = ref(null) +let modelInfoOptions = ref([]) //涓嬫媺鍒楄〃 +const configureViewRef = ref() +//鑾峰彇涓嬫媺鍒楄〃 +function searchList(flag) { + listModel({ isShow: 1 }).then((response) => { + modelInfoOptions.value = response.data + if (flag) { + if (modelInfoOptions.value.length > 0) { + if (proxy.$route.query.modelCode) { + modelData.value = proxy.$route.query.modelCode + } else { + modelData.value = modelInfoOptions.value[0].modelCode + } + getTreeList(modelData.value) + } + } + }) +} + +searchList(true) + +//涓嬫媺閫変腑瑙﹀彂鏍戝垪琛� +function changeModel(item) { + // console.log('changeModel', item) + getTreeList(item) +} + +let treeRef = ref(null) +let treeData = ref([]) + +const defaultProps = ref({ + children: "children", + label: "label", +}) + +//妫�绱㈡爲 +let filterText = ref("") + +const filterNode = (value, data) => { + if (!value) return true + return data.label.includes(value) +} +watch(filterText, (val) => { + // 妫�鏌reeRef.value鏄惁鏄竴涓湁鏁堢殑ElTree瀹炰緥 + if (treeRef.value && typeof treeRef.value.filter === "function") { + // 璋冪敤filter鏂规硶 + treeRef.value.filter(val) + } else { + // treeRef.value鏃犳晥锛屽鐞嗛敊璇� + console.error("error") + } +}) + +let currentNode = ref(null) +let treeExpandData = ref([]) +let isFirstLeafNode = ref(false) +let deviceConfigRef = ref(null) +let collectIndicatorsRef = ref(null) +let statisticalIndicatorsRef = ref(null) + +//鑾峰彇鏍戝垪琛� +function getTreeList(modelCode) { + treeLoading.value = true + treeList({ modelCode }).then((res) => { + treeLoading.value = false + let { data } = res + treeData.value = data + let chooseNode = null + if (data.length > 0) { + if (data[0].children && data[0].children.length !== 0 && isFirstLeafNode.value) { + if (data[0].children[0].children && data[0].children[0].children.length !== 0) { + chooseNode = data[0].children[0].children[0] + } else { + chooseNode = data[0].children[0] + } + } else { + chooseNode = data[0] + } + currentNode.value = chooseNode + changeNode(currentNode.value) + treeExpandData.value.push(chooseNode.id) + nextTick(() => { + treeRef.value.setCurrentKey(chooseNode.id) + }) + } + }) +} +//鏍戠偣鍑� +function changeNode(data, node, ev) { + console.log("鏍戠偣鍑�", data) + currentNode.value = data + configureViewRef.value.changeModelNode(data) +} +</script> + +<style lang="scss" scoped> +@import "@/assets/styles/page.scss"; + +.page-box { + height: calc(100vh - 145px); + padding-top: 12px; + + .tree-box { + height: calc(100% - 70px); + overflow-y: auto !important; + } + + .select-box { + display: flex; + align-items: center; + color: #3371eb; + margin-left: 10px; + + :deep .el-icon { + color: #fff; + margin: 0 10px 0 15px; + font-size: 14px; + } + } + + .node-opt { + flex: 1; + text-align: right; + margin-right: 5px; + + :deep .el-icon { + color: #fff; + margin-right: 5px; + } + } +} + +:deep .el-tabs__nav-wrap:after { + background: transparent; +} + +:deep .el-tabs__item { + color: #fff; + font-size: 20px; + padding: 0 20px; + + &.is-active, + &:hover { + color: #999 !important; + } +} + +.tab-box { + display: flex; + align-items: center; + color: #fff; + border-bottom: 1px solid #3371eb; + margin-right: 20px; + + .tab-li { + cursor: pointer; + border: 1px solid #3371eb; + padding: 10px 25px; + border-radius: 5px 5px 0 0; + } + + .is-tab { + background: #3371eb; + } +} + +.content-box { + height: calc(100vh - 206px) !important; +} +</style> -- Gitblit v1.9.3