!77 !76 修改swagger信息
Merge pull request !77 from letsgocoding/develop1.0
| | |
| | | |
| | | ###################################################################### |
| | | # IDE |
| | | .DS_Store |
| | | |
| | | ### STS ### |
| | | .apt_generated |
| | |
| | | import com.zhitan.keyequipment.service.IDailyKeyEquipmentService; |
| | | import com.zhitan.model.domain.EnergyIndex; |
| | | import com.zhitan.model.service.IModelNodeService; |
| | | import io.swagger.annotations.Api; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | |
| | | import com.zhitan.consumptionanalysis.domain.vo.RankingDataVO; |
| | | import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData; |
| | | import com.zhitan.consumptionanalysis.service.IConsumptionAnalysisService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.poi.ss.usermodel.Cell; |
| | | import org.apache.poi.ss.usermodel.Row; |
| | |
| | | * @Author: Zhujw |
| | | * @Date: 2023/3/1 |
| | | */ |
| | | @Api(tags = "综åè½èåæ") |
| | | @RestController |
| | | @RequestMapping("/consumptionanalysis") |
| | | public class ConsumptionAnalysisController extends BaseController { |
| | |
| | | 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)); |
| | |
| | | import com.zhitan.basicdata.domain.MeterImplement; |
| | | import com.zhitan.basicdata.services.IMeterImplementService; |
| | | import com.zhitan.common.annotation.Log; |
| | | import com.zhitan.common.constant.CommonConst; |
| | | import com.zhitan.common.constant.TimeTypeConst; |
| | | import com.zhitan.common.core.controller.BaseController; |
| | | import com.zhitan.common.core.domain.AjaxResult; |
| | | import com.zhitan.common.enums.BusinessType; |
| | | import com.zhitan.common.enums.RetrievalModes; |
| | | import com.zhitan.common.enums.TimeType; |
| | | import com.zhitan.common.utils.ChartUtils; |
| | | import com.zhitan.common.utils.DateTimeUtil; |
| | | import com.zhitan.common.utils.poi.ExcelUtil; |
| | | import com.zhitan.history.domain.dto.HistoricalDataDTO; |
| | | import com.zhitan.history.domain.vo.HistoricalDataExcel; |
| | |
| | | import com.zhitan.model.service.IEnergyIndexService; |
| | | import com.zhitan.realtimedata.domain.TagValue; |
| | | import com.zhitan.realtimedata.service.RealtimeDatabaseService; |
| | | import io.swagger.annotations.Api; |
| | | import org.apache.commons.lang3.ObjectUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 设å¤å¯å宿¶çæµController |
| | | * å岿°æ®è¶å¿Controller |
| | | * |
| | | * @author sys |
| | | * @date 2020-03-30 |
| | | */ |
| | | @Api(tags = "å岿°æ®è¶å¿") |
| | | @RestController |
| | | @RequestMapping("/dataMonitoring/historyDataTrend") |
| | | public class HistoryDataTrendController extends BaseController { |
| | |
| | | public AjaxResult getSettingIndex(EnergyIndex energyIndex) { |
| | | try { |
| | | List<EnergyIndex> infoList = energyIndexService.selectEnergyIndexList(energyIndex); |
| | | // List<String> codeList= infoList.stream().map(EnergyIndex::getCode).collect(Collectors.toList()); |
| | | // List<TagValue> valList = realtimeDatabaseService.retrieve(codeList); |
| | | // List resultList = new ArrayList(); |
| | | return AjaxResult.success(infoList); |
| | | } catch (Exception ex) { |
| | | logger.error("è·åå
³èééææ åºéï¼", ex); |
| | |
| | | if (ObjectUtils.isEmpty(energyIndex)) { |
| | | return AjaxResult.error("æªæ¾å°ç¹ä½ä¿¡æ¯"); |
| | | } |
| | | Date beginTime = dto.getDataTime(); |
| | | Date endTime; |
| | | // æ¥è¯¢æ¡æ° |
| | | int count = 1440; |
| | | if ("DAY".equals(dto.getTimeType())) { |
| | | endTime = DateUtil.endOfDay(beginTime); |
| | | List<Date> dateList = new ArrayList<>(); |
| | | if (TimeType.DAY.name().equals(dto.getTimeType())) { |
| | | String timeCode = DateTimeUtil.getDateTime(dto.getDataTime(), DateTimeUtil.COMMON_PATTERN_TO_DAY); |
| | | ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_DAY, timeCode, dateList); |
| | | } else if (TimeType.HOUR.name().equals(dto.getTimeType())) { |
| | | String timeCode = DateTimeUtil.getDateTime(dto.getDataTime(), DateTimeUtil.COMMON_PATTERN_TO_HOUR); |
| | | ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_HOUR, timeCode, dateList); |
| | | } else { |
| | | count = 3600; |
| | | endTime = DateUtil.offsetSecond(DateUtil.offsetHour(beginTime, 1), -1); |
| | | return AjaxResult.error("æ¶é´é´éç±»å䏿£ç¡®"); |
| | | } |
| | | // æ¥è¯¢è®¡éå¨å
· |
| | | MeterImplement info = meterImplementService.selectMeterImplementById(energyIndex.getMeterId()); |
| | | List<TagValue> tagValueList = realtimeDatabaseService.retrieve(energyIndex.getCode(), beginTime, endTime, |
| | | RetrievalModes.BestFit, count); |
| | | MeterImplement meterInfo = meterImplementService.selectMeterImplementById(energyIndex.getMeterId()); |
| | | if (ObjectUtils.isEmpty(meterInfo)) { |
| | | return AjaxResult.error("æªæ¾å°è®¡éå¨å
·ä¿¡æ¯"); |
| | | } |
| | | List<HistoricalDataVO> voList = new ArrayList<>(); |
| | | Date date = DateUtil.date(); |
| | | for (int i = 0; i < count + 1; i++) { |
| | | for (Date date : dateList) { |
| | | List<TagValue> tagValues = new ArrayList<>(); |
| | | if(TimeType.DAY.name().equals(dto.getTimeType())){ |
| | | Date beginTime = date; |
| | | Date endTime = DateUtil.offsetHour(DateUtil.offsetMinute(date, CommonConst.DIGIT_MINUS_1), CommonConst.DIGIT_1); |
| | | tagValues = realtimeDatabaseService.retrieve(energyIndex.getCode(), beginTime,endTime,CommonConst.DIGIT_1); |
| | | } |
| | | if(TimeType.HOUR.name().equals(dto.getTimeType())){ |
| | | Date beginTime = date; |
| | | Date endTime = DateUtil.offsetMinute(DateUtil.offsetSecond(date, CommonConst.DIGIT_MINUS_1), CommonConst.DIGIT_1); |
| | | tagValues = realtimeDatabaseService.retrieve(energyIndex.getCode(), beginTime,endTime,CommonConst.DIGIT_1); |
| | | } |
| | | |
| | | HistoricalDataVO vo = new HistoricalDataVO(); |
| | | vo.setDataTime(DateUtil.formatDateTime(date)); |
| | | vo.setIndexId(energyIndex.getIndexId()); |
| | | String indexName = energyIndex.getName(); |
| | | if (ObjectUtils.isNotEmpty(info)) { |
| | | indexName = info.getInstallactionLocation() + "_" + info.getMeterName() + "_" + indexName; |
| | | vo.setIndexName(meterInfo.getInstallactionLocation() + "_" + meterInfo.getMeterName() + "_" + energyIndex.getName()); |
| | | vo.setValue(CommonConst.DOUBLE_MINUS_SIGN); |
| | | if(ObjectUtils.isNotEmpty(tagValues)){ |
| | | vo.setValue(tagValues.get(0).getValue().toString()); |
| | | } |
| | | vo.setIndexName(indexName); |
| | | // åå¼ |
| | | String value = "--"; |
| | | String usedValue = "--"; |
| | | if (beginTime.getTime() <= date.getTime()) { |
| | | try { |
| | | TagValue tagValue = tagValueList.get(i); |
| | | BigDecimal cumulative = BigDecimal.valueOf(tagValue.getValue()); |
| | | |
| | | if ("SWWSDJ_SD".equals(energyIndex.getCode()) || "SWWSDJ_WD".equals(energyIndex.getCode())) { |
| | | cumulative = cumulative.multiply(BigDecimal.valueOf(0.1)); |
| | | } |
| | | if (i > 0) { |
| | | TagValue previousTagValue = tagValueList.get(i - 1); |
| | | BigDecimal previousValue = BigDecimal.ZERO; |
| | | if (ObjectUtils.isNotEmpty(previousTagValue.getValue())) { |
| | | previousValue = BigDecimal.valueOf(previousTagValue.getValue()); |
| | | } |
| | | if ("SWWSDJ_SD".equals(energyIndex.getCode()) || "SWWSDJ_WD".equals(energyIndex.getCode())) { |
| | | previousValue = previousValue.multiply(BigDecimal.valueOf(0.1)); |
| | | |
| | | } |
| | | usedValue = String.valueOf(cumulative.subtract(previousValue).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | |
| | | value = String.valueOf(cumulative.setScale(2, RoundingMode.HALF_UP)); |
| | | } catch (Exception ignored) { |
| | | } |
| | | } |
| | | // æ¶é´ |
| | | String timeName = DateUtil.formatDateTime(beginTime); |
| | | vo.setDataTime(timeName); |
| | | if ("DAY".equals(dto.getTimeType())) { |
| | | beginTime = DateUtil.offsetMinute(beginTime, 1); |
| | | } else { |
| | | beginTime = DateUtil.offsetSecond(beginTime, 1); |
| | | } |
| | | vo.setUsedValue(String.valueOf(usedValue)); |
| | | vo.setValue(String.valueOf(value)); |
| | | voList.add(vo); |
| | | } |
| | | return AjaxResult.success(voList); |
| | |
| | | * @Version: 1.0 |
| | | * @Since: JDK1.8 |
| | | */ |
| | | |
| | | @Slf4j |
| | | @Api("éé计éè¡¨æ°æ®ç®¡ç") |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/meters") |
| | | public class MeterController extends BaseController { |
| | |
| | | import com.zhitan.model.domain.vo.PointDataVO; |
| | | import com.zhitan.model.service.IEnergyIndexService; |
| | | import com.zhitan.model.service.IModelInfoService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | |
| | | * @author fanxinfu |
| | | * @date 2020-02-17 |
| | | */ |
| | | @Api(tags = "模åç¸å
³") |
| | | @RestController |
| | | @RequestMapping("/basicsetting/model") |
| | | public class ModelInfoController extends BaseController { |
| | |
| | | * å表 |
| | | */ |
| | | @GetMapping("/page") |
| | | @PreAuthorize("@ss.hasPermi('energySavingProject:list')") |
| | | @PreAuthorize("@ss.hasPermi('energySavingProject:Project:list')") |
| | | @ApiOperation(value = "å页å表") |
| | | public TableDataInfo list(EnergySavingProgram energySavingProgram) { |
| | | Page<EnergySavingProgramVO> list = energySavingProgramService.selectEnergySavingProgramList(energySavingProgram); |
| | |
| | | * 详ç»ä¿¡æ¯ |
| | | */ |
| | | @ApiOperation(value = "æ¥è¯¢è¯¦æ
") |
| | | @PreAuthorize("@ss.hasPermi('energySavingProject')") |
| | | @GetMapping(value = "getById") |
| | | public AjaxResult getInfo(@RequestParam("id") Long id) { |
| | | return success(energySavingProgramService.selectEnergySavingProgramById(id)); |
| | |
| | | * èè½é¡¹ç®ç®¡ç |
| | | */ |
| | | @ApiOperation(value = "æ°å¢") |
| | | @PreAuthorize("@ss.hasPermi('energySavingProject:Project:add')") |
| | | @PostMapping("add") |
| | | public AjaxResult add( @RequestBody EnergySavingProgramDTO dto) { |
| | | return energySavingProgramService.insertEnergySavingProgram(dto); |
| | |
| | | * èè½é¡¹ç®ç®¡ç |
| | | */ |
| | | @ApiOperation(value = "æ´æ°") |
| | | @PreAuthorize("@ss.hasPermi('energySavingProject:Project:edit')") |
| | | @PostMapping("edit") |
| | | public AjaxResult edit(@RequestBody EnergySavingProgramDTO dto) { |
| | | return energySavingProgramService.updateEnergySavingProgram(dto); |
| | |
| | | * èè½é¡¹ç®ç®¡ç |
| | | */ |
| | | @DeleteMapping("del/{id}") |
| | | @PreAuthorize("@ss.hasPermi('energySavingProject:Project:del')") |
| | | @ApiOperation(value = "å é¤") |
| | | public AjaxResult remove(@PathVariable Long id) { |
| | | return energySavingProgramService.deleteEnergySavingProgramById(id); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.web.controller.statisticalAnalysis; |
| | | |
| | | import com.zhitan.common.annotation.Log; |
| | | import com.zhitan.common.core.domain.AjaxResult; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | |
| | | /** |
| | | * @Description: è½æºæ¶èç»è®¡åæ |
| | | * @author: yxw |
| | | * @date: 2022å¹´04æ12æ¥ 14:11 |
| | | */ |
| | | @Api(tags = "è½èç»è®¡åæ") |
| | | @RestController |
| | | @RequestMapping("/energyTypeAnalysis") |
| | | @Slf4j |
| | | public class EnergyConsumeDataController { |
| | | @Autowired |
| | | private IEnergyConsumeDataService energyConsumeDataService; |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® |
| | | * |
| | | * @param pageNo é¡µç æ° |
| | | * @param pageSize æ¯é¡µæ°æ®å¤å° |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param energyType è½æºç±»å |
| | | * @param modelCode 模åCode |
| | | * @return |
| | | */ |
| | | @Log(title = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®") |
| | | @ApiOperation(value = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®", notes = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®") |
| | | @GetMapping(value = "/listEnergyCostTrend") |
| | | public AjaxResult listEnergyCostTrend(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, |
| | | @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, |
| | | @RequestParam(name = "timeCode") String timeCode, |
| | | @RequestParam(name = "timeType") String timeType, |
| | | @RequestParam(name = "energyType",required = false) String energyType, |
| | | @RequestParam(name = "modelCode") String modelCode) { |
| | | return AjaxResult.success(energyConsumeDataService.listEnergyCostTrend(pageNo, pageSize, timeCode, timeType,energyType, |
| | | modelCode)); |
| | | } |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ |
| | | * |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param modelCode 模åCode |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | @Log(title = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼") |
| | | @ApiOperation(value = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼", notes = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼") |
| | | @GetMapping(value = "/listEnergyCostTrendDetail") |
| | | public AjaxResult listEnergyCostTrendDetail(@RequestParam(name = "timeCode") String timeCode, |
| | | @RequestParam(name = "timeType") String timeType, |
| | | @RequestParam(name = "modelCode") String modelCode, |
| | | @RequestParam(name = "energyType",required = false) String energyType) { |
| | | return AjaxResult.success(energyConsumeDataService.listEnergyCostTrendDetail(timeCode, timeType, modelCode, energyType)); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.zhitan.web.controller.statisticalAnalysis; |
| | | |
| | | import com.zhitan.common.annotation.Log; |
| | | import com.zhitan.common.constant.CommonConst; |
| | | import com.zhitan.common.core.domain.AjaxResult; |
| | | import com.zhitan.dataitem.service.IDataItemService; |
| | | import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO; |
| | | import com.zhitan.statisticalAnalysis.domain.vo.QueryCompareRequest; |
| | | import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | @Autowired |
| | | private IDataItemService dataItemService; |
| | | |
| | | @Autowired |
| | | private IEnergyConsumeDataService energyConsumeDataService; |
| | | |
| | | /** |
| | | * è·åè½æµå¾å½¢åæ |
| | | * |
| | |
| | | public AjaxResult getFlowCharts(@Validated FlowChartsDTO dto) { |
| | | return AjaxResult.success(dataItemService.getFlowCharts(dto)); |
| | | } |
| | | |
| | | @Log(title = "è½èç»è®¡åæ-è·å忝åæåè¡¨æ°æ®") |
| | | @ApiOperation(value = "è½èç»è®¡åæ-è·å忝åæåè¡¨æ°æ®", notes = "è½èç»è®¡åæ-è·å忝åæåè¡¨æ°æ®") |
| | | @GetMapping(value = "/querySameCompareList") |
| | | public AjaxResult querySameCompareList(@Validated QueryCompareRequest queryCompareRequest) { |
| | | return AjaxResult.success(energyConsumeDataService.listEnergyTypeYoyInfo(queryCompareRequest, CommonConst.ENERGY_COMPARISON_YOY)); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¯æ¯åææ°æ® |
| | | * <p> |
| | | * éè¿èªå·±çæå¡è®¿é®å°åï¼http://localhost:7005/fengniao/energyDataItem/queryLoopCompare?timeType=1 |
| | | * éè¿ç½å
³è®¿é®å°åï¼http://localhost:9999/jeecg-fengniao/fengniao/energyDataItem/queryLoopCompare?timeType=1 |
| | | * |
| | | * @param queryCompareRequest |
| | | * @return |
| | | */ |
| | | @Log(title = "è½èç»è®¡åæ-è·åç¯æ¯åæåè¡¨æ°æ®") |
| | | @ApiOperation(value = "è½èç»è®¡åæ-è·åç¯æ¯åæåè¡¨æ°æ®", notes = "è½èç»è®¡åæ-è·åç¯æ¯åæåè¡¨æ°æ®") |
| | | @GetMapping(value = "/queryLoopCompareList") |
| | | public AjaxResult queryLoopCompareList(@Validated QueryCompareRequest queryCompareRequest) { |
| | | |
| | | return AjaxResult.success(energyConsumeDataService.listEnergyTypeYoyInfo(queryCompareRequest, CommonConst.ENERGY_COMPARISON_MOM)); |
| | | } |
| | | } |
| | |
| | | import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisYoYExcel; |
| | | import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisYoYVO; |
| | | import com.zhitan.statisticalAnalysis.service.IStatisticalAnalysisService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | /** |
| | | * ç»è®¡åæ æ§å¶å± |
| | | */ |
| | | @Api(tags = "ç»è®¡åæ") |
| | | @RestController |
| | | @RequestMapping("/statisticalAnalysis") |
| | | public class StatisticalAnalysisController extends BaseController { |
| | |
| | | // ç¨ApiInfoBuilderè¿è¡å®å¶ |
| | | return new ApiInfoBuilder() |
| | | // 设置æ é¢ |
| | | .title("æ é¢:åå°ç®¡çç³»ç»_æ¥å£ææ¡£") |
| | | .title("æºç¢³_è½æºç®¡çç³»ç»_æ¥å£ææ¡£") |
| | | // æè¿° |
| | | .description("æè¿°:æ¥å£ææ¡£") |
| | | .description("ééä¼ä¸æ°´ãçµãæ°ãççè½èæ°æ®ï¼å¸®å©ä¼ä¸å»ºç«è½æºç®¡çä½ç³»ï¼æ¾å°è·åæ»´æ¼ï¼ä¸ºä¼ä¸èè½æä¾æ°æ®æ¯æï¼ä¸ºä¼ä¸å®ç°ç¢³è·è¸ªãç¢³çæ¥ã碳交æãç¢³æ±æ¥çå
¨çå½è¿ç¨ï¼ä¸ºä¸å½ç¢³è¾¾å³°-碳ä¸åååºè´¡ç®ï¼") |
| | | // ä½è
ä¿¡æ¯ |
| | | .contact(new Contact(baseConfig.getName(), null, null)) |
| | | .contact(new Contact(baseConfig.getName(), "https://www.zhitancloud.com", "yin.cun@qq.com")) |
| | | // çæ¬ |
| | | .version("çæ¬å·:" + baseConfig.getVersion()) |
| | | .build(); |
| | |
| | | /** |
| | | * çµæµ |
| | | */ |
| | | public static final String TAG_CODE_CURRENT = "Current_"; |
| | | public static final String TAG_CODE_CURRENT = "Current"; |
| | | /** |
| | | * çµå |
| | | */ |
| | | public static final String TAG_CODE_VOLTAGE = "Voltage_"; |
| | | public static final String TAG_CODE_VOLTAGE = "Voltage"; |
| | | /** |
| | | * åçå æ° |
| | | */ |
| | | public static final String TAG_CODE_FACTOR = "PowerFactor_"; |
| | | public static final String TAG_CODE_FACTOR = "PowerFactor"; |
| | | /** |
| | | * åçå æ° |
| | | */ |
| | |
| | | * è·å宿¶æ°æ®æ¹å¼. |
| | | */ |
| | | public enum RetrievalModes { |
| | | Full, BestFit |
| | | |
| | | Full, |
| | | |
| | | BestFit |
| | | } |
| | |
| | | public static void generateDateList(String timeType, String timeCode, List<Date> dateList) { |
| | | Date now = new Date(); |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) { |
| | | timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_HOUR, DateTimeUtil.COMMON_PATTERN_TO_HOUR); |
| | | } |
| | | int minute = 59; |
| | | for (int i = CommonConst.DIGIT_0; i <= minute; i++) { |
| | | String tempCode = timeCode + ":0" + i; |
| | | if(i>9){ |
| | | tempCode = timeCode + ":" + i; |
| | | } |
| | | Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_END_WITH_MINUTE); |
| | | dateList.add(tempD); |
| | | } |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) { |
| | | timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_DAY, DateTimeUtil.COMMON_PATTERN_TO_DAY); |
| | |
| | | */ |
| | | List<DataItem> getDataItemHourInforByIndexIds(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, |
| | | @Param("timeType") String timeType, @Param("indexIds") List<String> indexIds); |
| | | |
| | | /** |
| | | * æ¥è¯¢è½æºç±»åéçµçç¨é |
| | | * @param beginTime |
| | | * @param endTime |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param nodeId èç¹Id |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | BigDecimal getDataItemTimeRangeValueByNodeId(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, |
| | | @Param("timeType") String timeType, @Param("nodeId") String nodeId, @Param("energyType") String energyType); |
| | | } |
| | |
| | | @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() |
| | |
| | | || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_CURRENT_C)) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | if (ObjectUtil.isEmpty(energyIndexList)) { |
| | | return vo; |
| | | } |
| | | List<String> tagCodeList = energyIndexList.stream().map(EnergyIndex::getCode).collect(Collectors.toList()); |
| | | tagCodeList.add(CommonConst.STR_NUMBER_MINUS_ONE); |
| | | String tagCodes = String.join(StrUtil.COMMA, tagCodeList); |
| | | if(ObjectUtil.isEmpty(tagCodeList)){ |
| | | tagCodeList.add(CommonConst.STR_NUMBER_MINUS_ONE); |
| | | } |
| | | |
| | | Date start = ChartUtils.getDateTime(timeType, timeCode); |
| | | Date end = getEndTime(timeType, start); |
| | |
| | | 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<TagValue> tagValueList = realtimeDatabaseService.retrieve(tagCodeList, start, end, pointCount); |
| | | List<ElectricThreePhaseItem> itemList = new ArrayList<>(); |
| | | List<Date> dateList = new ArrayList<>(); |
| | | ChartUtils.generateDateList(timeType, timeCode, dateList); |
| | |
| | | */ |
| | | 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()); |
| | | List<TagValue> currentTagValueList = tagValueList.stream() |
| | | .filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) <= 0 && DateTimeUtil.compareDateDiff(endTime, x.getDataTime()) > 0).collect(Collectors.toList()); |
| | | List<TagValue> currentATagValueList = currentTagValueList.stream() |
| | | .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith(CommonConst.A_PHASE)).collect(Collectors.toList()); |
| | | List<TagValue> currentBTagValueList = currentTagValueList.stream() |
| | | .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith(CommonConst.B_PHASE)).collect(Collectors.toList()); |
| | | List<TagValue> currentCTagValueList = currentTagValueList.stream() |
| | | .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith(CommonConst.C_PHASE)).collect(Collectors.toList()); |
| | | TagValue tagValueA = currentATagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null); |
| | | TagValue tagValueB = currentBTagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null); |
| | | TagValue tagValueC = currentCTagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null); |
| | |
| | | */ |
| | | @Override |
| | | public List<EnergyIndex> listDeviceIndex(String nodeId, String meterId) { |
| | | return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery() |
| | | .eq(EnergyIndex::getNodeId, nodeId) |
| | | .eq(EnergyIndex::getMeterId, meterId)); |
| | | List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByMeterIdIndexCode(meterId,null,nodeId); |
| | | return energyIndexList; |
| | | } |
| | | } |
| | |
| | | List<ElectricityDataItem> getDataStatisticsDeviationAnalysis(@Param("indexIdSet") Set<String> indexIdSet, |
| | | @Param("timeType") String timeType); |
| | | |
| | | /** |
| | | * æ¥è¯¢ææ¬è¶å¿ |
| | | * @param beginTime |
| | | * @param endTime |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param nodeId èç¹Id |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | List<ElectricityDataItem> getCostTrends(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, |
| | | @Param("timeType") String timeType, @Param("nodeId") String nodeId,@Param("energyType") String energyType); |
| | | |
| | | } |
| | |
| | | tagCodes.add(tagCode); |
| | | List<TagValue> historyData = repository.getHistoryData(tagCodes, beginTime, endTime, interval); |
| | | return historyData; |
| | | // return realtimeDatabaseManager.retrieve(tagCode, beginTime, endTime, retrievalModes, pointCount); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.common; |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.zhitan.common.constant.CommonConst; |
| | | import com.zhitan.common.constant.TimeTypeConst; |
| | | import com.zhitan.common.utils.IntegerUtil; |
| | | import com.zhitan.common.utils.StringUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.time.DateUtils; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.GregorianCalendar; |
| | | |
| | | /** |
| | | * @Description: æ¶é´å·¥å
·ç±» |
| | | * @author: yxw |
| | | * @date: 2022å¹´02æ02æ¥ 12:23 |
| | | */ |
| | | @Slf4j |
| | | public class DateTimeUtil { |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ |
| | | */ |
| | | public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss"; |
| | | /** |
| | | * æ ¼å¼åæ¥æå°åé |
| | | */ |
| | | public static final String COMMON_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm"; |
| | | /** |
| | | * æ¥ææ ¼å¼ - å°æ¶:åé |
| | | */ |
| | | public static final String COMMON_PATTERN_HOUR_MINUTE = "HH:mm"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - 年份 |
| | | */ |
| | | public static final String COMMON_PATTERN_YEAR = "yyyy"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä¸å¹´, |
| | | */ |
| | | public static final String COMMON_PATTERN_CERTAIN_YEAR = "yy"; |
| | | |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä»½ |
| | | */ |
| | | public static final String COMMON_PATTERN_MONTH = "yyyyMM"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä»½ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_MONTH = "yyyy-MM"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä»½ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_MONTH_WORD = "yyyy-MMæ"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä»½ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_MONTH_ZH = "yyyyå¹´MMæ"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - 天 |
| | | */ |
| | | 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å¹´MMæddæ¥ HHæ¶"; |
| | | |
| | | /** |
| | | * è·åå½åæ¶é´,æ¶é´æ ¼å¼ï¼yyyy-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); |
| | | } |
| | | |
| | | /** |
| | | * åç¬¦ä¸²è½¬ææ¶é´ç±»å,é»è®¤æ ¼å¼ï¼yyyy-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); |
| | | } |
| | | |
| | | /** |
| | | * è·å天,æ ¼å¼ï¼yyyyMMdd |
| | | * |
| | | * @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 计ç®ç±»åï¼Calendar.YEARï¼Calendar.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; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®å¨æç±»å对çäº§å¨æè¿è¡å åè®¡ç® |
| | | * å¡«æ¥å¨æç±»åï¼HOURå°æ¶ãDAY天ãMONTHæãYEARå¹´ï¼ |
| | | * |
| | | * @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è¿ä½å°±æ¯ å ä¸å¤© |
| | | * å¡«æ¥å¨æç±»åï¼HOURå°æ¶ãDAY天ãMONTHæãYEARå¹´ï¼ |
| | | * |
| | | * @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; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | |
| | | |
| | | /** |
| | | * ææ¬è¶å¿-è½æºç±»å |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/2/14 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "ææ¬è¶å¿-è½æºç±»å", description = "ææ¬è¶å¿-è½æºç±»å") |
| | | public class CostTrendEnergyTypeItem implements Serializable { |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | @ApiModelProperty(value = "è½æºç±»å") |
| | | private String energyType; |
| | | |
| | | /** |
| | | * è½æºåç§° |
| | | */ |
| | | @ApiModelProperty(value = "è½æºåç§°") |
| | | private String energyName; |
| | | |
| | | /** |
| | | * 累积é |
| | | */ |
| | | @ApiModelProperty(value = "累积é") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal accumulation; |
| | | |
| | | /** |
| | | * è´¹ç¨ |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal cost; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯ |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/2/14 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯", description = "è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯") |
| | | public class EnergyConsumeTrendDetailItem { |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | @ApiModelProperty(value = "è½æºç±»å") |
| | | private String energyType; |
| | | |
| | | /** |
| | | * è½æºåä½ |
| | | */ |
| | | @ApiModelProperty(value = "è½æºåä½") |
| | | private String energyUnit; |
| | | |
| | | /** |
| | | * ç´¯ç§¯éæ ç¾ |
| | | */ |
| | | @ApiModelProperty(value = "ç´¯ç§¯éæ ç¾") |
| | | private String accumulationLabel; |
| | | |
| | | /** |
| | | * è´¹ç¨æ ç¾ |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨æ ç¾") |
| | | private String costLabel; |
| | | |
| | | /** |
| | | * 累积é |
| | | */ |
| | | @ApiModelProperty(value = "累积é") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal accumulation; |
| | | |
| | | /** |
| | | * è´¹ç¨ |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal cost; |
| | | |
| | | /** |
| | | * 累积ékeyéå |
| | | */ |
| | | @ApiModelProperty(value = "累积ékeyéå") |
| | | private List<String> accumulationKeyList; |
| | | |
| | | /** |
| | | * 累积évalueéå |
| | | */ |
| | | @ApiModelProperty(value = "累积évalueéå") |
| | | private List<BigDecimal> accumulationValueList; |
| | | |
| | | /** |
| | | * è´¹ç¨keyéå |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨keyéå") |
| | | private List<String> costKeyList; |
| | | |
| | | /** |
| | | * è´¹ç¨valueéå |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨valueéå") |
| | | private List<BigDecimal> costValueList; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | |
| | | /** |
| | | * è½èå®ä½ç±» |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/1/28 |
| | | */ |
| | | @Data |
| | | public class EnergyConsumeVO implements Serializable { |
| | | |
| | | /** |
| | | * 计éå¨å
·id |
| | | */ |
| | | private String deviceId; |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | private String energyType; |
| | | |
| | | /** |
| | | * æ¶é´ç¼ç |
| | | */ |
| | | private Date dataTime; |
| | | |
| | | /** |
| | | * è´¹ç¨ |
| | | */ |
| | | private BigDecimal costValue; |
| | | |
| | | /** |
| | | * 累计é |
| | | */ |
| | | private BigDecimal accumulationValue; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯ |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/2/14 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯", description = "ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯") |
| | | public class EnergyCostTrendItem { |
| | | |
| | | /** |
| | | * ç¨è½åå
id |
| | | */ |
| | | @ApiModelProperty(value = "ç¨è½åå
id") |
| | | private String energyUnitId; |
| | | |
| | | /** |
| | | * ç¨è½åå
åç§° |
| | | */ |
| | | @ApiModelProperty(value = "ç¨è½åå
åç§°") |
| | | private String energyUnitName; |
| | | |
| | | /** |
| | | * æ»è´¹ç¨ |
| | | */ |
| | | @ApiModelProperty(value = "æ»è´¹ç¨") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal total; |
| | | |
| | | /** |
| | | * æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value = "æ¶é´") |
| | | private String dateCode; |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | @ApiModelProperty(value = "è½æºç±»å") |
| | | private List<CostTrendEnergyTypeItem> itemList; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @Description: TODO |
| | | * @author: yxw |
| | | * @date: 2022å¹´04æ15æ¥ 10:07 |
| | | */ |
| | | @Data |
| | | public class EnergyCostTrendPage { |
| | | /** |
| | | * æ°æ®å表 |
| | | */ |
| | | private List<EnergyCostTrendItem> itemList; |
| | | /** |
| | | * è®°å½æ»æ°é |
| | | */ |
| | | private long total; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * åè½æºç±»åå¼åæ¯ãç¯æ¯VO |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/2/8 |
| | | */ |
| | | @Data |
| | | public class EnergyTypeValueContrastedVO { |
| | | |
| | | /** |
| | | * ç¨è½åå
åç§° |
| | | */ |
| | | @ApiModelProperty(value = "ç¨è½åå
åç§°") |
| | | private String energyUnitName; |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | @ApiModelProperty(value = "è½æºç±»å") |
| | | private String energyType; |
| | | |
| | | /** |
| | | * æ¬ææ¶é´ |
| | | */ |
| | | @ApiModelProperty(value = "æ¬ææ¶é´") |
| | | private String currentTime; |
| | | |
| | | /** |
| | | * æ¬æå¼ |
| | | */ |
| | | @ApiModelProperty(value = "æ¬æå¼") |
| | | private BigDecimal currentValue; |
| | | |
| | | /** |
| | | * å¯¹æ¯æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value = "å¯¹æ¯æ¶é´") |
| | | private String compareTime; |
| | | |
| | | /** |
| | | * 对æ¯å¼ |
| | | */ |
| | | @ApiModelProperty(value = "对æ¯å¼") |
| | | private BigDecimal contrastValues; |
| | | |
| | | /** |
| | | * åæ¯å¼ |
| | | * 忝å¢é¿ç=ï¼æ¬æå¼-å»å¹´åæå¼ï¼/å»å¹´åæå¼Ã100% |
| | | * ç¯æ¯å¼ |
| | | * ç¯æ¯å¢é¿ç=ï¼æ¬æå¼-䏿å¼ï¼/䏿å¼Ã100% |
| | | */ |
| | | @ApiModelProperty(value = "忝å¢é¿ç/ç¯æ¯å¢é¿ç") |
| | | private BigDecimal ratio; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | |
| | | /** |
| | | * @Description: æ°æ®æ¥è¯¢æ¡ä»¶å®ä½ |
| | | * @author: yxw |
| | | * @date: 2022å¹´01æ28æ¥ 14:49 |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @ApiModel(value="QueryCompareRequest", description="è·åæ°æ®çåæ°å®ä½") |
| | | public class QueryCompareRequest { |
| | | |
| | | /** |
| | | * æ¥è¯¢æ¶é´ç±»å,对åºå¸¸éç±»ï¼TimeTypeConst |
| | | */ |
| | | @NotBlank(message = "æ¶é´ç±»åä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "æ¥è¯¢æ¶é´ç±»å,对åºå¸¸éï¼DAY/MONTH/SEASON/YEARï¼é»è®¤MONTH") |
| | | private String timeType; |
| | | |
| | | /** |
| | | * æ¥æå¼ï¼æä»½(202201-202212)ã年份(2022-~) |
| | | */ |
| | | @NotBlank(message = "æ¶é´ç¼ç ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "æ¥æå¼ï¼æä»½(202201-202212)ã年份(2022-~)") |
| | | private String timeCode; |
| | | |
| | | /** |
| | | * èç¹Id |
| | | */ |
| | | @NotBlank(message = "èç¹Id") |
| | | @ApiModelProperty(value = "èç¹Id") |
| | | private String nodeId; |
| | | |
| | | /** |
| | | * è½æºç±»åï¼éè¿/éå¼,water/gas |
| | | */ |
| | | @ApiModelProperty(value = "è½æºç±»åï¼éè¿/éå¼,water/gas") |
| | | private String energyType; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.service; |
| | | |
| | | import com.zhitan.statisticalAnalysis.domain.vo.*; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * è½æºæ¶èç»è®¡ç¸å
³æ¥è¯¢ |
| | | */ |
| | | public interface IEnergyConsumeDataService { |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® |
| | | * |
| | | * @param pageNo é¡µç æ° |
| | | * @param pageSize æ¯é¡µæ°æ®å¤å° |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param energyType è½æºç±»å |
| | | * @param modelCode 模åCode |
| | | * @return |
| | | */ |
| | | EnergyCostTrendPage listEnergyCostTrend(int pageNo, int pageSize, String timeCode, String timeType,String energyType, String modelCode); |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ |
| | | * |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param modelCode 模åCode |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType); |
| | | |
| | | /** |
| | | * åæ¯ç¯æ¯åæ |
| | | * |
| | | * @param req 请æ±åæ° |
| | | * @param comparisonType 对æ¯ç±»å |
| | | * @return |
| | | */ |
| | | public List<EnergyTypeValueContrastedVO> listEnergyTypeYoyInfo(QueryCompareRequest req, String comparisonType); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.service.impl; |
| | | |
| | | import cn.hutool.core.date.DateField; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.zhitan.basicdata.domain.SysEnergy; |
| | | import com.zhitan.basicdata.mapper.SysEnergyMapper; |
| | | import com.zhitan.carbonemission.domain.CarbonEmission; |
| | | import com.zhitan.common.constant.CommonConst; |
| | | import com.zhitan.common.constant.TimeTypeConst; |
| | | import com.zhitan.common.utils.StringUtils; |
| | | import com.zhitan.dataitem.mapper.DataItemMapper; |
| | | import com.zhitan.model.domain.ModelNode; |
| | | import com.zhitan.model.domain.NodeIndex; |
| | | import com.zhitan.model.mapper.ModelNodeMapper; |
| | | import com.zhitan.model.mapper.NodeIndexMapper; |
| | | import com.zhitan.peakvalley.domain.ElectricityDataItem; |
| | | import com.zhitan.peakvalley.mapper.PeakValleyMapper; |
| | | import com.zhitan.statisticalAnalysis.common.DateTimeUtil; |
| | | import lombok.AllArgsConstructor; |
| | | import org.apache.commons.lang3.ObjectUtils; |
| | | import com.zhitan.statisticalAnalysis.domain.vo.*; |
| | | import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService; |
| | | import org.jetbrains.annotations.NotNull; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Description: TODO |
| | | * @author: yxw |
| | | * @date: 2022å¹´04æ12æ¥ 14:15 |
| | | */ |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class EnergyConsumeDataServiceImpl implements IEnergyConsumeDataService { |
| | | |
| | | private DataItemMapper dataItemMapper; |
| | | private ModelNodeMapper modelNodeMapper; |
| | | private NodeIndexMapper nodeIndexMapper; |
| | | private PeakValleyMapper peakValleyMapper; |
| | | private SysEnergyMapper sysEnergyMapper; |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® |
| | | * |
| | | * @param pageNo é¡µç æ° |
| | | * @param pageSize æ¯é¡µæ°æ®å¤å° |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param energyType è½æºç±»å |
| | | * @param modelCode 模åCode |
| | | * @return |
| | | */ |
| | | @Override |
| | | public EnergyCostTrendPage listEnergyCostTrend(int pageNo, int pageSize, String timeCode, String timeType, String energyType, |
| | | String modelCode) { |
| | | //è½æºç±»åä¿¡æ¯ |
| | | SysEnergy sysEnergy = new SysEnergy(); |
| | | if (StringUtils.isNotEmpty(energyType)) { |
| | | sysEnergy.setEnersno(energyType); |
| | | } |
| | | List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); |
| | | if (sysEnergies.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°è½æºä¿¡æ¯"); |
| | | } |
| | | //èç¹ä¿¡æ¯ |
| | | List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode) |
| | | .isNull(ModelNode::getParentId)); |
| | | if (ObjectUtils.isEmpty(modelNodes)) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°èç¹ä¿¡æ¯"); |
| | | } |
| | | ModelNode modelNodeInfo = modelNodes.stream().findFirst().get(); |
| | | //ç¹ä½ä¿¡æ¯ |
| | | List<NodeIndex> nodeIndices = nodeIndexMapper.selectList(Wrappers.<NodeIndex>lambdaQuery() |
| | | .eq(NodeIndex::getNodeId, modelNodeInfo.getNodeId())); |
| | | if (nodeIndices.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°ç¹ä½ä¿¡æ¯"); |
| | | } |
| | | |
| | | // æ»è´¹ç¨ |
| | | BigDecimal totalCost = BigDecimal.ZERO; |
| | | // éåè½æºç±»å |
| | | List<CostTrendEnergyTypeItem> itemList = new ArrayList<>(); |
| | | for (SysEnergy sysEnergyInfo : sysEnergies) { |
| | | CostTrendEnergyTypeItem item = new CostTrendEnergyTypeItem(); |
| | | item.setEnergyType(sysEnergyInfo.getEnersno()); |
| | | item.setEnergyName(sysEnergyInfo.getEnername()); |
| | | // å¤çæ¶é´ |
| | | Date bsTime = DateTimeUtil.getTime(timeType, timeCode); |
| | | Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); |
| | | totalCost = getEnergyUnitCostTrendAnalysisValueInfo(timeType, bsTime, endTime, totalCost, nodeIndices, modelNodeInfo.getNodeId(), sysEnergyInfo, item); |
| | | itemList.add(item); |
| | | } |
| | | // éåç¨è½åå
è·åè¡¨æ ¼ä¸çæ°æ® |
| | | List<EnergyCostTrendItem> trendItemList = new ArrayList<>(); |
| | | EnergyCostTrendItem energyCostTrendItem = new EnergyCostTrendItem(); |
| | | energyCostTrendItem.setDateCode(timeCode); |
| | | energyCostTrendItem.setTotal(totalCost.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP)); |
| | | energyCostTrendItem.setItemList(itemList); |
| | | trendItemList.add(energyCostTrendItem); |
| | | |
| | | EnergyCostTrendPage energyCostTrendPage = new EnergyCostTrendPage(); |
| | | energyCostTrendPage.setTotal(1); |
| | | energyCostTrendPage.setItemList(trendItemList); |
| | | return energyCostTrendPage; |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨è½åå
ææ¬è¶å¿åæç´¯ç§¯éãè´¹ç¨ä¿¡æ¯ |
| | | * |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param bsTime å¼å§æ¶é´ |
| | | * @param endTime ç»ææ¶é´ |
| | | * @param totalCost æ»è´¹ç¨ |
| | | * @param nodeIndices èç¹ç¹ä½éå |
| | | * @param nodeId èç¹id |
| | | * @param sysEnergyInfo è½æºç±»åä¿¡æ¯ |
| | | * @param item è¿å对象 |
| | | * @return |
| | | */ |
| | | private BigDecimal getEnergyUnitCostTrendAnalysisValueInfo(String timeType, Date bsTime, Date endTime, BigDecimal totalCost, |
| | | List<NodeIndex> nodeIndices, String nodeId, SysEnergy sysEnergyInfo, |
| | | CostTrendEnergyTypeItem item) { |
| | | BigDecimal costValue = BigDecimal.ZERO; |
| | | BigDecimal accumulationValue = BigDecimal.ZERO; |
| | | //çµï¼åªæHOURæ°æ®ææï¼å
¶ä»è½æºç±»åï¼HOURãDAYææ°æ® |
| | | switch (sysEnergyInfo.getEnersno()) { |
| | | case "electric": |
| | | List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getDataStatistics(nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toSet()), bsTime, endTime, TimeTypeConst.TIME_TYPE_HOUR); |
| | | costValue = electricityDataItems.stream().map(ElectricityDataItem::getCost).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | accumulationValue = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | break; |
| | | default: |
| | | accumulationValue = dataItemMapper.getDataItemTimeRangeValueByNodeId(bsTime, endTime, TimeTypeConst.TIME_TYPE_DAY, nodeId, sysEnergyInfo.getEnersno()); |
| | | costValue = accumulationValue.multiply(sysEnergyInfo.getPrice()); |
| | | break; |
| | | } |
| | | costValue = costValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | totalCost = totalCost.add(costValue); |
| | | item.setCost(costValue); |
| | | item.setAccumulation(accumulationValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP)); |
| | | return totalCost; |
| | | } |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ |
| | | * |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param modelCode 模åCode |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType) { |
| | | //è½æºç±»åä¿¡æ¯ |
| | | SysEnergy sysEnergy = new SysEnergy(); |
| | | if (StringUtils.isNotEmpty(energyType)) { |
| | | sysEnergy.setEnersno(energyType); |
| | | } |
| | | List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); |
| | | if (sysEnergies.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°è½æºä¿¡æ¯"); |
| | | } |
| | | |
| | | //èç¹ä¿¡æ¯ |
| | | List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode) |
| | | .isNull(ModelNode::getParentId)); |
| | | if (modelNodes.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°èç¹ä¿¡æ¯"); |
| | | } |
| | | String nodeId = modelNodes.stream().findFirst().get().getNodeId(); |
| | | |
| | | // è½èä¿¡æ¯ |
| | | List<EnergyConsumeTrendDetailItem> itemList = new ArrayList<>(); |
| | | Date startTime = DateTimeUtil.getTime(timeType, timeCode); |
| | | Date endTime = DateTimeUtil.getEndTimeByType(timeType, startTime); |
| | | //çµï¼åªæHOURæ°æ®ææï¼å
¶ä»è½æºç±»åï¼HOURãDAYææ°æ® |
| | | String queryTimeType = TimeTypeConst.TIME_TYPE_HOUR; |
| | | for (SysEnergy sysEnergyInfo : sysEnergies) { |
| | | List<EnergyConsumeVO> energyConsumeVOList = new ArrayList<>(); |
| | | switch (sysEnergyInfo.getEnersno()) { |
| | | case "electric": |
| | | List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, queryTimeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | if (!electricityDataItems.isEmpty()) { |
| | | electricityDataItems.forEach(electricityDataItem -> { |
| | | EnergyConsumeVO temp = new EnergyConsumeVO(); |
| | | temp.setDataTime(electricityDataItem.getDataTime()); |
| | | temp.setCostValue(electricityDataItem.getCost()); |
| | | temp.setAccumulationValue(electricityDataItem.getElectricity()); |
| | | energyConsumeVOList.add(temp); |
| | | }); |
| | | } |
| | | break; |
| | | default: |
| | | if (timeType.equals(TimeTypeConst.TIME_TYPE_MONTH) || timeType.equals(TimeTypeConst.TIME_TYPE_YEAR)) { |
| | | queryTimeType = TimeTypeConst.TIME_TYPE_DAY; |
| | | } |
| | | List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, queryTimeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | if (!dataItems.isEmpty()) { |
| | | dataItems.forEach(electricityDataItem -> { |
| | | EnergyConsumeVO temp = new EnergyConsumeVO(); |
| | | temp.setDataTime(electricityDataItem.getDataTime()); |
| | | temp.setCostValue(new BigDecimal(electricityDataItem.getValue())); |
| | | temp.setAccumulationValue(new BigDecimal(electricityDataItem.getValue()).multiply(sysEnergyInfo.getPrice())); |
| | | energyConsumeVOList.add(temp); |
| | | }); |
| | | } |
| | | break; |
| | | } |
| | | BigDecimal cost = energyConsumeVOList.stream().map(EnergyConsumeVO::getCostValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | BigDecimal accumulation = energyConsumeVOList.stream().map(EnergyConsumeVO::getAccumulationValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | // ç»è£
ç»è®¡å¾ä¿¡æ¯ |
| | | EnergyConsumeTrendDetailItem item = new EnergyConsumeTrendDetailItem(); |
| | | item.setEnergyType(sysEnergyInfo.getEnersno()); |
| | | item.setEnergyUnit(sysEnergyInfo.getMuid()); |
| | | item.setCostLabel(sysEnergyInfo.getEnername() + "è´¹"); |
| | | item.setAccumulationLabel(sysEnergyInfo.getEnername() + "ç¨é"); |
| | | item.setCost(cost); |
| | | item.setAccumulation(accumulation); |
| | | // ç»è£
å¾è¡¨ä¿¡æ¯ |
| | | getTrendAnalysisCharInfoByEnergyType(startTime, timeType, energyConsumeVOList, item); |
| | | itemList.add(item); |
| | | } |
| | | return itemList; |
| | | } |
| | | |
| | | /** |
| | | * ç»è£
ææ¬è¶å¿åæ-ç»è®¡å¾ä¿¡æ¯ |
| | | * |
| | | * @param bsTime æ¶é´ |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param dataItems è½è |
| | | * @param item è¿å对象 |
| | | */ |
| | | private void getTrendAnalysisCharInfoByEnergyType(Date bsTime, String timeType, |
| | | List<EnergyConsumeVO> dataItems, EnergyConsumeTrendDetailItem item) { |
| | | List<String> costKeyList = new ArrayList<>(); |
| | | List<String> accumulationKeyList = new ArrayList<>(); |
| | | List<BigDecimal> costValueList = new ArrayList<>(); |
| | | List<BigDecimal> accumulationValueList = new ArrayList<>(); |
| | | Map<String, List<EnergyConsumeVO>> energyConsumeVOMap; |
| | | //ææ¶é´ç±»åç»ç»è¿åæ°æ® |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime()))); |
| | | for (int i = 0; i < CommonConst.DIGIT_24; i++) { |
| | | String formatDate = i + CommonConst.TIME_UNIT_SHOW_HOUR; |
| | | costKeyList.add(formatDate); |
| | | accumulationKeyList.add(formatDate); |
| | | String key = DateUtil.formatDateTime(DateUtil.offsetHour(bsTime, i)); |
| | | calculateCostAndAccumulation(energyConsumeVOMap, key, costValueList, accumulationValueList); |
| | | } |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDate(li.getDataTime()))); |
| | | Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); |
| | | while (bsTime.before(endTime)) { |
| | | String formatDate = DateUtil.formatDate(bsTime); |
| | | costKeyList.add(formatDate); |
| | | accumulationKeyList.add(formatDate); |
| | | calculateCostAndAccumulation(energyConsumeVOMap, formatDate, costValueList, accumulationValueList); |
| | | bsTime = DateUtil.offsetDay(bsTime, CommonConst.DIGIT_1); |
| | | } |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.COMMON_PATTERN_TO_MONTH_ZH); |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> formatter.format(li.getDataTime()))); |
| | | for (int i = 0; i < CommonConst.DIGIT_12; i++) { |
| | | Date newDate = DateUtil.offsetMonth(bsTime, i); |
| | | String formatDate = DateUtil.format(newDate, DateTimeUtil.COMMON_PATTERN_TO_MONTH_ZH); |
| | | costKeyList.add(formatDate); |
| | | accumulationKeyList.add(formatDate); |
| | | calculateCostAndAccumulation(energyConsumeVOMap, formatDate, costValueList, accumulationValueList); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | item.setCostKeyList(costKeyList); |
| | | item.setCostValueList(costValueList); |
| | | item.setAccumulationKeyList(accumulationKeyList); |
| | | item.setAccumulationValueList(accumulationValueList); |
| | | } |
| | | |
| | | /** |
| | | * 计ç®è´¹ç¨åç¨é |
| | | * |
| | | * @param energyConsumeVOMap |
| | | * @param formatDate |
| | | * @param costValueList |
| | | * @param accumulationValueList |
| | | */ |
| | | private static void calculateCostAndAccumulation(Map<String, List<EnergyConsumeVO>> energyConsumeVOMap, String formatDate, List<BigDecimal> costValueList, List<BigDecimal> accumulationValueList) { |
| | | List<EnergyConsumeVO> energyConsumeList = Optional.ofNullable(energyConsumeVOMap.get(formatDate)) |
| | | .orElse(Collections.emptyList()); |
| | | BigDecimal totalCost = energyConsumeList.stream() |
| | | .map(EnergyConsumeVO::getCostValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | |
| | | BigDecimal totalAccumulation = energyConsumeList.stream() |
| | | .map(EnergyConsumeVO::getAccumulationValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | costValueList.add(totalCost); |
| | | accumulationValueList.add(totalAccumulation); |
| | | } |
| | | |
| | | /** |
| | | * åæ¥ç¯æ¯åæ |
| | | * |
| | | * @param req 请æ±åæ° |
| | | * @param comparisonType 对æ¯ç±»å |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<EnergyTypeValueContrastedVO> listEnergyTypeYoyInfo(QueryCompareRequest req, String comparisonType) { |
| | | String energyType = req.getEnergyType(); |
| | | String timeType = req.getTimeType(); |
| | | String timeCode = req.getTimeCode(); |
| | | String nodeId = req.getNodeId(); |
| | | //è½æºç±»åä¿¡æ¯ |
| | | SysEnergy sysEnergy = new SysEnergy(); |
| | | sysEnergy.setEnersno(energyType); |
| | | List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); |
| | | if (sysEnergies.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°è½æºä¿¡æ¯"); |
| | | } |
| | | SysEnergy sysEnergyInfo = sysEnergies.get(0); |
| | | |
| | | // è½èä¿¡æ¯ |
| | | Date startTime = DateTimeUtil.getTime(timeType, timeCode); |
| | | Date endTime = DateTimeUtil.getEndTimeByType(timeType, startTime); |
| | | //æ¯å¦åæ¯ |
| | | boolean isYoy = comparisonType.equals(CommonConst.ENERGY_COMPARISON_YOY); |
| | | // 计ç®ä¸ä¸å¹´çåææ¶é´ |
| | | Date lastBeginTime = DateUtil.offset(startTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1); |
| | | Date lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1); |
| | | if (!isYoy) { |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | lastBeginTime = DateUtil.offsetDay(startTime, CommonConst.DIGIT_MINUS_1); |
| | | lastEndTime = DateUtil.offsetDay(endTime, CommonConst.DIGIT_MINUS_1); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | lastBeginTime = DateUtil.offsetMonth(startTime, CommonConst.DIGIT_MINUS_1); |
| | | lastEndTime = DateUtil.offsetMonth(endTime, CommonConst.DIGIT_MINUS_1); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | //çµï¼åªæHOURæ°æ®ææï¼å
¶ä»è½æºç±»åï¼HOURãDAYææ°æ® |
| | | String queryTimeType = TimeTypeConst.TIME_TYPE_HOUR; |
| | | List<EnergyConsumeVO> energyConsumeVOList = new ArrayList<>(); |
| | | switch (sysEnergyInfo.getEnersno()) { |
| | | case "electric": |
| | | List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, queryTimeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | List<ElectricityDataItem> lastDataItemList = peakValleyMapper.getCostTrends(lastBeginTime, lastEndTime, queryTimeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | if (!lastDataItemList.isEmpty()) { |
| | | electricityDataItems.addAll(lastDataItemList); |
| | | } |
| | | if (!electricityDataItems.isEmpty()) { |
| | | electricityDataItems.forEach(electricityDataItem -> { |
| | | EnergyConsumeVO temp = new EnergyConsumeVO(); |
| | | temp.setDataTime(electricityDataItem.getDataTime()); |
| | | temp.setAccumulationValue(electricityDataItem.getElectricity()); |
| | | energyConsumeVOList.add(temp); |
| | | }); |
| | | } |
| | | break; |
| | | default: |
| | | if (timeType.equals(TimeTypeConst.TIME_TYPE_MONTH) || timeType.equals(TimeTypeConst.TIME_TYPE_YEAR)) { |
| | | queryTimeType = TimeTypeConst.TIME_TYPE_DAY; |
| | | } |
| | | List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, queryTimeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | List<CarbonEmission> lastDataItems = dataItemMapper.getMiddleCarbonEmission(lastBeginTime, lastEndTime, queryTimeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | if (!lastDataItems.isEmpty()) { |
| | | dataItems.addAll(lastDataItems); |
| | | } |
| | | dataItems.addAll(lastDataItems); |
| | | if (!dataItems.isEmpty()) { |
| | | dataItems.forEach(dataItem -> { |
| | | EnergyConsumeVO temp = new EnergyConsumeVO(); |
| | | temp.setDataTime(dataItem.getDataTime()); |
| | | temp.setAccumulationValue(new BigDecimal(dataItem.getValue())); |
| | | energyConsumeVOList.add(temp); |
| | | }); |
| | | } |
| | | break; |
| | | } |
| | | // ç»è£
ç»è®¡å¾ä¿¡æ¯ |
| | | return getEnergyTypeValueContrastedVOList(startTime, timeType, energyConsumeVOList, sysEnergyInfo.getEnersno(), isYoy); |
| | | } |
| | | |
| | | /** |
| | | * ç»è£
ææ¬è¶å¿åæ-ç»è®¡å¾ä¿¡æ¯ |
| | | * |
| | | * @param bsTime æ¶é´ |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param dataItems è½è |
| | | * @param energyType è½æºç±»å |
| | | * @param isYoy æ¯å¦åæ¯ |
| | | */ |
| | | private List<EnergyTypeValueContrastedVO> getEnergyTypeValueContrastedVOList(Date bsTime, String timeType, |
| | | List<EnergyConsumeVO> dataItems, String energyType, boolean isYoy) { |
| | | Map<String, List<EnergyConsumeVO>> energyConsumeVOMap; |
| | | Map<String, List<EnergyConsumeVO>> lastEnergyConsumeVOMap; |
| | | List<EnergyTypeValueContrastedVO> itemList = new ArrayList<>(); |
| | | //ææ¶é´ç±»åç»ç»è¿åæ°æ® |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime()))); |
| | | for (int i = 0; i < CommonConst.DIGIT_24; i++) { |
| | | Date currentTime = DateUtil.offsetHour(bsTime, i); |
| | | Date compareTime = isYoy ? DateUtil.offset(currentTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1) : DateUtil.offsetDay(currentTime, CommonConst.DIGIT_MINUS_1); |
| | | String keyCurrentTime = DateUtil.formatDateTime(currentTime); |
| | | String keyCompareTime = DateUtil.formatDateTime(compareTime); |
| | | EnergyTypeValueContrastedVO item = getEnergyTypeValueContrastedVO(energyType, energyConsumeVOMap, keyCurrentTime, keyCompareTime, currentTime, compareTime); |
| | | itemList.add(item); |
| | | } |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDate(li.getDataTime()))); |
| | | Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); |
| | | while (bsTime.before(endTime)) { |
| | | Date currentTime = bsTime; |
| | | Date compareTime = isYoy ? DateUtil.offset(currentTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1) : DateUtil.offsetMonth(currentTime, CommonConst.DIGIT_MINUS_1); |
| | | String keyCurrentTime = DateUtil.formatDate(currentTime); |
| | | String keyCompareTime = DateUtil.formatDate(compareTime); |
| | | EnergyTypeValueContrastedVO item = getEnergyTypeValueContrastedVO(energyType, energyConsumeVOMap, keyCurrentTime, keyCompareTime, currentTime, compareTime); |
| | | itemList.add(item); |
| | | bsTime = DateUtil.offsetDay(bsTime, CommonConst.DIGIT_1); |
| | | } |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.COMMON_PATTERN_TO_MONTH_ZH); |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> formatter.format(li.getDataTime()))); |
| | | for (int i = 0; i < CommonConst.DIGIT_12; i++) { |
| | | Date currentTime = DateUtil.offsetMonth(bsTime, i); |
| | | Date compareTime = DateUtil.offset(currentTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1); |
| | | String keyCurrentTime = formatter.format(currentTime); |
| | | String keyCompareTime = formatter.format(compareTime); |
| | | EnergyTypeValueContrastedVO item = getEnergyTypeValueContrastedVO(energyType, energyConsumeVOMap, keyCurrentTime, keyCompareTime, currentTime, compareTime); |
| | | itemList.add(item); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return itemList; |
| | | } |
| | | |
| | | private @NotNull EnergyTypeValueContrastedVO getEnergyTypeValueContrastedVO(String energyType, Map<String, List<EnergyConsumeVO>> energyConsumeVOMap, |
| | | String keyCurrentTime, String keyCompareTime, Date currentTime, Date compareTime) { |
| | | List<EnergyConsumeVO> energyConsumeList = Optional.ofNullable(energyConsumeVOMap.get(keyCurrentTime)) |
| | | .orElse(Collections.emptyList()); |
| | | BigDecimal currentValue = calculateSum(energyConsumeList); |
| | | List<EnergyConsumeVO> lastEnergyConsumeList = Optional.ofNullable(energyConsumeVOMap.get(keyCompareTime)) |
| | | .orElse(Collections.emptyList()); |
| | | BigDecimal contrastValues = calculateSum(lastEnergyConsumeList); |
| | | BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100); |
| | | BigDecimal ratio = calculateRatio(currentValue, contrastValues, multiple); |
| | | EnergyTypeValueContrastedVO item = new EnergyTypeValueContrastedVO(); |
| | | item.setEnergyType(energyType); |
| | | item.setCurrentTime(DateUtil.formatDateTime(currentTime)); |
| | | item.setCompareTime(DateUtil.formatDateTime(compareTime)); |
| | | item.setCurrentValue(currentValue); |
| | | item.setContrastValues(contrastValues); |
| | | item.setRatio(ratio); |
| | | return item; |
| | | } |
| | | |
| | | private BigDecimal calculateSum(List<EnergyConsumeVO> dataItemList) { |
| | | return dataItemList.stream() |
| | | .map(EnergyConsumeVO::getAccumulationValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | private BigDecimal calculateRatio(BigDecimal currentSum, BigDecimal lastSum, BigDecimal multiple) { |
| | | if (lastSum.compareTo(BigDecimal.ZERO) == 0) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | return currentSum.subtract(lastSum) |
| | | .divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP) |
| | | .multiply(multiple) |
| | | .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | } |
| | | } |
| | |
| | | AND ( begin_time BETWEEN #{beginTime} AND #{endTime} ) |
| | | AND time_type = #{timeType} |
| | | </select> |
| | | |
| | | <select id="getDataItemTimeRangeValueByNodeId" resultType="java.math.BigDecimal"> |
| | | SELECT |
| | | COALESCE (SUM ( "value" ), 0) |
| | | FROM |
| | | "data_item" di |
| | | JOIN energy_index ei ON di.index_id = ei.index_id |
| | | WHERE |
| | | di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{nodeId}) |
| | | <if test="energyType !='' and energyType !=null and energyType =='allType'"> |
| | | AND ei.energy_id != '' |
| | | </if> |
| | | <if test="energyType !='' and energyType !=null and energyType !='allType'"> |
| | | AND ei.energy_id = #{energyType} |
| | | </if> |
| | | AND (di.data_time BETWEEN #{beginTime} AND #{endTime}) |
| | | AND di.time_type = #{timeType} |
| | | </select> |
| | | </mapper> |
| | |
| | | |
| | | AND time_type = #{timeType} |
| | | </select> |
| | | <select id="getCostTrends" |
| | | resultType="com.zhitan.peakvalley.domain.ElectricityDataItem"> |
| | | SELECT |
| | | di.index_code, |
| | | di.time_code, |
| | | di.electricity_type, |
| | | di.data_time, |
| | | di.electricity, |
| | | di.cost, |
| | | di.time_type, |
| | | di.price, |
| | | di.remark |
| | | FROM |
| | | "electricity_data_item" di |
| | | JOIN energy_index ei ON di.index_id = ei.index_id |
| | | WHERE |
| | | di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{nodeId}) |
| | | <if test="energyType !='' and energyType !=null and energyType =='allType'"> |
| | | AND ei.energy_id != '' |
| | | </if> |
| | | <if test="energyType !='' and energyType !=null and energyType !='allType'"> |
| | | AND ei.energy_id = #{energyType} |
| | | </if> |
| | | AND (di.data_time BETWEEN #{beginTime} AND #{endTime}) |
| | | AND di.time_type = #{timeType} |
| | | </select> |
| | | </mapper> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | export function listEnergyCostTrend(query) { |
| | | return request({ |
| | | url: "/energyTypeAnalysis/listEnergyCostTrend", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | export function listEnergyCostTrendDetail(query) { |
| | | return request({ |
| | | url: "/energyTypeAnalysis/listEnergyCostTrendDetail", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | // è·åç¨è½åå
ä¸çæä¸ªçµè¡¨çåçå æ°æ°æ® |
| | | export function powerFactorAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/powerFactorAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | // è·åä¸ç¸ä¸å¹³è¡¡åææ°æ® |
| | | export function threePhaseUnbalanceAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/threePhaseUnbalanceAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | // è·åç¨è½åå
ä¸ççµè¡¨å表 |
| | | export function listElectricityMeter(params) { |
| | | return request({ |
| | | url: "/meter/listElectricityMeter", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
| | | |
| | | // è·åç¨è½åå
ä¸çæä¸ªçµè¡¨çè´è·åææ°æ® |
| | | export function loadAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/loadAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
| | | |
| | | // è·åç¨è½åå
ä¸ççµè¡¨å表-å®ä½è¡¨ |
| | | export function listElectricityDeviceMeter(params) { |
| | | return request({ |
| | | url: "/loadAnalysis/listElectricMeter", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | export function getHistoricalDataByIndexId(query) { |
| | | return request({ |
| | | url: "/dataMonitoring/historyDataTrend/getHistoricalDataByIndexId", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | export function getEnergyIndexByModelId(query) { |
| | | return request({ |
| | | url: "/basicsetting/model/getEnergyIndexByModelId", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | |
| | | .el-tabs__item.is-active { |
| | | color: #409EFF; |
| | | } |
| | | |
| | | .el-descriptions__cell { |
| | | background: transparent; |
| | | color: #fff !important; |
| | | } |
| | | .el-descriptions__body { |
| | | background-color: transparent; |
| | | color: #fff; |
| | | } |
| | | .el-descriptions__label { |
| | | color: #fff !important; |
| | | background-color: #1a235d !important; |
| | | } |
| | | } |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="chart-item"> |
| | | <div :id="domId" 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: () => {}, |
| | | }, |
| | | chartType: { |
| | | type: String, |
| | | default: "line", // bar |
| | | }, |
| | | domId: { |
| | | type: String, |
| | | default: "ChartDom", |
| | | }, |
| | | }) |
| | | |
| | | watch( |
| | | () => props.chartData, |
| | | (val) => { |
| | | console.log("watch", val) |
| | | initChart() |
| | | } |
| | | ) |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | initChart() |
| | | } |
| | | ) |
| | | |
| | | onMounted(() => { |
| | | initChart() |
| | | }) |
| | | |
| | | function initChart(value) { |
| | | console.log("initChart", props.chartData) |
| | | if (!props.chartData.xAxis) { |
| | | return |
| | | } |
| | | const chartDom = document.getElementById(props.domId) |
| | | if (echarts.getInstanceByDom(chartDom)) { |
| | | echarts.dispose(chartDom) |
| | | } |
| | | const myChart = echarts.init(chartDom) |
| | | // å¤çå¤ç³»åæ°æ® |
| | | const series = props.chartData.series.map((item) => ({ |
| | | ...item, |
| | | name: item.name, |
| | | type: props.chartType, // æ ¹æ®ä¼ å
¥ç±»å渲æ |
| | | data: item.data, |
| | | barWidth: "16", |
| | | itemStyle: { |
| | | borderRadius: [15, 15, 0, 0], |
| | | }, |
| | | smooth: true, // å¯ç¨å¹³æ»æ²çº¿ |
| | | })) |
| | | console.log("initChart", series) |
| | | let option = { |
| | | title: { |
| | | // text: props.chartData.title, |
| | | left: "40", |
| | | textStyle: { |
| | | color: "#2979ff", |
| | | }, |
| | | }, |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | }, |
| | | legend: { |
| | | data: props.chartData.series.map((item) => item.name), // å¾ä¾æ°æ® |
| | | icon: "rect", |
| | | right: 40, |
| | | itemWidth: 14, |
| | | itemHeight: 10, |
| | | textStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | grid: { |
| | | top: "40", |
| | | left: "40", |
| | | 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.xAxis, |
| | | }, |
| | | 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: series, |
| | | } |
| | | setTimeout(() => { |
| | | myChart.setOption(option) |
| | | }, 200) |
| | | |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .chart-item { |
| | | width: 100%; |
| | | height: 360px !important; |
| | | margin-top: 0px; |
| | | padding-top: 20px; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="form-card"> |
| | | <el-form :inline="true"> |
| | | <el-form-item label="ç½å
³æ°é:" class="header-box"> |
| | | {{ total }} |
| | | </el-form-item> |
| | | <el-form-item label="计éå¨å
·æ°é:" class="header-box"> |
| | | {{ statistics.deviceNum }} |
| | | </el-form-item> |
| | | <el-form-item label="æµç¹æ°é:" class="header-box"> |
| | | {{ statistics.ptNum }} |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class="mt20 mb20"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">æ°å¢</el-button> |
| | | <el-button type="primary" icon="Download" @click="handleExport">导åº</el-button> |
| | | </div> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="gatewayNum" label="ç½å
³ç¼å·" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="gatewayName" label="ç½å
³åç§°" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="specsModel" label="è§æ ¼åå·" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="installLocation" label="å®è£
ä½ç½®" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="ipAdd" label="IPå°å" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="runStatus" label="è¿è¡ç¶æ" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="deviceNum" label="计éå¨å
·æ°é" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="ptNum" label="ééæµç¹æ°é" show-overflow-tooltip align="center" /> |
| | | <el-table-column label="æä½" width="300" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)"> |
| | | ä¿®æ¹ |
| | | </el-button> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"> |
| | | å é¤ |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" @pagination="getList" /> |
| | | </div> |
| | | <edit-modal ref="EditModalRef" @getList="getList(1)" /> |
| | | <div class="page"> |
| | | <div class="form-card"> |
| | | <el-form :inline="true"> |
| | | <el-form-item label="ç½å
³æ°é:" class="header-box"> |
| | | <span class="count">{{ total || 0 }}</span> |
| | | </el-form-item> |
| | | <el-form-item label="计éå¨å
·æ°é:" class="header-box"> |
| | | <span class="count">{{ deviceNum || 0 }}</span> |
| | | </el-form-item> |
| | | <el-form-item label="æµç¹æ°é:" class="header-box"> |
| | | <span class="count">{{ ptNum || 0 }}</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-bg-style"> |
| | | <div class="theme-dark-mt20 mb20 ml20"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">æ°å¢</el-button> |
| | | <el-button type="primary" icon="Download" @click="handleExport">导åº</el-button> |
| | | </div> |
| | | |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="gatewayNum" label="ç½å
³ç¼å·" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="gatewayName" label="ç½å
³åç§°" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="specsModel" label="è§æ ¼åå·" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="installLocation" label="å®è£
ä½ç½®" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="ipAdd" label="IPå°å" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="runStatus" label="è¿è¡ç¶æ" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="deviceNum" label="计éå¨å
·æ°é" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="ptNum" label="ééæµç¹æ°é" show-overflow-tooltip align="center" /> |
| | | <el-table-column label="æä½" width="300" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)"> ä¿®æ¹ </el-button> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"> å é¤ </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | </div> |
| | | |
| | | <edit-modal ref="EditModalRef" @getList="getList(1)" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import EditModal from './components/EditModal.vue' |
| | | import { gatewayStatistics, gatewayList, gatewayDel } from "@/api/businessConfiguration/gatewayLedger"; |
| | | import EditModal from "./components/EditModal.vue" |
| | | import { gatewayStatistics, gatewayList, gatewayDel } from "@/api/businessConfiguration/gatewayLedger" |
| | | let { proxy } = getCurrentInstance() |
| | | |
| | | let statistics = ref({ |
| | | deviceNum: 0, |
| | | ptNum: 0 |
| | | deviceNum: 0, |
| | | ptNum: 0, |
| | | }) |
| | | function getGatewayStatisticsFun() { |
| | | gatewayStatistics().then(res => { |
| | | if (res.code == 200) { |
| | | if (res.data) { |
| | | statistics.value = res.data |
| | | } |
| | | } |
| | | }) |
| | | gatewayStatistics().then((res) => { |
| | | if (res.code == 200) { |
| | | if (res.data) { |
| | | statistics.value = res.data |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | getGatewayStatisticsFun() |
| | | |
| | | |
| | | let loading = ref(false); |
| | | let total = ref(0); |
| | | let loading = ref(false) |
| | | let total = ref(0) |
| | | let tableData = ref([]) |
| | | let queryParams = ref({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | }) |
| | | |
| | | function getList(arg) { |
| | | if (arg == 1) { |
| | | queryParams.value.pageNum = 1 |
| | | } |
| | | loading.value = true |
| | | gatewayList(queryParams.value).then(res => { |
| | | tableData.value = res.rows |
| | | total.value = res.total |
| | | loading.value = false |
| | | }) |
| | | if (arg == 1) { |
| | | queryParams.value.pageNum = 1 |
| | | } |
| | | loading.value = true |
| | | gatewayList(queryParams.value).then((res) => { |
| | | tableData.value = res.rows |
| | | total.value = res.total |
| | | loading.value = false |
| | | }) |
| | | } |
| | | getList() |
| | | |
| | | function handleExport() { |
| | | proxy.download( |
| | | "gatewaySetting/export", |
| | | queryParams.value, |
| | | `ç½å
³å°è´¦${new Date().getTime()}.xlsx` |
| | | ); |
| | | proxy.download("gatewaySetting/export", queryParams.value, `ç½å
³å°è´¦${new Date().getTime()}.xlsx`) |
| | | } |
| | | |
| | | let EditModalRef = ref('') |
| | | let EditModalRef = ref("") |
| | | function handleAdd(row) { |
| | | if (EditModalRef.value) { |
| | | EditModalRef.value.handleOpen(row) |
| | | } |
| | | |
| | | if (EditModalRef.value) { |
| | | EditModalRef.value.handleOpen(row) |
| | | } |
| | | } |
| | | |
| | | function handleDelete(row) { |
| | | proxy.$modal |
| | | .confirm('æ¯å¦ç¡®è®¤å é¤ç½å
³ä¸º"' + row.gatewayName + '"çæ°æ®é¡¹ï¼') |
| | | .then(function () { |
| | | return gatewayDel(row.id); |
| | | }) |
| | | .then(() => { |
| | | getList(1); |
| | | proxy.$modal.msgSuccess("å 餿å"); |
| | | }) |
| | | .catch(() => { }); |
| | | proxy.$modal |
| | | .confirm('æ¯å¦ç¡®è®¤å é¤ç½å
³ä¸º"' + row.gatewayName + '"çæ°æ®é¡¹ï¼') |
| | | .then(function () { |
| | | return gatewayDel(row.id) |
| | | }) |
| | | .then(() => { |
| | | getList(1) |
| | | proxy.$modal.msgSuccess("å 餿å") |
| | | }) |
| | | .catch(() => {}) |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | |
| | | .header-box { |
| | | :deep .el-form-item__content { |
| | | color: #fff; |
| | | font-size: 16px; |
| | | } |
| | | |
| | | :deep .el-form-item__content { |
| | | color: #fff; |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | </style> |
| | | |
| | | .themeDark { |
| | | .count { |
| | | color: #fff; |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .count { |
| | | color: #333; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | } |
| | | ) |
| | | |
| | | onMounted(() => { |
| | | initChart() |
| | | }) |
| | | |
| | | function initChart(value) { |
| | | const chartDom = document.getElementById("ChartDom") |
| | | if (echarts.getInstanceByDom(chartDom)) { |
| | |
| | | </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> |
| | | <template #default="scope">{{ numFilter(scope.row[`value${index}`]) }}</template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div> |
| | | <line-chart ref="LineChartRef" :chartData="lineChartData" /> |
| | | </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> |
| | | <template #default="scope">{{ numFilter(scope.row[`value${index}`]) }}</template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div> |
| | | <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-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´" prop="dataTime"> |
| | | <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-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-bg-style"> |
| | | <div class="table-box theme-dark-mt20" style=""> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column label="æ¶é´" prop="dateCode" align="center" width="160" /> |
| | | <el-table-column label="æ»è´¹ç¨(å
)" prop="total" align="center" width="120" /> |
| | | <el-table-column :label="col.energyName" v-for="(col, index) in columns" :key="index" align="center"> |
| | | <el-table-column :prop="'energyTotal' + col.energyType" label="æ¶èé" min-width="120" align="center" /> |
| | | <el-table-column :prop="'costTotal' + col.energyType" label="è´¹ç¨ï¼å
ï¼" min-width="120" align="center" /> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div class="charts-view" v-loading="loading"> |
| | | <el-row :gutter="2" class="" v-for="item in chartDataList" :key="item.energyType"> |
| | | <el-col :span="12"> |
| | | <BaseCard :title="item.costLabel + '(å
)'"> |
| | | <div class=""> |
| | | <LineChart |
| | | :ref="'LineChartCostRef' + item.energyType" |
| | | :domId="'costDom_' + item.energyType" |
| | | :chartData="{ |
| | | title: item.costLabel, |
| | | chartType: 'line', |
| | | xAxis: item.costKeyList, |
| | | series: [ |
| | | { |
| | | name: item.costLabel, |
| | | data: item.costValueList, |
| | | markPoint: { |
| | | data: [ |
| | | { type: 'max', name: 'Max' }, |
| | | { type: 'min', name: 'Min' }, |
| | | ], |
| | | }, |
| | | }, |
| | | ], |
| | | }" |
| | | /> |
| | | </div> |
| | | </BaseCard> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <BaseCard :title="item.accumulationLabel + '(' + item.energyUnit + ')'"> |
| | | <div class=""> |
| | | <LineChart |
| | | :ref="'LineChartaccumulationRef' + item.energyType" |
| | | :domId="'accumulationDom_' + item.energyType" |
| | | :chartType="'bar'" |
| | | :chartData="{ |
| | | title: item.accumulationLabel, |
| | | chartType: 'bar', |
| | | xAxis: item.accumulationKeyList, |
| | | series: [ |
| | | { |
| | | name: item.accumulationLabel, |
| | | color: '#19be6b', |
| | | data: item.accumulationValueList, |
| | | markPoint: { |
| | | data: [ |
| | | { type: 'max', name: 'Max' }, |
| | | { type: 'min', name: 'Min' }, |
| | | ], |
| | | }, |
| | | }, |
| | | ], |
| | | }" |
| | | /> |
| | | </div> |
| | | </BaseCard> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { listEnergyCostTrend, listEnergyCostTrendDetail } from "@/api/cost/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | import { deepClone } from "@/utils/index.js" |
| | | 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() |
| | | } |
| | | ) |
| | | const activeKey = ref(1) |
| | | const loading = ref(false) |
| | | const tableData = ref([]) |
| | | const columns = ref([]) |
| | | const detailData = ref({}) |
| | | const lineChartData = ref({}) |
| | | const chartDataList = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | meterId: "", |
| | | modelCode: useRoute().query.modelCode, |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | getTableData() |
| | | getList() |
| | | } |
| | | |
| | | function getTableData() { |
| | | let params = { |
| | | ...queryParams.value, |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | listEnergyCostTrend(params).then((res) => { |
| | | if (res.code === 200) { |
| | | let data = deepClone(res.data.itemList || []) |
| | | // è¡¨å¤´çæ°æ® |
| | | if (data.length > 0 && data[0].itemList.length > 0) { |
| | | let energyList = data[0].itemList |
| | | columns.value = energyList.map((item) => { |
| | | return { |
| | | energyName: item.energyName, |
| | | energyType: item.energyType, |
| | | } |
| | | }) |
| | | } |
| | | tableData.value = data.map((item) => { |
| | | let tempObj = {} |
| | | item.itemList.forEach((element) => { |
| | | tempObj["energyTotal" + element.energyType] = element.accumulation |
| | | tempObj["costTotal" + element.energyType] = element.cost |
| | | }) |
| | | return { |
| | | ...item, |
| | | ...tempObj, |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | ...queryParams.value, |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | listEnergyCostTrendDetail(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | chartDataList.value = res.data |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getTableData() |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | |
| | | onMounted(() => { |
| | | setTimeout(() => { |
| | | handleTimeType(period.value[0].value) |
| | | }, 200) |
| | | }) |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .table-box { |
| | | margin-top: 0; |
| | | :deep .el-table--border .el-table__inner-wrapper:after { |
| | | height: 0; |
| | | } |
| | | |
| | | :deep .el-table--border:after { |
| | | width: 0; |
| | | } |
| | | |
| | | :deep .el-table--border:before { |
| | | width: 0; |
| | | } |
| | | |
| | | :deep .el-table__border-left-patch { |
| | | background: transparent; |
| | | } |
| | | |
| | | :deep .el-table--border .el-table__cell { |
| | | border-right: none; |
| | | } |
| | | } |
| | | |
| | | .charts-view { |
| | | width: 100%; |
| | | margin-top: 20px; |
| | | // padding: 0 30px; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"></div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { loadAnalysisDetail, listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | 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() |
| | | } |
| | | ) |
| | | const activeKey = ref(1) |
| | | const loading = ref(false) |
| | | const tableData = ref([]) |
| | | const detailData = ref({}) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | meterId: "", |
| | | modelCode: useRoute().query.modelCode, |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | setTimeout(() => { |
| | | handleTimeType(period.value[0].value) |
| | | }, 200) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | return |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | loadAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | tableData.value = res.data.itemList |
| | | detailData.value = res.data.detail |
| | | let itemList = res.data.itemList |
| | | if (queryParams.value.timeType == "DAY") { |
| | | lineChartData.value = { |
| | | title: "è´è·åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "è´è·å¼", |
| | | data: itemList.map((item) => { |
| | | return item.value |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } else { |
| | | lineChartData.value = { |
| | | title: "è´è·åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCodeChart |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "å¹³åè´è·", |
| | | data: itemList.map((item) => { |
| | | return item.avg |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå¤§è´è·", |
| | | data: itemList.map((item) => { |
| | | return item.max |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå°è´è·", |
| | | data: itemList.map((item) => { |
| | | return item.min |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div> |
| | | <BaseCard :title="queryParams.nodeName"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="40px"> |
| | | <el-form-item label=" " prop="timeType" label-width="0"> |
| | | <el-radio-group v-model="queryParams.timeType" @change="changeTimeType"> |
| | | <el-radio-button label="DAY">æ¥</el-radio-button> |
| | | <el-radio-button label="HOUR">å°æ¶</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´" prop="dataTime"> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'DAY' ? 'date' : 'datetime'" |
| | | :format="queryParams.timeType == 'DAY' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:00:00'" |
| | | :value-format="queryParams.timeType == 'DAY' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:00:00'" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ç¹ä½" prop="meterId"> |
| | | <el-select v-model="queryParams.meterId" placeholder="éæ©ç¹ä½" clearable style="width: 220px"> |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | <div class="display-buttons"> |
| | | <div class="display-btn" @click="activeKey = 1" :class="{ 'active-display-btn': activeKey === 1 }"> |
| | | å¾å½¢ |
| | | </div> |
| | | <div class="display-btn" @click="activeKey = 2" :class="{ 'active-display-btn': activeKey === 2 }"> |
| | | æ°æ® |
| | | </div> |
| | | </div> |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | </div> |
| | | <div style="margin-top: 16px" v-show="activeKey === 2"> |
| | | <div class="" style="padding: 0 16px"> |
| | | <el-table :data="tableData" v-loading="loading" height="calc(100vh - 350px)"> |
| | | <el-table-column label="ç¹ä½åç§°" prop="indexName" align="center" /> |
| | | <el-table-column label="ç¹ä½å¼" prop="value" align="center" /> |
| | | <el-table-column label="æ¶é´" prop="dataTime" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { getHistoricalDataByIndexId, getEnergyIndexByModelId } from "@/api/realTimeMonitor/historyDataTrend.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList() |
| | | } |
| | | ) |
| | | const activeKey = ref(1) |
| | | const loading = ref(false) |
| | | const tableData = ref([]) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: "DAY", |
| | | dataTime: null, |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | getEnergyIndexByModelId(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | label: item.indexName, |
| | | value: item.indexId, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].indexId : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | setTimeout(() => { |
| | | handleTimeType(queryParams.value.timeType) |
| | | }, 200) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD HH:00:00") |
| | | getElectricityMeter({ modelId: queryParams.value.nodeId }) |
| | | } |
| | | |
| | | function changeTimeType(e) { |
| | | console.log(e) |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD HH:00:00") |
| | | getElectricityMeter({ modelId: queryParams.value.nodeId }) |
| | | } |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | dataTime: queryParams.value.dataTime, |
| | | indexId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | getHistoricalDataByIndexId(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | tableData.value = res.data |
| | | let itemList = res.data |
| | | lineChartData.value = { |
| | | title: "", |
| | | xAxis: itemList.map((item) => { |
| | | return queryParams.value.timeType == "DAY" |
| | | ? item.dataTime.slice(11, 13) + "æ¶" |
| | | : item.dataTime.slice(11, 16) |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "ç¹ä½å¼", |
| | | data: itemList.map((item) => { |
| | | return item.value |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="form-card"> |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="85px"> |
| | | <el-form-item label="æ æç¼å·" prop="code"> |
| | | <el-input v-model="form.code" placeholder="请è¾å
¥æ æç¼å·" /> |
| | | </el-form-item> |
| | | <el-form-item label="æ æç±»å" prop="type"> |
| | | <el-select v-model="form.type" clearable> |
| | | <el-option v-for="dict in benchmark_type" :key="dict.value" :label="dict.label" |
| | | :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ æç级" prop="grade"> |
| | | <el-select v-model="form.grade" clearable> |
| | | <el-option v-for="dict in benchmark_grade" :key="dict.value" :label="dict.label" |
| | | :value="dict.value" /> |
| | | </el-select> |
| | | </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> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class=" mt20 mb20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd">æ°å¢</el-button> |
| | | </div> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="code" label="æ æç¼å·" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="type" label="æ æç±»å" show-overflow-tooltip align="center" |
| | | :formatter="(row, c) => proxy.selectDictLabel(benchmark_type, row.type)" /> |
| | | <el-table-column prop="grade" label="æ æç级" show-overflow-tooltip align="center" |
| | | :formatter="(row, c) => proxy.selectDictLabel(benchmark_grade, row.grade)" /> |
| | | <el-table-column prop="value" label="æ æå¼" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="nationalNum" label="彿 ç¼å·" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="createBy" label="å½å
¥äºº" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="createTime" label="å½å
¥æ¶é´" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="remark" label="夿³¨" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="active" label="æä½" width="150" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)"> |
| | | ä¿®æ¹ |
| | | </el-button> |
| | | <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)"> |
| | | å é¤ |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" @pagination="getList" /> |
| | | </div> |
| | | <EditModal ref="EditModalRef" :benchmark_grade="benchmark_grade" :benchmark_type="benchmark_type" |
| | | @getList="getList" /> |
| | | |
| | | <div class="page"> |
| | | <div class="form-card"> |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="85px"> |
| | | <el-form-item label="æ æç¼å·" prop="code"> |
| | | <el-input v-model="form.code" placeholder="请è¾å
¥æ æç¼å·" /> |
| | | </el-form-item> |
| | | <el-form-item label="æ æç±»å" prop="type"> |
| | | <el-select v-model="form.type" clearable> |
| | | <el-option v-for="dict in benchmark_type" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ æç级" prop="grade"> |
| | | <el-select v-model="form.grade" clearable> |
| | | <el-option v-for="dict in benchmark_grade" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </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> |
| | | </div> |
| | | <div class="table-bg-style"> |
| | | <div class="theme-dark-mt20 mb20 ml20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd">æ°å¢</el-button> |
| | | </div> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="code" label="æ æç¼å·" show-overflow-tooltip align="center" /> |
| | | <el-table-column |
| | | prop="type" |
| | | label="æ æç±»å" |
| | | show-overflow-tooltip |
| | | align="center" |
| | | :formatter="(row, c) => proxy.selectDictLabel(benchmark_type, row.type)" |
| | | /> |
| | | <el-table-column |
| | | prop="grade" |
| | | label="æ æç级" |
| | | show-overflow-tooltip |
| | | align="center" |
| | | :formatter="(row, c) => proxy.selectDictLabel(benchmark_grade, row.grade)" |
| | | /> |
| | | <el-table-column prop="value" label="æ æå¼" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="nationalNum" label="彿 ç¼å·" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="createBy" label="å½å
¥äºº" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="createTime" label="å½å
¥æ¶é´" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="remark" label="夿³¨" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="active" label="æä½" width="150" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)"> ä¿®æ¹ </el-button> |
| | | <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)"> å é¤ </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | </div> |
| | | |
| | | <EditModal |
| | | ref="EditModalRef" |
| | | :benchmark_grade="benchmark_grade" |
| | | :benchmark_type="benchmark_type" |
| | | @getList="getList" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import EditModal from './components/EditModal.vue' |
| | | import { valueManageList, valueManageDel } from '@/api/benchmarkManage' |
| | | import EditModal from "./components/EditModal.vue" |
| | | import { valueManageList, valueManageDel } from "@/api/benchmarkManage" |
| | | let proxy = getCurrentInstance().proxy |
| | | |
| | | let { benchmark_grade, benchmark_type } = proxy.useDict("benchmark_grade", 'benchmark_type') |
| | | let { benchmark_grade, benchmark_type } = proxy.useDict("benchmark_grade", "benchmark_type") |
| | | let form = ref({ |
| | | code: null, |
| | | type: null, |
| | | grade: null, |
| | | code: null, |
| | | type: null, |
| | | grade: null, |
| | | }) |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | |
| | | function resetQuery() { |
| | | queryParams.value.pageNum = 1 |
| | | form.value = {} |
| | | handleQuery(); |
| | | queryParams.value.pageNum = 1 |
| | | form.value = {} |
| | | handleQuery() |
| | | } |
| | | |
| | | |
| | | let loading = ref(false); |
| | | let total = ref(0); |
| | | let loading = ref(false) |
| | | let total = ref(0) |
| | | let tableData = ref([]) |
| | | let queryParams = ref({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | }) |
| | | function getList(flag) { |
| | | loading.value = true |
| | | valueManageList({ ...queryParams.value, ...form.value }).then(res => { |
| | | tableData.value = res.rows |
| | | total.value = res.total |
| | | loading.value = false |
| | | }) |
| | | |
| | | loading.value = true |
| | | valueManageList({ ...queryParams.value, ...form.value }).then((res) => { |
| | | tableData.value = res.rows |
| | | total.value = res.total |
| | | loading.value = false |
| | | }) |
| | | } |
| | | |
| | | getList() |
| | | let EditModalRef = ref('') |
| | | let EditModalRef = ref("") |
| | | function handleAdd(row) { |
| | | if (EditModalRef.value) { |
| | | EditModalRef.value.handleOpen(row) |
| | | } |
| | | |
| | | if (EditModalRef.value) { |
| | | EditModalRef.value.handleOpen(row) |
| | | } |
| | | } |
| | | |
| | | function handleDel(row) { |
| | | proxy.$modal.confirm('æ¯å¦ç¡®è®¤å 餿°æ®é¡¹?').then(function () { |
| | | return valueManageDel(row.id); |
| | | }).then(() => { |
| | | getList(); |
| | | proxy.$modal.msgSuccess("å 餿å"); |
| | | }).catch(() => { }); |
| | | proxy.$modal |
| | | .confirm("æ¯å¦ç¡®è®¤å 餿°æ®é¡¹?") |
| | | .then(function () { |
| | | return valueManageDel(row.id) |
| | | }) |
| | | .then(() => { |
| | | getList() |
| | | proxy.$modal.msgSuccess("å 餿å") |
| | | }) |
| | | .catch(() => {}) |
| | | } |
| | | |
| | | </script> |
| | | |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/styles/page.scss"; |
| | |
| | | <div class="top-right"> |
| | | <div class="right-name"> |
| | | {{ item.energyName }} |
| | | <span v-if="item.energyUnit" class="unit">({{ item.energyUnit }})</span> |
| | | </div> |
| | | <div class="right-value"> |
| | | <span> {{ item.count }}</span> |
| | | <span class="unit">{{ item.energyUnit }}</span> |
| | | <!-- <span class="unit">{{ item.energyUnit }}</span> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | display: flex; |
| | | |
| | | .top-icon { |
| | | width: 69px; |
| | | height: 69px; |
| | | width: 50px; |
| | | height: 50px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | margin-left: 12px; |
| | | |
| | | .right-name { |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | .unit { |
| | | margin-left: 2px; |
| | | font-size: 16px; |
| | | font-weight: normal; |
| | | } |
| | | } |
| | | |
| | | .right-value { |
| | |
| | | <div class="tree page-box"> |
| | | <!-- <CardHeader class="mb20">ç¨è½åå
ç»æ</CardHeader> --> |
| | | <!-- <el-input v-model="filterText" style="width: 240px" placeholder="è¾å
¥å
³é®åè¿è¡è¿æ»¤" class="mb10" /> --> |
| | | <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> |
| | | <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 > 6" class="item" effect="dark" :content="node.label" |
| | | placement="top-end"> |
| | | <el-tooltip |
| | | v-if="node.label.length > 6" |
| | | class="item" |
| | | effect="dark" |
| | | :content="node.label" |
| | | placement="top-end" |
| | | > |
| | | <span>{{ node.label.slice(0, 6) + "..." }}</span> |
| | | </el-tooltip> |
| | | <span v-else id="b">{{ node.label }}</span> |
| | | </span> |
| | | <span class="node-opt"> |
| | | <el-link title="æ°å¢ä¸çº§èç¹" icon="Plus" @click="() => addNode(node, data)"> |
| | | </el-link> |
| | | <el-link title="ä¿®æ¹èç¹" icon="EditPen" @click="() => editNode(node, data)"> |
| | | </el-link> |
| | | <el-link title="å é¤èç¹" icon="Delete" @click="() => delNode(node, data)"> |
| | | </el-link> |
| | | <el-link title="æ°å¢ä¸çº§èç¹" icon="Plus" @click="() => addNode(node, data)"> </el-link> |
| | | <el-link title="ä¿®æ¹èç¹" icon="EditPen" @click="() => editNode(node, data)"> </el-link> |
| | | <el-link title="å é¤èç¹" icon="Delete" @click="() => delNode(node, data)"> </el-link> |
| | | </span> |
| | | </template> |
| | | </el-tree> |
| | | </div> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | |
| | | <div class="mb20 mt20 ml20 tab-box"> |
| | | <div class="tab-li" :class="tab == 1 ? 'is-tab' : ''" @click="handleTab('1')"> |
| | | 计éå¨å
·é
ç½®ä¿¡æ¯ |
| | | </div> |
| | | <div class="tab-li" :class="tab == 2 ? 'is-tab' : ''" @click="handleTab('2')"> |
| | | ç»è®¡ææ |
| | | </div> |
| | | <div class="tab-li" :class="tab == 1 ? 'is-tab' : ''" @click="handleTab('1')">计éå¨å
·é
置信æ¯</div> |
| | | <div class="tab-li" :class="tab == 2 ? 'is-tab' : ''" @click="handleTab('2')">ç»è®¡ææ </div> |
| | | <!-- <el-radio-group v-model="tab"> |
| | | <el-radio-button label="1" @click="handleTab('1')"> 设å¤é
ç½®</el-radio-button> |
| | | <el-radio-button label="2" @click="handleTab('2')"> ééææ </el-radio-button> |
| | |
| | | <BaseCard :title="currentNode ? currentNode.label + '--èç¹é
ç½®' : 'ææ èç¹é
ç½®'"> |
| | | <div> |
| | | <div class="content-box" v-if="tab == '1'"> |
| | | <deviceConfig ref='deviceConfigRef' /> |
| | | <deviceConfig ref="deviceConfigRef" /> |
| | | </div> |
| | | <div class="content-box1" v-if="tab == '2'"> |
| | | <statisticalIndicatorManagement ref='statisticalIndicatorManagementRef' :indexType='"STATISTIC"' /> |
| | | <statisticalIndicatorManagement ref="statisticalIndicatorManagementRef" :indexType="'STATISTIC'" /> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | |
| | | <!-- <statisticalIndicatorManagement ref="statisticalIndicatorManagementRef" :indexType='"STATISTIC"' /> --> |
| | | </div> |
| | | </div> |
| | | <treeNodeModal ref="treeNodeModalRef" @getList="getTreeList" modelCode="JCZBK_CODE" @addTreeList="addTreeList" |
| | | @addTreeSelectList="addTreeSelectList" /> |
| | | <treeNodeModal |
| | | ref="treeNodeModalRef" |
| | | @getList="getTreeList" |
| | | modelCode="JCZBK_CODE" |
| | | @addTreeList="addTreeList" |
| | | @addTreeSelectList="addTreeSelectList" |
| | | /> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import treeNodeModal from './components/TreeNodeModal.vue' |
| | | import deviceConfig from './components/deviceConfig/DeviceConfig.vue' |
| | | import statisticalIndicatorManagement from './components/statisticalIndicatorManagement/statisticalIndicatorManagement.vue'; |
| | | import { treeList, delModelNode, hasEnergyIndex, } from '@/api/modelConfiguration/indexWarehouse' |
| | | const { proxy } = getCurrentInstance(); |
| | | import treeNodeModal from "./components/TreeNodeModal.vue" |
| | | import deviceConfig from "./components/deviceConfig/DeviceConfig.vue" |
| | | import statisticalIndicatorManagement from "./components/statisticalIndicatorManagement/statisticalIndicatorManagement.vue" |
| | | import { treeList, delModelNode, hasEnergyIndex } from "@/api/modelConfiguration/indexWarehouse" |
| | | const { proxy } = getCurrentInstance() |
| | | |
| | | let currentNode = ref() |
| | | let treeRef = ref() |
| | |
| | | let treeData = ref([]) |
| | | |
| | | const defaultProps = ref({ |
| | | children: 'children', |
| | | label: 'label', |
| | | children: "children", |
| | | label: "label", |
| | | }) |
| | | |
| | | //æ£ç´¢æ |
| | | let filterText = ref('') |
| | | let filterText = ref("") |
| | | |
| | | const filterNode = (value, data) => { |
| | | if (!value) return true |
| | |
| | | } |
| | | watch(filterText, (val) => { |
| | | // æ£æ¥treeRef.valueæ¯å¦æ¯ä¸ä¸ªææçElTreeå®ä¾ |
| | | if (treeRef.value && typeof treeRef.value.filter === 'function') { |
| | | if (treeRef.value && typeof treeRef.value.filter === "function") { |
| | | // è°ç¨filteræ¹æ³ |
| | | treeRef.value.filter(val); |
| | | treeRef.value.filter(val) |
| | | } else { |
| | | // treeRef.valueæ æï¼å¤çé误 |
| | | console.error('error'); |
| | | console.error("error") |
| | | } |
| | | }); |
| | | }) |
| | | |
| | | let treeExpandData = ref([]) |
| | | let isFirstLeafNode = ref(false) |
| | |
| | | let statisticalIndicatorManagementRef = ref(null) |
| | | //è·åæ å表 |
| | | function getTreeList() { |
| | | treeList({ modelCode: 'JCZBK_CODE' }).then(res => { |
| | | treeList({ modelCode: "JCZBK_CODE" }).then((res) => { |
| | | let { data } = res |
| | | treeData.value = data; |
| | | let chooseNode = null; |
| | | 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]; |
| | | chooseNode = data[0].children[0].children[0] |
| | | } else { |
| | | chooseNode = data[0].children[0]; |
| | | chooseNode = data[0].children[0] |
| | | } |
| | | } else { |
| | | chooseNode = data[0]; |
| | | chooseNode = data[0] |
| | | } |
| | | currentNode.value = chooseNode; |
| | | treeExpandData.value.push(chooseNode.id); |
| | | currentNode.value = chooseNode |
| | | treeExpandData.value.push(chooseNode.id) |
| | | nextTick(() => { |
| | | treeRef.value.setCurrentKey(chooseNode.id); |
| | | treeRef.value.setCurrentKey(chooseNode.id) |
| | | if (tab.value == 1 && deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(chooseNode) |
| | | } |
| | | if (tab.value == 2 && statisticalIndicatorManagementRef.value) { |
| | | statisticalIndicatorManagementRef.value.getList(chooseNode) |
| | | } |
| | | |
| | | }); |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | |
| | | treeExpandData.value.push(addedNode.nodeId) |
| | | nextTick(() => { |
| | | treeRef.value.setCurrentNode(newChild) |
| | | currentNode.value = newChild; |
| | | currentNode.value = newChild |
| | | if (tab.value == 1) { |
| | | if (deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(newChild) |
| | |
| | | } |
| | | } |
| | | }) |
| | | |
| | | } |
| | | //æ ç¹å» |
| | | function changeNode(data, node, ev) { |
| | | currentNode.value = data; |
| | | currentNode.value = data |
| | | if (tab.value == 1) { |
| | | if (deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(data) |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | let treeNodeModalRef = ref(null) |
| | | |
| | |
| | | |
| | | function delNode(node, data) { |
| | | if (data.children && data.children.length > 0) { |
| | | proxy.$modal.msgWarning('å
å«åèç¹ï¼ä¸è½è¿è¡å é¤ï¼') |
| | | proxy.$modal.msgWarning("å
å«åèç¹ï¼ä¸è½è¿è¡å é¤ï¼") |
| | | return |
| | | } |
| | | |
| | | hasEnergyIndex(data.id).then(response => { |
| | | hasEnergyIndex(data.id).then((response) => { |
| | | if (response.data) { |
| | | proxy.$modal.msgWarning('å½åèç¹ä¸å卿æ ï¼ä¸è½è¿è¡å é¤ï¼') |
| | | proxy.$modal.msgWarning("å½åèç¹ä¸å卿æ ï¼ä¸è½è¿è¡å é¤ï¼") |
| | | } else { |
| | | proxy.$modal.confirm('æ¯å¦ç¡®è®¤å é¤å为"' + data.label + '"çèç¹?', 'è¦å', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }) |
| | | proxy.$modal |
| | | .confirm('æ¯å¦ç¡®è®¤å é¤å为"' + data.label + '"çèç¹?', "è¦å", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(function () { |
| | | return delModelNode(data.id) |
| | | }) |
| | | .then(() => { |
| | | let parent = node.parent |
| | | let children = parent.data.children || parent.data |
| | | let index = children.findIndex(d => d.id === data.id) |
| | | let index = children.findIndex((d) => d.id === data.id) |
| | | children.splice(index, 1) |
| | | |
| | | nextTick(() => { |
| | |
| | | changeNode(null) |
| | | } |
| | | }) |
| | | proxy.$modal.msgSuccess('å 餿å') |
| | | proxy.$modal.msgSuccess("å 餿å") |
| | | }) |
| | | .catch(function () { |
| | | }) |
| | | .catch(function () {}) |
| | | } |
| | | }) |
| | | } |
| | |
| | | if (value == 2 && statisticalIndicatorManagementRef.value) { |
| | | statisticalIndicatorManagementRef.value.getList(currentNode.value) |
| | | } |
| | | |
| | | }); |
| | | |
| | | }) |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | |
| | | .page-box { |
| | | height: calc(100vh - 145px); |
| | |
| | | margin-right: 5px; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | :deep .el-tabs__nav-wrap:after { |
| | |
| | | .tab-box { |
| | | display: flex; |
| | | align-items: center; |
| | | color: #fff; |
| | | border-bottom: 1px solid #3371EB; |
| | | color: #333; |
| | | border-bottom: 1px solid #3371eb; |
| | | margin-right: 20px; |
| | | |
| | | .tab-li { |
| | | cursor: pointer; |
| | | border: 1px solid #3371EB; |
| | | border: 1px solid #3371eb; |
| | | padding: 10px 25px; |
| | | border-radius: 5px 5px 0 0; |
| | | } |
| | | |
| | | .is-tab { |
| | | background: #3371EB; |
| | | background: #3371eb; |
| | | color: #fff; |
| | | } |
| | | } |
| | | |
| | | .themeDark { |
| | | .tab-box { |
| | | color: #fff; |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .tab-box { |
| | | color: #333; |
| | | } |
| | | } |
| | | |
| | | .content-box { |
| | | height: calc(100vh - 310px) !important; |
| | | |
| | | } |
| | | |
| | | .content-box1 { |
| | | height: calc(100vh - 290px) !important; |
| | | |
| | | } |
| | | </style> |
| | |
| | | display: flex; |
| | | justify-content: space-between; |
| | | padding: 18px; |
| | | width: 100%; |
| | | overflow: hidden; |
| | | overflow-x: auto; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | height: 187px; |
| | | flex-shrink: 0; |
| | | width: 230px; |
| | | height: 188px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 10px 18px 13px 16px; |
| | | margin-right: 12px; |
| | | |
| | | .item-top { |
| | | display: flex; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-è´è·åæ'"> |
| | | <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-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´" prop="dataTime"> |
| | | <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 label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select v-model="queryParams.meterId" placeholder="éæ©çµè¡¨" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | <div class="display-buttons"> |
| | | <div class="display-btn" @click="activeKey = 1" :class="{ 'active-display-btn': activeKey === 1 }"> |
| | | å¾å½¢ |
| | | </div> |
| | | <div class="display-btn" @click="activeKey = 2" :class="{ 'active-display-btn': activeKey === 2 }"> |
| | | æ°æ® |
| | | </div> |
| | | </div> |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <div style="padding: 16px"> |
| | | <el-descriptions title="" size="large" border :column="2"> |
| | | <el-descriptions-item label="æå¤§è´è·"> |
| | | {{ detailData.max || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="åçæ¶é´"> |
| | | {{ detailData.maxTime || "" }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item label="æå°è´è·"> |
| | | {{ detailData.min || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="åçæ¶é´"> |
| | | {{ detailData.minTime || "--" }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item label="å¹³åè´è·"> |
| | | {{ detailData.avg || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="è´è·ç"> |
| | | {{ detailData.rate || "" }} |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </div> |
| | | </div> |
| | | <div style="margin-top: 16px" v-show="activeKey === 2"> |
| | | <div class="" style="padding: 0 16px"> |
| | | <el-table :data="tableData" v-loading="loading" height="calc(100vh - 400px)"> |
| | | <el-table-column label="æ¶é´" prop="timeCode" align="center" /> |
| | | <el-table-column label="çµè¡¨åç§°" prop="name" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType == 'DAY'" label="è´è·" prop="value" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="æå¤§è´è·" prop="max" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="æå°è´è·" prop="min" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="å¹³åè´è·" prop="avg" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="è´è·ç(%)" prop="rate" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { loadAnalysisDetail, listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | 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() |
| | | } |
| | | ) |
| | | const activeKey = ref(1) |
| | | const loading = ref(false) |
| | | const tableData = ref([]) |
| | | const detailData = ref({}) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | setTimeout(() => { |
| | | handleTimeType(period.value[0].value) |
| | | }, 200) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | loadAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | tableData.value = res.data.itemList |
| | | detailData.value = res.data.detail |
| | | let itemList = res.data.itemList |
| | | if (queryParams.value.timeType == "DAY") { |
| | | lineChartData.value = { |
| | | title: "è´è·åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "è´è·å¼", |
| | | data: itemList.map((item) => { |
| | | return item.value |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } else { |
| | | lineChartData.value = { |
| | | title: "è´è·åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCodeChart |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "å¹³åè´è·", |
| | | data: itemList.map((item) => { |
| | | return item.avg |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå¤§è´è·", |
| | | data: itemList.map((item) => { |
| | | return item.max |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå°è´è·", |
| | | data: itemList.map((item) => { |
| | | return item.min |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-åçå æ°åæ'"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æ¶é´" prop="dataTime"> |
| | | <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 label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select v-model="queryParams.meterId" placeholder="éæ©çµè¡¨" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="chart-box" v-loading="loading"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <div style="padding: 16px"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column label="åçå æ°" prop="title" align="center" /> |
| | | <el-table-column label="æå¤§å¼" prop="max" align="center" /> |
| | | <el-table-column label="æå°å¼" prop="min" align="center" /> |
| | | <el-table-column label="å¹³åå¼" prop="avg" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { powerFactorAnalysisDetail } from "@/api/powerquality/electric-power-factor/api.js" |
| | | import { listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | 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 tableData = ref([]) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: "DAY", |
| | | dataTime: proxy.dayjs(new Date()).format("YYYY-MM-DD"), |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | powerFactorAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | let detailData = res.data.detail |
| | | tableData.value = [ |
| | | { |
| | | title: "åçå¼", |
| | | max: detailData.max, |
| | | min: detailData.min, |
| | | avg: detailData.avg, |
| | | }, |
| | | { |
| | | title: "åçæ¶é´", |
| | | max: detailData.maxTime, |
| | | min: detailData.minTime, |
| | | avg: "--", |
| | | }, |
| | | ] |
| | | detailData.value = res.data.detail |
| | | let itemList = res.data.itemList |
| | | lineChartData.value = { |
| | | title: "åçå æ°åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(0, 2) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "åçå æ°", |
| | | data: itemList.map((item) => { |
| | | return item.value |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-ä¸ç¸ä¸å¹³è¡¡åæ'"> |
| | | <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-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-form-item> |
| | | <el-form-item label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select |
| | | v-model="queryParams.meterId" |
| | | placeholder="éæ©çµè¡¨" |
| | | clearable |
| | | style="width: 200px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div style="padding: 0 16px"> |
| | | <el-tabs v-model="activeTabKey" type="card"> |
| | | <el-tab-pane label="çµåä¸å¹³è¡¡" name="1"> </el-tab-pane> |
| | | <el-tab-pane label="çµæµä¸å¹³è¡¡" name="2"> </el-tab-pane> |
| | | </el-tabs> |
| | | <div class="display-buttons"> |
| | | <div class="display-btn" @click="switchBtnType(1)" :class="{ 'active-display-btn': activeKey === 1 }"> |
| | | å¾å½¢ |
| | | </div> |
| | | <div class="display-btn" @click="switchBtnType(2)" :class="{ 'active-display-btn': activeKey === 2 }"> |
| | | æ°æ® |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <el-table :data="tableData1" v-loading="loading"> |
| | | <el-table-column label="ç±»å" prop="type" align="center" /> |
| | | <el-table-column label="ä¸é¡¹ä¸å¹³è¡¡æå¼" prop="value" align="center" /> |
| | | <el-table-column label="åçæ¶é´" prop="time" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="A项çµå(V)" prop="valueA" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="B项çµå(V)" prop="valueB" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="C项çµå(V)" prop="valueC" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Aé¡¹çµæµ(A)" prop="valueA" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Bé¡¹çµæµ(A)" prop="valueB" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Cé¡¹çµæµ(A)" prop="valueC" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | <div style="margin-top: 16px" v-show="activeKey === 2"> |
| | | <div class="" style="padding: 0 16px"> |
| | | <el-table :data="tableData2" v-loading="loading" height="calc(100vh - 400px)"> |
| | | <el-table-column label="æ¶é´" prop="timeCode" align="center" /> |
| | | <el-table-column label="çµè¡¨åç§°" prop="name" align="center" /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="A项çµå(V)" |
| | | prop="valueA" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="B项çµå(V)" |
| | | prop="valueB" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="C项çµå(V)" |
| | | prop="valueC" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Aé¡¹çµæµ(A)" |
| | | prop="valueA" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Bé¡¹çµæµ(A)" |
| | | prop="valueB" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Cé¡¹çµæµ(A)" |
| | | prop="valueC" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType !== 'DAY'" |
| | | label="æå¤§å¼(V)" |
| | | prop="max" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType !== 'DAY'" |
| | | label="æå°å¼(V)" |
| | | prop="min" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType !== 'DAY'" |
| | | label="æå¤§å¼(A)" |
| | | prop="max" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType !== 'DAY'" |
| | | label="æå°å¼(A)" |
| | | prop="min" |
| | | align="center" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { threePhaseUnbalanceAnalysisDetail } from "@/api/powerquality/electricThreePhase/api.js" |
| | | import { listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | 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() |
| | | } |
| | | ) |
| | | const activeTabKey = ref("1") |
| | | const activeKey = ref(1) |
| | | const activeKeyA = ref(1) |
| | | const loading = ref(false) |
| | | const tableData1 = ref([]) |
| | | const tableData2 = ref([]) |
| | | const detailData = ref({}) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | handleTimeType(period.value[0].value) |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | |
| | | function switchBtnType(e) { |
| | | activeKey.value = e |
| | | if (e === 1) { |
| | | getList() |
| | | } |
| | | } |
| | | // å表 |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | requestType: activeTabKey.value == 1 ? 0 : 1, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | threePhaseUnbalanceAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (!!res.code && res.code == 200) { |
| | | // detailData.value = res.data.detail |
| | | loading.value = false |
| | | let itemList = res.data.itemList || [] |
| | | let detail = res.data.detail || {} |
| | | if (detail) { |
| | | tableData1.value = [ |
| | | { |
| | | type: "æå¤§å¼", |
| | | value: detail.max || "--", |
| | | time: detail.maxTime, |
| | | valueA: detail.valueMaxA, |
| | | valueB: detail.valueMaxB, |
| | | valueC: detail.valueMaxC, |
| | | }, |
| | | { |
| | | type: "æå°å¼", |
| | | value: detail.min, |
| | | time: detail.minTime, |
| | | valueA: detail.valueMinA, |
| | | valueB: detail.valueMinB, |
| | | valueC: detail.valueMinC, |
| | | }, |
| | | ] |
| | | } |
| | | |
| | | let tableDataWithMeterList = itemList |
| | | tableData2.value = |
| | | tableDataWithMeterList.map((item) => { |
| | | // item.timeCode = this.formatTime(item.timeCode) |
| | | return item |
| | | }) || [] |
| | | |
| | | // chart |
| | | let chartData = {} |
| | | if (queryParams.value.timeType !== "DAY") { |
| | | chartData = { |
| | | title: "ä¸ç¸ä¸å¹³è¡¡åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCodeChart |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "æå°å¼", |
| | | data: itemList.map((item) => { |
| | | return item.min === "--" || !item.min ? null : Number(item.min) |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå¤§å¼", |
| | | data: itemList.map((item) => { |
| | | return item.max === "--" || !item.max ? null : Number(item.max) |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } else { |
| | | chartData = { |
| | | title: "ä¸ç¸ä¸å¹³è¡¡åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "Aç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueA === "--" || !item.valueA ? null : Number(item.valueA) |
| | | }), |
| | | }, |
| | | { |
| | | name: "Bç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueB === "--" || !item.valueB ? null : Number(item.valueB) |
| | | }), |
| | | }, |
| | | { |
| | | name: "Cç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueC === "--" || !item.valueC ? null : Number(item.valueC) |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | lineChartData.value = chartData |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="è½æºç±»å" prop="energyType"> |
| | | <el-select v-model="queryParams.energyType" placeholder="è½æºç±»å" @change="handleQuery"> |
| | | <el-option :label="item.enername" :value="item.enersno" v-for="item in energyTypeList" :key="item.enersno" /> |
| | | <el-option |
| | | :label="item.enername" |
| | | :value="item.enersno" |
| | | v-for="item in energyTypeList" |
| | | :key="item.enersno" |
| | | /> |
| | | </el-select> |
| | | </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-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div style=" |
| | | height: calc(100vh - 220px) !important; |
| | | max-height: calc(100vh - 220px) !important; |
| | | overflow-y: auto; |
| | | " v-loading="loading"> |
| | | <div |
| | | style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" |
| | | v-loading="loading" |
| | | > |
| | | <div v-for="(item, index) in energyRealTimeMonitorList" :key="index" v-show="!!item.deviceArray"> |
| | | <BaseCard :title="queryParams.nodeName + '-' + item.energyTypeName" v-if="item.deviceArray.length > 0"> |
| | | <el-scrollbar> |
| | | <div class="scrollbar-flex-content"> |
| | | <p></p> |
| | | <div class="scrollbar-demo-item item-tag" @click="handleClick(item, index1)" v-for="item1,index1 in item.deviceArray" :key="index1" :style="{ |
| | | backgroundColor: |
| | | index1 == item.activeIndex ? '#5EC894' : '#9841FC', |
| | | }"> |
| | | <div |
| | | class="scrollbar-demo-item item-tag" |
| | | @click="handleClick(item, index1)" |
| | | v-for="(item1, index1) in item.deviceArray" |
| | | :key="index1" |
| | | :style="{ |
| | | backgroundColor: index1 == item.activeIndex ? '#5EC894' : '#9841FC', |
| | | }" |
| | | > |
| | | {{ item1.deviceName }} |
| | | </div> |
| | | </div> |
| | |
| | | {{ item.deviceArray[item.activeIndex].energyTypeName }} |
| | | </div> |
| | | <div class="card-box-ul"> |
| | | <div class="card-box-li" v-for="(item2, index2) in item.deviceArray[item.activeIndex] |
| | | .energyIndexArray"> |
| | | <div |
| | | class="card-box-li" |
| | | v-for="(item2, index2) in item.deviceArray[item.activeIndex].energyIndexArray" |
| | | > |
| | | <el-tooltip class="box-item" effect="dark" content="æ¥çå岿°æ®" placement="top"> |
| | | <dl @click="handleChartModal(item2)"> |
| | | <dd class="title"> |
| | | {{ item2.name }} |
| | | <template v-if="!!item2.unit"> |
| | | ({{ item2.unit }}) |
| | | </template> |
| | | <template v-if="!!item2.unit"> ({{ item2.unit }}) </template> |
| | | </dd> |
| | | <dd class="num"> |
| | | {{ item2.value!=null ? item2.value.toFixed(2) : '--' }} |
| | | {{ item2.value != null ? item2.value.toFixed(2) : "--" }} |
| | | </dd> |
| | | <dd class="time"> |
| | | <el-icon> |
| | |
| | | </div> |
| | | </template> |
| | | <script setup name="energy-real-time-monitor"> |
| | | import chartModal from "./components/chart-modal.vue"; |
| | | import { listEnergyRealTimeMonitor } from "@/api/realTimeMonitor/realTimeMonitor"; |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; |
| | | const { proxy } = getCurrentInstance(); |
| | | import { useRoute } from "vue-router"; |
| | | import useSettingsStore from "@/store/modules/settings"; |
| | | const settingsStore = useSettingsStore(); |
| | | import chartModal from "./components/chart-modal.vue" |
| | | import { listEnergyRealTimeMonitor } from "@/api/realTimeMonitor/realTimeMonitor" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList(); |
| | | getList() |
| | | } |
| | | ); |
| | | const energyTypeList = ref(undefined); |
| | | let energyRealTimeMonitorList = ref([]); |
| | | const loading = ref(false); |
| | | ) |
| | | const energyTypeList = ref(undefined) |
| | | let energyRealTimeMonitorList = ref([]) |
| | | const loading = ref(false) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | |
| | | energyType: 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.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data; |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno; |
| | | handleQuery(); |
| | | }); |
| | | energyTypeList.value = res.data |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno |
| | | handleQuery() |
| | | }) |
| | | } |
| | | function handleClick(item, index) { |
| | | item.activeIndex = index; |
| | | item.activeIndex = index |
| | | } |
| | | // è½æºå®æ¶çæ§-è½æºå®æ¶çæ§-å表 |
| | | function getList() { |
| | | loading.value = true; |
| | | loading.value = true |
| | | listEnergyRealTimeMonitor( |
| | | proxy.addDateRange({ |
| | | ...queryParams.value, |
| | |
| | | ).then((res) => { |
| | | if (!!res.code && res.code == 200) { |
| | | res.data.map((item) => { |
| | | item.activeIndex = 0; |
| | | }); |
| | | loading.value = false; |
| | | energyRealTimeMonitorList.value = res.data; |
| | | item.activeIndex = 0 |
| | | }) |
| | | loading.value = false |
| | | energyRealTimeMonitorList.value = res.data |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // è½æºå®æ¶çæ§-è½æºå®æ¶çæ§-æç´¢ |
| | | function handleQuery() { |
| | | energyRealTimeMonitorList.value = []; |
| | | getList(); |
| | | energyRealTimeMonitorList.value = [] |
| | | getList() |
| | | } |
| | | // è½æºå®æ¶çæ§-è½æºå®æ¶çæ§-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | queryParams.value.energyType = null; |
| | | energyRealTimeMonitorList.value = []; |
| | | handleQuery(); |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.energyType = null |
| | | energyRealTimeMonitorList.value = [] |
| | | handleQuery() |
| | | } |
| | | let chartRef = ref(); |
| | | let chartRef = ref() |
| | | |
| | | function handleChartModal(row) { |
| | | if (chartRef.value) { |
| | | row.nodeName = queryParams.value.nodeName |
| | | chartRef.value.handleOpen(row); |
| | | chartRef.value.handleOpen(row) |
| | | } |
| | | } |
| | | </script> |
| | |
| | | |
| | | &-li { |
| | | width: 18%; |
| | | min-width: 190px; |
| | | margin: 1%; |
| | | border-radius: 5px; |
| | | border: 1px solid #22408c; |
| | |
| | | } |
| | | |
| | | .num { |
| | | font-size: 22px; |
| | | font-size: 24px; |
| | | color: #36d3ff; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: 800; |
| | | font-size: 32px; |
| | | text-align: left; |
| | | font-style: normal; |
| | | text-transform: none; |
| | |
| | | text-align: left; |
| | | font-style: normal; |
| | | text-transform: none; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | |
| | | .item-tag { |
| | | // width: 13%; |
| | | text-align: center; |
| | | margin: 5px 8px; |
| | | margin: 2px 6px; |
| | | border-radius: 8px; |
| | | padding: 7px 10px; |
| | | padding: 5px 10px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: 500; |
| | | font-size: 16px; |
| | | font-size: 14px; |
| | | color: #ffffff; |
| | | cursor: pointer; |
| | | } |