From d8d91ebc9ee8266373dbadcbde05cc614880ad38 Mon Sep 17 00:00:00 2001 From: DYL <Dn1332079466> Date: 星期一, 10 二月 2025 11:14:31 +0800 Subject: [PATCH] 功率因数 --- zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java | 590 +++++++++++++++++++------------------- zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java | 23 + zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java | 20 + zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java | 19 + zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java | 33 ++ zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java | 55 +++ zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java | 115 +++++++ 7 files changed, 560 insertions(+), 295 deletions(-) diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java new file mode 100644 index 0000000..a82aeec --- /dev/null +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java @@ -0,0 +1,55 @@ +package com.zhitan.web.controller.energyMonitor; + +import com.zhitan.common.annotation.Log; +import com.zhitan.common.constant.CommonConst; +import com.zhitan.common.core.controller.BaseController; +import com.zhitan.common.core.domain.AjaxResult; +import com.zhitan.energyMonitor.service.IElectricPowerFactorService; +import com.zhitan.model.domain.EnergyIndex; +import com.zhitan.model.service.IEnergyIndexService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: 鍔熺巼鍥犳暟 + * @Author: yxw + * @Date: 2022-04-24 + * @Version: V1.2 + */ +@Api(tags = "鍔熺巼鍥犳暟") +@RestController +@RequestMapping("/powerFactorAnalysis") +@Slf4j +public class ElectricPowerFactorController extends BaseController { + + @Autowired + private IElectricPowerFactorService electricPowerFactorService; + + @Autowired + private IEnergyIndexService energyIndexService; + + /** + * 鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁 + * + * @param nodeId 鑺傜偣id + * @param meterId 鐢佃〃id + * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21 + */ + @Log(title = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁") + @ApiOperation(value = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁", notes = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁") + @GetMapping(value = "/detail") + public AjaxResult list(@RequestParam(name = "nodeId") String nodeId, + @RequestParam(name = "meterId") String meterId, + @RequestParam(name = "timeCode") String timeCode) { + EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(nodeId, meterId, CommonConst.TAG_CODE_GLYS); + + return AjaxResult.success(electricPowerFactorService.list(timeCode, energyIndex)); + } + +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java new file mode 100644 index 0000000..2da7ece --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java @@ -0,0 +1,33 @@ +package com.zhitan.energyMonitor.domain.vo; + +import lombok.Data; + +/** + * @Description: TODO + * @author: yxw + * @date: 2022骞�04鏈�24鏃� 16:59 + */ +@Data +public class ElectricPowerFactorDetail { + /** + * 鏈�澶у姛鐜囧洜鏁� + */ + private String max; + /** + * 鏈�澶у姛鐜囧洜鏁板彂鐢熸椂闂� + */ + private String maxTime; + /** + * 鏈�灏忓姛鐜囧洜鏁� + */ + private String min; + /** + * 鏈�灏忓姛鐜囧洜鏁板彂鐢熸椂闂� + */ + private String minTime; + /** + * 骞冲潎鍔熺巼鍥犳暟 + */ + private String avg; + +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java new file mode 100644 index 0000000..42c024d --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java @@ -0,0 +1,20 @@ +package com.zhitan.energyMonitor.domain.vo; + +import lombok.Data; + +/** + * @Description: TODO + * @author: yxw + * @date: 2022骞�04鏈�24鏃� 16:59 + */ +@Data +public class ElectricPowerFactorItem { + /** + * 鏃堕棿 + */ + private String timeCode; + /** + * 瀹炴椂鍊� + */ + private String value; +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java new file mode 100644 index 0000000..83b3eef --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java @@ -0,0 +1,23 @@ +package com.zhitan.energyMonitor.domain.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: TODO + * @author: yxw + * @date: 2022骞�04鏈�24鏃� 16:58 + */ +@Data +public class ElectricPowerFactorVO { + /** + * 璁板綍鍒楄〃 + */ + private List<ElectricPowerFactorItem> itemList; + + /** + * 璇︽儏瀹炰綋 + */ + private ElectricPowerFactorDetail detail; +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java new file mode 100644 index 0000000..b74cc1b --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java @@ -0,0 +1,19 @@ +package com.zhitan.energyMonitor.service; + +import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorVO; +import com.zhitan.model.domain.EnergyIndex; + + +/** + * @Description: + * @Author: jeecg-boot + * @Date: 2022-04-19 + * @Version: V1.0 + */ +public interface IElectricPowerFactorService { + + /** + * 鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁 + */ + ElectricPowerFactorVO list(String timeCode, EnergyIndex energyIndex); +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java new file mode 100644 index 0000000..ea366f9 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java @@ -0,0 +1,115 @@ +package com.zhitan.energyMonitor.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.zhitan.common.constant.CommonConst; +import com.zhitan.common.constant.TimeTypeConst; +import com.zhitan.common.utils.ChartUtils; +import com.zhitan.common.utils.DateTimeUtil; +import com.zhitan.common.utils.DoubleUtil; +import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorDetail; +import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorItem; +import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorVO; +import com.zhitan.energyMonitor.service.IElectricPowerFactorService; +import com.zhitan.model.domain.EnergyIndex; +import com.zhitan.realtimedata.domain.TagValue; +import com.zhitan.realtimedata.service.RealtimeDatabaseService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @Description: sensor_alarm_item + * @Author: jeecg-boot + * @Date: 2022-04-19 + * @Version: V1.0 + */ +@Slf4j +@Service +public class ElectricPowerFactorServiceImpl implements IElectricPowerFactorService { + @Autowired + private RealtimeDatabaseService realtimeDatabaseService; + + @Override + public ElectricPowerFactorVO list(String timeCode, EnergyIndex energyIndex) { + ElectricPowerFactorVO vo = new ElectricPowerFactorVO(); + List<ElectricPowerFactorItem> itemList = new ArrayList<>(); + ElectricPowerFactorDetail detail = new ElectricPowerFactorDetail(); + detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMax(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMin(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN); + vo.setItemList(itemList); + vo.setDetail(detail); + + List<Date> dateList = new ArrayList<>(); + ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_DAY, timeCode, dateList); + double max = CommonConst.DIGIT_0, min = CommonConst.MIN_INIT_VALUE; + //dateList璁℃暟 + Date now = new Date(); + //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣 + now = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now); + int i = CommonConst.DIGIT_0; + for (Date date : dateList) { + ElectricPowerFactorItem temp = new ElectricPowerFactorItem(); + temp.setTimeCode(ChartUtils.getTimeCodeChart(TimeTypeConst.TIME_TYPE_DAY, date)); + temp.setValue(CommonConst.DOUBLE_MINUS_SIGN); + itemList.add(temp); + // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿-- + if (DateTimeUtil.compareDateDiff(date, now) > CommonConst.DIGIT_0) { + i++; + continue; + } + TagValue tagValue = new TagValue(); + try { + TagValue retrieve = realtimeDatabaseService.retrieve(energyIndex.getCode(), date); + if (ObjectUtil.isNotEmpty(retrieve)) { + tagValue = retrieve; + } + } catch (Exception e) { + log.error("鑾峰彇鍔熺巼鍥犳暟寮傚父锛�" + e.getMessage()); + } + if (ObjectUtil.isNotEmpty(tagValue.getValue())) { + double value = DoubleUtil.formatDouble(tagValue.getValue()); + + temp.setValue(String.valueOf(value)); + //缁欐渶灏忓�艰祴鍊肩涓�鏉� + if (i == CommonConst.DIGIT_0) { + min = Double.parseDouble(temp.getValue()); + } + if (value > max) { + max = value; + detail.setMax(max + CommonConst.EMPTY); + detail.setMaxTime(DateTimeUtil.getDateTime(date)); + } + if (value <= min) { + min = value; + detail.setMin(min + CommonConst.EMPTY); + detail.setMinTime(DateTimeUtil.getDateTime(date)); + } + } + i++; + } + + detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN); + if (ObjectUtil.isNotEmpty(itemList)) { + double avg = CommonConst.DIGIT_DOUBLE_0; + for (ElectricPowerFactorItem li : itemList) { + try { + if (!li.getValue().equals(CommonConst.DOUBLE_MINUS_SIGN)) { + avg += DoubleUtil.toDouble(li.getValue()); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + } + detail.setAvg(DoubleUtil.formatDoubleToStr(avg / itemList.size())); + } + + return vo; + } + +} diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java index 47e57ca..301d0ae 100644 --- a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java +++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java @@ -35,320 +35,320 @@ @Service public class EnergyIndexServiceImpl implements IEnergyIndexService { - @Autowired - private EnergyIndexMapper energyIndexMapper; - @Autowired - private IDaqTemplateService daqTemplateService; - @Autowired - private IMeterImplementService meterImplementService; - @Autowired - private IModelNodeService modelNodeService; + @Autowired + private EnergyIndexMapper energyIndexMapper; + @Autowired + private IDaqTemplateService daqTemplateService; + @Autowired + private IMeterImplementService meterImplementService; + @Autowired + private IModelNodeService modelNodeService; - @Autowired - private ModelNodeMapper modelNodeMapper; + @Autowired + private ModelNodeMapper modelNodeMapper; - @Override - public EnergyIndex getiEnergyIndexByCode(String code) { - return energyIndexMapper.getiEnergyIndexByCode(code); - } - - @Override - public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) { - return energyIndexMapper.listIndexByMeterIds(nodeId,meterId); - } - - /** - * 鏌ヨ鎸囨爣淇℃伅 - * - * @param indexId 鎸囨爣淇℃伅ID - * @return 鎸囨爣淇℃伅 - */ - @Override - public EnergyIndex selectEnergyIndexById(String indexId) { - return energyIndexMapper.selectEnergyIndexById(indexId); - } - - @Override - public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) { - if (CollectionUtils.isEmpty(indexId)) { - return Collections.emptyList(); - } - return energyIndexMapper.selectEnergyIndexByIds(indexId); - } - - @Override - public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) { - return energyIndexMapper.selectEnergyIndexList(energyIndex); - } - - /** - * 鏌ヨ鎸囨爣淇℃伅鍒楄〃 - * - * @param energyIndex 鎸囨爣淇℃伅 - * @return 鎸囨爣淇℃伅 - */ - @Override - public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) { - return energyIndexMapper.selectEnergyIndex(query); - } - - /** - * 鏂板鎸囨爣淇℃伅 - * - * @param nodeId - * @param energyIndex 鎸囨爣淇℃伅 - * @return 缁撴灉 - */ - @Override - public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) { - energyIndex.setNodeId(nodeId); - energyIndexMapper.insertEnergyIndex( energyIndex); - return energyIndexMapper.insertNodeIndex(nodeId,energyIndex.getIndexId()); - } - - /** - * 淇敼鎸囨爣淇℃伅 - * - * @param energyIndex 鎸囨爣淇℃伅 - * @return 缁撴灉 - */ - @Override - public int updateEnergyIndex(EnergyIndex energyIndex) { - return energyIndexMapper.updateEnergyIndex(energyIndex); - } - - /** - * 鎵归噺鍒犻櫎鎸囨爣淇℃伅 - * - * @param nodeId - * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID - * @return 缁撴灉 - */ - @Override - public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) { - return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds); - } - - @Override - public boolean energyIndexHasExist(String code) { - int count = energyIndexMapper.energyIndexHasExist(code); - return count > 0; - } - - @Override - public boolean energyIndexHasExist(String indexId, String code) { - int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code); - return count > 0; - } - - @Override - public AjaxResult addMeterIndex(String meterId) { - MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId); - if (meterImplement == null) { - return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�"); + @Override + public EnergyIndex getiEnergyIndexByCode(String code) { + return energyIndexMapper.getiEnergyIndexByCode(code); } - DaqTemplate query = new DaqTemplate(); - query.setDeviceType(meterImplement.getMeterType()); - List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query); - if (daqTemplates.isEmpty()) { - return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒"); + @Override + public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) { + return energyIndexMapper.listIndexByMeterIds(nodeId, meterId); } - List<EnergyIndex> energyIndices = new ArrayList<>(); - daqTemplates.forEach(daqTemplate -> { - EnergyIndex energyIndex = new EnergyIndex(); - energyIndex.setIndexId(UUID.randomUUID().toString()); - energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode()); - energyIndex.setName(daqTemplate.getName()); - energyIndex.setUnitId(daqTemplate.getUnit()); - energyIndex.setIndexType(IndexType.COLLECT); - energyIndex.setMeterId(meterId); - energyIndices.add(energyIndex); - }); - - energyIndexMapper.deleteIndexByMeterId(meterId); - energyIndexMapper.insertEnergyIndices(energyIndices); - return AjaxResult.success(); - } - - @Override - public List<EnergyIndex> getMeterIndex(String meterId) { - return energyIndexMapper.getMeterIndex(meterId); - } - - @Override - public boolean modelHasConfig(String modelCode) { - int count = energyIndexMapper.modelHasConfig(modelCode); - return count > 0; - } - - @Override - public List<EnergyIndex> selectCollectIndex(String deviceId) { - return energyIndexMapper.selectCollectIndex(deviceId); - } - - @Override - public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) { - return energyIndexMapper.getEnergyIndexByIds(indexIds); - } - - @Override - public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) { - if (indexCodes.isEmpty()) { - return new ArrayList<>(); + /** + * 鏌ヨ鎸囨爣淇℃伅 + * + * @param indexId 鎸囨爣淇℃伅ID + * @return 鎸囨爣淇℃伅 + */ + @Override + public EnergyIndex selectEnergyIndexById(String indexId) { + return energyIndexMapper.selectEnergyIndexById(indexId); } - return energyIndexMapper.getEnergyIndexByCodes(indexCodes); - } - - @Override - public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) { - return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId); - } - - @Override - public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) { - return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter); - } - - @Override - public void removeNodeIndex(String nodeId, List<String> removeLink) { - energyIndexMapper.removeNodeIndex(nodeId, removeLink); - } - - @Override - public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) { - List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode) - .collect(Collectors.toList()); - List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId) - .collect(Collectors.toList()); - List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes); - List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes); - Map<String, String> nodeCodeToId = modelNodes.stream() - .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId)); - Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode) - .collect(Collectors.toSet()); - - List<EnergyIndex> insertData = new ArrayList<>(); - List<EnergyIndex> updateData = new ArrayList<>(); - List<String> errorNodeCode = new ArrayList<>(); - List<String> insertIndexCode = new ArrayList<>(); - AtomicBoolean existDuplicateCode = new AtomicBoolean(false); - energyIndexList.forEach(energyIndex -> { - if (cacheIndexCodes.contains(energyIndex.getCode())) { - updateData.add(energyIndex); - } else { - String nodeCode = energyIndex.getNodeId(); - if (nodeCodeToId.containsKey(nodeCode)) { - if (!insertIndexCode.contains(energyIndex.getCode())) { - insertIndexCode.add(energyIndex.getCode()); - energyIndex.setIndexId(UUID.randomUUID().toString()); - energyIndex.setNodeId(nodeCodeToId.get(nodeCode)); - insertData.add(energyIndex); - } else { - existDuplicateCode.set(true); - } - } else if (!errorNodeCode.contains(nodeCode)) { - errorNodeCode.add(nodeCode); + @Override + public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) { + if (CollectionUtils.isEmpty(indexId)) { + return Collections.emptyList(); } - } - }); - - if (updateSupport && !updateData.isEmpty()) { - updateData.forEach(energyIndexMapper::updateEnergyIndex); + return energyIndexMapper.selectEnergyIndexByIds(indexId); } - if (!insertData.isEmpty()) { - energyIndexMapper.saveEnergyIndex(insertData); + @Override + public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) { + return energyIndexMapper.selectEnergyIndexList(energyIndex); } - String errMsg = ""; - if (existDuplicateCode.get()) { - errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒"; + /** + * 鏌ヨ鎸囨爣淇℃伅鍒楄〃 + * + * @param energyIndex 鎸囨爣淇℃伅 + * @return 鎸囨爣淇℃伅 + */ + @Override + public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) { + return energyIndexMapper.selectEnergyIndex(query); } - if (!errorNodeCode.isEmpty()) { - errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒"; + /** + * 鏂板鎸囨爣淇℃伅 + * + * @param nodeId + * @param energyIndex 鎸囨爣淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) { + energyIndex.setNodeId(nodeId); + energyIndexMapper.insertEnergyIndex(energyIndex); + return energyIndexMapper.insertNodeIndex(nodeId, energyIndex.getIndexId()); } - if (StringUtils.isNotBlank(errMsg)) { - return AjaxResult.error(errMsg); - } - return AjaxResult.success("瀵煎叆鎴愬姛锛�"); - } - - @Override - public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) { - if (indexCodes.isEmpty()) { - return new ArrayList<>(); + /** + * 淇敼鎸囨爣淇℃伅 + * + * @param energyIndex 鎸囨爣淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateEnergyIndex(EnergyIndex energyIndex) { + return energyIndexMapper.updateEnergyIndex(energyIndex); } - return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes); - } - - /** - * @description: hmj 鍒嗛〉鏌ヨ - * @param query - * @param pageNum - * @param pageSize - * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex> - * @author: hmj - * @date: 2024/10/11 23:56 - */ - @Override - public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) { - return energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum,pageSize),query); - } - - @Override - public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds,String code, - String name,Long pageNum, Long pageSize) { - LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(EnergyIndex::getMeterId,meterIndexIds); - queryWrapper.like(StringUtils.isNotEmpty(code),EnergyIndex::getCode,code); - queryWrapper.like(StringUtils.isNotEmpty(name),EnergyIndex::getName,name); - return energyIndexMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper); - } - - @Override - public List<EnergyIndex> getIndexByCode(String code, String nodeId) { - List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByCode(code,nodeId); - - return energyIndexList; - } - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣� - * - * @param nodeId 鑺傜偣id - * @param meterId 璁惧id - * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎 - * @return - */ - @Override - public EnergyIndex getDeviceIndexByCode(String nodeId, String meterId, String indexCode) { - - List<EnergyIndex> energyIndexList = listDeviceIndexByCode(nodeId, meterId, indexCode); - EnergyIndex energyIndex = energyIndexList.stream().findFirst().orElse(null); - if (ObjectUtils.isEmpty(energyIndex)) { - energyIndex = new EnergyIndex(); + /** + * 鎵归噺鍒犻櫎鎸囨爣淇℃伅 + * + * @param nodeId + * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID + * @return 缁撴灉 + */ + @Override + public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) { + return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds); } - return energyIndex; - } - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣� - * - * @param energyUnitId 鐢ㄨ兘鍗曞厓id - * @param meterId 璁惧id - * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎 - * @return - */ - public List<EnergyIndex> listDeviceIndexByCode(String energyUnitId, String meterId, String indexCode) { - return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery() - .eq(EnergyIndex::getNodeId, energyUnitId) - .eq(EnergyIndex::getMeterId, meterId) - .like(EnergyIndex::getCode, indexCode)); - } + @Override + public boolean energyIndexHasExist(String code) { + int count = energyIndexMapper.energyIndexHasExist(code); + return count > 0; + } + + @Override + public boolean energyIndexHasExist(String indexId, String code) { + int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code); + return count > 0; + } + + @Override + public AjaxResult addMeterIndex(String meterId) { + MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId); + if (meterImplement == null) { + return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�"); + } + + DaqTemplate query = new DaqTemplate(); + query.setDeviceType(meterImplement.getMeterType()); + List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query); + if (daqTemplates.isEmpty()) { + return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒"); + } + + List<EnergyIndex> energyIndices = new ArrayList<>(); + daqTemplates.forEach(daqTemplate -> { + EnergyIndex energyIndex = new EnergyIndex(); + energyIndex.setIndexId(UUID.randomUUID().toString()); + energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode()); + energyIndex.setName(daqTemplate.getName()); + energyIndex.setUnitId(daqTemplate.getUnit()); + energyIndex.setIndexType(IndexType.COLLECT); + energyIndex.setMeterId(meterId); + energyIndices.add(energyIndex); + }); + + energyIndexMapper.deleteIndexByMeterId(meterId); + energyIndexMapper.insertEnergyIndices(energyIndices); + return AjaxResult.success(); + } + + @Override + public List<EnergyIndex> getMeterIndex(String meterId) { + return energyIndexMapper.getMeterIndex(meterId); + } + + @Override + public boolean modelHasConfig(String modelCode) { + int count = energyIndexMapper.modelHasConfig(modelCode); + return count > 0; + } + + @Override + public List<EnergyIndex> selectCollectIndex(String deviceId) { + return energyIndexMapper.selectCollectIndex(deviceId); + } + + @Override + public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) { + return energyIndexMapper.getEnergyIndexByIds(indexIds); + } + + @Override + public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) { + if (indexCodes.isEmpty()) { + return new ArrayList<>(); + } + + return energyIndexMapper.getEnergyIndexByCodes(indexCodes); + } + + @Override + public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) { + return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId); + } + + @Override + public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) { + return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter); + } + + @Override + public void removeNodeIndex(String nodeId, List<String> removeLink) { + energyIndexMapper.removeNodeIndex(nodeId, removeLink); + } + + @Override + public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) { + List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode) + .collect(Collectors.toList()); + List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId) + .collect(Collectors.toList()); + List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes); + List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes); + Map<String, String> nodeCodeToId = modelNodes.stream() + .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId)); + Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode) + .collect(Collectors.toSet()); + + List<EnergyIndex> insertData = new ArrayList<>(); + List<EnergyIndex> updateData = new ArrayList<>(); + List<String> errorNodeCode = new ArrayList<>(); + List<String> insertIndexCode = new ArrayList<>(); + AtomicBoolean existDuplicateCode = new AtomicBoolean(false); + energyIndexList.forEach(energyIndex -> { + if (cacheIndexCodes.contains(energyIndex.getCode())) { + updateData.add(energyIndex); + } else { + String nodeCode = energyIndex.getNodeId(); + if (nodeCodeToId.containsKey(nodeCode)) { + if (!insertIndexCode.contains(energyIndex.getCode())) { + insertIndexCode.add(energyIndex.getCode()); + energyIndex.setIndexId(UUID.randomUUID().toString()); + energyIndex.setNodeId(nodeCodeToId.get(nodeCode)); + insertData.add(energyIndex); + } else { + existDuplicateCode.set(true); + } + } else if (!errorNodeCode.contains(nodeCode)) { + errorNodeCode.add(nodeCode); + } + } + }); + + if (updateSupport && !updateData.isEmpty()) { + updateData.forEach(energyIndexMapper::updateEnergyIndex); + } + + if (!insertData.isEmpty()) { + energyIndexMapper.saveEnergyIndex(insertData); + } + + String errMsg = ""; + if (existDuplicateCode.get()) { + errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒"; + } + + if (!errorNodeCode.isEmpty()) { + errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒"; + } + + if (StringUtils.isNotBlank(errMsg)) { + return AjaxResult.error(errMsg); + } + return AjaxResult.success("瀵煎叆鎴愬姛锛�"); + } + + @Override + public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) { + if (indexCodes.isEmpty()) { + return new ArrayList<>(); + } + + return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes); + } + + /** + * @param query + * @param pageNum + * @param pageSize + * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex> + * @description: hmj 鍒嗛〉鏌ヨ + * @author: hmj + * @date: 2024/10/11 23:56 + */ + @Override + public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) { + return energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum, pageSize), query); + } + + @Override + public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds, String code, + String name, Long pageNum, Long pageSize) { + LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(EnergyIndex::getMeterId, meterIndexIds); + queryWrapper.like(StringUtils.isNotEmpty(code), EnergyIndex::getCode, code); + queryWrapper.like(StringUtils.isNotEmpty(name), EnergyIndex::getName, name); + return energyIndexMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper); + } + + @Override + public List<EnergyIndex> getIndexByCode(String code, String nodeId) { + List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByCode(code, nodeId); + + return energyIndexList; + } + + /** + * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣� + * + * @param nodeId 鑺傜偣id + * @param meterId 璁惧id + * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎 + * @return + */ + @Override + public EnergyIndex getDeviceIndexByCode(String nodeId, String meterId, String indexCode) { + + List<EnergyIndex> energyIndexList = listDeviceIndexByCode(nodeId, meterId, indexCode); + EnergyIndex energyIndex = energyIndexList.stream().findFirst().orElse(null); + if (ObjectUtils.isEmpty(energyIndex)) { + energyIndex = new EnergyIndex(); + } + return energyIndex; + } + + /** + * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣� + * + * @param nodeId 鑺傜偣id + * @param meterId 璁惧id + * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎 + * @return + */ + public List<EnergyIndex> listDeviceIndexByCode(String nodeId, String meterId, String indexCode) { + return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery() + .eq(EnergyIndex::getNodeId, nodeId) + .eq(EnergyIndex::getMeterId, meterId) + .like(EnergyIndex::getCode, indexCode)); + } } -- Gitblit v1.9.3