diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/constant/DataParam.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/constant/DataParam.java index 36cbe4b..ee9e162 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/constant/DataParam.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/constant/DataParam.java @@ -53,6 +53,7 @@ public interface DataParam { String EvtParamPhase = "Evt_Param_Phase"; String EvtParamDepth = "Evt_Param_VVaDepth"; + String EVTPARAMTM ="Evt_Param_Tm"; String evtData = "evt_data"; diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/PortableOfflLogController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/PortableOfflLogController.java index 015e43d..f8933f7 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/PortableOfflLogController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/PortableOfflLogController.java @@ -13,6 +13,7 @@ import com.njcn.csdevice.pojo.po.PortableOfflLog; import com.njcn.csdevice.service.IPortableOfflLogService; import com.njcn.csdevice.utils.ExcelStyleUtil; import com.njcn.csdevice.param.UploadDataParam; +import com.njcn.oss.utils.FileStorageUtil; import com.njcn.poi.excel.ExcelUtil; import com.njcn.poi.util.PoiUtil; import com.njcn.system.api.DicDataFeignClient; @@ -53,6 +54,8 @@ public class PortableOfflLogController extends BaseController { private final DicDataFeignClient dicDataFeignClient; + private final FileStorageUtil fileStorageUtil; + @ResponseBody @ApiOperation("导出设备基础数据模板") @GetMapping(value = "getExcelTemplate") @@ -98,5 +101,27 @@ public class PortableOfflLogController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("数据在线补招") + @PostMapping(value = "dataOnlineRecruitment") + public HttpResult dataOnlineRecruitment(@RequestParam("devId") String devId + , @RequestParam("lineId") String lineId, @RequestParam("path") String path,HttpServletRequest request) { + String methodDescribe = getMethodDescribe("dataOnlineRecruitment"); + + List excelreport = null; + try { + excelreport = fileStorageUtil.getAllFile("excelreport", path); + } catch (Exception e) { + throw new RuntimeException(e); + } + UploadDataParam uploadDataParam = new UploadDataParam(); + uploadDataParam.setDevId(devId); + uploadDataParam.setLineId(lineId); + + uploadDataParam.setFiles(excelreport); + iPortableOfflLogService.importEquipment(uploadDataParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsGroupServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsGroupServiceImpl.java index 3ce0db3..53ff8c9 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsGroupServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsGroupServiceImpl.java @@ -455,6 +455,14 @@ public class CsGroupServiceImpl extends ServiceImpl impl }else { temp.setFeatureAmplitude(evtParamDepth.get(0).getValue().equals("-")?null:Float.parseFloat(evtParamDepth.get(0).getValue())); } + List evtParmTm = eventDataSetDTOS.stream(). + filter(dataSetDTO -> Objects.equals(dataSetDTO.getName(), DataParam.EVTPARAMTM)). + collect(Collectors.toList()); + if(CollectionUtil.isEmpty(evtParamDepth)){ + temp.setPersistTime(null); + }else { + temp.setPersistTime(evtParmTm.get(0).getValue().equals("-")?null:Double.parseDouble(evtParmTm.get(0).getValue())); + } } }); return csEventVOPage; diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PortableOfflLogServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PortableOfflLogServiceImpl.java index 8e0db48..c53ba94 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PortableOfflLogServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PortableOfflLogServiceImpl.java @@ -3,7 +3,6 @@ package com.njcn.csdevice.service.impl; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.pojo.exception.BusinessException; -import com.njcn.csdevice.api.CsLineFeignClient; import com.njcn.csdevice.api.EquipmentFeignClient; import com.njcn.csdevice.constant.DataParam; import com.njcn.csdevice.enums.AlgorithmResponseEnum; @@ -21,10 +20,12 @@ import com.njcn.csharmonic.offline.log.Log; import com.njcn.csharmonic.offline.log.vo.NewBodyTaglogbuffer; import com.njcn.csharmonic.offline.log.vo.NewHeadTaglogbuffer; import com.njcn.csharmonic.offline.log.vo.NewTaglogbuffer; +import com.njcn.csharmonic.offline.log.vo.TagComtradeCfg; import com.njcn.csharmonic.offline.mincfg.AnalyseComtradeCfg; -import com.njcn.csharmonic.offline.mincfg.tagComtradeCfg; +import com.njcn.csharmonic.offline.mincfg.vo.CmnModeCfg; import com.njcn.csharmonic.offline.vo.Response; import com.njcn.csharmonic.pojo.po.CsEventPO; +import com.njcn.influx.imapper.CommonMapper; import com.njcn.influx.imapper.EvtDataMapper; import com.njcn.influx.imapper.PqdDataMapper; import com.njcn.influx.pojo.po.cs.EntData; @@ -33,17 +34,17 @@ import com.njcn.oss.utils.FileStorageUtil; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.api.EleEvtFeignClient; import com.njcn.system.pojo.po.DictData; -import com.njcn.system.pojo.po.EleEvtParm; import com.njcn.web.pojo.param.BaseParam; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.io.*; +import java.text.DecimalFormat; import java.text.SimpleDateFormat; -import java.time.ZoneId; -import java.time.ZoneOffset; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -61,6 +62,9 @@ import java.util.stream.Stream; @RequiredArgsConstructor public class PortableOfflLogServiceImpl extends ServiceImpl implements IPortableOfflLogService { + + private final DecimalFormat df = new DecimalFormat("#0.000"); + private final FileStorageUtil fileStorageUtil; private final DicDataFeignClient dicDataFeignClient; @@ -82,8 +86,12 @@ public class PortableOfflLogServiceImpl extends ServiceImpl queryPage(BaseParam baseParam) { Page returnpage = new Page<> (baseParam.getPageNum(), baseParam.getPageSize ()); - if(baseParam.getSearchBeginTime()!=null) baseParam.setSearchBeginTime(baseParam.getSearchBeginTime()+DataParam.startTime); - if(baseParam.getSearchEndTime()!=null) baseParam.setSearchEndTime(baseParam.getSearchEndTime()+DataParam.endTime); + if(baseParam.getSearchBeginTime()!=null) { + baseParam.setSearchBeginTime(baseParam.getSearchBeginTime()+DataParam.startTime); + } + if(baseParam.getSearchEndTime()!=null) { + baseParam.setSearchEndTime(baseParam.getSearchEndTime()+DataParam.endTime); + } returnpage = this.getBaseMapper().queryPage(returnpage,baseParam); return returnpage; } @@ -112,7 +120,7 @@ public class PortableOfflLogServiceImpl extends ServiceImpl record = uploadDataParam.getFiles().stream().filter( + temp -> temp.getOriginalFilename().contains("record.bin")) + .collect(Collectors.toList()); + if(CollectionUtils.isEmpty(record)){ + throw new BusinessException(AlgorithmResponseEnum.RECORD_FILE_LOST); + }else { + InputStream inputStream = null; + try { + inputStream = record.get(0).getInputStream(); + } catch (IOException e) { + throw new RuntimeException(e); + } + CmnModeCfg cmnModeCfg = AnalyseComtradeCfg.convertRecord(inputStream); + //监测点序号 + int lineIdx = cmnModeCfg.line_idx; + + if(lineIdx!=Integer.valueOf(cdid)){ + throw new BusinessException(AlgorithmResponseEnum.LINE_NUM_MISMATCH); + } + + } + + //获取离线上传对应的字典规则(字典用来控制上传的文件夹名称,其中字典的name代表名称,code代表该文件夹下对应的解析规则且code不能更改) List dictDatas = dicDataFeignClient.getDicDataByTypeCode(DataParam.wlRecordUpload).getData(); List responses = new ArrayList<>(); @@ -159,7 +193,9 @@ public class PortableOfflLogServiceImpl extends ServiceImpl fileList = new ArrayList<>(); for(MultipartFile file : uploadDataParam.getFiles()){ //获取每个文件夹下对应的文件信息 - if(checkPrevsFolder(file.getOriginalFilename(),dictData.getName())!=null) fileList.add(file); + if(checkPrevsFolder(file.getOriginalFilename(),dictData.getName())!=null) { + fileList.add(file); + } } if(!fileList.isEmpty()){ //将当前文件夹下的文件统一解析 @@ -197,11 +233,12 @@ public class PortableOfflLogServiceImpl extends ServiceImpl data1 = equipmentFeignClient.queryDeviceById(Stream.of(uploadDataParam.getDevId()).collect(Collectors.toList())).getData(); - + CsEquipmentDeliveryDTO csEquipmentDeliveryDTO = data1.get(0); //min文件夹下的文件是否解析过 boolean minFlag = true; //开始上传文件、记录上传日志、解析的文件结果入库 //最外层便利所有文件确保所有文件都上传及记录上传日志 + for(MultipartFile file : uploadDataParam.getFiles()){ //初始上传日志基本信息 PortableOfflLog portableOfflLog = new PortableOfflLog(); @@ -213,11 +250,18 @@ public class PortableOfflLogServiceImpl extends ServiceImpl pqdData = (List) response.getObj(); + pqdData.forEach(temp->{ + temp.setClDid(cdid); + temp.setIsAbnormal(0); + temp.setProcess(data1.get(0).getProcess()+""); + temp.setLineId(uploadDataParam.getLineId()); + }); //如果明确返回了state 那么当前文件解析出错 if(response.getState() != null){ portableOfflLog.setState(response.getState()); @@ -241,7 +285,7 @@ public class PortableOfflLogServiceImpl extends ServiceImpl eleEvtParms = eleEvtFeignClient.queryByPid(strId).getData(); //插入事件表 CsEventPO csEventPO = new CsEventPO(); - csEventPO.setId(IdUtil.simpleUUID()); + csEventPO.setId(IdUtil.fastSimpleUUID()); csEventPO.setLineId(uploadDataParam.getLineId()); csEventPO.setDeviceId(uploadDataParam.getDevId()); + csEventPO.setProcess(csEquipmentDeliveryDTO.getProcess()); + //todo 做映射目前置空 + csEventPO.setCode(null); csEventPO.setStartTime(newTaglogbuffer.getStart()); csEventPO.setTag(strName); + //更具唯一索引做校验存在该事件则跳过; + CsEventPO data = eventFeignClient.queryByIndex(csEventPO).getData(); + if(Objects.nonNull(data)){ + continue; + } + String wavePath = null; //设置波形文件(去cfg结果集里面去找) for (Response res : cfgResponse) { String cfg = res.getFilename(); String dat = cfg.substring(0,cfg.lastIndexOf("."))+OfflineConstant.DAT; - String sharPath = OfflineConstant.COMTRADE+"/"+DataParam.wlRecordPath+uploadDataParam.getDevId()+"/"+uploadDataParam.getLineId()+"/"+getFolderName()+"/"; - tagComtradeCfg sing = (tagComtradeCfg) res.getObj(); - Date date = Date.from(newTaglogbuffer.getStart().atZone( ZoneId.systemDefault()).toInstant()); + String sharPath = OfflineConstant.COMTRADE+"/"+csEquipmentDeliveryDTO.getMac()+"/"; + TagComtradeCfg sing = (TagComtradeCfg) res.getObj(); //如果匹配上则需要将当前cfg文件及对应的dat文件上传到comtrade文件夹中 - if ((sing!= null && sing.getTimeStart()!= null && sing.getTimeEnd() !=null && sing.getTimeTrigger().compareTo(date) <= 0 && sing.getTimeEnd().compareTo(date) >= 0)) { + if (sing!= null && sing.getTimeStart()!= null && sing.getTimeTrigger().compareTo(csEventPO.getStartTime())<=0 + &&sing.getTimeEnd().compareTo(csEventPO.getStartTime())>=0) { for(MultipartFile f : uploadDataParam.getFiles()){ if(f.getOriginalFilename().equals(cfg) || f.getOriginalFilename().equals(dat)){ - fileStorageUtil.uploadMultipart(f, sharPath); - wavePath = sharPath; + int lastIndex = f.getOriginalFilename().lastIndexOf('/'); + String fileName = f.getOriginalFilename().substring(lastIndex + 1); + String baseName = FilenameUtils.getBaseName(fileName); + String extension = FilenameUtils.getExtension(fileName); + try { + fileStorageUtil.uploadStreamSpecifyName(f.getInputStream(), sharPath, baseName + "." + extension.toUpperCase()); + } catch (IOException e) { + throw new RuntimeException(e); + } + wavePath = sharPath+fileName.substring(0,fileName.lastIndexOf(".")); } } } @@ -314,18 +375,24 @@ public class PortableOfflLogServiceImpl extends ServiceImpl> pageQueryByLineId(@RequestBody CsEventUserQueryPage csEventUserQueryPage); + @PostMapping("/queryByIndex") + HttpResult queryByIndex(@RequestBody CsEventPO csEventPO); -} + + } diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/EventFeignClientFallbackFactory.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/EventFeignClientFallbackFactory.java index 173faa3..73a4159 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/EventFeignClientFallbackFactory.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/EventFeignClientFallbackFactory.java @@ -12,6 +12,9 @@ import com.njcn.csharmonic.pojo.vo.CsEventVO; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; + +import java.time.LocalDateTime; import java.util.List; /** @@ -40,6 +43,12 @@ public class EventFeignClientFallbackFactory implements FallbackFactory queryByIndex( CsEventPO csEventPO) { + log.error("{}异常,降级处理,异常为:{}","根据根据表唯一索引查询(用于校验是否存在该事件)s",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } }; } } diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Log.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Log.java index bea07cb..af4d92c 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Log.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Log.java @@ -14,8 +14,7 @@ import java.util.List; @Slf4j public class Log { private static String logPath = "C:\\Users\\Administrator\\Desktop\\浙江无线\\离线数据上传\\09\\log";//事件文件路径 - private static LocalDateTime event_starttime = null; - private static LocalDateTime event_endtime = null; + private static List tagComtradeCfgs = new ArrayList();//波形文件cfg信息队列 public static void main(String[] args) throws Exception { boolean logbin = false; @@ -55,12 +54,14 @@ public class Log { e.printStackTrace(); throw new BusinessException("文件" + file.getName() + " 读取时发生错误"); } + LocalDateTime event_starttime = null; + LocalDateTime event_endtime = null; NewTaglogbuffer newTaglogbuffer = getnewTaglogbuffer(bBuf); newTaglogbuffers.add(newTaglogbuffer); TagMsTime devtime = newTaglogbuffer.getNewHeadTaglogbuffer().getDevtime(); - LocalDateTime time = LocalDateTime.of(devtime.getYear(), devtime.getMonth(), devtime.getDay(), devtime.getHour(), devtime.getMin(), devtime.getSec(), devtime.getMs()); + LocalDateTime time = LocalDateTime.of(devtime.getYear(), devtime.getMonth(), devtime.getDay(), devtime.getHour(), devtime.getMin(), devtime.getSec(), devtime.getMs()*1000*1000); //存在启动时间 - if (event_starttime != LocalDateTime.MIN && event_starttime != null) { + if (event_starttime != LocalDateTime.MIN&& event_starttime!=null) { if (time.compareTo(event_starttime) <= 0) { event_starttime = time; } @@ -68,7 +69,7 @@ public class Log { //不存在启动时间 填入当前时间 event_starttime = time; } - if (event_endtime != LocalDateTime.MIN && event_endtime != null) { + if (event_endtime != LocalDateTime.MIN && event_endtime!=null) { if (time.compareTo(event_endtime) >= 0) { event_endtime = time; } @@ -77,6 +78,7 @@ public class Log { event_endtime = time; } + long sec = 0; for (NewBodyTaglogbuffer sing : newTaglogbuffer.getNewBodyTaglogbuffers()) { switch (sing.getParaCode()) { @@ -95,14 +97,19 @@ public class Log { break; } } + //当事件时长超过1分钟直接排除 + if(sec>60){ + continue; + } newTaglogbuffer.setStart(time); //事件开始时间 newTaglogbuffer.setEnd(time.plusSeconds(sec)); //事件结束时间 - for (TagComtradeCfg sing : tagComtradeCfgs) { - if (sing.getTimeTrigger().compareTo(newTaglogbuffer.getStart()) <= 0 && sing.getTimeEnd().compareTo(newTaglogbuffer.getStart()) >= 0) { - newTaglogbuffer.setPath(sing.getPath()); - break; - } - } + //这里tagComtradeCfgs为空无效 +// for (TagComtradeCfg sing : tagComtradeCfgs) { +// if (sing.getTimeTrigger().compareTo(newTaglogbuffer.getStart()) <= 0 && sing.getTimeEnd().compareTo(newTaglogbuffer.getStart()) >= 0) { +// newTaglogbuffer.setPath(sing.getPath()); +// break; +// } +// } } } catch (BusinessException e) { e.printStackTrace(); @@ -137,11 +144,12 @@ public class Log { throw new BusinessException("文件" + file.getOriginalFilename() + " 读取时发生错误"); } NewTaglogbuffer newTaglogbuffer = getnewTaglogbuffer(bBuf); - newTaglogbuffers.add(newTaglogbuffer); + LocalDateTime event_starttime = null; + LocalDateTime event_endtime = null; TagMsTime devtime = newTaglogbuffer.getNewHeadTaglogbuffer().getDevtime(); - LocalDateTime time = LocalDateTime.of(devtime.getYear(), devtime.getMonth(), devtime.getDay(), devtime.getHour(), devtime.getMin(), devtime.getSec(), devtime.getMs()); + LocalDateTime time = LocalDateTime.of(devtime.getYear(), devtime.getMonth(), devtime.getDay(), devtime.getHour(), devtime.getMin(), devtime.getSec(), devtime.getMs()*1000*1000); //存在启动时间 - if (event_starttime != LocalDateTime.MIN && event_starttime != null) { + if (event_starttime != LocalDateTime.MIN&& event_starttime!=null) { if (time.compareTo(event_starttime) <= 0) { event_starttime = time; } @@ -149,7 +157,7 @@ public class Log { //不存在启动时间 填入当前时间 event_starttime = time; } - if (event_endtime != LocalDateTime.MIN && event_endtime != null) { + if (event_endtime != LocalDateTime.MIN && event_endtime!=null) { if (time.compareTo(event_endtime) >= 0) { event_endtime = time; } @@ -176,14 +184,21 @@ public class Log { break; } } + //当事件时长超过1分钟直接排除 + if(sec>60){ + continue; + } newTaglogbuffer.setStart(time); //事件开始时间 newTaglogbuffer.setEnd(time.plusSeconds(sec)); //事件结束时间 - for (TagComtradeCfg sing : tagComtradeCfgs) { - if (sing.getTimeTrigger().compareTo(newTaglogbuffer.getStart()) <= 0 && sing.getTimeEnd().compareTo(newTaglogbuffer.getStart()) >= 0) { - newTaglogbuffer.setPath(sing.getPath()); - break; - } - } + //这里tagComtradeCfgs为空无效 +// for (TagComtradeCfg sing : tagComtradeCfgs) { +// if (sing.getTimeTrigger().compareTo(newTaglogbuffer.getStart()) <= 0 && sing.getTimeEnd().compareTo(newTaglogbuffer.getStart()) >= 0) { +// newTaglogbuffer.setPath(sing.getPath()); +// break; +// } +// } + newTaglogbuffers.add(newTaglogbuffer); + } } catch (BusinessException e) { e.printStackTrace(); diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewTaglogbuffer.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewTaglogbuffer.java index a9fd7ef..1ab273c 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewTaglogbuffer.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewTaglogbuffer.java @@ -5,6 +5,7 @@ import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Date; import java.util.List; @Data diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagComtradeCfg.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagComtradeCfg.java index fb987d4..158c4e1 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagComtradeCfg.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagComtradeCfg.java @@ -1,11 +1,13 @@ package com.njcn.csharmonic.offline.log.vo; import lombok.Data; + +import java.io.Serializable; import java.time.LocalDateTime; import java.util.ArrayList; @Data -public class TagComtradeCfg { +public class TagComtradeCfg implements Serializable { private int nChannelNum; //通道总个数 private int nAnalogNum; //模拟量通道的个数 WW 2013-05-15 private int nDigitalNum; //数字量通道的个数 WW 2013-05-15 diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfg.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfg.java index 92423e6..21cbe30 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfg.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfg.java @@ -2,8 +2,10 @@ package com.njcn.csharmonic.offline.log.vo; import lombok.Data; +import java.io.Serializable; + @Data -public class TagOneChannleCfg { +public class TagOneChannleCfg implements Serializable { //通道序号 private int nIndex; //通道名称 diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfgDigital.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfgDigital.java index 81a11b6..694bb06 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfgDigital.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfgDigital.java @@ -2,8 +2,10 @@ package com.njcn.csharmonic.offline.log.vo; import lombok.Data; +import java.io.Serializable; + @Data -public class TagOneChannleCfgDigital { +public class TagOneChannleCfgDigital implements Serializable { //通道序号 private int nIndex; //通道名称 diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/AnalyseComtradeCfg.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/AnalyseComtradeCfg.java index 1ade2d4..ae5fc63 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/AnalyseComtradeCfg.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/AnalyseComtradeCfg.java @@ -2,16 +2,22 @@ package com.njcn.csharmonic.offline.mincfg; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.njcn.influx.pojo.po.cs.PqdData; +import com.njcn.csharmonic.offline.log.vo.TagComtradeCfg; +import com.njcn.csharmonic.offline.log.vo.TagOneChannleCfg; +import com.njcn.csharmonic.offline.mincfg.vo.*; import com.njcn.csharmonic.offline.mincfg.vo.RTC_Timer_MS; -import com.njcn.csharmonic.offline.mincfg.vo.tagPQDataCmn; -import com.njcn.csharmonic.offline.mincfg.vo.tagPQDataCmnHh; +import com.njcn.influx.pojo.po.cs.PqdData; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; /** @@ -134,7 +140,7 @@ public class AnalyseComtradeCfg { //电能质量只有电压偏差,上偏差正,下偏差负,判断上偏差是否为0如果为0取下偏差负数,反正取上偏差 hashMapA.put("pq_UDev",AnalyseComtradeCfg.isZero(uuDeviation[0])?(-ulDeviation[0]):uuDeviation[0]); hashMapB.put("pq_UDev",AnalyseComtradeCfg.isZero(uuDeviation[1])?(-ulDeviation[1]):uuDeviation[1]); - hashMapC.put("pq_RmsU",AnalyseComtradeCfg.isZero(uuDeviation[2])?(-ulDeviation[2]):uuDeviation[2]); + hashMapC.put("pq_UDev",AnalyseComtradeCfg.isZero(uuDeviation[2])?(-ulDeviation[2]):uuDeviation[2]); hashMapAB.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[3])?(-ulDeviation[3]):uuDeviation[3]); hashMapBC.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[4])?(-ulDeviation[4]):uuDeviation[4]); hashMapCA.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[5])?(-ulDeviation[5]):uuDeviation[5]); @@ -522,8 +528,8 @@ public class AnalyseComtradeCfg { } } - public static List convertCfgFile(String strFilePath) { //解析cfg录波文件 - List tagComtradeCfgList = new ArrayList<>(); + public static List convertCfgFile(String strFilePath) { //解析cfg录波文件 + List tagComtradeCfgList = new ArrayList<>(); // File folder = new File(strFilePath); // File[] files = folder.listFiles((dir, name) -> name.endsWith(".cfg")); //获取文件夹下所有cfg文件 // Arrays.stream(files).forEach(file -> { @@ -539,8 +545,8 @@ public class AnalyseComtradeCfg { * @Author: clam * @Date: 2024/7/15 */ - public static tagComtradeCfg analyseComtradeCfg(MultipartFile file) { - tagComtradeCfg comtradeCfg = new tagComtradeCfg(); + public static TagComtradeCfg analyseComtradeCfg(MultipartFile file) { + TagComtradeCfg comtradeCfg = new TagComtradeCfg(); String strFilePath = file.getOriginalFilename(); int i = 0; //用于遍历 字符串转换的字段数组 String strFileLine;//临时存放 cfg每行读取的字符串 @@ -551,7 +557,7 @@ public class AnalyseComtradeCfg { InputStream readFile = file.getInputStream(); InputStreamReader isr = new InputStreamReader(readFile, StandardCharsets.UTF_8); BufferedReader sr = new BufferedReader(isr); - comtradeCfg = new tagComtradeCfg();//配置文件总类对象初始化 + comtradeCfg = new TagComtradeCfg();//配置文件总类对象初始化 ratesCfg = new tagRates();//多段采样类对象初始化 long nFreq = 0; //临时存放 采样频率 例:50Hz //第一行不关心仅仅是一些描述类的信息 @@ -562,65 +568,65 @@ public class AnalyseComtradeCfg { for (i = 0; i < strTempArray.length; i++) { switch (i) { case 0: //通道总个数 - comtradeCfg.nChannelNum = Integer.parseInt(strTempArray[i]); + comtradeCfg.setNChannelNum(Integer.parseInt(strTempArray[i])); break; case 1: //模拟量的个数 String str = strTempArray[i].substring(0, strTempArray[i].length() - 1); - comtradeCfg.nAnalogNum = Integer.parseInt(str); + comtradeCfg.setNAnalogNum(Integer.parseInt(str)); break; case 2://开关量的个数 str = strTempArray[i].substring(0, strTempArray[i].length() - 1); - comtradeCfg.nDigitalNum = Integer.parseInt(str); + comtradeCfg.setNDigitalNum(Integer.parseInt(str)); break; } } //从第三行到第ComtradeCfg.nChannelNum+3行是模拟量通道和数字量通道 - List OneChannleCfgList =new ArrayList<>(); - for (i = 0; i < comtradeCfg.nChannelNum; i++) { - tagOneChannleCfg oneChannlecfg = new tagOneChannleCfg(); + ArrayList OneChannleCfgList =new ArrayList<>(); + for (i = 0; i < comtradeCfg.getNChannelNum(); i++) { + TagOneChannleCfg oneChannlecfg = new TagOneChannleCfg(); strFileLine = sr.readLine(); // ③ or ④ or ⑤ strTempArray = strFileLine.split(","); for (int j = 0; j < strTempArray.length; j++) { switch (j) { case 0://通道序号 - oneChannlecfg.nIndex = Integer.parseInt(strTempArray[j]); + oneChannlecfg.setNIndex(Integer.parseInt(strTempArray[j])); break; case 1://通道名称 - oneChannlecfg.szChannleName = strTempArray[j]; + oneChannlecfg.setSzChannleName(strTempArray[j]); break; case 2://监视的通道名称 - oneChannlecfg.szPhasicName = strTempArray[j]; + oneChannlecfg.setSzPhasicName(strTempArray[j]); break; case 3://监视的通道名称 - oneChannlecfg.szMonitoredChannleName = strTempArray[j]; + oneChannlecfg.setSzMonitoredChannleName(strTempArray[j]); break; case 4://通道的单位 - oneChannlecfg.szUnitName = strTempArray[j]; + oneChannlecfg.setSzUnitName(strTempArray[j]); break; case 5://通道的系数 - oneChannlecfg.fCoefficent = Float.parseFloat(strTempArray[j]); + oneChannlecfg.setFCoefficent(Float.parseFloat(strTempArray[j])); break; case 6://通道的偏移量 - oneChannlecfg.fOffset = Float.parseFloat(strTempArray[j]); + oneChannlecfg.setFOffset(Float.parseFloat(strTempArray[j])); break; case 7://起始采样时间的偏移量 - oneChannlecfg.fTimeOffset = Float.parseFloat(strTempArray[j]); + oneChannlecfg.setFTimeOffset( Float.parseFloat(strTempArray[j])); break; case 8://采样值的最小值 - oneChannlecfg.nMin = Integer.parseInt(strTempArray[j]); + oneChannlecfg.setNMin( Integer.parseInt(strTempArray[j])); break; case 9://采样值的最大值 - oneChannlecfg.nMax = Integer.parseInt(strTempArray[j]); + oneChannlecfg.setNMax(Integer.parseInt(strTempArray[j])); break; case 10://一次变比 - oneChannlecfg.fPrimary = Float.parseFloat(strTempArray[j]); + oneChannlecfg.setFPrimary( Float.parseFloat(strTempArray[j])); break; case 11://二次变比 - oneChannlecfg.fSecondary = Float.parseFloat(strTempArray[j]); + oneChannlecfg.setFSecondary(Float.parseFloat(strTempArray[j])); break; case 12://一次值还是二次值标志 - oneChannlecfg.szValueType = strTempArray[j]; + oneChannlecfg.setSzValueType(strTempArray[j]); break; } } @@ -664,21 +670,21 @@ public class AnalyseComtradeCfg { sr.close(); readFile.close(); - return comtradeCfg; + return new TagComtradeCfg(); } //波形起始时间 strFileLine = sr.readLine(); // ⑨ - SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy,HH:mm:ss.SSSSSS"); - comtradeCfg.setTimeTrigger(sdf.parse(strFileLine)); + DateTimeFormatter sdf = DateTimeFormatter.ofPattern("dd/MM/yyyy,HH:mm:ss.SSSSSS"); + comtradeCfg.setTimeTrigger(LocalDateTime.parse(strFileLine, sdf)); strFileLine = sr.readLine(); // ⑩ - comtradeCfg.setTimeStart(sdf.parse(strFileLine)); - comtradeCfg.setTimeEnd(new Date(comtradeCfg.getTimeStart().getTime() + nMSTotal));; + comtradeCfg.setTimeStart(LocalDateTime.parse(strFileLine, sdf)); + comtradeCfg.setTimeEnd(comtradeCfg.getTimeStart().plusSeconds(nMSTotal/1000L));; comtradeCfg.setPath(file.getOriginalFilename()); sr.close(); readFile.close(); - } catch (IOException | ParseException e) { + } catch (IOException e) { System.out.println("Error opening file: " + strFilePath + " " + e.getMessage()); return comtradeCfg; } @@ -686,6 +692,81 @@ public class AnalyseComtradeCfg { return comtradeCfg; } + public static CmnModeCfg convertRecord(String strFile) { + File file = new File(strFile); + if (file.length() == 0) { + System.out.println("文件 " + strFile + " 长度为0字节,程序将跳过本文件的转换"); + } + + long nBufSize = file.length(); + int n1BufLen = PrjRecordInfo.GetSize(); + int n2BufLen = CmnModeCfg.GetSize(); + + PrjRecordInfo prjRecordInfo = new PrjRecordInfo(); + CmnModeCfg cmnModeCfg = new CmnModeCfg(); + if (nBufSize == n1BufLen) { + byte[] bBuf = new byte[0]; + try { + bBuf = Files.readAllBytes(Paths.get(strFile)); + } catch (IOException e) { + throw new RuntimeException(e); + } + prjRecordInfo.SetStructBuf(bBuf, 0); + CmnModeCfg recordInfo = prjRecordInfo.cfg; + } else if (nBufSize == n2BufLen) { + byte[] bBuf = new byte[0]; + try { + bBuf = Files.readAllBytes(Paths.get(strFile)); + } catch (IOException e) { + throw new RuntimeException(e); + } + cmnModeCfg.SetStructBuf(bBuf, 0); + CmnModeCfg recordInfo = cmnModeCfg; + } else { + System.out.println("解析配置参数文件异常"); + } + return cmnModeCfg; + } + + + public static CmnModeCfg convertRecord(InputStream fileStream) { + + PrjRecordInfo prjRecordInfo = new PrjRecordInfo(); + CmnModeCfg cmnModeCfg = new CmnModeCfg(); + try { + int nBufSize = fileStream.available();//计算需要解析的文件总长 + int n1BufLen = PrjRecordInfo.GetSize(); + int n2BufLen = CmnModeCfg.GetSize(); + + + if (nBufSize == n1BufLen) { + byte[] bBuf = new byte[nBufSize]; + + fileStream.read(bBuf, 0, n1BufLen); + + prjRecordInfo.SetStructBuf(bBuf, 0); + cmnModeCfg = prjRecordInfo.cfg; + } else if (nBufSize == n2BufLen) { + byte[] bBuf = new byte[nBufSize]; + + fileStream.read(bBuf, 0, n2BufLen); + + cmnModeCfg.SetStructBuf(bBuf, 0); + } else { + System.out.println("解析配置参数文件异常"); + } + } catch (IOException e) { + throw new RuntimeException(e); + }finally { + try { + fileStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return cmnModeCfg; + } + public static void main(String[] args) throws IOException { // tagComtradeCfg tagComtradeCfg = AnalyseComtradeCfg.analyseComtradeCfg("C:\\Users\\Administrator\\Desktop\\浙江无线\\离线数据上传\\09\\comtrade\\line1_20240704_143908_213.cfg"); // System.out.println(tagComtradeCfg); diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagComtradeCfg.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagComtradeCfg.java deleted file mode 100644 index e7cf184..0000000 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagComtradeCfg.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.njcn.csharmonic.offline.mincfg; - -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; -import java.util.List; - -/** - * Description: - * Date: 2024/7/15 15:40【需求编号】 - * - * @author clam - * @version V1.0.0 - */ -@Data -public class tagComtradeCfg implements Serializable { - - public int nChannelNum; //通道总个数 - public int nAnalogNum; //模拟量通道的个数 WW 2013-05-15 - public int nDigitalNum; //数字量通道的个数 WW 2013-05-15 - public List OneChannleCfg; //模拟量通道记录类链表 - public List OneChannleCfgDig; //数字量通道记录类链表 - public Date TimeTrigger; //暂态触发时间 - public Date TimeStart; //波形起始时间 注:相较于TimeTrigger波形触发时间起始有一段平滑过渡波形时间,约100ms - public Date TimeEnd; //波形结束时间 - public String path;//对应波形cfg文件全路径名称 -} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/AnalyseComtradeCfg1.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/AnalyseComtradeCfg1.java index 1b0852f..7b1a74b 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/AnalyseComtradeCfg1.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/AnalyseComtradeCfg1.java @@ -1,711 +1,709 @@ -package com.njcn.csharmonic.offline.mincfg.vo; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.njcn.csharmonic.offline.mincfg.*; -import com.njcn.influx.pojo.po.cs.PqdData; -import com.njcn.csharmonic.offline.mincfg.vo.RTC_Timer_MS; -import com.njcn.csharmonic.offline.mincfg.vo.tagPQDataCmn; -import com.njcn.csharmonic.offline.mincfg.vo.tagPQDataCmnHh; -import org.springframework.web.multipart.MultipartFile; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.*; - -/** - * Description: - * Date: 2024/7/15 15:42【需求编号】 - * - * @author clam - * @version V1.0.0 - */ -public class AnalyseComtradeCfg1 { - - private static Date minStarttime = new Date(0); - private static Date minEndtime = new Date(0); //分钟数据的时间范围 - - private static Date minHh_starttime = new Date(0); - private static Date minHh_endtime = new Date(0); - - //解析分钟数据和分钟数据下的高频谐波 - public static void processDirectory(String minPath) throws IOException { - HashMap minDataHhHashMap = new HashMap<>(); - HashMap minDataHashMap = new HashMap<>(); - File minDir = new File(minPath); - if (minDir.exists() && minDir.isDirectory() && minDir.listFiles().length != 0) { // 分钟数据文件夹存在且不为空 - File[] dirs = minDir.listFiles(File::isDirectory); // 获取所有子目录 - for (File dir : dirs) { - // 获取文件夹下所有.bin文件 - File[] files = dir.listFiles((dir1, name) -> name.endsWith(".bin")); - - if (files != null) { // 确保files不为null - for (File file : files) { - if (file.getName().toUpperCase().indexOf("HH") >= 0) { // 读取分钟秒下的高频谐波数据 - convertMinHh(file.getAbsolutePath(),minDataHhHashMap); - } else { // 读取分钟数据 - convertMin(file.getAbsolutePath(),minDataHashMap); - } - } - } - } - } - - System.out.println(minDataHhHashMap); - System.out.println(minDataHashMap); - convertMinData(minDataHashMap); - - - } - - private static List convertMinData(HashMap minDataHashMap) { - List result = new ArrayList<>(); - minDataHashMap.forEach((dateTime,data)->{ - - List pqdDataA = convertDataByValueType(data.getMin(), "min",dateTime); - List pqdDataB = convertDataByValueType(data.getMax(), "max",dateTime); - List pqdDataC = convertDataByValueType(data.getAvg(), "avg",dateTime); - List pqdDataT = convertDataByValueType(data.getCp95(), "cp95",dateTime); - result.addAll(pqdDataA); - result.addAll(pqdDataB); - result.addAll(pqdDataC); - result.addAll(pqdDataT); - }); - - return result; - - } - - private static List convertDataByValueType(tagPQDataCmn min, String valueType,Date dateTime) { - - List pqdData = new ArrayList<>(); - - HashMap hashMapA = new HashMap<>(); - hashMapA.put("phaseType","A"); - hashMapA.put("valueType",valueType); - hashMapA.put("time",dateTime.toInstant()); - - HashMap hashMapB = new HashMap<>(); - hashMapB.put("phaseType","B"); - hashMapB.put("valueType",valueType); - hashMapB.put("time",dateTime.toInstant()); - - HashMap hashMapC = new HashMap<>(); - hashMapC.put("phaseType","C"); - hashMapC.put("valueType",valueType); - hashMapC.put("time",dateTime.toInstant()); - - HashMap hashMapM = new HashMap<>(); - hashMapM.put("phaseType","M"); - hashMapM.put("valueType",valueType); - hashMapM.put("time",dateTime.toInstant()); - - - HashMap hashMapAB = new HashMap<>(); - hashMapAB.put("phaseType","AB"); - hashMapAB.put("valueType",valueType); - hashMapAB.put("time",dateTime.toInstant()); - - HashMap hashMapBC = new HashMap<>(); - hashMapBC.put("phaseType","BC"); - hashMapBC.put("valueType",valueType); - hashMapBC.put("time",dateTime.toInstant()); - - HashMap hashMapCA = new HashMap<>(); - hashMapCA.put("phaseType","CA"); - hashMapCA.put("valueType",valueType); - hashMapCA.put("time",dateTime.toInstant()); - - - //RMS电压A B C 电流A B C 线电压AB BC CA - Float[] rms = min.getRms(); - hashMapA.put("pq_RmsU",rms[0]); - hashMapB.put("pq_RmsU",rms[1]); - hashMapC.put("pq_RmsU",rms[2]); - hashMapA.put("pq_RmsU",rms[3]); - hashMapB.put("pq_RmsI",rms[4]); - hashMapC.put("pq_RmsI",rms[5]); - hashMapA.put("pq_RmsLU",rms[6]); - hashMapB.put("pq_RmsLU",rms[7]); - hashMapC.put("pq_RmsLU",rms[8]); - - -// pqdDataA.setpq_RmsU(rms[0]); -// pqdDataB.setpq_RmsU(rms[1]); -// pqdDataC.setpq_RmsU(rms[2]); -// pqdDataA.setpq_RmsI(rms[3]); -// pqdDataB.setpq_RmsI(rms[4]); -// pqdDataC.setpq_RmsI(rms[5]); -// pqdDataA.setpq_RmsLU(rms[6]); -// pqdDataB.setpq_RmsLU(rms[7]); -// pqdDataC.setpq_RmsLU(rms[8]); - //电压上偏差相电压abc,线电压AB BC CA - Float[] uuDeviation = min.getUU_Deviation(); - Float[] ulDeviation = min.getUL_Deviation(); - //电能质量只有电压偏差,上偏差正,下偏差负,判断上偏差是否为0如果为0取下偏差负数,反正取上偏差 - hashMapA.put("pq_UDev", AnalyseComtradeCfg.isZero(uuDeviation[0])?(-ulDeviation[0]):uuDeviation[0]); - hashMapB.put("pq_UDev",AnalyseComtradeCfg.isZero(uuDeviation[1])?(-ulDeviation[1]):uuDeviation[1]); - hashMapC.put("pq_RmsU",AnalyseComtradeCfg.isZero(uuDeviation[2])?(-ulDeviation[2]):uuDeviation[2]); - hashMapAB.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[3])?(-ulDeviation[3]):uuDeviation[3]); - hashMapBC.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[4])?(-ulDeviation[4]):uuDeviation[4]); - hashMapCA.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[5])?(-ulDeviation[5]):uuDeviation[5]); - -// pqdDataA.setpq_RmsU(AnalyseComtradeCfg.isZero(uuDeviation[0])?(-ulDeviation[0]):uuDeviation[0]); -// pqdDataB.setpq_RmsU(AnalyseComtradeCfg.isZero(uuDeviation[1])?(-ulDeviation[1]):uuDeviation[1]); -// pqdDataC.setpq_RmsU(AnalyseComtradeCfg.isZero(uuDeviation[2])?(-ulDeviation[2]):uuDeviation[2]); -// pqdDataA.setpq_RmsI(AnalyseComtradeCfg.isZero(uuDeviation[3])?(-ulDeviation[3]):uuDeviation[3]); -// pqdDataB.setpq_RmsI(AnalyseComtradeCfg.isZero(uuDeviation[4])?(-ulDeviation[4]):uuDeviation[4]); -// pqdDataC.setpq_RmsI(AnalyseComtradeCfg.isZero(uuDeviation[5])?(-ulDeviation[5]):uuDeviation[5]); - ///频率偏差 ,频率存M相 - Float[] fDeviation = min.getF_Deviation(); - - hashMapM.put("pq_FreqDev",fDeviation[0]); - hashMapM.put("pq_Freq",fDeviation[1]); - -/* pqdDataT.setpq_FreqDev(fDeviation[0]); - pqdDataT.setpq_Freq(fDeviation[1]);*/ - - //电压电流零、正、负序、不平衡度32 第一个[]电压,电流;第二个[]零、正、负序、不平衡度 - Float[][] uiSeq = min.getUI_Seq(); - - hashMapM.put("pq_SeqZeroU",uiSeq[0][0]); - hashMapM.put("pq_SeqNegU",uiSeq[0][1]); - hashMapM.put("pq_SeqPosU",uiSeq[0][2]); - hashMapM.put("pq_UnbalNegU",uiSeq[0][3]); - - hashMapM.put("pq_SeqZeroI",uiSeq[1][0]); - hashMapM.put("pq_SeqNegI",uiSeq[1][1]); - hashMapM.put("pq_SeqPosI",uiSeq[1][2]); - hashMapM.put("pq_UnbalNegI",uiSeq[1][3]); - -// pqdDataT.setpq_SeqZeroU(uiSeq[0][0]); -// pqdDataT.setpq_SeqNegU(uiSeq[0][1]); -// pqdDataT.setpq_SeqPosU(uiSeq[0][2]); -// pqdDataT.setpq_UnbalNegU(uiSeq[0][3]); - -// pqdDataT.setpq_SeqZeroI(uiSeq[1][0]); -// pqdDataT.setpq_SeqNegI(uiSeq[1][1]); -// pqdDataT.setpq_SeqPosI(uiSeq[1][2]); -// pqdDataT.setpq_UnbalNegI(uiSeq[1][3]); - //电压存含有率,电流存幅值 - //整次谐波 电压A B C N 电流A B C N 1200 - //幅值 - Float[][] fuHarm = min.getFuHarm(); - //谐波相角-送一半数据 600 - Float[][] fuHarmPhase = min.getFuHarmPhase(); - - - - //含有率 - Float[][] harmContain = min.getHarm_Contain(); - //谐波功率 - Float[][][] harmPower = min.getHarm_Power(); - for (int i = 0; i < 49; i++) { - //电压含有率 - hashMapA.put("pq_HarmU_"+(i+2),harmContain[0][i]); - hashMapB.put("pq_HarmU_"+(i+2),harmContain[1][i]); - hashMapC.put("pq_HarmU_"+(i+2),harmContain[2][i]); - - //谐波相角 - hashMapA.put("pq_HarmUAng_"+(i+2),fuHarmPhase[0][i]); - hashMapB.put("pq_HarmUAng_"+(i+2),fuHarmPhase[1][i]); - hashMapC.put("pq_HarmUAng_"+(i+2),fuHarmPhase[2][i]); - - hashMapA.put("pq_HarmIAng_"+(i+2),fuHarmPhase[3][i]); - hashMapB.put("pq_HarmIAng_"+(i+2),fuHarmPhase[4][i]); - hashMapC.put("pq_HarmIAng_"+(i+2),fuHarmPhase[5][i]); - - //电流幅值 - hashMapA.put("pq_HarmI_"+(i+2),fuHarm[3][i]); - hashMapB.put("pq_HarmI_"+(i+2),fuHarm[4][i]); - hashMapC.put("pq_HarmI_"+(i+2),fuHarm[5][i]); - - - //谐波功率 - hashMapA.put("pq_HarmP_"+(i+2),harmPower[0][i][0]); - hashMapA.put("pq_HarmQ_"+(i+2),harmPower[0][i][1]); - hashMapA.put("pq_HarmS_"+(i+2),harmPower[0][i][2]); - - hashMapB.put("pq_HarmP_"+(i+2),harmPower[1][i][0]); - hashMapB.put("pq_HarmQ_"+(i+2),harmPower[1][i][1]); - hashMapB.put("pq_HarmS_"+(i+2),harmPower[1][i][2]); - - hashMapC.put("pq_HarmP_"+(i+2),harmPower[2][i][0]); - hashMapC.put("pq_HarmQ_"+(i+2),harmPower[2][i][1]); - hashMapC.put("pq_HarmS_"+(i+2),harmPower[2][i][2]); - //M相目前没有 -// hashMapT.put("pq_HarmP_"+(i+2),harmPower[3][i][0]); -// hashMapT.put("pq_HarmQ_"+(i+2),harmPower[3][i][1]); -// hashMapT.put("pq_HarmS_"+(i+2),harmPower[3][i][2]); - } - //间谐波-送一半数据 - Float[][] inHarm = min.getInHarm(); - - - for (int i = 0; i < 50; i++) { - //间谐波幅值 - hashMapA.put("pq_InHarmIAmp_"+(i+1),inHarm[3][i]); - hashMapB.put("pq_InHarmIAmp_"+(i+1),inHarm[4][i]); - hashMapC.put("pq_InHarmIAmp_"+(i+1),inHarm[5][i]); - - - - } - //a,b,c,total 总功率(P.Q.S) - Float[][] totalPower = min.getTotal_Power(); - hashMapA.put("pq_P",totalPower[0][0]); - hashMapB.put("pq_P",totalPower[1][0]); - hashMapC.put("pq_P",totalPower[2][0]); - - hashMapA.put("pq_Q",totalPower[0][1]); - hashMapB.put("pq_Q",totalPower[1][1]); - hashMapC.put("pq_Q",totalPower[2][1]); - - hashMapA.put("pq_S",totalPower[0][2]); - hashMapB.put("pq_S",totalPower[1][2]); - hashMapC.put("pq_S",totalPower[2][2]); - - hashMapM.put("pq_TotHarmP",totalPower[3][0]); - hashMapM.put("pq_TotHarmQ",totalPower[3][1]); - hashMapM.put("pq_TotHarmS",totalPower[3][2]); - - /*todo 谐波畸变率,电压波动,电压闪变,电压长闪变会根据监测点接线方式是星型存A,B,C相,角型或者V型存AB,BC,CA相,目前全存在A,B,C相*/ - //谐波畸变率 - Float[] harmAberrance = min.getHarm_Aberrance(); - hashMapA.put("pq_ThdU",harmAberrance[0]); - hashMapB.put("pq_ThdU",harmAberrance[1]); - hashMapC.put("pq_ThdU",harmAberrance[2]); - - hashMapA.put("pq_ThdI",harmAberrance[3]); - hashMapB.put("pq_ThdI",harmAberrance[4]); - hashMapC.put("pq_ThdI",harmAberrance[5]); - - //视在功率因数 - Float[] cosPf = min.getCos_PF(); - hashMapA.put("pq_PF",cosPf[0]); - hashMapB.put("pq_PF",cosPf[1]); - hashMapC.put("pq_PF",cosPf[2]); - hashMapM.put("pq_TotPF",cosPf[3]); - //位移功率因数= - Float[] cosDf = min.getCos_DF(); - hashMapA.put("pq_DF",cosDf[0]); - hashMapB.put("pq_DF",cosDf[1]); - hashMapC.put("pq_DF",cosDf[2]); - hashMapM.put("pq_TotDF",cosDf[3]); - //电压波动 - Float[] uFluctuation = min.getU_Fluctuation(); - hashMapA.put("pq_Fluct",uFluctuation[0]); - hashMapB.put("pq_Fluct",uFluctuation[1]); - hashMapC.put("pq_Fluct",uFluctuation[2]); - //电压闪变 - Float[] uFlicker = min.getU_Flicker(); - hashMapA.put("pq_Plt",uFlicker[0]); - hashMapB.put("pq_Plt",uFlicker[1]); - hashMapC.put("pq_Plt",uFlicker[2]); - //电压长闪变 - Float[] ulFlicker = min.getUL_Flicker(); - hashMapA.put("pq_Plt",ulFlicker[0]); - hashMapB.put("pq_Plt",ulFlicker[1]); - hashMapC.put("pq_Plt",ulFlicker[2]); - - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JavaTimeModule()); - PqdData pqdDataA = mapper.convertValue(hashMapA, PqdData.class); - PqdData pqdDataB = mapper.convertValue(hashMapB, PqdData.class); - PqdData pqdDataC = mapper.convertValue(hashMapC, PqdData.class); - PqdData pqdDataM = mapper.convertValue(hashMapM, PqdData.class); - PqdData pqdDataAB = mapper.convertValue(hashMapAB, PqdData.class); - PqdData pqdDataBC = mapper.convertValue(hashMapBC, PqdData.class); - PqdData pqdDataCA = mapper.convertValue(hashMapCA, PqdData.class); - - - - pqdData.add(pqdDataA); - pqdData.add(pqdDataB); - pqdData.add(pqdDataC); - pqdData.add(pqdDataM); - pqdData.add(pqdDataAB); - pqdData.add(pqdDataBC); - pqdData.add(pqdDataCA); - - return pqdData; - - - } - - public static boolean isZero(float value) { - return Math.abs(value) < 1e-6; // 判断value是否在精度范围内近似等于0 - } - - // 实现转换高频谐波数据的逻辑 - private static HashMap convertMinHh(String strFile,HashMap minDataHhDic) throws IOException { - - - // 实现转换高频谐波数据的逻辑 - System.out.println("Converting HH data from: " + strFile); - FileInputStream binFile = null; - try{ - try { - binFile = new FileInputStream(strFile); - } catch (FileNotFoundException e) { - binFile.close(); - System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); - } - - long nBufSize = binFile.available(); //计算需要解析的文件总长 - int n1BufLen = tagPQDataCmnHh.GetSize(); //计算单个统计结构大小 - int nSecNum = (int)(nBufSize / n1BufLen); //确认共多少事件数据结构 - - int nStep = 0; //读取偏移量 - for (int i = 0; i < nSecNum; i++) { - byte[] bBuf = new byte[n1BufLen]; //单个统计结构 - int nReadLen = 0; - try { - //java流不需要跳 -// binFile.skip(nStep); - nReadLen = binFile.read(bBuf, 0, bBuf.length); - } catch (IOException e) { - System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); - binFile.close(); - } - - tagPQDataCmnHh tagPqData = new tagPQDataCmnHh(); - tagPqData.SetStructBuf(bBuf, 0); - nStep += n1BufLen; - - RTC_Timer_MS Devtime = tagPqData.time; - Date time = new Date(Devtime.year - 1900, Devtime.month - 1, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second); - if (!minHh_starttime.equals(new Date(0))) { //存在启动时间 - if (time.compareTo(minHh_starttime) <= 0) { - minHh_starttime = time; - } - } else { //不存在启动时间 填入当前时间 - minHh_starttime = time; - } - if (!minHh_endtime.equals(new Date(0))) { - if (time.compareTo(minHh_endtime) >= 0) { - minHh_endtime = time; - } - } else { //不存在结束时间 填入当前时间 - minHh_endtime = time; - } - - if (strFile.toUpperCase().indexOf("AVG") >= 0) { - if (minDataHhDic.containsKey(time)) { - minDataHhDic.get(time).avg = tagPqData; - } else { - MinDataHh minData = new MinDataHh(); - minData.avg = tagPqData; - minDataHhDic.put(time, minData); - } - } else if (strFile.toUpperCase().indexOf("CP95") >= 0) { - if (minDataHhDic.containsKey(time)) { - minDataHhDic.get(time).cp95 = tagPqData; - } else { - MinDataHh minData = new MinDataHh(); - minData.cp95 = tagPqData; - minDataHhDic.put(time, minData); - } - } else if (strFile.toUpperCase().indexOf("MAX") >= 0) { - if (minDataHhDic.containsKey(time)) { - minDataHhDic.get(time).max = tagPqData; - } else { - MinDataHh minData = new MinDataHh(); - minData.max = tagPqData; - minDataHhDic.put(time, minData); - } - } else if (strFile.toUpperCase().indexOf("MIN") >= 0) { - if (minDataHhDic.containsKey(time)) { - minDataHhDic.get(time).min = tagPqData; - } else { - MinDataHh minData = new MinDataHh(); - minData.min = tagPqData; - minDataHhDic.put(time, minData); - } - } - } - } catch (FileNotFoundException e) { - binFile.close(); - System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); - } - - return minDataHhDic; - } - // 实现转换分钟数据的逻辑 - private static void convertMin(String strFile, HashMap minDataDic) { - - FileInputStream binFile = null; - - try { - - // 实现转换分钟数据的逻辑 - System.out.println("Converting minute data from: " + strFile); - - binFile = new FileInputStream(strFile); - - - long nBufSize = 0; - - nBufSize = binFile.available(); //计算需要解析的文件总长 - - - int n1BufLen = tagPQDataCmn.GetSize(); //计算单个统计结构大小 - int nMinNum = (int) (nBufSize / n1BufLen); //确认共多少分钟数据结构 - - int nStep = 0; //读取偏移量 - for (int i = 0; i < nMinNum; i++) { - byte[] bBuf = new byte[n1BufLen]; //单个统计结构 - int nReadLen = 0; - try { - //java流不需要跳 -// binFile.skip(nStep); - nReadLen = binFile.read(bBuf, 0, bBuf.length); - } catch (IOException e) { - System.out.println("文件读取时发生错误,代码为" + e.getClass().getName()); - binFile.close(); - } - - tagPQDataCmn tagPqData = new tagPQDataCmn(); - tagPqData.SetStructBuf(bBuf, 0); - nStep += n1BufLen; - - RTC_Timer_MS Devtime = tagPqData.time; - Date time = new Date(Devtime.year - 1900, Devtime.month - 1, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second); - if (!minStarttime.equals(new Date(0))) { //存在启动时间 - if (time.compareTo(minStarttime) <= 0) { - minStarttime = time; - } - } else { //不存在启动时间 填入当前时间 - minStarttime = time; - } - if (!minEndtime.equals(new Date(0))) { - if (time.compareTo(minEndtime) >= 0) { - minEndtime = time; - } - } else { //不存在结束时间 填入当前时间 - minEndtime = time; - } - - if (strFile.toUpperCase().indexOf("AVG") >= 0) { - if (minDataDic.containsKey(time)) { - minDataDic.get(time).avg = tagPqData; - } else { - MinData minData = new MinData(); - minData.avg = tagPqData; - minDataDic.put(time, minData); - } - } else if (strFile.toUpperCase().indexOf("CP95") >= 0) { - if (minDataDic.containsKey(time)) { - minDataDic.get(time).cp95 = tagPqData; - } else { - MinData minData = new MinData(); - minData.cp95 = tagPqData; - minDataDic.put(time, minData); - } - } else if (strFile.toUpperCase().indexOf("MAX") >= 0) { - if (minDataDic.containsKey(time)) { - minDataDic.get(time).max = tagPqData; - } else { - MinData minData = new MinData(); - minData.max = tagPqData; - minDataDic.put(time, minData); - } - } else if (strFile.toUpperCase().indexOf("MIN") >= 0) { - if (minDataDic.containsKey(time)) { - minDataDic.get(time).min = tagPqData; - } else { - MinData minData = new MinData(); - minData.min = tagPqData; - minDataDic.put(time, minData); - } - } - } - } catch (IOException e) { - System.out.println("处理文件时发生错误: " + strFile); - } finally { - if (binFile != null) { - try { - binFile.close(); - } catch (IOException e) { - System.out.println("关闭文件时发生错误: " + strFile); - } - } - } - - } - public static List convertCfgFile(String strFilePath) { //解析cfg录波文件 - List tagComtradeCfgList = new ArrayList<>(); - File folder = new File(strFilePath); - File[] files = folder.listFiles((dir, name) -> name.endsWith(".cfg")); //获取文件夹下所有cfg文件 - Arrays.stream(files).forEach(file -> { - tagComtradeCfg tagComtradeCfg = analyseComtradeCfg(file.getAbsolutePath()); - tagComtradeCfgList.add(tagComtradeCfg); - }); - return tagComtradeCfgList; - } - /** - * @Description: analyseComtradeCfg 读取、分析cfg录波文件!!! - * @Param: - * @return: com.njcn.user.utils.test.tagComtradeCfg - * @Author: clam - * @Date: 2024/7/15 - */ - public static tagComtradeCfg analyseComtradeCfg(String strFilePath) { - tagComtradeCfg comtradeCfg = new tagComtradeCfg(); - - if (strFilePath.equals("")) { - return comtradeCfg; - } - - int i = 0; //用于遍历 字符串转换的字段数组 - String strFileLine;//临时存放 cfg每行读取的字符串 - String[] strTempArray; //临时存放 字符串转换的字段数组 - - tagRates ratesCfg = new tagRates(); - try { - FileInputStream readFile = new FileInputStream(strFilePath); - InputStreamReader isr = new InputStreamReader(readFile, StandardCharsets.UTF_8); - BufferedReader sr = new BufferedReader(isr); - comtradeCfg = new tagComtradeCfg();//配置文件总类对象初始化 - ratesCfg = new tagRates();//多段采样类对象初始化 - long nFreq = 0; //临时存放 采样频率 例:50Hz - //第一行不关心仅仅是一些描述类的信息 - strFileLine = sr.readLine(); // ① - //第二行需要关心第二个:模拟通道编号(模拟量的个数)和第三个:状态通道参数(开关量的个数) - strFileLine = sr.readLine(); // ② - strTempArray = strFileLine.split(","); - for (i = 0; i < strTempArray.length; i++) { - switch (i) { - case 0: //通道总个数 - comtradeCfg.nChannelNum = Integer.parseInt(strTempArray[i]); - break; - case 1: //模拟量的个数 - String str = strTempArray[i].substring(0, strTempArray[i].length() - 1); - comtradeCfg.nAnalogNum = Integer.parseInt(str); - break; - case 2://开关量的个数 - str = strTempArray[i].substring(0, strTempArray[i].length() - 1); - comtradeCfg.nDigitalNum = Integer.parseInt(str); - break; - } - } - //从第三行到第ComtradeCfg.nChannelNum+3行是模拟量通道和数字量通道 - List OneChannleCfgList =new ArrayList<>(); - for (i = 0; i < comtradeCfg.nChannelNum; i++) { - tagOneChannleCfg oneChannlecfg = new tagOneChannleCfg(); - - strFileLine = sr.readLine(); // ③ or ④ or ⑤ - strTempArray = strFileLine.split(","); - for (int j = 0; j < strTempArray.length; j++) { - switch (j) { - case 0://通道序号 - oneChannlecfg.nIndex = Integer.parseInt(strTempArray[j]); - break; - case 1://通道名称 - oneChannlecfg.szChannleName = strTempArray[j]; - break; - case 2://监视的通道名称 - oneChannlecfg.szPhasicName = strTempArray[j]; - break; - case 3://监视的通道名称 - oneChannlecfg.szMonitoredChannleName = strTempArray[j]; - break; - case 4://通道的单位 - oneChannlecfg.szUnitName = strTempArray[j]; - break; - case 5://通道的系数 - oneChannlecfg.fCoefficent = Float.parseFloat(strTempArray[j]); - break; - case 6://通道的偏移量 - oneChannlecfg.fOffset = Float.parseFloat(strTempArray[j]); - break; - case 7://起始采样时间的偏移量 - oneChannlecfg.fTimeOffset = Float.parseFloat(strTempArray[j]); - break; - case 8://采样值的最小值 - oneChannlecfg.nMin = Integer.parseInt(strTempArray[j]); - break; - case 9://采样值的最大值 - oneChannlecfg.nMax = Integer.parseInt(strTempArray[j]); - break; - case 10://一次变比 - oneChannlecfg.fPrimary = Float.parseFloat(strTempArray[j]); - break; - case 11://二次变比 - oneChannlecfg.fSecondary = Float.parseFloat(strTempArray[j]); - break; - case 12://一次值还是二次值标志 - oneChannlecfg.szValueType = strTempArray[j]; - break; - } - } - OneChannleCfgList.add(oneChannlecfg); - - } - comtradeCfg.setOneChannleCfg(OneChannleCfgList); - //采样频率:在交变电流电路中一秒钟内交流电所允许而必须变化的周期数,即:在单位时间内振动的次数 - strFileLine = sr.readLine(); // ⑥ - float fFreq = Float.parseFloat(strFileLine); - nFreq = (long) fFreq; - - strFileLine = sr.readLine(); // ⑦ - int nRates = Integer.parseInt(strFileLine); - ratesCfg.nRates = nRates; - - long nOffset = 0;//上一段单周波采样点数 - long nMSTotal = 0;//录波总毫秒数 - for (i = 0; i < nRates; i++) { - strFileLine = sr.readLine(); //⑧例:3200,22400 ——> 理解为:1到22400这22400个数据的采样率是3200 - strTempArray = strFileLine.split(","); - - tagOneRate oneRate = new tagOneRate();//1段采样类对象 - ratesCfg.getOneRate().add(oneRate); - for (int j = 0; j < strTempArray.length; j++) { - switch (j) { - case 0://采样率:1秒钟内的采样点数 - oneRate.nOneSample = (long) (Float.parseFloat(strTempArray[j]) / nFreq); - break; - case 1: //总采样点数 - oneRate.nSampleNum = (long) (Float.parseFloat(strTempArray[j]) - nOffset); - nOffset += oneRate.nSampleNum; - break; - } - nMSTotal += oneRate.nSampleNum / oneRate.nOneSample; - } - } - - nMSTotal *= 20; //录波总毫秒数 注:一个周波20ms,所以此处要乘以20 - if (nMSTotal > 60000) {//如果事件长度超过1分钟,则结束处理,不调用录波高级算法qvvr_fun - - sr.close(); - readFile.close(); - return comtradeCfg; - } - //波形起始时间 - strFileLine = sr.readLine(); // ⑨ - SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy,HH:mm:ss.SSSSSS"); - comtradeCfg.setTimeTrigger(sdf.parse(strFileLine)); - - strFileLine = sr.readLine(); // ⑩ - comtradeCfg.setTimeStart(sdf.parse(strFileLine)); - comtradeCfg.setTimeEnd(new Date(comtradeCfg.getTimeStart().getTime() + nMSTotal));; - comtradeCfg.setPath(new File(strFilePath).getName()); - - sr.close(); - readFile.close(); - } catch (IOException | ParseException e) { - System.out.println("Error opening file: " + strFilePath + " " + e.getMessage()); - return comtradeCfg; - } - - return comtradeCfg; - } - - public static void main(String[] args) throws IOException { - tagComtradeCfg tagComtradeCfg = AnalyseComtradeCfg1.analyseComtradeCfg("C:\\Users\\Administrator\\Desktop\\浙江无线\\离线数据上传\\09\\comtrade\\line1_20240704_143908_213.cfg"); - System.out.println(tagComtradeCfg); - AnalyseComtradeCfg1.processDirectory("C:\\Users\\Administrator\\Desktop\\浙江无线\\离线数据上传\\09\\min"); - PqdData pqdData = new PqdData(); - } -} +//package com.njcn.csharmonic.offline.mincfg.vo; +// +//import com.fasterxml.jackson.databind.ObjectMapper; +//import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +//import com.njcn.csharmonic.offline.log.vo.TagComtradeCfg; +//import com.njcn.csharmonic.offline.mincfg.*; +//import com.njcn.influx.pojo.po.cs.PqdData; +// +//import java.io.*; +//import java.nio.charset.StandardCharsets; +//import java.text.ParseException; +//import java.text.SimpleDateFormat; +//import java.util.*; +// +///** +// * Description: +// * Date: 2024/7/15 15:42【需求编号】 +// * +// * @author clam +// * @version V1.0.0 +// */ +//public class AnalyseComtradeCfg1 { +// +// private static Date minStarttime = new Date(0); +// private static Date minEndtime = new Date(0); //分钟数据的时间范围 +// +// private static Date minHh_starttime = new Date(0); +// private static Date minHh_endtime = new Date(0); +// +// //解析分钟数据和分钟数据下的高频谐波 +// public static void processDirectory(String minPath) throws IOException { +// HashMap minDataHhHashMap = new HashMap<>(); +// HashMap minDataHashMap = new HashMap<>(); +// File minDir = new File(minPath); +// if (minDir.exists() && minDir.isDirectory() && minDir.listFiles().length != 0) { // 分钟数据文件夹存在且不为空 +// File[] dirs = minDir.listFiles(File::isDirectory); // 获取所有子目录 +// for (File dir : dirs) { +// // 获取文件夹下所有.bin文件 +// File[] files = dir.listFiles((dir1, name) -> name.endsWith(".bin")); +// +// if (files != null) { // 确保files不为null +// for (File file : files) { +// if (file.getName().toUpperCase().indexOf("HH") >= 0) { // 读取分钟秒下的高频谐波数据 +// convertMinHh(file.getAbsolutePath(),minDataHhHashMap); +// } else { // 读取分钟数据 +// convertMin(file.getAbsolutePath(),minDataHashMap); +// } +// } +// } +// } +// } +// +// System.out.println(minDataHhHashMap); +// System.out.println(minDataHashMap); +// convertMinData(minDataHashMap); +// +// +// } +// +// private static List convertMinData(HashMap minDataHashMap) { +// List result = new ArrayList<>(); +// minDataHashMap.forEach((dateTime,data)->{ +// +// List pqdDataA = convertDataByValueType(data.getMin(), "min",dateTime); +// List pqdDataB = convertDataByValueType(data.getMax(), "max",dateTime); +// List pqdDataC = convertDataByValueType(data.getAvg(), "avg",dateTime); +// List pqdDataT = convertDataByValueType(data.getCp95(), "cp95",dateTime); +// result.addAll(pqdDataA); +// result.addAll(pqdDataB); +// result.addAll(pqdDataC); +// result.addAll(pqdDataT); +// }); +// +// return result; +// +// } +// +// private static List convertDataByValueType(tagPQDataCmn min, String valueType,Date dateTime) { +// +// List pqdData = new ArrayList<>(); +// +// HashMap hashMapA = new HashMap<>(); +// hashMapA.put("phaseType","A"); +// hashMapA.put("valueType",valueType); +// hashMapA.put("time",dateTime.toInstant()); +// +// HashMap hashMapB = new HashMap<>(); +// hashMapB.put("phaseType","B"); +// hashMapB.put("valueType",valueType); +// hashMapB.put("time",dateTime.toInstant()); +// +// HashMap hashMapC = new HashMap<>(); +// hashMapC.put("phaseType","C"); +// hashMapC.put("valueType",valueType); +// hashMapC.put("time",dateTime.toInstant()); +// +// HashMap hashMapM = new HashMap<>(); +// hashMapM.put("phaseType","M"); +// hashMapM.put("valueType",valueType); +// hashMapM.put("time",dateTime.toInstant()); +// +// +// HashMap hashMapAB = new HashMap<>(); +// hashMapAB.put("phaseType","AB"); +// hashMapAB.put("valueType",valueType); +// hashMapAB.put("time",dateTime.toInstant()); +// +// HashMap hashMapBC = new HashMap<>(); +// hashMapBC.put("phaseType","BC"); +// hashMapBC.put("valueType",valueType); +// hashMapBC.put("time",dateTime.toInstant()); +// +// HashMap hashMapCA = new HashMap<>(); +// hashMapCA.put("phaseType","CA"); +// hashMapCA.put("valueType",valueType); +// hashMapCA.put("time",dateTime.toInstant()); +// +// +// //RMS电压A B C 电流A B C 线电压AB BC CA +// Float[] rms = min.getRms(); +// hashMapA.put("pq_RmsU",rms[0]); +// hashMapB.put("pq_RmsU",rms[1]); +// hashMapC.put("pq_RmsU",rms[2]); +// hashMapA.put("pq_RmsU",rms[3]); +// hashMapB.put("pq_RmsI",rms[4]); +// hashMapC.put("pq_RmsI",rms[5]); +// hashMapA.put("pq_RmsLU",rms[6]); +// hashMapB.put("pq_RmsLU",rms[7]); +// hashMapC.put("pq_RmsLU",rms[8]); +// +// +//// pqdDataA.setpq_RmsU(rms[0]); +//// pqdDataB.setpq_RmsU(rms[1]); +//// pqdDataC.setpq_RmsU(rms[2]); +//// pqdDataA.setpq_RmsI(rms[3]); +//// pqdDataB.setpq_RmsI(rms[4]); +//// pqdDataC.setpq_RmsI(rms[5]); +//// pqdDataA.setpq_RmsLU(rms[6]); +//// pqdDataB.setpq_RmsLU(rms[7]); +//// pqdDataC.setpq_RmsLU(rms[8]); +// //电压上偏差相电压abc,线电压AB BC CA +// Float[] uuDeviation = min.getUU_Deviation(); +// Float[] ulDeviation = min.getUL_Deviation(); +// //电能质量只有电压偏差,上偏差正,下偏差负,判断上偏差是否为0如果为0取下偏差负数,反正取上偏差 +// hashMapA.put("pq_UDev", AnalyseComtradeCfg.isZero(uuDeviation[0])?(-ulDeviation[0]):uuDeviation[0]); +// hashMapB.put("pq_UDev",AnalyseComtradeCfg.isZero(uuDeviation[1])?(-ulDeviation[1]):uuDeviation[1]); +// hashMapC.put("pq_RmsU",AnalyseComtradeCfg.isZero(uuDeviation[2])?(-ulDeviation[2]):uuDeviation[2]); +// hashMapAB.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[3])?(-ulDeviation[3]):uuDeviation[3]); +// hashMapBC.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[4])?(-ulDeviation[4]):uuDeviation[4]); +// hashMapCA.put("pq_LUDev",AnalyseComtradeCfg.isZero(uuDeviation[5])?(-ulDeviation[5]):uuDeviation[5]); +// +//// pqdDataA.setpq_RmsU(AnalyseComtradeCfg.isZero(uuDeviation[0])?(-ulDeviation[0]):uuDeviation[0]); +//// pqdDataB.setpq_RmsU(AnalyseComtradeCfg.isZero(uuDeviation[1])?(-ulDeviation[1]):uuDeviation[1]); +//// pqdDataC.setpq_RmsU(AnalyseComtradeCfg.isZero(uuDeviation[2])?(-ulDeviation[2]):uuDeviation[2]); +//// pqdDataA.setpq_RmsI(AnalyseComtradeCfg.isZero(uuDeviation[3])?(-ulDeviation[3]):uuDeviation[3]); +//// pqdDataB.setpq_RmsI(AnalyseComtradeCfg.isZero(uuDeviation[4])?(-ulDeviation[4]):uuDeviation[4]); +//// pqdDataC.setpq_RmsI(AnalyseComtradeCfg.isZero(uuDeviation[5])?(-ulDeviation[5]):uuDeviation[5]); +// ///频率偏差 ,频率存M相 +// Float[] fDeviation = min.getF_Deviation(); +// +// hashMapM.put("pq_FreqDev",fDeviation[0]); +// hashMapM.put("pq_Freq",fDeviation[1]); +// +///* pqdDataT.setpq_FreqDev(fDeviation[0]); +// pqdDataT.setpq_Freq(fDeviation[1]);*/ +// +// //电压电流零、正、负序、不平衡度32 第一个[]电压,电流;第二个[]零、正、负序、不平衡度 +// Float[][] uiSeq = min.getUI_Seq(); +// +// hashMapM.put("pq_SeqZeroU",uiSeq[0][0]); +// hashMapM.put("pq_SeqNegU",uiSeq[0][1]); +// hashMapM.put("pq_SeqPosU",uiSeq[0][2]); +// hashMapM.put("pq_UnbalNegU",uiSeq[0][3]); +// +// hashMapM.put("pq_SeqZeroI",uiSeq[1][0]); +// hashMapM.put("pq_SeqNegI",uiSeq[1][1]); +// hashMapM.put("pq_SeqPosI",uiSeq[1][2]); +// hashMapM.put("pq_UnbalNegI",uiSeq[1][3]); +// +//// pqdDataT.setpq_SeqZeroU(uiSeq[0][0]); +//// pqdDataT.setpq_SeqNegU(uiSeq[0][1]); +//// pqdDataT.setpq_SeqPosU(uiSeq[0][2]); +//// pqdDataT.setpq_UnbalNegU(uiSeq[0][3]); +// +//// pqdDataT.setpq_SeqZeroI(uiSeq[1][0]); +//// pqdDataT.setpq_SeqNegI(uiSeq[1][1]); +//// pqdDataT.setpq_SeqPosI(uiSeq[1][2]); +//// pqdDataT.setpq_UnbalNegI(uiSeq[1][3]); +// //电压存含有率,电流存幅值 +// //整次谐波 电压A B C N 电流A B C N 1200 +// //幅值 +// Float[][] fuHarm = min.getFuHarm(); +// //谐波相角-送一半数据 600 +// Float[][] fuHarmPhase = min.getFuHarmPhase(); +// +// +// +// //含有率 +// Float[][] harmContain = min.getHarm_Contain(); +// //谐波功率 +// Float[][][] harmPower = min.getHarm_Power(); +// for (int i = 0; i < 49; i++) { +// //电压含有率 +// hashMapA.put("pq_HarmU_"+(i+2),harmContain[0][i]); +// hashMapB.put("pq_HarmU_"+(i+2),harmContain[1][i]); +// hashMapC.put("pq_HarmU_"+(i+2),harmContain[2][i]); +// +// //谐波相角 +// hashMapA.put("pq_HarmUAng_"+(i+2),fuHarmPhase[0][i]); +// hashMapB.put("pq_HarmUAng_"+(i+2),fuHarmPhase[1][i]); +// hashMapC.put("pq_HarmUAng_"+(i+2),fuHarmPhase[2][i]); +// +// hashMapA.put("pq_HarmIAng_"+(i+2),fuHarmPhase[3][i]); +// hashMapB.put("pq_HarmIAng_"+(i+2),fuHarmPhase[4][i]); +// hashMapC.put("pq_HarmIAng_"+(i+2),fuHarmPhase[5][i]); +// +// //电流幅值 +// hashMapA.put("pq_HarmI_"+(i+2),fuHarm[3][i]); +// hashMapB.put("pq_HarmI_"+(i+2),fuHarm[4][i]); +// hashMapC.put("pq_HarmI_"+(i+2),fuHarm[5][i]); +// +// +// //谐波功率 +// hashMapA.put("pq_HarmP_"+(i+2),harmPower[0][i][0]); +// hashMapA.put("pq_HarmQ_"+(i+2),harmPower[0][i][1]); +// hashMapA.put("pq_HarmS_"+(i+2),harmPower[0][i][2]); +// +// hashMapB.put("pq_HarmP_"+(i+2),harmPower[1][i][0]); +// hashMapB.put("pq_HarmQ_"+(i+2),harmPower[1][i][1]); +// hashMapB.put("pq_HarmS_"+(i+2),harmPower[1][i][2]); +// +// hashMapC.put("pq_HarmP_"+(i+2),harmPower[2][i][0]); +// hashMapC.put("pq_HarmQ_"+(i+2),harmPower[2][i][1]); +// hashMapC.put("pq_HarmS_"+(i+2),harmPower[2][i][2]); +// //M相目前没有 +//// hashMapT.put("pq_HarmP_"+(i+2),harmPower[3][i][0]); +//// hashMapT.put("pq_HarmQ_"+(i+2),harmPower[3][i][1]); +//// hashMapT.put("pq_HarmS_"+(i+2),harmPower[3][i][2]); +// } +// //间谐波-送一半数据 +// Float[][] inHarm = min.getInHarm(); +// +// +// for (int i = 0; i < 50; i++) { +// //间谐波幅值 +// hashMapA.put("pq_InHarmIAmp_"+(i+1),inHarm[3][i]); +// hashMapB.put("pq_InHarmIAmp_"+(i+1),inHarm[4][i]); +// hashMapC.put("pq_InHarmIAmp_"+(i+1),inHarm[5][i]); +// +// +// +// } +// //a,b,c,total 总功率(P.Q.S) +// Float[][] totalPower = min.getTotal_Power(); +// hashMapA.put("pq_P",totalPower[0][0]); +// hashMapB.put("pq_P",totalPower[1][0]); +// hashMapC.put("pq_P",totalPower[2][0]); +// +// hashMapA.put("pq_Q",totalPower[0][1]); +// hashMapB.put("pq_Q",totalPower[1][1]); +// hashMapC.put("pq_Q",totalPower[2][1]); +// +// hashMapA.put("pq_S",totalPower[0][2]); +// hashMapB.put("pq_S",totalPower[1][2]); +// hashMapC.put("pq_S",totalPower[2][2]); +// +// hashMapM.put("pq_TotHarmP",totalPower[3][0]); +// hashMapM.put("pq_TotHarmQ",totalPower[3][1]); +// hashMapM.put("pq_TotHarmS",totalPower[3][2]); +// +// /*todo 谐波畸变率,电压波动,电压闪变,电压长闪变会根据监测点接线方式是星型存A,B,C相,角型或者V型存AB,BC,CA相,目前全存在A,B,C相*/ +// //谐波畸变率 +// Float[] harmAberrance = min.getHarm_Aberrance(); +// hashMapA.put("pq_ThdU",harmAberrance[0]); +// hashMapB.put("pq_ThdU",harmAberrance[1]); +// hashMapC.put("pq_ThdU",harmAberrance[2]); +// +// hashMapA.put("pq_ThdI",harmAberrance[3]); +// hashMapB.put("pq_ThdI",harmAberrance[4]); +// hashMapC.put("pq_ThdI",harmAberrance[5]); +// +// //视在功率因数 +// Float[] cosPf = min.getCos_PF(); +// hashMapA.put("pq_PF",cosPf[0]); +// hashMapB.put("pq_PF",cosPf[1]); +// hashMapC.put("pq_PF",cosPf[2]); +// hashMapM.put("pq_TotPF",cosPf[3]); +// //位移功率因数= +// Float[] cosDf = min.getCos_DF(); +// hashMapA.put("pq_DF",cosDf[0]); +// hashMapB.put("pq_DF",cosDf[1]); +// hashMapC.put("pq_DF",cosDf[2]); +// hashMapM.put("pq_TotDF",cosDf[3]); +// //电压波动 +// Float[] uFluctuation = min.getU_Fluctuation(); +// hashMapA.put("pq_Fluct",uFluctuation[0]); +// hashMapB.put("pq_Fluct",uFluctuation[1]); +// hashMapC.put("pq_Fluct",uFluctuation[2]); +// //电压闪变 +// Float[] uFlicker = min.getU_Flicker(); +// hashMapA.put("pq_Plt",uFlicker[0]); +// hashMapB.put("pq_Plt",uFlicker[1]); +// hashMapC.put("pq_Plt",uFlicker[2]); +// //电压长闪变 +// Float[] ulFlicker = min.getUL_Flicker(); +// hashMapA.put("pq_Plt",ulFlicker[0]); +// hashMapB.put("pq_Plt",ulFlicker[1]); +// hashMapC.put("pq_Plt",ulFlicker[2]); +// +// ObjectMapper mapper = new ObjectMapper(); +// mapper.registerModule(new JavaTimeModule()); +// PqdData pqdDataA = mapper.convertValue(hashMapA, PqdData.class); +// PqdData pqdDataB = mapper.convertValue(hashMapB, PqdData.class); +// PqdData pqdDataC = mapper.convertValue(hashMapC, PqdData.class); +// PqdData pqdDataM = mapper.convertValue(hashMapM, PqdData.class); +// PqdData pqdDataAB = mapper.convertValue(hashMapAB, PqdData.class); +// PqdData pqdDataBC = mapper.convertValue(hashMapBC, PqdData.class); +// PqdData pqdDataCA = mapper.convertValue(hashMapCA, PqdData.class); +// +// +// +// pqdData.add(pqdDataA); +// pqdData.add(pqdDataB); +// pqdData.add(pqdDataC); +// pqdData.add(pqdDataM); +// pqdData.add(pqdDataAB); +// pqdData.add(pqdDataBC); +// pqdData.add(pqdDataCA); +// +// return pqdData; +// +// +// } +// +// public static boolean isZero(float value) { +// return Math.abs(value) < 1e-6; // 判断value是否在精度范围内近似等于0 +// } +// +// // 实现转换高频谐波数据的逻辑 +// private static HashMap convertMinHh(String strFile,HashMap minDataHhDic) throws IOException { +// +// +// // 实现转换高频谐波数据的逻辑 +// System.out.println("Converting HH data from: " + strFile); +// FileInputStream binFile = null; +// try{ +// try { +// binFile = new FileInputStream(strFile); +// } catch (FileNotFoundException e) { +// binFile.close(); +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// } +// +// long nBufSize = binFile.available(); //计算需要解析的文件总长 +// int n1BufLen = tagPQDataCmnHh.GetSize(); //计算单个统计结构大小 +// int nSecNum = (int)(nBufSize / n1BufLen); //确认共多少事件数据结构 +// +// int nStep = 0; //读取偏移量 +// for (int i = 0; i < nSecNum; i++) { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try { +// //java流不需要跳 +//// binFile.skip(nStep); +// nReadLen = binFile.read(bBuf, 0, bBuf.length); +// } catch (IOException e) { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// binFile.close(); +// } +// +// tagPQDataCmnHh tagPqData = new tagPQDataCmnHh(); +// tagPqData.SetStructBuf(bBuf, 0); +// nStep += n1BufLen; +// +// RTC_Timer_MS Devtime = tagPqData.time; +// Date time = new Date(Devtime.year - 1900, Devtime.month - 1, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second); +// if (!minHh_starttime.equals(new Date(0))) { //存在启动时间 +// if (time.compareTo(minHh_starttime) <= 0) { +// minHh_starttime = time; +// } +// } else { //不存在启动时间 填入当前时间 +// minHh_starttime = time; +// } +// if (!minHh_endtime.equals(new Date(0))) { +// if (time.compareTo(minHh_endtime) >= 0) { +// minHh_endtime = time; +// } +// } else { //不存在结束时间 填入当前时间 +// minHh_endtime = time; +// } +// +// if (strFile.toUpperCase().indexOf("AVG") >= 0) { +// if (minDataHhDic.containsKey(time)) { +// minDataHhDic.get(time).avg = tagPqData; +// } else { +// MinDataHh minData = new MinDataHh(); +// minData.avg = tagPqData; +// minDataHhDic.put(time, minData); +// } +// } else if (strFile.toUpperCase().indexOf("CP95") >= 0) { +// if (minDataHhDic.containsKey(time)) { +// minDataHhDic.get(time).cp95 = tagPqData; +// } else { +// MinDataHh minData = new MinDataHh(); +// minData.cp95 = tagPqData; +// minDataHhDic.put(time, minData); +// } +// } else if (strFile.toUpperCase().indexOf("MAX") >= 0) { +// if (minDataHhDic.containsKey(time)) { +// minDataHhDic.get(time).max = tagPqData; +// } else { +// MinDataHh minData = new MinDataHh(); +// minData.max = tagPqData; +// minDataHhDic.put(time, minData); +// } +// } else if (strFile.toUpperCase().indexOf("MIN") >= 0) { +// if (minDataHhDic.containsKey(time)) { +// minDataHhDic.get(time).min = tagPqData; +// } else { +// MinDataHh minData = new MinDataHh(); +// minData.min = tagPqData; +// minDataHhDic.put(time, minData); +// } +// } +// } +// } catch (FileNotFoundException e) { +// binFile.close(); +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// } +// +// return minDataHhDic; +// } +// // 实现转换分钟数据的逻辑 +// private static void convertMin(String strFile, HashMap minDataDic) { +// +// FileInputStream binFile = null; +// +// try { +// +// // 实现转换分钟数据的逻辑 +// System.out.println("Converting minute data from: " + strFile); +// +// binFile = new FileInputStream(strFile); +// +// +// long nBufSize = 0; +// +// nBufSize = binFile.available(); //计算需要解析的文件总长 +// +// +// int n1BufLen = tagPQDataCmn.GetSize(); //计算单个统计结构大小 +// int nMinNum = (int) (nBufSize / n1BufLen); //确认共多少分钟数据结构 +// +// int nStep = 0; //读取偏移量 +// for (int i = 0; i < nMinNum; i++) { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try { +// //java流不需要跳 +//// binFile.skip(nStep); +// nReadLen = binFile.read(bBuf, 0, bBuf.length); +// } catch (IOException e) { +// System.out.println("文件读取时发生错误,代码为" + e.getClass().getName()); +// binFile.close(); +// } +// +// tagPQDataCmn tagPqData = new tagPQDataCmn(); +// tagPqData.SetStructBuf(bBuf, 0); +// nStep += n1BufLen; +// +// RTC_Timer_MS Devtime = tagPqData.time; +// Date time = new Date(Devtime.year - 1900, Devtime.month - 1, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second); +// if (!minStarttime.equals(new Date(0))) { //存在启动时间 +// if (time.compareTo(minStarttime) <= 0) { +// minStarttime = time; +// } +// } else { //不存在启动时间 填入当前时间 +// minStarttime = time; +// } +// if (!minEndtime.equals(new Date(0))) { +// if (time.compareTo(minEndtime) >= 0) { +// minEndtime = time; +// } +// } else { //不存在结束时间 填入当前时间 +// minEndtime = time; +// } +// +// if (strFile.toUpperCase().indexOf("AVG") >= 0) { +// if (minDataDic.containsKey(time)) { +// minDataDic.get(time).avg = tagPqData; +// } else { +// MinData minData = new MinData(); +// minData.avg = tagPqData; +// minDataDic.put(time, minData); +// } +// } else if (strFile.toUpperCase().indexOf("CP95") >= 0) { +// if (minDataDic.containsKey(time)) { +// minDataDic.get(time).cp95 = tagPqData; +// } else { +// MinData minData = new MinData(); +// minData.cp95 = tagPqData; +// minDataDic.put(time, minData); +// } +// } else if (strFile.toUpperCase().indexOf("MAX") >= 0) { +// if (minDataDic.containsKey(time)) { +// minDataDic.get(time).max = tagPqData; +// } else { +// MinData minData = new MinData(); +// minData.max = tagPqData; +// minDataDic.put(time, minData); +// } +// } else if (strFile.toUpperCase().indexOf("MIN") >= 0) { +// if (minDataDic.containsKey(time)) { +// minDataDic.get(time).min = tagPqData; +// } else { +// MinData minData = new MinData(); +// minData.min = tagPqData; +// minDataDic.put(time, minData); +// } +// } +// } +// } catch (IOException e) { +// System.out.println("处理文件时发生错误: " + strFile); +// } finally { +// if (binFile != null) { +// try { +// binFile.close(); +// } catch (IOException e) { +// System.out.println("关闭文件时发生错误: " + strFile); +// } +// } +// } +// +// } +// public static List convertCfgFile(String strFilePath) { //解析cfg录波文件 +// List tagComtradeCfgList = new ArrayList<>(); +// File folder = new File(strFilePath); +// File[] files = folder.listFiles((dir, name) -> name.endsWith(".cfg")); //获取文件夹下所有cfg文件 +// Arrays.stream(files).forEach(file -> { +// TagComtradeCfg tagComtradeCfg = analyseComtradeCfg(file.getAbsolutePath()); +// tagComtradeCfgList.add(tagComtradeCfg); +// }); +// return tagComtradeCfgList; +// } +// /** +// * @Description: analyseComtradeCfg 读取、分析cfg录波文件!!! +// * @Param: +// * @return: com.njcn.user.utils.test.tagComtradeCfg +// * @Author: clam +// * @Date: 2024/7/15 +// */ +// public static TagComtradeCfg analyseComtradeCfg(String strFilePath) { +// TagComtradeCfg comtradeCfg = new TagComtradeCfg(); +// +// if (strFilePath.equals("")) { +// return comtradeCfg; +// } +// +// int i = 0; //用于遍历 字符串转换的字段数组 +// String strFileLine;//临时存放 cfg每行读取的字符串 +// String[] strTempArray; //临时存放 字符串转换的字段数组 +// +// tagRates ratesCfg = new tagRates(); +// try { +// FileInputStream readFile = new FileInputStream(strFilePath); +// InputStreamReader isr = new InputStreamReader(readFile, StandardCharsets.UTF_8); +// BufferedReader sr = new BufferedReader(isr); +// comtradeCfg = new TagComtradeCfg();//配置文件总类对象初始化 +// ratesCfg = new tagRates();//多段采样类对象初始化 +// long nFreq = 0; //临时存放 采样频率 例:50Hz +// //第一行不关心仅仅是一些描述类的信息 +// strFileLine = sr.readLine(); // ① +// //第二行需要关心第二个:模拟通道编号(模拟量的个数)和第三个:状态通道参数(开关量的个数) +// strFileLine = sr.readLine(); // ② +// strTempArray = strFileLine.split(","); +// for (i = 0; i < strTempArray.length; i++) { +// switch (i) { +// case 0: //通道总个数 +// comtradeCfg.nChannelNum = Integer.parseInt(strTempArray[i]); +// break; +// case 1: //模拟量的个数 +// String str = strTempArray[i].substring(0, strTempArray[i].length() - 1); +// comtradeCfg.nAnalogNum = Integer.parseInt(str); +// break; +// case 2://开关量的个数 +// str = strTempArray[i].substring(0, strTempArray[i].length() - 1); +// comtradeCfg.nDigitalNum = Integer.parseInt(str); +// break; +// } +// } +// //从第三行到第ComtradeCfg.nChannelNum+3行是模拟量通道和数字量通道 +// List OneChannleCfgList =new ArrayList<>(); +// for (i = 0; i < comtradeCfg.nChannelNum; i++) { +// tagOneChannleCfg oneChannlecfg = new tagOneChannleCfg(); +// +// strFileLine = sr.readLine(); // ③ or ④ or ⑤ +// strTempArray = strFileLine.split(","); +// for (int j = 0; j < strTempArray.length; j++) { +// switch (j) { +// case 0://通道序号 +// oneChannlecfg.nIndex = Integer.parseInt(strTempArray[j]); +// break; +// case 1://通道名称 +// oneChannlecfg.szChannleName = strTempArray[j]; +// break; +// case 2://监视的通道名称 +// oneChannlecfg.szPhasicName = strTempArray[j]; +// break; +// case 3://监视的通道名称 +// oneChannlecfg.szMonitoredChannleName = strTempArray[j]; +// break; +// case 4://通道的单位 +// oneChannlecfg.szUnitName = strTempArray[j]; +// break; +// case 5://通道的系数 +// oneChannlecfg.fCoefficent = Float.parseFloat(strTempArray[j]); +// break; +// case 6://通道的偏移量 +// oneChannlecfg.fOffset = Float.parseFloat(strTempArray[j]); +// break; +// case 7://起始采样时间的偏移量 +// oneChannlecfg.fTimeOffset = Float.parseFloat(strTempArray[j]); +// break; +// case 8://采样值的最小值 +// oneChannlecfg.nMin = Integer.parseInt(strTempArray[j]); +// break; +// case 9://采样值的最大值 +// oneChannlecfg.nMax = Integer.parseInt(strTempArray[j]); +// break; +// case 10://一次变比 +// oneChannlecfg.fPrimary = Float.parseFloat(strTempArray[j]); +// break; +// case 11://二次变比 +// oneChannlecfg.fSecondary = Float.parseFloat(strTempArray[j]); +// break; +// case 12://一次值还是二次值标志 +// oneChannlecfg.szValueType = strTempArray[j]; +// break; +// } +// } +// OneChannleCfgList.add(oneChannlecfg); +// +// } +// comtradeCfg.setOneChannleCfg(OneChannleCfgList); +// //采样频率:在交变电流电路中一秒钟内交流电所允许而必须变化的周期数,即:在单位时间内振动的次数 +// strFileLine = sr.readLine(); // ⑥ +// float fFreq = Float.parseFloat(strFileLine); +// nFreq = (long) fFreq; +// +// strFileLine = sr.readLine(); // ⑦ +// int nRates = Integer.parseInt(strFileLine); +// ratesCfg.nRates = nRates; +// +// long nOffset = 0;//上一段单周波采样点数 +// long nMSTotal = 0;//录波总毫秒数 +// for (i = 0; i < nRates; i++) { +// strFileLine = sr.readLine(); //⑧例:3200,22400 ——> 理解为:1到22400这22400个数据的采样率是3200 +// strTempArray = strFileLine.split(","); +// +// tagOneRate oneRate = new tagOneRate();//1段采样类对象 +// ratesCfg.getOneRate().add(oneRate); +// for (int j = 0; j < strTempArray.length; j++) { +// switch (j) { +// case 0://采样率:1秒钟内的采样点数 +// oneRate.nOneSample = (long) (Float.parseFloat(strTempArray[j]) / nFreq); +// break; +// case 1: //总采样点数 +// oneRate.nSampleNum = (long) (Float.parseFloat(strTempArray[j]) - nOffset); +// nOffset += oneRate.nSampleNum; +// break; +// } +// nMSTotal += oneRate.nSampleNum / oneRate.nOneSample; +// } +// } +// +// nMSTotal *= 20; //录波总毫秒数 注:一个周波20ms,所以此处要乘以20 +// if (nMSTotal > 60000) {//如果事件长度超过1分钟,则结束处理,不调用录波高级算法qvvr_fun +// +// sr.close(); +// readFile.close(); +// return comtradeCfg; +// } +// //波形起始时间 +// strFileLine = sr.readLine(); // ⑨ +// SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy,HH:mm:ss.SSSSSS"); +// comtradeCfg.setTimeTrigger(sdf.parse(strFileLine)); +// +// strFileLine = sr.readLine(); // ⑩ +// comtradeCfg.setTimeStart(sdf.parse(strFileLine)); +// comtradeCfg.setTimeEnd(new Date(comtradeCfg.getTimeStart().getTime() + nMSTotal));; +// comtradeCfg.setPath(new File(strFilePath).getName()); +// +// sr.close(); +// readFile.close(); +// } catch (IOException | ParseException e) { +// System.out.println("Error opening file: " + strFilePath + " " + e.getMessage()); +// return comtradeCfg; +// } +// +// return comtradeCfg; +// } +// +// public static void main(String[] args) throws IOException { +// TagComtradeCfg tagComtradeCfg = AnalyseComtradeCfg1.analyseComtradeCfg("C:\\Users\\Administrator\\Desktop\\浙江无线\\离线数据上传\\09\\comtrade\\line1_20240704_143908_213.cfg"); +// System.out.println(tagComtradeCfg); +// AnalyseComtradeCfg1.processDirectory("C:\\Users\\Administrator\\Desktop\\浙江无线\\离线数据上传\\09\\min"); +// PqdData pqdData = new PqdData(); +// } +//} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/cmn_mode_cfg.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/CmnModeCfg.java similarity index 99% rename from cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/cmn_mode_cfg.java rename to cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/CmnModeCfg.java index 7129267..dfb1b9d 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/cmn_mode_cfg.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/CmnModeCfg.java @@ -5,7 +5,7 @@ package com.njcn.csharmonic.offline.mincfg.vo; 装置普测工程配置信息 */ -public class cmn_mode_cfg +public class CmnModeCfg { public byte[] prj_name = new byte[128]; //工程名称 //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_record_info.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PrjRecordInfo.java similarity index 88% rename from cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_record_info.java rename to cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PrjRecordInfo.java index c6a1a2a..6b487e8 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_record_info.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PrjRecordInfo.java @@ -4,10 +4,10 @@ package com.njcn.csharmonic.offline.mincfg.vo; 工程数据文件信息 */ -public class prj_record_info +public class PrjRecordInfo { public pqv_dev_info_int dev_info; //装置信息 - public cmn_mode_cfg cfg; //测试记录工程配置 + public CmnModeCfg cfg; //测试记录工程配置 public prj_store_info store_mag; //存储管理缓冲 public int tv_sec_s; //开始记录时间 public int tv_sec_e; //结束记录时间 @@ -15,16 +15,16 @@ public class prj_record_info //ORIGINAL LINE: public uint status; public int status; //测试工程数据是否有效标志 - public prj_record_info() + public PrjRecordInfo() { dev_info = new pqv_dev_info_int(); - cfg = new cmn_mode_cfg(); + cfg = new CmnModeCfg(); store_mag = new prj_store_info(); } public static int GetSize() //用于定义Byte数组 { //C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': - int nSize = 2 * Integer.SIZE / Byte.SIZE + 1 * Integer.SIZE / Byte.SIZE + pqv_dev_info_int.GetSize() + cmn_mode_cfg.GetSize() + prj_store_info.GetSize(); //CComtradeDataItem数据结构数据长度 + int nSize = 2 * Integer.SIZE / Byte.SIZE + 1 * Integer.SIZE / Byte.SIZE + pqv_dev_info_int.GetSize() + CmnModeCfg.GetSize() + prj_store_info.GetSize(); //CComtradeDataItem数据结构数据长度 return nSize; } public final boolean SetStructBuf(byte[] bArray, int nHaveRead) @@ -39,7 +39,7 @@ public class prj_record_info dev_info.SetStructBuf(bArray, iStep); iStep = iStep + pqv_dev_info_int.GetSize(); cfg.SetStructBuf(bArray, iStep); - iStep = iStep + cmn_mode_cfg.GetSize(); + iStep = iStep + CmnModeCfg.GetSize(); store_mag.SetStructBuf(bArray, iStep); iStep = iStep + prj_store_info.GetSize(); tv_sec_s = Service.convertInt32_net(bArray, iStep); @@ -66,7 +66,7 @@ public class prj_record_info dev_info.SetStructBuf(bArray, iStep); iStep = iStep + pqv_dev_info_int.GetSize(); cfg.SetStructBuf_net(bArray, iStep); - iStep = iStep + cmn_mode_cfg.GetSize(); + iStep = iStep + CmnModeCfg.GetSize(); store_mag.SetStructBuf_net(bArray, iStep); iStep = iStep + prj_store_info.GetSize(); tv_sec_s = Service.convertInt32(bArray, iStep); diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsEventController.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsEventController.java index fe98de1..2a3b10d 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsEventController.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsEventController.java @@ -22,6 +22,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import java.time.LocalDateTime; import java.util.List; /** @@ -91,4 +92,13 @@ public class CsEventController extends BaseController { csEventPOService.saveBatchEventList(csEventPOS); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/queryByIndex") + @ApiOperation("根据表唯一索引查询(用于校验是否存在该事件)") + public HttpResult queryByIndex(@RequestBody CsEventPO csEventPO) { + String methodDescribe = getMethodDescribe("queryByIndex"); + CsEventPO po = csEventPOService.lambdaQuery().eq(CsEventPO::getDeviceId,csEventPO.getDeviceId()).eq(CsEventPO::getTag,csEventPO.getTag()).eq(CsEventPO::getStartTime,csEventPO.getStartTime()).one(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); + } } diff --git a/cs-report/cs-report-boot/pom.xml b/cs-report/cs-report-boot/pom.xml index 4c19e67..c593015 100644 --- a/cs-report/cs-report-boot/pom.xml +++ b/cs-report/cs-report-boot/pom.xml @@ -46,11 +46,11 @@ pqs-influx ${project.version} - - com.baomidou - dynamic-datasource-spring-boot-starter - 3.5.1 - + + + + + com.squareup.okhttp3 okhttp @@ -111,6 +111,12 @@ 1.0.0 compile + + com.njcn + harmonic-api + 1.0.0 + compile + diff --git a/cs-report/cs-report-boot/src/main/java/com/njcn/csreport/job/ReportCovertJob.java b/cs-report/cs-report-boot/src/main/java/com/njcn/csreport/job/ReportCovertJob.java index 258cc0b..dd3b67d 100644 --- a/cs-report/cs-report-boot/src/main/java/com/njcn/csreport/job/ReportCovertJob.java +++ b/cs-report/cs-report-boot/src/main/java/com/njcn/csreport/job/ReportCovertJob.java @@ -67,11 +67,11 @@ public class ReportCovertJob { /** - * 每小时同步oracle数据库暂态事件 + * 每天同步influxdb数据到mysql * * @date 2024/3/5 */ - @Scheduled(cron = "0 0/10 * * * ?") + @Scheduled(cron = "0 0 1 * * ? ") public void executeEvent() throws ClassNotFoundException { LocalDate today = LocalDate.now().minusDays(3); // 计算前一天的日期