From e27667c36448132a7d4636b9535fa63a9c416ce2 Mon Sep 17 00:00:00 2001 From: guofeihu <3347277866@qq.com> Date: Tue, 23 Jul 2024 17:31:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E6=95=B0=E6=8D=AE=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E7=AC=AC=E4=B8=80=E7=89=88=E4=BB=A3=E7=A0=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/njcn/csdevice/constant/DataParam.java | 13 +- .../njcn/csdevice/param/UploadDataParam.java | 31 + .../csdevice/pojo/po/PortableOfflLog.java | 5 + .../equipment/PortableOfflLogController.java | 25 +- .../service/IPortableOfflLogService.java | 5 +- .../impl/PortableOfflLogServiceImpl.java | 123 +- cs-harmonic/cs-harmonic-api/pom.xml | 12 + .../api/OfflineDataUploadFeignClient.java | 22 + ...eDataUploadFeignClientFallbackFactory.java | 36 + .../com/njcn/csharmonic/offline/log/Log.java | 269 ++++ .../njcn/csharmonic/offline/log/Service.java | 470 ++++++ .../offline/log/vo/NewBodyTaglogbuffer.java | 17 + .../offline/log/vo/NewHeadTaglogbuffer.java | 26 + .../offline/log/vo/NewTaglogbuffer.java | 21 + .../offline/log/vo/TagComtradeCfg.java | 23 + .../csharmonic/offline/log/vo/TagMsTime.java | 26 + .../offline/log/vo/TagOneChannleCfg.java | 33 + .../log/vo/TagOneChannleCfgDigital.java | 17 + .../offline/mincfg/AnalyseComtradeCfg.java | 686 +++++++++ .../csharmonic/offline/mincfg/MinData.java | 20 + .../csharmonic/offline/mincfg/MinDataHh.java | 19 + .../offline/mincfg/RTC_Timer_MS.java | 79 + .../offline/mincfg/TagPQDataCmnHh.java | 126 ++ .../offline/mincfg/tagComtradeCfg.java | 28 + .../offline/mincfg/tagOneChannleCfg.java | 42 + .../mincfg/tagOneChannleCfg_digital.java | 28 + .../csharmonic/offline/mincfg/tagOneRate.java | 22 + .../csharmonic/offline/mincfg/tagRates.java | 23 + .../mincfg/vo/AnalyseComtradeCfg1.java | 703 +++++++++ .../offline/mincfg/vo/DATA_FLICK.java | 43 + .../offline/mincfg/vo/DATA_HARMI.java | 33 + .../offline/mincfg/vo/DATA_HARMIP.java | 33 + .../offline/mincfg/vo/DATA_HARMP.java | 33 + .../offline/mincfg/vo/DATA_HARMQ.java | 33 + .../offline/mincfg/vo/DATA_HARMS.java | 33 + .../offline/mincfg/vo/DATA_HARMV.java | 33 + .../offline/mincfg/vo/DATA_HARMVP.java | 33 + .../offline/mincfg/vo/DATA_INHARMI.java | 33 + .../offline/mincfg/vo/DATA_INHARMV.java | 33 + .../offline/mincfg/vo/DATA_RMS.java | 73 + .../offline/mincfg/vo/DealDataFile.java | 1353 +++++++++++++++++ .../mincfg/vo/NewBodyTaglogbuffer.java | 29 + .../mincfg/vo/NewHeadTaglogbuffer.java | 47 + .../offline/mincfg/vo/NewTaglogbuffer.java | 16 + .../offline/mincfg/vo/PowerReg.java | 170 +++ .../offline/mincfg/vo/PowerSet.java | 123 ++ .../csharmonic/offline/mincfg/vo/Program.java | 11 + .../offline/mincfg/vo/RTC_Timer.java | 92 ++ .../offline/mincfg/vo/RTC_Timer_MS.java | 85 ++ .../offline/mincfg/vo/RefObject.java | 16 + .../csharmonic/offline/mincfg/vo/Service.java | 817 ++++++++++ .../offline/mincfg/vo/TagMsTime.java | 49 + .../offline/mincfg/vo/cmn_mode_cfg.java | 363 +++++ .../offline/mincfg/vo/pqv_dev_info_int.java | 68 + .../offline/mincfg/vo/pqv_dev_info_int1.java | 41 + .../offline/mincfg/vo/pqv_dev_info_run.java | 39 + .../offline/mincfg/vo/prj_record_info.java | 83 + .../offline/mincfg/vo/prj_store_info.java | 300 ++++ .../offline/mincfg/vo/tagInHarmData.java | 51 + .../mincfg/vo/tagInHarmData_float.java | 12 + .../offline/mincfg/vo/tagPQDataCmn.java | 131 ++ .../offline/mincfg/vo/tagPQDataCmnHh.java | 118 ++ .../offline/mincfg/vo/tagPowerData.java | 57 + .../offline/mincfg/vo/tagPowerData_float.java | 8 + .../offline/mincfg/vo/tagPqData.java | 211 +++ .../offline/mincfg/vo/tagPqData_Float.java | 164 ++ .../offline/mincfg/vo/tag_dir_info.java | 30 + .../njcn/csharmonic/offline/vo/Response.java | 16 + .../OfflineDataUploadController.java | 44 + .../service/OfflineDataUploadService.java | 18 + .../impl/OfflineDataUploadServiceImpl.java | 69 + 71 files changed, 7958 insertions(+), 36 deletions(-) create mode 100644 cs-device/cs-device-api/src/main/java/com/njcn/csdevice/param/UploadDataParam.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/OfflineDataUploadFeignClient.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/OfflineDataUploadFeignClientFallbackFactory.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Log.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Service.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewBodyTaglogbuffer.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewHeadTaglogbuffer.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewTaglogbuffer.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagComtradeCfg.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagMsTime.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfg.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfgDigital.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/AnalyseComtradeCfg.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/MinData.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/MinDataHh.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/RTC_Timer_MS.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/TagPQDataCmnHh.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagComtradeCfg.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneChannleCfg.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneChannleCfg_digital.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneRate.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagRates.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/AnalyseComtradeCfg1.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_FLICK.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMI.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMIP.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMP.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMQ.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMS.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMV.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMVP.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_INHARMI.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_INHARMV.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_RMS.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DealDataFile.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewBodyTaglogbuffer.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewHeadTaglogbuffer.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewTaglogbuffer.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PowerReg.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PowerSet.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/Program.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RTC_Timer.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RTC_Timer_MS.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RefObject.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/Service.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/TagMsTime.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/cmn_mode_cfg.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_int.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_int1.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_run.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_record_info.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_store_info.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagInHarmData.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagInHarmData_float.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPQDataCmn.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPQDataCmnHh.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPowerData.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPowerData_float.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPqData.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPqData_Float.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tag_dir_info.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/vo/Response.java create mode 100644 cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/OfflineDataUploadController.java create mode 100644 cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/OfflineDataUploadService.java create mode 100644 cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/OfflineDataUploadServiceImpl.java 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 7336590..ce9e8df 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 @@ -1,6 +1,6 @@ package com.njcn.csdevice.constant; - +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -42,4 +42,15 @@ public interface DataParam { String evtData = "evt_data"; + String wlRecordPath = "test/"; + + //中断标志 + List intrStr = Arrays.asList(0,26,40,54,68,82); + //暂降标志 + List dipStr = Arrays.asList(1,27,41,55,69,83); + //暂升标志 + List swlStr = Arrays.asList(13,36,50,64,78,92); + + String wlRecordUpload = "Offline_Data_Upload"; + } diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/param/UploadDataParam.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/param/UploadDataParam.java new file mode 100644 index 0000000..afec57c --- /dev/null +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/param/UploadDataParam.java @@ -0,0 +1,31 @@ +package com.njcn.csdevice.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; + +/** + * 类的介绍: + * + * @author gfh + * @version 1.0.0 + * @createTime 2024/7/19 + */ +@Data +public class UploadDataParam { + + @ApiModelProperty("设备ID") + private String devId; + + @ApiModelProperty("监测点ID") + private String lineId; + + @ApiModelProperty("文件集合") + List files = new ArrayList<>(); + + @ApiModelProperty("文件对应的目录") + List paths = new ArrayList<>(); + +} diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/PortableOfflLog.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/PortableOfflLog.java index d557f36..372cc0f 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/PortableOfflLog.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/PortableOfflLog.java @@ -27,6 +27,11 @@ public class PortableOfflLog extends BaseEntity { */ private String name; + /** + * 文件路径(上传的文件夹路径) + */ + private String path; + /** * 文件路径 */ 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 cd413bc..6a3a3a7 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 @@ -12,6 +12,7 @@ import com.njcn.csdevice.pojo.param.WlRecordTemplete; 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.poi.excel.ExcelUtil; import com.njcn.poi.util.PoiUtil; import com.njcn.system.api.DicDataFeignClient; @@ -20,15 +21,20 @@ import com.njcn.web.pojo.param.BaseParam; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.bind.annotation.*; import com.njcn.web.controller.BaseController; import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest; + +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -75,12 +81,23 @@ public class PortableOfflLogController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } - @ResponseBody @ApiOperation("批量导入便携式设备信息") @PostMapping(value = "importEquipment") - public HttpResult importEquipment(@ApiParam(value = "文件", required = true) @RequestPart("file") MultipartFile file, HttpServletResponse response) { + public HttpResult importEquipment(@RequestParam("devId") String devId + , @RequestParam("lineId") String lineId, @RequestParam("paths") String paths,HttpServletRequest request) { String methodDescribe = getMethodDescribe("importEquipment"); - iPortableOfflLogService.importEquipment(file, response); + UploadDataParam uploadDataParam = new UploadDataParam(); + uploadDataParam.setDevId(devId); + uploadDataParam.setLineId(lineId); + uploadDataParam.setPaths(Arrays.asList(paths.split(","))); + MultipartHttpServletRequest Murequest = (MultipartHttpServletRequest) request; + Map files = Murequest.getFileMap() ; + List fileList = new ArrayList<>(); + for(MultipartFile file : files.values()){ + fileList.add(file); + } + uploadDataParam.setFiles(fileList); + 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/IPortableOfflLogService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/IPortableOfflLogService.java index a4a930b..863d479 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/IPortableOfflLogService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/IPortableOfflLogService.java @@ -3,9 +3,8 @@ package com.njcn.csdevice.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.csdevice.pojo.po.PortableOfflLog; +import com.njcn.csdevice.param.UploadDataParam; import com.njcn.web.pojo.param.BaseParam; -import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletResponse; /** *

@@ -19,5 +18,5 @@ public interface IPortableOfflLogService extends IService { Page queryPage(BaseParam baseParam); - void importEquipment(MultipartFile file, HttpServletResponse response); + void importEquipment(UploadDataParam uploadDataParam); } 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 586793c..aeb7784 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 @@ -1,20 +1,31 @@ package com.njcn.csdevice.service.impl; -import cn.afterturn.easypoi.excel.ExcelImportUtil; -import cn.afterturn.easypoi.excel.entity.ImportParams; -import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.gson.Gson; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.csdevice.constant.DataParam; import com.njcn.csdevice.mapper.PortableOfflLogMapper; -import com.njcn.csdevice.pojo.param.WlRecordTemplete; import com.njcn.csdevice.pojo.po.PortableOfflLog; import com.njcn.csdevice.service.IPortableOfflLogService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.csdevice.param.UploadDataParam; +import com.njcn.csharmonic.api.OfflineDataUploadFeignClient; +import com.njcn.csharmonic.offline.log.vo.NewTaglogbuffer; +import com.njcn.csharmonic.offline.vo.Response; +import com.njcn.oss.utils.FileStorageUtil; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.pojo.po.DictData; import com.njcn.web.pojo.param.BaseParam; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletResponse; -import java.util.List; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.lang.reflect.Field; +import java.util.*; /** *

@@ -25,8 +36,15 @@ import java.util.List; * @since 2024-07-03 */ @Service +@RequiredArgsConstructor public class PortableOfflLogServiceImpl extends ServiceImpl implements IPortableOfflLogService { + private final FileStorageUtil fileStorageUtil; + + private final DicDataFeignClient dicDataFeignClient; + + private final OfflineDataUploadFeignClient offlineDataUploadFeignClient; + @Override public Page queryPage(BaseParam baseParam) { Page returnpage = new Page<> (baseParam.getPageNum(), baseParam.getPageSize ()); @@ -37,28 +55,77 @@ public class PortableOfflLogServiceImpl extends ServiceImpl terminalBaseList = ExcelImportUtil.importExcelMore (file.getInputStream ( ), WlRecordTemplete.class, params); - List list = terminalBaseList.getList(); - //开始解析....... - } catch (Exception e) { - e.printStackTrace(); + public void importEquipment(UploadDataParam uploadDataParam) { + //获取离线上传对应的字典规则 + List dictDatas = dicDataFeignClient.getDicDataByTypeCode(DataParam.wlRecordUpload).getData(); + List responses = new ArrayList<>(); + List files = uploadDataParam.getFiles(); + List paths = uploadDataParam.getPaths(); + for(DictData dictData : dictDatas){ + List fileList = new ArrayList<>(); + for (int i = 0; i < files.size(); i++) { + if(paths.get(i).indexOf(dictData.getName())!=-1){ + fileList.add(files.get(i)); + } + } + if(!fileList.isEmpty()){ + byte[] resp = offlineDataUploadFeignClient.uploadAnalysis(fileList,dictData.getCode()).getData(); + ByteArrayInputStream bis = new ByteArrayInputStream(resp); + ObjectInputStream ois = null; + try { + ois = new ObjectInputStream(bis); + Object obj = ois.readObject(); + List response = (List) obj; + responses.addAll(response); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException("数据集对象转字节数组失败"); + } finally { + try { + ois.close(); + bis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } } - //记录导入信息 - PortableOfflLog portableOfflLog = new PortableOfflLog(); - portableOfflLog.setName(file.getOriginalFilename()); - portableOfflLog.setDataPath("D//file//"+file.getOriginalFilename()); - portableOfflLog.setLogsIndex(IdUtil.simpleUUID()); - portableOfflLog.setAllCount(100); - portableOfflLog.setRealCount(70); - portableOfflLog.setState(1); - this.baseMapper.insert(portableOfflLog); + + //开始上传文件、记录上传日志、解析的文件结果入库 + //最外层便利所有文件确保所有文件都上传及记录上传日志 + for(MultipartFile file : uploadDataParam.getFiles()){ + //初始上传日志基本信息 + PortableOfflLog portableOfflLog = new PortableOfflLog(); + portableOfflLog.setName(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("/")+1)); + portableOfflLog.setPath(file.getOriginalFilename()); + portableOfflLog.setDataPath(fileStorageUtil.uploadMultipart(file, DataParam.wlRecordPath+uploadDataParam.getDevId()+"/"+uploadDataParam.getLineId()+"/")); + portableOfflLog.setLogsIndex(IdUtil.simpleUUID()); + portableOfflLog.setState(1); + //默认总条数及入库数为0(防止解析的数据重复插入及上传的文件目录路径错误) + portableOfflLog.setAllCount(0); + portableOfflLog.setRealCount(0); + //开始匹配解析的文件结果入库 + for(Response response : responses){ + //当前文件匹配到解析结果 + if(file.getOriginalFilename().indexOf(response.getFilename())!=-1){ + //设置当前文件总条数 + //portableOfflLog.setAllCount(allCount); + //判断当前解析的数据属于哪种结果(目前来说三种:comtrade、log、min) + } + } + this.baseMapper.insert(portableOfflLog); + } + } + + private static T convertToObj(LinkedHashMap map,Class clazz) throws Exception{ + T obj = clazz.newInstance(); + for(Map.Entry entry : map.entrySet()){ + String fieldName = entry.getKey(); + Object fieldValue = entry.getValue(); + Field field = clazz.getDeclaredField(fieldName); + field.setAccessible(true); + field.set(obj,fieldValue); + } + return obj; } } diff --git a/cs-harmonic/cs-harmonic-api/pom.xml b/cs-harmonic/cs-harmonic-api/pom.xml index 8b566bf..929674b 100644 --- a/cs-harmonic/cs-harmonic-api/pom.xml +++ b/cs-harmonic/cs-harmonic-api/pom.xml @@ -39,6 +39,18 @@ 0.0.1-SNAPSHOT compile + + com.njcn + pqs-influx + 1.0.0 + compile + + + com.njcn + cs-device-api + 1.0.0 + compile + UTF-8 diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/OfflineDataUploadFeignClient.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/OfflineDataUploadFeignClient.java new file mode 100644 index 0000000..6c5bf91 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/OfflineDataUploadFeignClient.java @@ -0,0 +1,22 @@ +package com.njcn.csharmonic.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.csharmonic.api.fallback.EventUserFeignClientFallbackFactory; +import com.njcn.csharmonic.offline.vo.Response; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.List; + +/** + * @author gfh + */ +@FeignClient(value = ServerInfo.CS_HARMONIC_BOOT, path = "/offlineDataUpload", fallbackFactory = EventUserFeignClientFallbackFactory.class,contextId = "offlineDataUpload") +public interface OfflineDataUploadFeignClient { + + @PostMapping(value = "/uploadAnalysis",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + HttpResult uploadAnalysis(@RequestPart("files") List files,@RequestParam("type") String type); + +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/OfflineDataUploadFeignClientFallbackFactory.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/OfflineDataUploadFeignClientFallbackFactory.java new file mode 100644 index 0000000..ba0decf --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/OfflineDataUploadFeignClientFallbackFactory.java @@ -0,0 +1,36 @@ +package com.njcn.csharmonic.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.csharmonic.api.OfflineDataUploadFeignClient; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; +import java.util.List; + +/** + * @author gfh + */ +@Slf4j +@Component +public class OfflineDataUploadFeignClientFallbackFactory implements FallbackFactory { + @Override + public OfflineDataUploadFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (cause.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) cause.getCause(); + } + Enum finalExceptionEnum = exceptionEnum; + return new OfflineDataUploadFeignClient() { + @Override + public HttpResult uploadAnalysis(List files,@RequestParam("type") String type) { + log.error("{}异常,降级处理,异常为:{}",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 new file mode 100644 index 0000000..bea07cb --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Log.java @@ -0,0 +1,269 @@ +package com.njcn.csharmonic.offline.log; + +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.csharmonic.offline.log.vo.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +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; + File log = new File(logPath); + if (log.isDirectory()) { + File[] files = log.listFiles(); + for (File file : files) { + convertLog(file); + logbin = true; + } + } + if (!logbin) { + System.out.println("----------事件文件不存在----------"); + } + } + + //事件参数文件解析 + public static List convertLog(File file) throws Exception { + InputStream binFile = new FileInputStream(file); + List newTaglogbuffers = new ArrayList<>();//事件队列 + //转换为byte[] + if (binFile.available() == 0) { + log.warn("文件:{}长度为0字节,程序将跳过本文件的转换",file.getName()); + binFile.close(); + return newTaglogbuffers; + } + long nBufSize = binFile.available(); //计算需要解析的文件总长 + int logLen = 28; //NewHeadTaglogbuffer大小 由于结构固定所这边直接写死28字节 + int n1BufLen = logLen + 4 * 8; //单个固定结构大小 + int nEventNum = (int) (nBufSize / n1BufLen); //确认共多少事件数据结构 + try { + for (int i = 0; i < nEventNum; i++) { + byte[] bBuf = new byte[n1BufLen]; //单个统计结构 + try { + binFile.read(bBuf, 0, bBuf.length); + } catch (IOException e) { + e.printStackTrace(); + throw new BusinessException("文件" + file.getName() + " 读取时发生错误"); + } + 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()); + //存在启动时间 + if (event_starttime != LocalDateTime.MIN && event_starttime != null) { + if (time.compareTo(event_starttime) <= 0) { + event_starttime = time; + } + } else { + //不存在启动时间 填入当前时间 + event_starttime = time; + } + if (event_endtime != LocalDateTime.MIN && event_endtime != null) { + if (time.compareTo(event_endtime) >= 0) { + event_endtime = time; + } + } else { + //不存在结束时间 填入当前时间 + event_endtime = time; + } + + long sec = 0; + for (NewBodyTaglogbuffer sing : newTaglogbuffer.getNewBodyTaglogbuffers()) { + switch (sing.getParaCode()) { + case 0: //特征幅值 + //fParam2 = sing.ParaValue / 65536.0f; + break; + case 1: //持续时间 + sec = sing.getParaValue() / 65536L; + break; + case 5: //相别 + break; + case 25: //浮动门槛值 + //fParam3 = sing.ParaValue / 65536.0f; + break; + default: + break; + } + } + 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; + } + } + } + } catch (BusinessException e) { + e.printStackTrace(); + throw new BusinessException("文件" + file.getName() + " 解析失败"); + }finally { + binFile.close(); + } + return newTaglogbuffers; + } + + //事件参数文件解析 + public static List convertLog(MultipartFile file) throws Exception { + InputStream binFile = file.getInputStream(); + List newTaglogbuffers = new ArrayList<>();//事件队列 + //转换为byte[] + if (binFile.available() == 0) { + log.warn("文件:{}长度为0字节,程序将跳过本文件的转换",file.getOriginalFilename()); + binFile.close(); + return newTaglogbuffers; + } + long nBufSize = binFile.available(); //计算需要解析的文件总长 + int logLen = 28; //NewHeadTaglogbuffer大小 由于结构固定所这边直接写死28字节 + int n1BufLen = logLen + 4 * 8; //单个固定结构大小 + int nEventNum = (int) (nBufSize / n1BufLen); //确认共多少事件数据结构 + try { + for (int i = 0; i < nEventNum; i++) { + byte[] bBuf = new byte[n1BufLen]; //单个统计结构 + try { + binFile.read(bBuf, 0, bBuf.length); + } catch (IOException e) { + e.printStackTrace(); + throw new BusinessException("文件" + file.getOriginalFilename() + " 读取时发生错误"); + } + 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()); + //存在启动时间 + if (event_starttime != LocalDateTime.MIN && event_starttime != null) { + if (time.compareTo(event_starttime) <= 0) { + event_starttime = time; + } + } else { + //不存在启动时间 填入当前时间 + event_starttime = time; + } + if (event_endtime != LocalDateTime.MIN && event_endtime != null) { + if (time.compareTo(event_endtime) >= 0) { + event_endtime = time; + } + } else { + //不存在结束时间 填入当前时间 + event_endtime = time; + } + + long sec = 0; + for (NewBodyTaglogbuffer sing : newTaglogbuffer.getNewBodyTaglogbuffers()) { + switch (sing.getParaCode()) { + case 0: //特征幅值 + //fParam2 = sing.ParaValue / 65536.0f; + break; + case 1: //持续时间 + sec = sing.getParaValue() / 65536L; + break; + case 5: //相别 + break; + case 25: //浮动门槛值 + //fParam3 = sing.ParaValue / 65536.0f; + break; + default: + break; + } + } + 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; + } + } + } + } catch (BusinessException e) { + e.printStackTrace(); + throw new BusinessException("文件" + file.getOriginalFilename() + " 解析失败"); + }finally { + binFile.close(); + } + return newTaglogbuffers; + } + + private static NewTaglogbuffer getnewTaglogbuffer(byte[] data) { + NewHeadTaglogbuffer head = getNewHeadTaglogbuffer(data); + ArrayList bodylist = getNewBodyTaglogbuffer(data, head); + NewTaglogbuffer newTaglogbuffer = new NewTaglogbuffer(head, bodylist); + return newTaglogbuffer; + } + + private static NewHeadTaglogbuffer getNewHeadTaglogbuffer(byte[] data) { + int structlen = 28; + byte[] buff = new byte[structlen]; + System.arraycopy(data, 0, buff, 0, structlen); + for (int i = 0; i < 12 * 2; i += 2) { + reversalBuff(buff, i, 2); + } + for (int i = 12 * 2; i < (12 * 2 + 1 * 4); i += 4) { + reversalBuff(buff, i, 4); + } + //数据区转换为结构 + NewHeadTaglogbuffer logBuff = (NewHeadTaglogbuffer) bytesToStruct(buff, 0, 28, "NewHeadTaglogbuffer"); + return logBuff; + } + + private static ArrayList getNewBodyTaglogbuffer(byte[] data, NewHeadTaglogbuffer head) { + ArrayList newBodyTaglogbuffers = new ArrayList(); + int structlen = 28; + int bodylen = head.getLogParaNum() * 8; + byte[] buff = new byte[bodylen]; + System.arraycopy(data, structlen, buff, 0, bodylen); + for (int i = 0; i < bodylen; i += 4) { + reversalBuff(buff, i, 4); + } + for (int i = 0; i < head.getLogParaNum(); i++) { + NewBodyTaglogbuffer logBuff = (NewBodyTaglogbuffer) bytesToStruct(buff, (i * 8), 8, "NewBodyTaglogbuffer"); + newBodyTaglogbuffers.add(logBuff); + } + return newBodyTaglogbuffers; + } + + private static boolean reversalBuff(byte[] buffer, int StartIndex, int bufflen) { + //确保长度为偶数 + if (bufflen % 2 != 0){ + return false; + } + int halflen = bufflen / 2; + byte[] temp = new byte[halflen]; + for (int i = 0; i < halflen; i++) { + temp[i] = buffer[i + StartIndex]; + buffer[i + StartIndex] = buffer[bufflen + StartIndex - i - 1]; + buffer[bufflen + StartIndex - i - 1] = temp[i]; + } + return true; + } + + private static Object bytesToStruct(byte[] buf, int nStart, int len, String type) { + if ("NewHeadTaglogbuffer".equals(type)) { + TagMsTime tagMsTime = new TagMsTime(Service.convertInt16(buf, 2), + Service.convertInt16(buf, 4),Service.convertInt16(buf, 6), + Service.convertInt16(buf, 8),Service.convertInt16(buf, 10), + Service.convertInt16(buf, 12),Service.convertInt16(buf, 14) + ); + NewHeadTaglogbuffer newHeadTaglogbuffer = new NewHeadTaglogbuffer(Service.convertInt16(buf, 0), + tagMsTime,Service.convertInt16(buf, 16),Service.convertInt16(buf, 18), + Service.convertInt16(buf, 20),Service.convertInt16(buf, 22), + Service.convertInt32(buf, 24)); + return newHeadTaglogbuffer; + } else if ("NewBodyTaglogbuffer".equals(type)) { + NewBodyTaglogbuffer newBodyTaglogbuffer = new NewBodyTaglogbuffer(Service.convertInt32(buf, nStart),Service.convertInt32(buf, nStart + 4)); + return newBodyTaglogbuffer; + } + return null; + } + +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Service.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Service.java new file mode 100644 index 0000000..c2da2bd --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/Service.java @@ -0,0 +1,470 @@ +package com.njcn.csharmonic.offline.log; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +public class Service +{ + //C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: + ///#region 解析通讯报文相关代码 +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: + ///#region 整型->浮点 浮点->整型 + public static float IntToFloat(int num) + { +// uint i_middle = 0xffff0000; +// uint j_middle = 0x0000ffff; +// bool bNav = false; +// if ((num & 0x8000000) == 0x8000000) +// { +// int nTemp = num & 0x7fffffff; +// num = ~nTemp + 1; +// bNav = true; +// } +// int i = (int)((num & i_middle) / 65536); +// float j = (num & j_middle) / 65536.0f; +// if (bNav) +// return -((float)i + j); +// return (float)i + j; + float j = (float)num / 65536.0f; + return (float)j; + } + public static float IntToFloat1000(int num) + { +// uint i_middle = 0xffff0000; +// uint j_middle = 0x0000ffff; +// bool bNav = false; +// if ((num & 0x8000000) == 0x8000000) +// { +// int nTemp = num & 0x7fffffff; +// num = ~nTemp + 1; +// bNav = true; +// } +// int i = (int)((num & i_middle) / 65536); +// float j = (num & j_middle) / 65536.0f; +// if (bNav) +// return -((float)i + j); +// return (float)i + j; + float j = (float)num / 1000.0f; + return (float)j; + } + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static float UintToFloat(uint num) + public static float UintToFloat(int num) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint i_middle = 0xffff0000; + int i_middle = 0xffff0000; +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint j_middle = 0x0000ffff; + int j_middle = 0x0000ffff; + boolean bNav = false; + if ((num & 0x8000000) == 0x8000000) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint nTemp = num & 0x7fffffff; + int nTemp = num & 0x7fffffff; + num = ~nTemp + 1; + bNav = true; + } + int i = (int)((num & i_middle) / 65536); + float j = (num & j_middle) / 65536.0f; + if (bNav) + { + return -((float)i + j); + } + return (float)i + j; + } + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static float UshorToFloat(ushort num) + public static float UshorToFloat(short num) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort i_middle = 0xff00; + short i_middle = (short) 0xff00; +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort j_middle = 0x00ff; + short j_middle = 0x00ff; + boolean bNav = false; + if ((num & 0x8000) == 0x8000) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort nTemp = (ushort)(num & 0x7fff); + short nTemp = (short)(num & 0x7fff); + num = (short)(~nTemp + 1); + bNav = true; + } + int i = (num & i_middle) / 256; + float j = (num & j_middle) / 256.0f; + if (bNav) + { + return -((float)i + j); + } + return (float)i + j; + } + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static ushort FloatToShort(float num) + public static short FloatToShort(float num) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort i = (ushort)num; + short i = (short)num; + float middle_j = num - (float)i; + float j = 256 * middle_j; + return (short)(i + (short)j); + } + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static float UshorToFloat10000(ushort num) + public static float UshorToFloat10000(short num) + { + float j = num / 10000.0f; + return j; + } + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static ushort FloatToShort10000(float num) + public static short FloatToShort10000(float num) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort i = (ushort)(num * 10000.0f); + short i = (short)(num * 10000.0f); + return i; + } + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static float UshorToFloat100(ushort num) + public static float UshorToFloat100(short num) + { + float j = num / 100.0f; + return j; + } + public static float ShorToFloat100(short num) + { + float j = num / 100.0f; + return j; + } + public static float ShorToFloat1000(short num) + { + float j = num / 1000.0f; + return j; + } + public static float ShorToFloat10000(short num) + { + float j = num / 10000.0f; + return j; + } + + public static void reverseByteArray(byte[] arr) { + int start = 0; + int end = arr.length - 1; + while (start < end) { + byte temp = arr[start]; + arr[start] = arr[end]; + arr[end] = temp; + start++; + end--; + } + } + + //C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: + ///#endregion + public static byte[] ByteReversa(byte[] temp) //翻转Byte数组 + { + + reverseByteArray(temp); + return temp; + } + public enum enum_Value_type + { + Value_uint(1), + Value_int(2), + Value_ushort(3), + Value_short(4), + Value_float(5), + Value_Long(6), + Value_UInt64(7); + + private int intValue; + private static java.util.HashMap mappings; + private synchronized static java.util.HashMap getMappings() + { + if (mappings == null) + { + mappings = new java.util.HashMap(); + } + return mappings; + } + + private enum_Value_type(int value) + { + intValue = value; + enum_Value_type.getMappings().put(value, this); + } + + public int getValue() + { + return intValue; + } + + public static enum_Value_type forValue(int value) + { + return getMappings().get(value); + } + } + + + /** + @brief 将二进制流的数组转换为制定的数据类型,增加字节序的转换 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return uint out 32位无符号整型数据 + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static uint convertUInt32_net(byte[] b, int haveread) + public static int convertUInt32_net(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread])).toString(); + String s2 = (new Byte(b[haveread + 1])).toString(); + String s3 = (new Byte(b[haveread + 2])).toString(); + String s4 = (new Byte(b[haveread + 3])).toString(); + return (int)convertInt32(s1, s2, s3, s4); + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return uint out 32位无符号整型数据 + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static uint convertUInt32(byte[] b, int haveread) + public static int convertUInt32(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread + 3])).toString(); + String s2 = (new Byte(b[haveread + 2])).toString(); + String s3 = (new Byte(b[haveread + 1])).toString(); + String s4 = (new Byte(b[haveread])).toString(); + return (int)convertInt32(s1, s2, s3, s4); + } + /** + @brief 将二进制流的数组转换为制定的数据类型,增加字节序的转换 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 32位整型数据 + + */ + public static int convertInt32_net(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread])).toString(); + String s2 = (new Byte(b[haveread + 1])).toString(); + String s3 = (new Byte(b[haveread + 2])).toString(); + String s4 = (new Byte(b[haveread + 3])).toString(); + return convertInt32(s1, s2, s3, s4); + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 32位整型数据 + + */ + public static int convertInt32(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread + 3]) & 0xFF)+""; + String s2 = (new Byte(b[haveread + 2])& 0xFF)+""; + String s3 = (new Byte(b[haveread + 1])& 0xFF)+""; + String s4 = (new Byte(b[haveread])& 0xFF)+""; + return convertInt32(s1, s2, s3, s4); + } + /** + @brief 将字符型的数据转换无符号的整数 + // @param string in 高位字符 + // @param string in 低位字符 + @return int out 16位无符号整型数据 + + */ + public static int convertInt32(String s1, String s2, String s3, String s4) + { + int nValue = (Integer.parseInt(s1, 10) * 256 * 256 * 256 + Integer.parseInt(s2, 10) * 256 * 256 + Integer.parseInt(s3, 10) * 256 + Integer.parseInt(s4, 10)); + return nValue; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param int[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ + + + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param uint[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ + + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return float out 32位浮点数据 + + */ + public static float convertfloat(byte[] b, int haveread) + { + // 确保有足够的数据来读取一个float(4字节) + if (haveread + 4 > b.length) { + throw new IndexOutOfBoundsException("Not enough bytes to read a float."); + } + + // 创建一个ByteBuffer来处理字节 + ByteBuffer buffer = ByteBuffer.wrap(b, haveread, 4); + // 设置字节顺序,假设是大端序(与许多C#系统和网络协议相同) + buffer.order(ByteOrder.BIG_ENDIAN); + + // 从ByteBuffer中读取float + float fValue = buffer.getFloat(); + + return fValue; + } + /** + @brief 将二进制流的数组转换为制定的数据类型,增加字节序的转换 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return float out 32位浮点数据 + + */ + public static float convertfloat_net(byte[] b, int haveread) + { + // 确保有足够的数据来读取一个float(4字节) + if (haveread + 4 > b.length) { + throw new IndexOutOfBoundsException("Not enough bytes to read a float."); + } + + // 创建一个ByteBuffer来处理字节 + ByteBuffer buffer = ByteBuffer.wrap(b, haveread, 4); + // 设置字节顺序,假设是大端序(与许多C#系统和网络协议相同) + buffer.order(ByteOrder.BIG_ENDIAN); + + // 从ByteBuffer中读取float + float fValue = buffer.getFloat(); + + return fValue; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param float[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ + + +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static ushort convertUInt16_net(byte[] b, int haveread) +// public static short convertUInt16_net(byte[] b, int haveread) +// { +// String s1 = (new Byte(b[haveread])).toString(); +// String s2 = (new Byte(b[haveread + 1])).toString(); +// return (short)convertInt16(s1, s2); +// } + + public static short convertUInt16_net(byte[] b, int offset) { + // 确保offset是有效的,并且偏移量之后至少还有一个字节 + if (b == null || offset < 0 || offset + 1 >= b.length) { + throw new IndexOutOfBoundsException("Invalid offset or array length"); + } + + // 假设字节顺序是大端的(网络字节序通常是大端的),我们需要先读取高字节再读取低字节 + // Java的byte类型是有符号的,但我们可以使用无符号右移(>>>)来确保结果是无符号的 + return (short) (((b[offset] & 0xFF) << 8) | (b[offset + 1] & 0xFF)); + + // 如果需要确保结果是正的(即无符号的),并且不会超出short的范围,可以返回强制类型转换后的short + // 但请注意,如果结果超过了short的最大值(32767),这里会丢失高位的信息 + // 在大多数情况下,这不会是一个问题,因为网络数据通常被设计为不会超出这些范围 +// return (short) result; + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 16位无符号整型数据 + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static ushort convertUInt16(byte[] b, int haveread) + public static short convertUInt16(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread + 1])).toString(); + String s2 = (new Byte(b[haveread])).toString(); + return (short)convertInt16(s1, s2); + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 16位整型数据 + + */ + public static short convertInt16_net(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread])).toString(); + String s2 = (new Byte(b[haveread + 1])).toString(); + return convertInt16(s1, s2); + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 16位整型数据 + + */ + public static short convertInt16(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread + 1]) & 0xFF)+""; + String s2 = (new Byte(b[haveread]) & 0xFF)+""; + return convertInt16(s1, s2); + } + /** + @brief 将字符型的数据转换无符号的整数 + // @param string in 高位字符 + // @param string in 低位字符 + @return int out 16位无符号整型数据 + + */ + public static short convertInt16(String s1, String s2) + { + short Value = (short)(Short.parseShort(s1, 10) * 256 + Integer.parseInt(s2, 10)); + return Value; + } + //解析结构体 +// public static Object BytesToStuct(byte[] bytes, Class type) +// { +// //得到结构体的大小 +// int size = Marshal.SizeOf(type); +// //byte数组长度小于结构体的大小 +// if (size > bytes.length) +// { +// //返回空 +// return null; +// } +// //分配结构体大小的内存空间 +// IntPtr structPtr = Marshal.AllocHGlobal(size); +// //将byte数组拷到分配好的内存空间 +// Marshal.Copy(bytes, 0, structPtr, size); +// //将内存空间转换为目标结构体 +// Object obj = Marshal.PtrToStructure(structPtr, type); +// //释放内存空间 +// Marshal.FreeHGlobal(structPtr); +// //返回结构体 +// return obj; +// } + +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: + ///#endregion +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewBodyTaglogbuffer.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewBodyTaglogbuffer.java new file mode 100644 index 0000000..9ab64ba --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewBodyTaglogbuffer.java @@ -0,0 +1,17 @@ +package com.njcn.csharmonic.offline.log.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class NewBodyTaglogbuffer implements Serializable { + + private int ParaCode; // 参数编码 + private int ParaValue; // 参数值 + + public NewBodyTaglogbuffer(int paraCode, int paraValue) { + ParaCode = paraCode; + ParaValue = paraValue; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewHeadTaglogbuffer.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewHeadTaglogbuffer.java new file mode 100644 index 0000000..5bc7e63 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewHeadTaglogbuffer.java @@ -0,0 +1,26 @@ +package com.njcn.csharmonic.offline.log.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class NewHeadTaglogbuffer implements Serializable { + private short name; // 监测点序号 + private TagMsTime Devtime; // 绝对时间 + private short LogType; // 日志类型(装置故障类、越限类) + private short LogCode; // 日志代码 + private short LogLb; // 日志录波 + private short LogBackup; // 日志补零位 + private int LogParaNum; // 日志参数项数 + + public NewHeadTaglogbuffer(short name, TagMsTime devtime, short logType, short logCode, short logLb, short logBackup, int logParaNum) { + this.name = name; + Devtime = devtime; + LogType = logType; + LogCode = logCode; + LogLb = logLb; + LogBackup = logBackup; + LogParaNum = logParaNum; + } +} 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 new file mode 100644 index 0000000..a9fd7ef --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/NewTaglogbuffer.java @@ -0,0 +1,21 @@ +package com.njcn.csharmonic.offline.log.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +public class NewTaglogbuffer implements Serializable { + private NewHeadTaglogbuffer newHeadTaglogbuffer; + private List newBodyTaglogbuffers; + private LocalDateTime start, end; //事件起始和结束时间 + private String path = ""; //事件对应波形文件名称 + + public NewTaglogbuffer(NewHeadTaglogbuffer head, ArrayList body) { + newHeadTaglogbuffer = head; + newBodyTaglogbuffers = body; + } +} 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 new file mode 100644 index 0000000..fb987d4 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagComtradeCfg.java @@ -0,0 +1,23 @@ +package com.njcn.csharmonic.offline.log.vo; + +import lombok.Data; +import java.time.LocalDateTime; +import java.util.ArrayList; + +@Data +public class TagComtradeCfg { + private int nChannelNum; //通道总个数 + private int nAnalogNum; //模拟量通道的个数 WW 2013-05-15 + private int nDigitalNum; //数字量通道的个数 WW 2013-05-15 + private ArrayList oneChannleCfg; //模拟量通道记录类链表 + private ArrayList oneChannleCfgDig; //数字量通道记录类链表 + private LocalDateTime timeTrigger = LocalDateTime.MIN; //暂态触发时间 + private LocalDateTime timeStart = LocalDateTime.MIN; //波形起始时间 注:相较于TimeTrigger波形触发时间起始有一段平滑过渡波形时间,约100ms + private LocalDateTime timeEnd = LocalDateTime.MIN; //波形结束时间 + private String path; //对应波形cfg文件全路径名称 + + public TagComtradeCfg() { + oneChannleCfg = new ArrayList(); + oneChannleCfgDig = new ArrayList(); + } +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagMsTime.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagMsTime.java new file mode 100644 index 0000000..0bd7b05 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagMsTime.java @@ -0,0 +1,26 @@ +package com.njcn.csharmonic.offline.log.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TagMsTime implements Serializable { + private short year; + private short month; + private short day; + private short hour; + private short min; + private short sec; + private short ms; + + public TagMsTime(short year, short month, short day, short hour, short min, short sec, short ms) { + this.year = year; + this.month = month; + this.day = day; + this.hour = hour; + this.min = min; + this.sec = sec; + this.ms = ms; + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..92423e6 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfg.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.log.vo; + +import lombok.Data; + +@Data +public class TagOneChannleCfg { + //通道序号 + private int nIndex; + //通道名称 + private String szChannleName; + //相位名称 + private String szPhasicName; + //监视的通道名称 + private String szMonitoredChannleName; + //通道的单位 + private String szUnitName; + //通道的系数 + private float fCoefficent; + //通道的便宜量 + private float fOffset; + //起始采样时间的偏移量 + private float fTimeOffset; + //采样值的最小值 + private int nMin; + //采样值的最大值 + private int nMax; + //一次变比 + private float fPrimary; + //二次变比 + private float fSecondary; + //一次值还是二次值标志 + private String szValueType; +} 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 new file mode 100644 index 0000000..81a11b6 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/log/vo/TagOneChannleCfgDigital.java @@ -0,0 +1,17 @@ +package com.njcn.csharmonic.offline.log.vo; + +import lombok.Data; + +@Data +public class TagOneChannleCfgDigital { + //通道序号 + private int nIndex; + //通道名称 + private String szChannleName; + //相位名称 + private String szPhasicName; + //监视的通道名称 + private String szMonitoredChannleName; + //通道的单位 + private int initial; +} 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 new file mode 100644 index 0000000..4e8f5d9 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/AnalyseComtradeCfg.java @@ -0,0 +1,686 @@ +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.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 AnalyseComtradeCfg { + + 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 List processDirectory(List files) throws IOException { + HashMap minDataHhHashMap = new HashMap<>(); + HashMap minDataHashMap = new HashMap<>(); + for(MultipartFile file : files){ + if(file.getOriginalFilename().indexOf(".bin")!=-1){ + if (file.getOriginalFilename().toUpperCase().indexOf("HH") >= 0) { // 读取分钟秒下的高频谐波数据 + convertMinHh(file,minDataHhHashMap); + } else { // 读取分钟数据 + convertMin(file,minDataHashMap); + } + } + } + System.out.println(minDataHhHashMap); + System.out.println(minDataHashMap); + return 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("phasic_type","A"); + hashMapA.put("value_type",valueType); + hashMapA.put("time",dateTime.toInstant()); + + HashMap hashMapB = new HashMap<>(); + hashMapB.put("phasic_type","B"); + hashMapB.put("value_type",valueType); + hashMapB.put("time",dateTime.toInstant()); + + HashMap hashMapC = new HashMap<>(); + hashMapC.put("phasic_type","C"); + hashMapC.put("value_type",valueType); + hashMapC.put("time",dateTime.toInstant()); + + HashMap hashMapM = new HashMap<>(); + hashMapM.put("phasic_type","M"); + hashMapM.put("value_type",valueType); + hashMapM.put("time",dateTime.toInstant()); + + + HashMap hashMapAB = new HashMap<>(); + hashMapAB.put("phasic_type","AB"); + hashMapAB.put("value_type",valueType); + hashMapAB.put("time",dateTime.toInstant()); + + HashMap hashMapBC = new HashMap<>(); + hashMapBC.put("phasic_type","BC"); + hashMapBC.put("value_type",valueType); + hashMapBC.put("time",dateTime.toInstant()); + + HashMap hashMapCA = new HashMap<>(); + hashMapCA.put("phasic_type","CA"); + hashMapCA.put("value_type",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.add(pqdDataA); + pqdData.add(pqdDataB); + pqdData.add(pqdDataC); + pqdData.add(pqdDataM); + + return pqdData; + + + } + + public static boolean isZero(float value) { + return Math.abs(value) < 1e-6; // 判断value是否在精度范围内近似等于0 + } + + // 实现转换高频谐波数据的逻辑 + private static HashMap convertMinHh(MultipartFile file,HashMap minDataHhDic) throws IOException { + String strFile = file.getOriginalFilename(); + // 实现转换高频谐波数据的逻辑 + System.out.println("Converting HH data from: " + file.getOriginalFilename()); + InputStream binFile = null; + try{ + try { + binFile = file.getInputStream(); + } 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(MultipartFile file, HashMap minDataDic) { + String strFile = file.getOriginalFilename(); + InputStream binFile = null; + + try { + + // 实现转换分钟数据的逻辑 + System.out.println("Converting minute data from: " + strFile); + + binFile = file.getInputStream(); + + + 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(MultipartFile file) { + tagComtradeCfg comtradeCfg = new tagComtradeCfg(); + String strFilePath = file.getOriginalFilename(); + int i = 0; //用于遍历 字符串转换的字段数组 + String strFileLine;//临时存放 cfg每行读取的字符串 + String[] strTempArray; //临时存放 字符串转换的字段数组 + + tagRates ratesCfg = new tagRates(); + try { + InputStream readFile = file.getInputStream(); + 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(file.getOriginalFilename()); + + 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 = AnalyseComtradeCfg.analyseComtradeCfg("C:\\Users\\Administrator\\Desktop\\浙江无线\\离线数据上传\\09\\comtrade\\line1_20240704_143908_213.cfg"); +// System.out.println(tagComtradeCfg); +// HashMap minDataHashMap = AnalyseComtradeCfg.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/MinData.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/MinData.java new file mode 100644 index 0000000..71ead32 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/MinData.java @@ -0,0 +1,20 @@ +package com.njcn.csharmonic.offline.mincfg; + + +import com.njcn.csharmonic.offline.mincfg.vo.tagPQDataCmn; +import lombok.Data; + +/** + * Description: + * Date: 2024/7/16 10:45【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +public class MinData { + public tagPQDataCmn max; + public tagPQDataCmn min; + public tagPQDataCmn cp95; + public tagPQDataCmn avg; +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/MinDataHh.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/MinDataHh.java new file mode 100644 index 0000000..bf9983e --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/MinDataHh.java @@ -0,0 +1,19 @@ +package com.njcn.csharmonic.offline.mincfg; + +import com.njcn.csharmonic.offline.mincfg.vo.tagPQDataCmnHh; +import lombok.Data; + +/** + * Description: + * Date: 2024/7/16 10:35【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +public class MinDataHh { + public tagPQDataCmnHh max; + public tagPQDataCmnHh min; + public tagPQDataCmnHh cp95; + public tagPQDataCmnHh avg; +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/RTC_Timer_MS.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/RTC_Timer_MS.java new file mode 100644 index 0000000..683d827 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/RTC_Timer_MS.java @@ -0,0 +1,79 @@ +package com.njcn.csharmonic.offline.mincfg; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +/** + * Description: + * Date: 2024/7/15 19:18【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public class RTC_Timer_MS { + public short year; + public short month; + public short day; + public short hour; + public short minute; + public short second; + public short millisecond; + + public static int GetSize() { + return 7 * Short.BYTES; + } + + public boolean setStructBuf(byte[] bArray, int nHaveRead) { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) { + return false; + } + + ByteBuffer byteBuffer = ByteBuffer.wrap(bArray).order(ByteOrder.LITTLE_ENDIAN); + int iStep = nHaveRead; + + year = byteBuffer.getShort(iStep); + iStep += Short.BYTES; + month = byteBuffer.getShort(iStep); + iStep += Short.BYTES; + day = byteBuffer.getShort(iStep); + iStep += Short.BYTES; + hour = byteBuffer.getShort(iStep); + iStep += Short.BYTES; + minute = byteBuffer.getShort(iStep); + iStep += Short.BYTES; + second = byteBuffer.getShort(iStep); + iStep += Short.BYTES; + millisecond = byteBuffer.getShort(iStep); + + return true; + } + + public int GetStructBuf(byte[] bArray, int nHaveRead) { + int nSize = bArray.length; + if (nSize < (nHaveRead + GetSize())) { + return 0; + } + + ByteBuffer byteBuffer = ByteBuffer.wrap(bArray).order(ByteOrder.LITTLE_ENDIAN); + int iStep = nHaveRead; + + byteBuffer.putShort(iStep, year); + iStep += Short.BYTES; + byteBuffer.putShort(iStep, month); + iStep += Short.BYTES; + byteBuffer.putShort(iStep, day); + iStep += Short.BYTES; + byteBuffer.putShort(iStep, hour); + iStep += Short.BYTES; + byteBuffer.putShort(iStep, minute); + iStep += Short.BYTES; + byteBuffer.putShort(iStep, second); + iStep += Short.BYTES; + byteBuffer.putShort(iStep, millisecond); + + return GetSize(); + } +} + + diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/TagPQDataCmnHh.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/TagPQDataCmnHh.java new file mode 100644 index 0000000..ad78c2a --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/TagPQDataCmnHh.java @@ -0,0 +1,126 @@ +package com.njcn.csharmonic.offline.mincfg; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.util.Arrays; + +/** + * Description: + * Date: 2024/7/15 19:14【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public class TagPQDataCmnHh { + short name; /*监测点序号 2 */ + short dataType; /*数据类型 2 */ + public int dataTag; /* 标记 1:暂态标记 2:无效数据*/ + public RTC_Timer_MS time; /* 时标 */ + /*2-9k谐波 2.1kHz / 2.3kHZ … 8.9kHz */ + public float[][] hharmRmsList29K; /*6-35 谐波有效值序列(Uabc/Iabc) */ + public float[][] hharmThdList29K; /*6-35 谐波含有率序列 */ + public float[] hharmTotalRms29K; /*6 谐波总有效值 */ + public float[] hharmTotalThd29K; /*6 谐波总畸变率 */ + public float[] hharmMaxRms29K; /*6 谐波最大有效值 */ + public float[] hharmMaxThd29K; /*6 谐波最大畸变率 */ + public float[] hharmMaxFreq29K; /*6 谐波最大值频点 */ + /*2-150k谐波 2kHz / 4kHz … 150kHz */ + public float[][] hharmRmsList2150K; /*6-75 谐波有效值序列(2-150) */ + public float[][] hharmThdList2150K; /*6-75 谐波含有率序列 */ + public float[] hharmTotalRms2150K; /*6 谐波总有效值 */ + public float[] hharmTotalThd2150K; /*6 谐波总畸变率 */ + public float[] hharmMaxRms2150K; /*6 谐波最大有效值 */ + public float[] hharmMaxThd2150K; /*6 谐波最大畸变率 */ + public float[] hharmMaxFreq2150K; /*6 谐波最大值频点 */ + + public static int getSize() { + int len = RTC_Timer_MS.GetSize() + 2 * Short.BYTES + 1 * Integer.BYTES + 6 * 35 * 2 * Float.BYTES + 6 * 75 * 2 * Float.BYTES + 6 * 10 * Float.BYTES; + return len; + } + + public TagPQDataCmnHh() { + time = new RTC_Timer_MS(); + hharmRmsList29K = new float[6][35]; + hharmThdList29K = new float[6][35]; + hharmTotalRms29K = new float[6]; + hharmTotalThd29K = new float[6]; + hharmMaxRms29K = new float[6]; + hharmMaxThd29K = new float[6]; + hharmMaxFreq29K = new float[6]; + hharmRmsList2150K = new float[6][75]; + hharmThdList2150K = new float[6][75]; + hharmTotalRms2150K = new float[6]; + hharmTotalThd2150K = new float[6]; + hharmMaxRms2150K = new float[6]; + hharmMaxThd2150K = new float[6]; + hharmMaxFreq2150K = new float[6]; + } + + public boolean setStructBuf(byte[] bArray, int nHaveRead) { + int nByteSize = bArray.length; + //int size = getSize(); + if (nByteSize < getSize()){ + return false; + } + + + int iStep = nHaveRead; + name = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Short.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getShort(); iStep += Short.BYTES; + dataType = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Short.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getShort(); iStep += Short.BYTES; + dataTag = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Integer.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getInt(); iStep += Integer.BYTES; + time.setStructBuf(bArray, iStep); + iStep += RTC_Timer_MS.GetSize(); + + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 35; j++) { + hharmRmsList29K[i][j] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + } + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 35; j++) { + hharmThdList29K[i][j] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + } + for (int i = 0; i < 6; i++) { + hharmTotalRms29K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + hharmTotalThd29K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + hharmMaxRms29K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + hharmMaxThd29K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + hharmMaxFreq29K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 75; j++) { + hharmRmsList2150K[i][j] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + } + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 75; j++) { + hharmThdList2150K[i][j] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + } + for (int i = 0; i < 6; i++) { + hharmTotalRms2150K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + hharmTotalThd2150K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + hharmMaxRms2150K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + hharmMaxThd2150K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + for (int i = 0; i < 6; i++) { + hharmMaxFreq2150K[i] = ByteBuffer.wrap(Arrays.copyOfRange(bArray, iStep, iStep + Float.BYTES)).order(ByteOrder.LITTLE_ENDIAN).getFloat(); iStep += Float.BYTES; + } + return true; + } +} 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 new file mode 100644 index 0000000..e7cf184 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagComtradeCfg.java @@ -0,0 +1,28 @@ +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/tagOneChannleCfg.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneChannleCfg.java new file mode 100644 index 0000000..108d41e --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneChannleCfg.java @@ -0,0 +1,42 @@ +package com.njcn.csharmonic.offline.mincfg; + +import lombok.Data; + +import java.io.Serializable; + +/** + * Description: + * Date: 2024/7/15 15:37【需求编号】 + *模拟量通道记录类 + * @author clam + * @version V1.0.0 + */ +@Data +public class tagOneChannleCfg implements Serializable { + //通道序号 + public int nIndex; + //通道名称 + public String szChannleName; + //相位名称 + public String szPhasicName; + //监视的通道名称 + public String szMonitoredChannleName; + //通道的单位 + public String szUnitName; + //通道的系数 + public float fCoefficent; + //通道的便宜量 + public float fOffset; + //起始采样时间的偏移量 + public float fTimeOffset; + //采样值的最小值 + public int nMin; + //采样值的最大值 + public int nMax; + //一次变比 + public float fPrimary; + //二次变比 + public float fSecondary; + //一次值还是二次值标志 + public String szValueType; +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneChannleCfg_digital.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneChannleCfg_digital.java new file mode 100644 index 0000000..7e9a0e2 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneChannleCfg_digital.java @@ -0,0 +1,28 @@ +package com.njcn.csharmonic.offline.mincfg; + +import lombok.Data; + +import java.io.Serializable; + +/** + * Description: + * Date: 2024/7/15 15:36【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +//数字量通道记录类 +@Data +public class tagOneChannleCfg_digital implements Serializable { + + //通道序号 + public int nIndex; + //通道名称 + public String szChannleName; + //相位名称 + public String szPhasicName; + //监视的通道名称 + public String szMonitoredChannleName; + //通道的单位 + public int Initial;; +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneRate.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneRate.java new file mode 100644 index 0000000..8bdae04 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagOneRate.java @@ -0,0 +1,22 @@ +package com.njcn.csharmonic.offline.mincfg; + +import lombok.Data; + +/** + * Description: + * Date: 2024/7/15 15:38【需求编号】 + *1段采样类 + * @author clam + * @version V1.0.0 + */ +@Data +public class tagOneRate { + //采样率:1秒钟内的采样点数 + public long nOneSample; + //总采样点数 + public long nSampleNum; + //(1段录波中)波形个数 + public long nWaveNum; + //抽点采样间隔 = CFG中每段录波采样率 / 实际抽点采样率 + public long nWaveSpan; +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagRates.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagRates.java new file mode 100644 index 0000000..6c60c5e --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/tagRates.java @@ -0,0 +1,23 @@ +package com.njcn.csharmonic.offline.mincfg; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * Date: 2024/7/15 15:39【需求编号】 + *多段采样类 + * @author clam + * @version V1.0.0 + */ +@Data +public class tagRates { + public int nRates; //采样段数 + public List OneRate; //(每周波)采样率链表 + public tagRates() + { + this.OneRate = new ArrayList<>(); //(每周波)采样率链表 初始化 + } +} 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 new file mode 100644 index 0000000..4efefb8 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/AnalyseComtradeCfg1.java @@ -0,0 +1,703 @@ +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("phasic_type","A"); + hashMapA.put("value_type",valueType); + hashMapA.put("time",dateTime.toInstant()); + + HashMap hashMapB = new HashMap<>(); + hashMapB.put("phasic_type","B"); + hashMapB.put("value_type",valueType); + hashMapB.put("time",dateTime.toInstant()); + + HashMap hashMapC = new HashMap<>(); + hashMapC.put("phasic_type","C"); + hashMapC.put("value_type",valueType); + hashMapC.put("time",dateTime.toInstant()); + + HashMap hashMapM = new HashMap<>(); + hashMapM.put("phasic_type","M"); + hashMapM.put("value_type",valueType); + hashMapM.put("time",dateTime.toInstant()); + + + HashMap hashMapAB = new HashMap<>(); + hashMapAB.put("phasic_type","AB"); + hashMapAB.put("value_type",valueType); + hashMapAB.put("time",dateTime.toInstant()); + + HashMap hashMapBC = new HashMap<>(); + hashMapBC.put("phasic_type","BC"); + hashMapBC.put("value_type",valueType); + hashMapBC.put("time",dateTime.toInstant()); + + HashMap hashMapCA = new HashMap<>(); + hashMapCA.put("phasic_type","CA"); + hashMapCA.put("value_type",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.add(pqdDataA); + pqdData.add(pqdDataB); + pqdData.add(pqdDataC); + pqdData.add(pqdDataM); + + 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/DATA_FLICK.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_FLICK.java new file mode 100644 index 0000000..58f83a3 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_FLICK.java @@ -0,0 +1,43 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_FLICK //波动闪变 +{ + private RTC_Timer time; //数据时标 + private Float[] FLUCT; //波动 + private Float[] FLICT; //短闪 + private Float[] LFLICT; //长闪 + public DATA_FLICK() + { + time = new RTC_Timer(); + FLUCT = new Float[3]; + FLICT = new Float[3]; + LFLICT = new Float[3]; + } + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE / Byte.SIZE + 9 * Float.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_FLUCT = new RefObject(FLUCT); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_FLUCT); + FLUCT = tempRef_FLUCT.argvalue; + RefObject tempRef_FLICT = new RefObject(FLICT); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_FLICT); + FLICT = tempRef_FLICT.argvalue; + RefObject tempRef_LFLICT = new RefObject(LFLICT); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_LFLICT); + LFLICT = tempRef_LFLICT.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMI.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMI.java new file mode 100644 index 0000000..1cdd6f1 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMI.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_HARMI //谐波电流幅值 +{ + private RTC_Timer time; //数据时标 + private Float[][] HARMI; //3-?谐波电流幅值 + public DATA_HARMI(int num) + { + time = new RTC_Timer(); + HARMI = new Float[3][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE / Byte.SIZE + 3 * num * Float.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_HARMI = new RefObject(HARMI); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_HARMI); + HARMI = tempRef_HARMI.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMIP.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMIP.java new file mode 100644 index 0000000..09fe033 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMIP.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_HARMIP //谐波电流相位 +{ + private RTC_Timer time; //数据时标 + private Float[][] HARMIP; //3-?谐波电流相位 + public DATA_HARMIP(int num) + { + time = new RTC_Timer(); + HARMIP = new Float[3][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE / Byte.SIZE/Byte.SIZE + 3 * num * Float.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_HARMIP = new RefObject(HARMIP); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_HARMIP); + HARMIP = tempRef_HARMIP.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMP.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMP.java new file mode 100644 index 0000000..394b23c --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMP.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_HARMP //谐波有功 +{ + private RTC_Timer time; //数据时标 + private Float[][] HARMP; //4-?谐波有功 + public DATA_HARMP(int num) + { + time = new RTC_Timer(); + HARMP = new Float[4][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE + 4 * num * Float.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_HARMP = new RefObject(HARMP); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_HARMP); + HARMP = tempRef_HARMP.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMQ.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMQ.java new file mode 100644 index 0000000..15abfb8 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMQ.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_HARMQ //谐波无功 +{ + private RTC_Timer time; //数据时标 + private Float[][] HARMQ; //4-?谐波无功 + public DATA_HARMQ(int num) + { + time = new RTC_Timer(); + HARMQ = new Float[4][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE + 4 * num * Float.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_HARMQ = new RefObject(HARMQ); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_HARMQ); + HARMQ = tempRef_HARMQ.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMS.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMS.java new file mode 100644 index 0000000..15a7c7b --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMS.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_HARMS //谐波视在 +{ + private RTC_Timer time; //数据时标 + private Float[][] HARMS; //4-?谐波视在 + public DATA_HARMS(int num) + { + time = new RTC_Timer(); + HARMS = new Float[4][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE + 4 * num * Float.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_HARMS = new RefObject(HARMS); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_HARMS); + HARMS = tempRef_HARMS.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMV.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMV.java new file mode 100644 index 0000000..9e26048 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMV.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_HARMV //谐波电压含有率 +{ + private RTC_Timer time; //数据时标 + private Float[][] HARMV; //3-?谐波电压含有率 + public DATA_HARMV(int num) + { + time = new RTC_Timer(); + HARMV = new Float[3][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE / Byte.SIZE + 3 * num * Float.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_HARMV = new RefObject(HARMV); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_HARMV); + HARMV = tempRef_HARMV.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMVP.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMVP.java new file mode 100644 index 0000000..3d24098 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_HARMVP.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_HARMVP //谐波电压相位 +{ + private RTC_Timer time; //数据时标 + private Float[][] HARMVP; //3-?谐波电压相位 + public DATA_HARMVP(int num) + { + time = new RTC_Timer(); + HARMVP = new Float[3][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE / Byte.SIZE + 3 * num * Float.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_HARMVP = new RefObject(HARMVP); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_HARMVP); + HARMVP = tempRef_HARMVP.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_INHARMI.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_INHARMI.java new file mode 100644 index 0000000..eab2735 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_INHARMI.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_INHARMI //间谐波电流幅值 +{ + private RTC_Timer time; //数据时标 + private Float[][] INHARMI; //3-?间谐波电流幅值 + public DATA_INHARMI(int num) + { + time = new RTC_Timer(); + INHARMI = new Float[3][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE / Byte.SIZE + 3 * num * Float.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_INHARMI = new RefObject(INHARMI); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_INHARMI); + INHARMI = tempRef_INHARMI.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_INHARMV.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_INHARMV.java new file mode 100644 index 0000000..8a9086f --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_INHARMV.java @@ -0,0 +1,33 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_INHARMV //间谐波电压幅值 +{ + private RTC_Timer time; //数据时标 + private Float[][] INHARMV; //3-?间谐波电压幅值 + public DATA_INHARMV(int num) + { + time = new RTC_Timer(); + INHARMV = new Float[3][num]; + } + public static int GetSize(int num) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE + 3 * num * Float.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int num) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(num)) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_INHARMV = new RefObject(INHARMV); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_INHARMV); + INHARMV = tempRef_INHARMV.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_RMS.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_RMS.java new file mode 100644 index 0000000..37bef75 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DATA_RMS.java @@ -0,0 +1,73 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class DATA_RMS //有效值数据 +{ + private RTC_Timer time; //数据时标 + private Float[] RMS; //9 相电压、线电压、电流有效值 + private Float[] UU_DEV; //6 相电压、线电压上偏差 + private Float[] UL_DEV; //6 相电压、线电压上偏差 + private Float[] THD; //6 电压电流畸变率 + private Float[] FREQ; //2 频率及频率偏差 + private Float[][] UI_SEQ; //2-5 电压电流序分量及不平衡度 + private Float[][] TOTAL_POWER; //4-3 分相及总功率P、Q、S + private Float[] COS_PF; //4 视在功率因数 + private Float[] COS_DF; //4 位移功率因数 + public DATA_RMS() + { + time = new RTC_Timer(); + RMS = new Float[9]; + UU_DEV = new Float[6]; + UL_DEV = new Float[6]; + THD = new Float[6]; + FREQ = new Float[2]; + UI_SEQ = new Float[2][5]; + TOTAL_POWER = new Float[4][3]; + COS_PF = new Float[4]; + COS_DF = new Float[4]; + } + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE + 59 * Float.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer.GetSize(); + RefObject tempRef_RMS = new RefObject(RMS); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_RMS); + RMS = tempRef_RMS.argvalue; + RefObject tempRef_UU_DEV = new RefObject(UU_DEV); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_UU_DEV); + UU_DEV = tempRef_UU_DEV.argvalue; + RefObject tempRef_UL_DEV = new RefObject(UL_DEV); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_UL_DEV); + UL_DEV = tempRef_UL_DEV.argvalue; + RefObject tempRef_THD = new RefObject(THD); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_THD); + THD = tempRef_THD.argvalue; + RefObject tempRef_FREQ = new RefObject(FREQ); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_FREQ); + FREQ = tempRef_FREQ.argvalue; + RefObject tempRef_UI_SEQ = new RefObject(UI_SEQ); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_UI_SEQ); + UI_SEQ = tempRef_UI_SEQ.argvalue; + RefObject tempRef_TOTAL_POWER = new RefObject(TOTAL_POWER); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_TOTAL_POWER); + TOTAL_POWER = tempRef_TOTAL_POWER.argvalue; + RefObject tempRef_COS_PF = new RefObject(COS_PF); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_COS_PF); + COS_PF = tempRef_COS_PF.argvalue; + RefObject tempRef_COS_DF = new RefObject(COS_DF); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_COS_DF); + COS_DF = tempRef_COS_DF.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DealDataFile.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DealDataFile.java new file mode 100644 index 0000000..b87332d --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/DealDataFile.java @@ -0,0 +1,1353 @@ +package com.njcn.csharmonic.offline.mincfg.vo;//package com.njcn.user.utils.test.test1; +// +//import org.yaml.snakeyaml.reader.StreamReader; +// +//import java.io.IOException; +// +//public class DealDataFile +//{ +// public String Path; //工程文件文件总路径 +// public String RecordPatn; //配置参数文件路径 +// public String PowerSetPath; //风电光伏配置 +// public String comtradePath; //波形文件路径 +// public String logPath; //事件文件路径 +// public String secPath; //3秒文件路径 +// public String MinPath; //分钟统计文件路径 +// public String powerrogPath; //风电光伏数据文件 +// +// public cmn_mode_cfg Record_Info; //参数配置结构 +// public PowerSet Power_Set; //风电光伏配置结构 +// +// public java.util.HashMap powerRegs = new java.util.HashMap(); //风电光伏功率区间数据 +// private java.util.Date powerReg_starttime, powerReg_endtime = new java.util.Date(0); //功率区间的时间范围 +// +// private java.util.ArrayList tagComtradeCfgs = new java.util.ArrayList(); //波形文件cfg信息队列 +// private java.util.ArrayList newTaglogbuffers = new java.util.ArrayList(); //事件队列 +// private java.util.Date Event_starttime, Event_endtime = new java.util.Date(0); //事件的时间范围 +// +// private java.util.ArrayList SectagPqDatas = new java.util.ArrayList(); //3秒数据队列 +// private java.util.Date Sec_starttime, Sec_endtime = new java.util.Date(0); //3秒数据的时间范围 +// private java.util.ArrayList SectagPQDataCmnHhs = new java.util.ArrayList(); //3秒数据下的高次谐波队列 +// private java.util.Date Sechh_starttime, Sechh_endtime = new java.util.Date(0); //3秒数据的高次谐波时间范围 +// +// public java.util.HashMap MinDataDic = new java.util.HashMap(); //分钟数据队列 +// private java.util.Date Min_starttime, Min_endtime = new java.util.Date(0); //分钟数据的时间范围 +// public java.util.HashMap MinDataHhDic = new java.util.HashMap(); //分钟数据下的高次谐波队列 +// private java.util.Date MinHh_starttime, MinHh_endtime = new java.util.Date(0); //分钟数据下的高次谐波的时间范围 +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 初始化并执行所有功能 +// public final void Run(String strFile) //解析数据 写入台账 数据入库 参数:工程文件总路径 +// { +// //ConvertRecord("C:\\Users\\施金磊\\Desktop\\普测测试文档\\3.bin"); +// Path = strFile; //工程文件总路径 +// RecordPatn = strFile + "\\record.bin"; //配置参数文件路径 +// PowerSetPath = strFile + "\\power_set.bin"; //风电光伏配置路径 +// comtradePath = strFile + "\\comtrade"; //波形文件路径 +// logPath = strFile + "\\log"; //事件文件路径 +// secPath = strFile + "\\sec"; //3秒数据文件路径 +// MinPath = strFile + "\\min"; //分钟数据文件路径 +// powerrogPath = strFile + "\\power_reg"; //风电光伏数据文件路径 +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析模块 +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析配置参数 +// if (File.Exists(RecordPatn)) //解析配置参数 +// { +// ConvertRecord(RecordPatn); +// } +// else +// { +// System.out.println("----------配置参数不存在----------"); +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析风电光伏参数 +// if (File.Exists(PowerSetPath)) //风电光伏配置参数 +// { +// ConvertPowerset(PowerSetPath); +// } +// else +// { +// System.out.println("----------风电光伏配置参数不存在----------"); +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析波形的CFG文件 +// DirectoryInfo Comtrade = new DirectoryInfo(comtradePath); +// if (Directory.Exists(Comtrade.FullName) && Comtrade.GetFiles().getLength() != 0) //波形文件夹和波形文件存在 解析cfg文件 +// { +// ConvertCfgFile(Comtrade.FullName); +// } +// else +// { +// System.out.println("----------波形文件不存在----------"); +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析log事件文件 +// DirectoryInfo log = new DirectoryInfo(logPath); +// if (Directory.Exists(log.FullName) && log.GetFiles().getLength() != 0) //事件文件夹和事件文件存在 解析log文件 +// { +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// var files = Directory.GetFiles(log.FullName, "*.bin"); //获取文件夹下所有bin文件 +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// for (var file : files) +// { +// ConvertLog(file); +// } +// } +// else +// { +// System.out.println("----------事件文件不存在----------"); +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析3秒数据和3秒数据下的高频谐波 +// DirectoryInfo sec = new DirectoryInfo(secPath); +// if (Directory.Exists(sec.FullName) && sec.GetDirectories().getLength() != 0) //3秒文件夹存在 解析3秒文件 +// { +// for (DirectoryInfo dir : sec.GetDirectories()) +// { +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// var files = Directory.GetFiles(dir.FullName, "*.bin"); //获取文件夹下所有bin文件 +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// for (var file : files) +// { +// if (file.toUpperCase().indexOf("HH") >= 0) //读取3秒下的高频谐波数据 +// { +// ConvertSecHh(file); +// } +// else //读取3秒数据 +// { +// ConvertSec(file); +// } +// +// } +// } +// } +// else +// { +// System.out.println("----------3秒数据文件不存在----------"); +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析分钟数据和分钟数据下的高频谐波 +// DirectoryInfo min = new DirectoryInfo(MinPath); +// if (Directory.Exists(min.FullName) && min.GetDirectories().getLength() != 0) //分钟数据文件夹存在 解析分钟数据文件 +// { +// for (DirectoryInfo dir : min.GetDirectories()) +// { +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// var files = Directory.GetFiles(dir.FullName, "*.bin"); //获取文件夹下所有bin文件 +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// for (var file : files) +// { +// if (file.toUpperCase().indexOf("HH") >= 0) //读取分钟秒下的高频谐波数据 +// { +// ConvertMinHh(file); +// } +// else //读取分钟数据 +// { +// ConvertMin(file); +// } +// } +// } +// } +// else +// { +// System.out.println("----------分钟数据文件不存在----------"); +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析风电光伏数据 +// DirectoryInfo powerrog = new DirectoryInfo(powerrogPath); +// if (Directory.Exists(powerrog.FullName) && powerrog.GetDirectories().getLength() != 0) //风电光伏数据文件夹存在 解析风电光伏数据文件 +// { +// for (DirectoryInfo dir : powerrog.GetDirectories()) +// { +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// var files = Directory.GetFiles(dir.FullName, "*.bin"); //获取文件夹下所有bin文件 +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// for (var file : files) +// { +// ConvertPowerreg(file); +// } +// } +// } +// else +// { +// System.out.println("----------风电光伏数据文件不存在----------"); +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析record参数文件 +// public final void ConvertRecord(String strFile) //配置参数文件解析 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int n1BufLen = prj_record_info.GetSize(); //计算单个统计结构大小 +// int n2BufLen = cmn_mode_cfg.GetSize(); //计算单个统计结构大小 +// +// prj_record_info prj_Record_Info = new prj_record_info(); +// cmn_mode_cfg cmn_Mode_Cfg = new cmn_mode_cfg(); +// if (nBufSize == n1BufLen) //结构大小正常 +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(0, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// prj_Record_Info.SetStructBuf(bBuf, 0); +// Record_Info = prj_Record_Info.cfg; +// } +// else if (nBufSize == n2BufLen) +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(0, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// cmn_Mode_Cfg.SetStructBuf(bBuf, 0); +// Record_Info = cmn_Mode_Cfg; +// } +// else +// { +// System.out.println(String.format("解析配置参数文件异常")); +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析record中的cfg参数文件 +// public final void ConvertRecordcfg(String strFile) //配置参数cfg类型文件解析 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int n1BufLen = cmn_mode_cfg.GetSize(); //计算单个统计结构大小 +// +// cmn_mode_cfg cmn_Mode_Cfg = new cmn_mode_cfg(); +// if (nBufSize == n1BufLen) //结构大小正常 +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(0, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// cmn_Mode_Cfg.SetStructBuf(bBuf, 0); +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析power_set参数文件 +// public final void ConvertPowerset(String strFile) //解析风电光伏配置参数 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int n1BufLen = PowerSet.GetSize(); //计算单个统计结构大小 +// +// PowerSet powerSet = new PowerSet(); +// if (nBufSize == n1BufLen) //结构大小正常 +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(0, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// powerSet.SetStructBuf(bBuf, 0); +// Power_Set = powerSet; +// } +// else +// { +// System.out.println(String.format("解析配置参数文件异常")); +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析单个log事件文件和cfg录波文件 +// public final void ConvertLog(String strFile) //事件参数文件解析 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int LogLen = System.Runtime.InteropServices.Marshal.SizeOf(NewHeadTaglogbuffer.class); //单个头结构大小 +// int n1BufLen = LogLen + 4 * 8; //单个固定结构大小 +////C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +////ORIGINAL LINE: uint nEventNum = (uint)(nBufSize / n1BufLen); +// int nEventNum = (int)(nBufSize / n1BufLen); //确认共多少事件数据结构 +// +// int nStep = 0; //读取偏移量 +// for (int i = 0; i < nEventNum; i++) +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(nStep, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// NewTaglogbuffer newTaglogbuffer = getnewTaglogbuffer(bBuf); +// newTaglogbuffers.add(newTaglogbuffer); +// nStep += n1BufLen; +// +// TagMsTime Devtime = newTaglogbuffer.newHeadTaglogbuffer.Devtime.clone(); +// java.util.Date time = new java.util.Date(Devtime.Year, Devtime.Month, Devtime.Day, Devtime.Hour, Devtime.Min, Devtime.Sec, Devtime.Ms); +// if (!Event_starttime.equals(new java.util.Date(0))) //存在启动时间 +// { +// if (java.util.Date.Compare(time, Event_starttime) <= 0) +// { +// Event_starttime = time; +// } +// } +// else //不存在启动时间 填入当前时间 +// { +// Event_starttime = time; +// } +// if (!Event_endtime.equals(new java.util.Date(0))) +// { +// if (java.util.Date.Compare(time, Event_endtime) >= 0) +// { +// Event_endtime = time; +// } +// } +// else //不存在结束时间 填入当前时间 +// { +// Event_endtime = time; +// } +// +// float sec = 0; +// for (NewBodyTaglogbuffer sing : newTaglogbuffer.newBodyTaglogbuffers) +// { +// switch (sing.ParaCode) +// { +// case 0: //特征幅值 +// //fParam2 = sing.ParaValue / 65536.0f; +// break; +// case 1: //持续时间 +// sec = sing.ParaValue / 65536.0f; +// break; +// case 5: //相别 +// break; +// case 25: //浮动门槛值 +// //fParam3 = sing.ParaValue / 65536.0f; +// break; +// default: +// break; +// } +// } +// newTaglogbuffer.start = time; //事件开始时间 +// newTaglogbuffer.end = time.AddSeconds(sec); //事件结束时间 +// +// for (tagComtradeCfg sing : tagComtradeCfgs) +// { +// if (java.util.Date.Compare(sing.TimeTrigger, newTaglogbuffer.start) <= 0 && java.util.Date.Compare(sing.TimeEnd, newTaglogbuffer.start) >= 0) +// { +// newTaglogbuffer.path = sing.path; +// break; +// } +// } +// } +// } +// public final void ConvertCfgFile(String strFilePath) //解析cfg录波文件 +// { +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// var files = Directory.GetFiles(strFilePath, "*.cfg"); //获取文件夹下所有cfg文件 +////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java: +// for (var file : files) +// { +// AnalyseComtradeCfg(file); +// } +// } +// public final NewTaglogbuffer getnewTaglogbuffer(byte[] Data) +// { +// NewHeadTaglogbuffer head = getNewHeadTaglogbuffer(Data).clone(); +// java.util.ArrayList bodylist = getNewBodyTaglogbuffer(Data, head.clone()); +// NewTaglogbuffer newTaglogbuffer = new NewTaglogbuffer(head.clone(), bodylist); +// return newTaglogbuffer; +// } +// public final NewHeadTaglogbuffer getNewHeadTaglogbuffer(byte[] Data) +// { +// int structlen = System.Runtime.InteropServices.Marshal.SizeOf(NewHeadTaglogbuffer.class); +// byte[] buff = new byte[structlen]; +// System.arraycopy(Data, 0, buff, 0, structlen); +// for (int i = 0; i < 12 * 2; i += 2) +// { +// RefObject tempRef_buff = new RefObject(buff); +// ReversalBuff(tempRef_buff, i, 2); +// buff = tempRef_buff.argvalue; +// } +// for (int i = 12 * 2; i < (12 * 2 + 1 * 4); i += 4) +// { +// RefObject tempRef_buff2 = new RefObject(buff); +// ReversalBuff(tempRef_buff2, i, 4); +// } +// buff = tempRef_buff2.argvalue; +// //数据区转换为结构 +// NewHeadTaglogbuffer logBuff = (NewHeadTaglogbuffer)BytesToStruct(buff, 0, Marshal.SizeOf(NewHeadTaglogbuffer.class), NewHeadTaglogbuffer.class); +// return logBuff; +// } +// public final java.util.ArrayList getNewBodyTaglogbuffer(byte[] Data, NewHeadTaglogbuffer head) +// { +// java.util.ArrayList newBodyTaglogbuffers = new java.util.ArrayList(); +// int structlen = System.Runtime.InteropServices.Marshal.SizeOf(NewHeadTaglogbuffer.class); +////C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +////ORIGINAL LINE: uint bodylen = head.LogParaNum * 8; +// int bodylen = head.LogParaNum * 8; +// byte[] buff = new byte[bodylen]; +// System.arraycopy(Data, structlen, buff, 0, bodylen); +// for (int i = 0; i < (head.LogParaNum * 8); i += 4) +// { +// RefObject tempRef_buff = new RefObject(buff); +// ReversalBuff(tempRef_buff, i, 4); +// } +// buff = tempRef_buff.argvalue; +// for (int i = 0; i < head.LogParaNum; i++) +// { +// NewBodyTaglogbuffer logBuff = (NewBodyTaglogbuffer)BytesToStruct(buff, (i * 8), Marshal.SizeOf(NewBodyTaglogbuffer.class), NewBodyTaglogbuffer.class); +// newBodyTaglogbuffers.add(logBuff.clone()); +// } +// return newBodyTaglogbuffers; +// } +// public final boolean ReversalBuff(RefObject Buffer, int StartIndex, int bufflen) +// { +// if (bufflen % 2 != 0) //确保长度为偶数 +// { +// return false; +// } +// +// int halflen = bufflen / 2; +// byte[] Temp = new byte[halflen]; +// for (int i = 0; i < halflen; i++) +// { +// Temp[i] = Buffer.argvalue[i + StartIndex]; +// Buffer.argvalue[i + StartIndex] = Buffer.argvalue[bufflen + StartIndex - i - 1]; +// Buffer.argvalue[bufflen + StartIndex - i - 1] = Temp[i]; +// } +// return true; +// } +// public static Object BytesToStruct(byte[] buf, int nStart, int len, Class type) +// { +// Object rtn; +// IntPtr buffer = Marshal.AllocHGlobal(len); +// Marshal.Copy(buf, nStart, buffer, len); +// rtn = Marshal.PtrToStructure(buffer, type); +// Marshal.FreeHGlobal(buffer); +// return rtn; +// } +// public final boolean AnalyseComtradeCfg(String strFilePath) //读取、分析cfg录波文件!!! +// { +// if (strFilePath.equals("")) //例:D:\执行程序\PQD-5700\Data\Comtrade\192.168.1.193\1_20180124_100125_937.cfg +// { +// return false; +// } +// +// int i = 0; //用于遍历 字符串转换的字段数组 +// String strFileLine; //临时存放 cfg每行读取的字符串 +// String[] strTempArray; //临时存放 字符串转换的字段数组 +// tagComtradeCfg ComtradeCfg; +// tagRates RatesCfg; +// try +// { +// FileStream ReadFile = new FileStream(strFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //例:strFilePath = D:\执行程序\PQD-5700\Data\Comtrade\192.168.1.193\20180124_100125_937.cfg +// StreamReader sr = new StreamReader(ReadFile, Encoding.Default); +// ComtradeCfg = new tagComtradeCfg(); //配置文件总类对象初始化 +// RatesCfg = new tagRates(); //多段采样类对象初始化 +////C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +////ORIGINAL LINE: uint nFreq = 0; +// int nFreq = 0; //临时存放 采样频率 例:50Hz +// //第一行不关心仅仅是一些描述类的信息 +// strFileLine = sr.ReadLine(); //①例:PQS,570,1999 +// //第二行需要关心第二个:模拟通道编号(模拟量的个数)和第三个:状态通道参数(开关量的个数) +// strFileLine = sr.ReadLine(); //②例:3,3A,0D +// strTempArray = strFileLine.split("[,]", -1); //将字符串转字符数组 +// for (i = 0; i < strTempArray.length; i++) //遍历 字符串转换的字段数组 +// { +// switch (i) +// { +// case 0: //总个数 +// ComtradeCfg.nChannelNum = Integer.parseInt(strTempArray[i]); //通道总个数 例:3 +// break; +// case 1: //模拟量的个数 +// { +// String str = strTempArray[i].substring(0, strTempArray[i].length() - 1); //从此实例"3A"检索子字符串 例:3 = 3A.Substring(0,2 - 1) +// ComtradeCfg.nAnalogNum = Integer.parseInt(str); //模拟量通道的个数 例:3 +// } +// break; +// case 2: //开关量的个数 +// { +// String str = strTempArray[i].substring(0, strTempArray[i].length() - 1); //从此实例"0D"检索子字符串 例:0 = 0D.Substring(0,2 - 1) +// ComtradeCfg.nDigitalNum = Integer.parseInt(str); //数字量通道的个数 例:0 +// } +// break; +// } +// } +// //从第三行到第ComtradeCfg.nChannelNum+3行是模拟量通道和数字量通道 +// for (i = 0; i < ComtradeCfg.nChannelNum; i++) //通道个数 例:3 +// { +// tagOneChannleCfg OneChannlecfg = new tagOneChannleCfg(); //模拟量通道记录类链表 +// ComtradeCfg.OneChannleCfg.add(OneChannlecfg); //添加 模拟量通道记录类链表 +// +// strFileLine = sr.ReadLine(); //③例:1,UA,A,PQS,V,0.062243,0,0,-32767,32767,10000,100,S //通道1 +// //④ 2,UB,B,PQS,V,0.062243,0,0,-32767,32767,10000,100,S //通道2 +// //⑤ 3,UC,C,PQS,V,0.062237,0,0,-32767,32767,10000,100,S //通道3 +// strTempArray = strFileLine.split("[,]", -1); //将字符串转字符数组 +// //配置总共13项 +// 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; +// default: +// break; +// } +// } +// } +// //采样频率:在交变电流电路中一秒钟内交流电所允许而必须变化的周期数,即:在单位时间内振动的次数 +// strFileLine = sr.ReadLine(); //⑥例:50 +// float fFreq = Float.parseFloat(strFileLine); +// nFreq = (int)fFreq; //电网频率 +// //采样段数 +// strFileLine = sr.ReadLine(); //⑦例:1 +// 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("[,]", -1); //将字符串转字符数组 例:{3200,22400} +// +// tagOneRate OneRate = new tagOneRate(); //1段采样类对象 +// RatesCfg.OneRate.add(OneRate); //添加 (每周波)采样率链表 —— zl 2018-4-22 16:03:30 +// for (int j = 0; j < strTempArray.length; j++) //遍历 该行数据信息 +// { +// switch (j) +// { +// case 0: //采样率:1秒钟内的采样点数 +// OneRate.nOneSample = (long)Float.parseFloat(strTempArray[j]) / nFreq; //(单周波)采样点数 例:64点 = 3200 / 50Hz +// break; +// case 1: //总采样点数 +// OneRate.nSampleNum = (long)Float.parseFloat(strTempArray[j]) - nOffset; //总采样点数,即:采样数据个数 例:22400 = 22400 - 0 +// nOffset += OneRate.nSampleNum; //nOffset:上一段单周波采样点数 例:22400 +// break; +// default: +// break; +// } +// nMSTotal += OneRate.nSampleNum / OneRate.nOneSample; //周波总个数 +// } +// } +// nMSTotal *= 20; //录波总毫秒数 注:一个周波20ms,所以此处要乘以20 +// if (nMSTotal > 60000) //如果事件长度超过1分钟,则结束处理,不调用录波高级算法qvvr_fun +// { +// sr.Close(); //关闭System.IO.StreamReader对象和基础流,并释放与读取器关联的所有系统资源 +// ReadFile.Close(); +// return false; +// } +// +// //波形起始时间 +// strFileLine = sr.ReadLine(); //⑨例:24/01/2018,10:01:25.737000 +// //使用指定的格式和区域性特定格式信息,将日期和时间的指定字符串表示形式转换为其等效的System.DateTime。字符串表示形式的格式必须与指定的格式完全匹配。 +// ComtradeCfg.TimeTrigger = java.util.Date.ParseExact(strFileLine, "dd/MM/yyyy,HH:mm:ss.ffffff", System.Globalization.CultureInfo.InvariantCulture); //将strFileLine对应字符串转成指定日期格式 +// //暂态触发时间 +// strFileLine = sr.ReadLine(); //⑩例:24/01/2018,10:01:25.937000 +// ComtradeCfg.TimeStart = java.util.Date.ParseExact(strFileLine, "dd/MM/yyyy,HH:mm:ss.ffffff", System.Globalization.CultureInfo.InvariantCulture); //将strFileLine对应字符串转成指定日期格式 +// ComtradeCfg.TimeEnd = ComtradeCfg.TimeStart.AddMilliseconds(nMSTotal); //波形结束时间 +// ComtradeCfg.path = strFilePath.split("[\\\\]", -1).Last(); +// tagComtradeCfgs.add(ComtradeCfg); +// //数据文件类型 +// //ComtradeCfg.TimeEnd = constdef.GetUTCTime(Convert.ToInt64(ComtradeCfg.TimeStart) / 1000); +// //long nMillsec = Convert.ToInt64(ComtradeCfg.TimeStart) % 1000; +// //ComtradeCfg.TimeEnd = new DateTime(ComtradeCfg.TimeEnd.Ticks + nMillsec * 10000); +// //ComtradeCfg.TimeEnd = new DateTime(nMSTotal + nMillsec * 10000); +// //20190624更新增加时间的方法 +// +// sr.Close(); //关闭System.IO.StreamReader对象和基础流,并释放与读取器关联的所有系统资源 +// ReadFile.Close(); +// } +// catch (IOException e) +// { +// System.out.println(String.format("打开文件%1$s发生错误%2$s", strFilePath, e.getMessage())); +// return false; +// } +// +// return true; +// } +// public static class tagComtradeCfg +// { +// public int nChannelNum; //通道总个数 +// public int nAnalogNum; //模拟量通道的个数 WW 2013-05-15 +// public int nDigitalNum; //数字量通道的个数 WW 2013-05-15 +// public java.util.ArrayList OneChannleCfg; //模拟量通道记录类链表 +// public java.util.ArrayList OneChannleCfgDig; //数字量通道记录类链表 +// public java.util.Date TimeTrigger = new java.util.Date(0); //暂态触发时间 +// public java.util.Date TimeStart = new java.util.Date(0); //波形起始时间 注:相较于TimeTrigger波形触发时间起始有一段平滑过渡波形时间,约100ms +// public java.util.Date TimeEnd = new java.util.Date(0); //波形结束时间 +// public String path; //对应波形cfg文件全路径名称 +// public tagComtradeCfg() +// { +// OneChannleCfg = new java.util.ArrayList(); +// OneChannleCfgDig = new java.util.ArrayList(); +// } +// } +// //1段采样类 +// public static class tagOneRate +// { +// //采样率:1秒钟内的采样点数 +// public long nOneSample; +// //总采样点数 +// public long nSampleNum; +// //(1段录波中)波形个数 +// public long nWaveNum; +// //抽点采样间隔 = CFG中每段录波采样率 / 实际抽点采样率 +// public long nWaveSpan; +// } +// //多段采样类 +// public static class tagRates +// { +// public int nRates; //采样段数 +// public java.util.ArrayList OneRate; //(每周波)采样率链表 +// public tagRates() +// { +// OneRate = new java.util.ArrayList(); //(每周波)采样率链表 初始化 +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region comtrad文件相关 +// //模拟量通道记录类 +// public static class tagOneChannleCfg +// { +// //通道序号 +// public int nIndex; +// //通道名称 +// public String szChannleName; +// //相位名称 +// public String szPhasicName; +// //监视的通道名称 +// public String szMonitoredChannleName; +// //通道的单位 +// public String szUnitName; +// //通道的系数 +// public float fCoefficent; +// //通道的便宜量 +// public float fOffset; +// //起始采样时间的偏移量 +// public float fTimeOffset; +// //采样值的最小值 +// public int nMin; +// //采样值的最大值 +// public int nMax; +// //一次变比 +// public float fPrimary; +// //二次变比 +// public float fSecondary; +// //一次值还是二次值标志 +// public String szValueType; +// } +// +// //数字量通道记录类 +// public static class tagOneChannleCfg_digital +// { +// //通道序号 +// public int nIndex; +// //通道名称 +// public String szChannleName; +// //相位名称 +// public String szPhasicName; +// //监视的通道名称 +// public String szMonitoredChannleName; +// //通道的单位 +// public int Initial; +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析sec参数文件 +// public final void ConvertSec(String strFile) //3秒数据文件解析 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int n1BufLen = tagPQDataCmn.GetSize(); //计算单个统计结构大小 +////C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +////ORIGINAL LINE: uint nSecNum = (uint)(nBufSize / n1BufLen); +// int nSecNum = (int)(nBufSize / n1BufLen); //确认共多少事件数据结构 +// +// int nStep = 0; //读取偏移量 +// for (int i = 0; i < nSecNum; i++) +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(nStep, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// tagPQDataCmn tagPqData = new tagPQDataCmn(); +// tagPqData.SetStructBuf(bBuf, 0); +// +// SectagPqDatas.add(tagPqData); +// nStep += n1BufLen; +// +// RTC_Timer_MS Devtime = tagPqData.time; +// java.util.Date time = new java.util.Date(Devtime.year, Devtime.month, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second, Devtime.millisecond); +// if (!Sec_starttime.equals(new java.util.Date(0))) //存在启动时间 +// { +// if (java.util.Date.Compare(time, Sec_starttime) <= 0) +// { +// Sec_starttime = time; +// } +// } +// else //不存在启动时间 填入当前时间 +// { +// Sec_starttime = time; +// } +// if (!Sec_endtime.equals(new java.util.Date(0))) +// { +// if (java.util.Date.Compare(time, Sec_endtime) >= 0) +// { +// Sec_endtime = time; +// } +// } +// else //不存在结束时间 填入当前时间 +// { +// Sec_endtime = time; +// } +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析3秒数据下的高次谐波 +// public final void ConvertSecHh(String strFile) //3秒数据下的高次谐波解析 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int n1BufLen = tagPQDataCmnHh.GetSize(); //计算单个统计结构大小 +////C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +////ORIGINAL LINE: uint nSecNum = (uint)(nBufSize / n1BufLen); +// int nSecNum = (int)(nBufSize / n1BufLen); //确认共多少事件数据结构 +// +// int nStep = 0; //读取偏移量 +// for (int i = 0; i < nSecNum; i++) +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(nStep, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// tagPQDataCmnHh tagPqData = new tagPQDataCmnHh(); +// tagPqData.SetStructBuf(bBuf, 0); +// +// SectagPQDataCmnHhs.add(tagPqData); +// nStep += n1BufLen; +// +// RTC_Timer_MS Devtime = tagPqData.time; +// java.util.Date time = new java.util.Date(Devtime.year, Devtime.month, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second, Devtime.millisecond); +// if (!Sechh_starttime.equals(new java.util.Date(0))) //存在启动时间 +// { +// if (java.util.Date.Compare(time, Sechh_starttime) <= 0) +// { +// Sechh_starttime = time; +// } +// } +// else //不存在启动时间 填入当前时间 +// { +// Sechh_starttime = time; +// } +// if (!Sechh_endtime.equals(new java.util.Date(0))) +// { +// if (java.util.Date.Compare(time, Sechh_endtime) >= 0) +// { +// Sechh_endtime = time; +// } +// } +// else //不存在结束时间 填入当前时间 +// { +// Sechh_endtime = time; +// } +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析min参数文件 +// public static class MinData //分钟数据类型 +// { +// public tagPQDataCmn max; +// public tagPQDataCmn min; +// public tagPQDataCmn cp95; +// public tagPQDataCmn avg; +// } +// public final void ConvertMin(String strFile) //分钟统计数据文件解析 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int n1BufLen = tagPQDataCmn.GetSize(); //计算单个统计结构大小 +////C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +////ORIGINAL LINE: uint nMinNum = (uint)(nBufSize / n1BufLen); +// int nMinNum = (int)(nBufSize / n1BufLen); //确认共多少分钟数据结构 +// +// int nStep = 0; //读取偏移量 +// for (int i = 0; i < nMinNum; i++) +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(nStep, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// tagPQDataCmn tagPqData = new tagPQDataCmn(); +// tagPqData.SetStructBuf(bBuf, 0); +// nStep += n1BufLen; +// +// RTC_Timer_MS Devtime = tagPqData.time; +// java.util.Date time = new java.util.Date(Devtime.year, Devtime.month, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second, Devtime.millisecond); +// if (!Min_starttime.equals(new java.util.Date(0))) //存在启动时间 +// { +// if (java.util.Date.Compare(time, Min_starttime) <= 0) +// { +// Min_starttime = time; +// } +// } +// else //不存在启动时间 填入当前时间 +// { +// Min_starttime = time; +// } +// if (!Min_endtime.equals(new java.util.Date(0))) +// { +// if (java.util.Date.Compare(time, Min_endtime) >= 0) +// { +// Min_endtime = time; +// } +// } +// else //不存在结束时间 填入当前时间 +// { +// Min_endtime = 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); +// } +// } +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析分钟数据下的高次谐波 +// public static class MinDataHh //分钟数据下的高次谐波数据类型 +// { +// public tagPQDataCmnHh max; +// public tagPQDataCmnHh min; +// public tagPQDataCmnHh cp95; +// public tagPQDataCmnHh avg; +// } +// public final void ConvertMinHh(String strFile) //分钟数据下的高次谐波解析 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int n1BufLen = tagPQDataCmnHh.GetSize(); //计算单个统计结构大小 +////C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +////ORIGINAL LINE: uint nSecNum = (uint)(nBufSize / n1BufLen); +// int nSecNum = (int)(nBufSize / n1BufLen); //确认共多少事件数据结构 +// +// int nStep = 0; //读取偏移量 +// for (int i = 0; i < nSecNum; i++) +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(nStep, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// tagPQDataCmnHh tagPqData = new tagPQDataCmnHh(); +// tagPqData.SetStructBuf(bBuf, 0); +// nStep += n1BufLen; +// +// RTC_Timer_MS Devtime = tagPqData.time; +// java.util.Date time = new java.util.Date(Devtime.year, Devtime.month, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second, Devtime.millisecond); +// if (!MinHh_starttime.equals(new java.util.Date(0))) //存在启动时间 +// { +// if (java.util.Date.Compare(time, MinHh_starttime) <= 0) +// { +// MinHh_starttime = time; +// } +// } +// else //不存在启动时间 填入当前时间 +// { +// MinHh_starttime = time; +// } +// if (!MinHh_endtime.equals(new java.util.Date(0))) +// { +// if (java.util.Date.Compare(time, 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); +// } +// } +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#region 解析风电光伏功率区间数据 +// public static class PowerData //分钟数据类型 +// { +// public PowerReg max; +// public PowerReg min; +// public PowerReg cp95; +// public PowerReg avg; +// } +// public final void ConvertPowerreg(String strFile) //功率区间数据解析 +// { +// FileStream BinFile = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); +// +// //转换为byte[] +// if (BinFile.getLength() == 0) +// { +// System.out.println(String.format("文件%1$s 长度为0字节,程序将跳过本文件的转换", strFile)); +// BinFile.Close(); +// return; +// } +// +// long nBufSize = BinFile.getLength(); //计算需要解析的文件总长 +// int n1BufLen = PowerReg.GetSize(); //计算单个统计结构大小 +////C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +////ORIGINAL LINE: uint nMinNum = (uint)(nBufSize / n1BufLen); +// int nMinNum = (int)(nBufSize / n1BufLen); //确认共多少分钟数据结构 +// +// int nStep = 0; //读取偏移量 +// for (int i = 0; i < nMinNum; i++) +// { +// byte[] bBuf = new byte[n1BufLen]; //单个统计结构 +// int nReadLen = 0; +// try +// { +// BinFile.Seek(nStep, SeekOrigin.Begin); +// nReadLen = BinFile.Read(bBuf, 0, bBuf.length); +// } +// catch (FileLoadException e) +// { +// System.out.println(String.format("文件%1$s 读取时发生错误,代码为%2$s", strFile, e.getClass().getName())); +// return; +// } +// +// PowerReg powerReg = new PowerReg(); +// powerReg.SetStructBuf(bBuf, 0); +// nStep += n1BufLen; +// +// RTC_Timer_MS Devtime = powerReg.time; +// +// java.util.Date time = new java.util.Date(0); +// +// try +// { +// time = new java.util.Date(Devtime.year, Devtime.month, Devtime.day, Devtime.hour, Devtime.minute, Devtime.second, Devtime.millisecond); +// // 成功创建 DateTime 对象 +// } +// catch (ArgumentOutOfRangeException ex) +// { +// // 处理超出范围的异常 +// } +// catch (RuntimeException ex) +// { +// // 处理其他异常 +// } +// +// +// if (!powerReg_starttime.equals(new java.util.Date(0))) //存在启动时间 +// { +// if (java.util.Date.Compare(time, powerReg_starttime) <= 0) +// { +// powerReg_starttime = time; +// } +// } +// else //不存在启动时间 填入当前时间 +// { +// powerReg_starttime = time; +// } +// if (!powerReg_endtime.equals(new java.util.Date(0))) +// { +// if (java.util.Date.Compare(time, powerReg_endtime) >= 0) +// { +// powerReg_endtime = time; +// } +// } +// else //不存在结束时间 填入当前时间 +// { +// powerReg_endtime = time; +// } +// +// if (powerReg.data_type == 1) //平均值 +// { +// if (powerRegs.containsKey(time)) +// { +// powerRegs.get(time).avg = powerReg; +// } +// else +// { +// PowerData powerData = new PowerData(); +// powerData.avg = powerReg; +// powerRegs.put(time, powerData); +// } +// } +// else if (powerReg.data_type == 2) //最大值 +// { +// if (powerRegs.containsKey(time)) +// { +// powerRegs.get(time).max = powerReg; +// } +// else +// { +// PowerData powerData = new PowerData(); +// powerData.max = powerReg; +// powerRegs.put(time, powerData); +// } +// } +// else if (powerReg.data_type == 4) //最小值 +// { +// if (powerRegs.containsKey(time)) +// { +// powerRegs.get(time).min = powerReg; +// } +// else +// { +// PowerData powerData = new PowerData(); +// powerData.min = powerReg; +// powerRegs.put(time, powerData); +// } +// } +// else if (powerReg.data_type == 8) //95值 +// { +// if (powerRegs.containsKey(time)) +// { +// powerRegs.get(time).cp95 = powerReg; +// } +// else +// { +// PowerData powerData = new PowerData(); +// powerData.cp95 = powerReg; +// powerRegs.put(time, powerData); +// } +// } +// } +// } +////C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +// ///#endregion +// +//} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewBodyTaglogbuffer.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewBodyTaglogbuffer.java new file mode 100644 index 0000000..e1062d9 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewBodyTaglogbuffer.java @@ -0,0 +1,29 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +/** + 告警事件结构扩展——身体定义 + + */ +//C# TO JAVA CONVERTER WARNING: Java does not allow user-defined value types. The behavior of this class will differ from the original: +//ORIGINAL LINE: public struct NewBodyTaglogbuffer +//C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: +//[StructLayout(LayoutKind.Sequential)] +public final class NewBodyTaglogbuffer +{ + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt32 ParaCode; + public int ParaCode; // 参数编码 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt32 ParaValue; + public int ParaValue; // 参数值 + @Override + public NewBodyTaglogbuffer clone() + { + NewBodyTaglogbuffer varCopy = new NewBodyTaglogbuffer(); + + varCopy.ParaCode = this.ParaCode; + varCopy.ParaValue = this.ParaValue; + + return varCopy; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewHeadTaglogbuffer.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewHeadTaglogbuffer.java new file mode 100644 index 0000000..c344831 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewHeadTaglogbuffer.java @@ -0,0 +1,47 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +/** + 告警事件结构扩展——头定义 + + */ +//C# TO JAVA CONVERTER WARNING: Java does not allow user-defined value types. The behavior of this class will differ from the original: +//ORIGINAL LINE: public struct NewHeadTaglogbuffer +//C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: +//[StructLayout(LayoutKind.Sequential)] +public final class NewHeadTaglogbuffer +{ + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 name; + public short name; // 监测点序号 + public TagMsTime Devtime; // 绝对时间 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 LogType; + public short LogType; // 日志类型(装置故障类、越限类) + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 LogCode; + public short LogCode; // 日志代码 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 LogLb; + public short LogLb; // 日志录波 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 LogBackup; + public short LogBackup; // 日志补零位 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt32 LogParaNum; + public int LogParaNum; // 日志参数项数 + @Override + public NewHeadTaglogbuffer clone() + { + NewHeadTaglogbuffer varCopy = new NewHeadTaglogbuffer(); + + varCopy.name = this.name; + varCopy.Devtime = this.Devtime.clone(); + varCopy.LogType = this.LogType; + varCopy.LogCode = this.LogCode; + varCopy.LogLb = this.LogLb; + varCopy.LogBackup = this.LogBackup; + varCopy.LogParaNum = this.LogParaNum; + + return varCopy; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewTaglogbuffer.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewTaglogbuffer.java new file mode 100644 index 0000000..cc429ff --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/NewTaglogbuffer.java @@ -0,0 +1,16 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//事件结构 +public class NewTaglogbuffer +{ + public NewHeadTaglogbuffer newHeadTaglogbuffer; + public java.util.ArrayList newBodyTaglogbuffers; + + public java.util.Date start, end = new java.util.Date(0); //事件起始和结束时间 + public String path = ""; //事件对应波形文件名称 + public NewTaglogbuffer(NewHeadTaglogbuffer head, java.util.ArrayList body) + { + newHeadTaglogbuffer = head.clone(); + newBodyTaglogbuffers = body; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PowerReg.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PowerReg.java new file mode 100644 index 0000000..a26d81e --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PowerReg.java @@ -0,0 +1,170 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//风电光伏功率区间数据 //数据时标 +public class PowerReg +{ + public RTC_Timer_MS time; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint line; + public int line; //监测点 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint reg; + public int reg; //功率区间 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint data_type; + public int data_type; //数据类型 + //1平均值 2最大值 4最小值 8CP95值 + public Float u_blance; //电压不平衡度 + public Float i_blance; //电流不平衡度 + public Float[] uu_dev; //电压上偏差 3 + public Float[] ul_dev; //电压下偏差 3 + public Float[] harmu_thd; //谐波电压畸变率 3 + public Float[] harmi_thd; //谐波电流畸变率 3 + public Float[][] harmu; //谐波电压含有率 3-50 + public Float[][] harmi; //谐波电流幅值 3-50 + public Float[][] inharmu; //间谐波电压含有率 3-50 + public Float[][] inharmi; //间谐波电流幅值 3-50 + public Float[] flick; //短时闪变 3 + public Float freq; //频率 + + public Float[] fluct; //电压波动 + public Float[] lflick; //长时闪变 + public Float[] udd_ss; //稳态变动 + public Float[] udd_max; //最大变动 + public Float[] p; //总有功 + public Float[] p_fund; //总基波有功 + public Float[] q; //总无功 + public Float[] q_fund; //总基波无功 + // 高频谐波增加的数据 ************************************************************* + //中心频率从2.1kHz到8.9kHz,以200Hz为间隔 + public Float[][] hf_harmu; //高频谐波电压 + public Float[][] hf_harmi; //高频谐波电流 + public Float[] data_by_2; //备用 + public PowerReg() + { + time = new RTC_Timer_MS(); + uu_dev = new Float[3]; + ul_dev = new Float[3]; + harmu_thd = new Float[3]; + harmi_thd = new Float[3]; + harmu = new Float[3][50]; + harmi = new Float[3][50]; + inharmu = new Float[3][50]; + inharmi = new Float[3][50]; + flick = new Float[3]; + + + fluct = new Float[3]; + lflick = new Float[3]; + udd_ss = new Float[3]; + udd_max = new Float[3]; + p = new Float[4]; + p_fund = new Float[4]; + q = new Float[4]; + q_fund = new Float[4]; + + hf_harmu = new Float[3][35]; + hf_harmi = new Float[3][35]; + data_by_2 = new Float[210]; + } + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + int len = 7 * Short.SIZE / Byte.SIZE + 3 * Integer.SIZE / Byte.SIZE + (15 + 600 + 3 + 28 + 420) * Float.SIZE / Byte.SIZE; + return len; + } + + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + + int iStep = nHaveRead; + time.SetStructBuf(bArray, iStep); + iStep = iStep + RTC_Timer_MS.GetSize(); + line = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + reg = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + data_type = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + u_blance = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + i_blance = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + RefObject tempRef_uu_dev = new RefObject(uu_dev); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_uu_dev); + uu_dev = tempRef_uu_dev.argvalue; + RefObject tempRef_ul_dev = new RefObject(ul_dev); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_ul_dev); + ul_dev = tempRef_ul_dev.argvalue; + RefObject tempRef_harmu_thd = new RefObject(harmu_thd); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_harmu_thd); + harmu_thd = tempRef_harmu_thd.argvalue; + RefObject tempRef_harmi_thd = new RefObject(harmi_thd); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_harmi_thd); + harmi_thd = tempRef_harmi_thd.argvalue; + RefObject tempRef_harmu = new RefObject(harmu); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_harmu); + harmu = tempRef_harmu.argvalue; + RefObject tempRef_harmi = new RefObject(harmi); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_harmi); + harmi = tempRef_harmi.argvalue; + RefObject tempRef_inharmu = new RefObject(inharmu); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_inharmu); + inharmu = tempRef_inharmu.argvalue; + RefObject tempRef_inharmi = new RefObject(inharmi); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_inharmi); + inharmi = tempRef_inharmi.argvalue; + RefObject tempRef_flick = new RefObject(flick); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_flick); + flick = tempRef_flick.argvalue; + freq = Service.convertfloat(bArray, iStep); + RefObject tempRef_fluct = new RefObject(fluct); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_fluct); + fluct = tempRef_fluct.argvalue; + RefObject tempRef_lflick = new RefObject(lflick); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_lflick); + lflick = tempRef_lflick.argvalue; + RefObject tempRef_udd_ss = new RefObject(udd_ss); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_udd_ss); + udd_ss = tempRef_udd_ss.argvalue; + RefObject tempRef_udd_max = new RefObject(udd_max); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_udd_max); + udd_max = tempRef_udd_max.argvalue; + RefObject tempRef_p = new RefObject(p); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_p); + p = tempRef_p.argvalue; + RefObject tempRef_p_fund = new RefObject(p_fund); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_p_fund); + p_fund = tempRef_p_fund.argvalue; + RefObject tempRef_q = new RefObject(q); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_q); + q = tempRef_q.argvalue; + RefObject tempRef_q_fund = new RefObject(q_fund); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_q_fund); + q_fund = tempRef_q_fund.argvalue; + + RefObject tempRef_hf_harmu = new RefObject(hf_harmu); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_hf_harmu); + hf_harmu = tempRef_hf_harmu.argvalue; + RefObject tempRef_hf_harmi = new RefObject(hf_harmi); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_hf_harmi); + hf_harmi = tempRef_hf_harmi.argvalue; + RefObject tempRef_data_by_2 = new RefObject(data_by_2); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_data_by_2); + data_by_2 = tempRef_data_by_2.argvalue; +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PowerSet.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PowerSet.java new file mode 100644 index 0000000..0d42dc2 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/PowerSet.java @@ -0,0 +1,123 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//风电光伏配置 +public class PowerSet +{ + public float rated_p; //额定功率 + public float rated_i; //额定电流 + public float mk_p; //启停机功率 + public float mk_i; //启停机电流 + public float set_p; //功率调节功率目标量 + public float set_p_mk; //功率调节量目标门槛 + public float set_q; //无功功率调节功率目标量 + public float set_q_mk; //无功功率调节量目标门槛 + public float set_q_xz; //无功功率调节限值 + //以上参数为一次值,功率单位MW,电流单位A +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint reg_ok_num; + public int reg_ok_num; //功率区间所需个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint run_time; + public int run_time; //测试超时时间,以分钟为单位 + public char[] by = new char[1024]; //1024个字节,留着后期扩展备用 + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint uStatus; + public int uStatus; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint Check_sum; + public int Check_sum; + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + int len = 9 * Float.SIZE / Byte.SIZE+ 4 * Integer.SIZE / Byte.SIZE + 1024; + return len; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nSize = bArray.length; + int nStep = nHaveRead; //读取数据的步长 + + if (nSize < (GetSize() + nHaveRead)) + { + return false; + } + rated_p = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + rated_i = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + mk_p = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + mk_i = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + set_p = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + set_p_mk = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + set_q = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + set_q_mk = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + set_q_xz = Service.convertfloat(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Float.SIZE / Byte.SIZE; + reg_ok_num = Service.convertUInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + run_time = Service.convertUInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + for (int i = 0; i < by.length; i++) + { + by[i] = (char)bArray[nStep]; + nStep++; + } + uStatus = Service.convertUInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + Check_sum = Service.convertUInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + + return true; + } + + public final int GetStructBuf(RefObject bArray, int nHaveRead) + { + int nSize = bArray.argvalue.length; + if (nSize < (nHaveRead + GetSize())) + { + return 0; + } + int iStep = nHaveRead; + + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)rated_p, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)rated_i, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)mk_p, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)mk_i, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)set_p, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)set_p_mk, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)set_q, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)set_q_mk, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)set_q_xz, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)reg_ok_num, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)run_time, Service.enum_Value_type.Value_uint); + + for (int i = 0; i < by.length; i++) + { + bArray.argvalue[iStep] = (byte)by[i]; + iStep++; + } + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)uStatus, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)Check_sum, Service.enum_Value_type.Value_uint); + return GetSize(); + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/Program.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/Program.java new file mode 100644 index 0000000..43dd70e --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/Program.java @@ -0,0 +1,11 @@ +package com.njcn.csharmonic.offline.mincfg.vo;//package com.njcn.user.utils.test.test1; +// +//public class Program +//{ +// private static void main(String[] args) +// { +// //Console.WriteLine("Hello World!"); +// DealDataFile dealDataFile = new DealDataFile(); +// dealDataFile.Run("C:\\Users\\ZW\\Desktop\\普测测试文档\\09"); +// } +//} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RTC_Timer.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RTC_Timer.java new file mode 100644 index 0000000..409d2b6 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RTC_Timer.java @@ -0,0 +1,92 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +///#region 3秒实时数据报文 +public class RTC_Timer //数据时标 +{ + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort year; + public short year; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort month; + public short month; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort day; + public short day; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort hour; + public short hour; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort minute; + public short minute; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort second; + public short second; + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 6 * Short.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + + int iStep = nHaveRead; + + year = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + month = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + day = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + hour = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + minute = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + second = Service.convertUInt16_net(bArray, iStep); + + return true; + } + + /** + @brief 将类中的变量组装成byte[]二进制流 + @param byte[] in 已分配的二进制流 + @return byte[] out 二进制数组 + + */ + public final int GetStructBuf(RefObject bArray, int nHaveRead) + { + int nSize = bArray.argvalue.length; + if (nSize < (nHaveRead + GetSize())) + { + return 0; + } + int iStep = nHaveRead; + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)year, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)month, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)day, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)hour, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)minute, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)second, Service.enum_Value_type.Value_ushort); + + return GetSize(); + } + public final void clone(RTC_Timer Src) + { + year = Src.year; + month = Src.month; + day = Src.day; + hour = Src.hour; + minute = Src.minute; + second = Src.second; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RTC_Timer_MS.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RTC_Timer_MS.java new file mode 100644 index 0000000..dc148fd --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RTC_Timer_MS.java @@ -0,0 +1,85 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class RTC_Timer_MS //数据时标 +{ + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort year; + public short year; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort month; + public short month; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort day; + public short day; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort hour; + public short hour; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort minute; + public short minute; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort second; + public short second; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort millisecond; + public short millisecond; + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 7 * Short.SIZE / Byte.SIZE; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + + int iStep = nHaveRead; + + year = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + month = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + day = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + hour = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + minute = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + second = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + millisecond = Service.convertUInt16_net(bArray, iStep); + return true; + } + + /** + @brief 将类中的变量组装成byte[]二进制流 + @return byte[] out 二进制数组 + + */ + public final int GetStructBuf(RefObject bArray, int nHaveRead) + { + int nSize = bArray.argvalue.length; + if (nSize < (nHaveRead + GetSize())) + { + return 0; + } + int iStep = nHaveRead; + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)year, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)month, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)day, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)hour, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)minute, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)second, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)millisecond, Service.enum_Value_type.Value_ushort); + return GetSize(); + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RefObject.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RefObject.java new file mode 100644 index 0000000..d9e7f84 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/RefObject.java @@ -0,0 +1,16 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//---------------------------------------------------------------------------------------- +// Copyright ? 2006 - 2010 Tangible Software Solutions Inc. +// This class can be used by anyone provided that the copyright notice remains intact. +// +// This class is used to simulate the ability to pass arguments by reference in Java. +//---------------------------------------------------------------------------------------- +public final class RefObject +{ + public T argvalue; + public RefObject(T refarg) + { + argvalue = refarg; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/Service.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/Service.java new file mode 100644 index 0000000..6a49680 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/Service.java @@ -0,0 +1,817 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +public class Service +{ + //C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: + ///#region 解析通讯报文相关代码 +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: + ///#region 整型->浮点 浮点->整型 + public static float IntToFloat(int num) + { +// uint i_middle = 0xffff0000; +// uint j_middle = 0x0000ffff; +// bool bNav = false; +// if ((num & 0x8000000) == 0x8000000) +// { +// int nTemp = num & 0x7fffffff; +// num = ~nTemp + 1; +// bNav = true; +// } +// int i = (int)((num & i_middle) / 65536); +// float j = (num & j_middle) / 65536.0f; +// if (bNav) +// return -((float)i + j); +// return (float)i + j; + float j = (float)num / 65536.0f; + return (float)j; + } + public static float IntToFloat1000(int num) + { +// uint i_middle = 0xffff0000; +// uint j_middle = 0x0000ffff; +// bool bNav = false; +// if ((num & 0x8000000) == 0x8000000) +// { +// int nTemp = num & 0x7fffffff; +// num = ~nTemp + 1; +// bNav = true; +// } +// int i = (int)((num & i_middle) / 65536); +// float j = (num & j_middle) / 65536.0f; +// if (bNav) +// return -((float)i + j); +// return (float)i + j; + float j = (float)num / 1000.0f; + return (float)j; + } + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static float UintToFloat(uint num) + public static float UintToFloat(int num) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint i_middle = 0xffff0000; + int i_middle = 0xffff0000; +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint j_middle = 0x0000ffff; + int j_middle = 0x0000ffff; + boolean bNav = false; + if ((num & 0x8000000) == 0x8000000) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint nTemp = num & 0x7fffffff; + int nTemp = num & 0x7fffffff; + num = ~nTemp + 1; + bNav = true; + } + int i = (int)((num & i_middle) / 65536); + float j = (num & j_middle) / 65536.0f; + if (bNav) + { + return -((float)i + j); + } + return (float)i + j; + } + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static float UshorToFloat(ushort num) + public static float UshorToFloat(short num) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort i_middle = 0xff00; + short i_middle = (short) 0xff00; +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort j_middle = 0x00ff; + short j_middle = 0x00ff; + boolean bNav = false; + if ((num & 0x8000) == 0x8000) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort nTemp = (ushort)(num & 0x7fff); + short nTemp = (short)(num & 0x7fff); + num = (short)(~nTemp + 1); + bNav = true; + } + int i = (num & i_middle) / 256; + float j = (num & j_middle) / 256.0f; + if (bNav) + { + return -((float)i + j); + } + return (float)i + j; + } + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static ushort FloatToShort(float num) + public static short FloatToShort(float num) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort i = (ushort)num; + short i = (short)num; + float middle_j = num - (float)i; + float j = 256 * middle_j; + return (short)(i + (short)j); + } + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static float UshorToFloat10000(ushort num) + public static float UshorToFloat10000(short num) + { + float j = num / 10000.0f; + return j; + } + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static ushort FloatToShort10000(float num) + public static short FloatToShort10000(float num) + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort i = (ushort)(num * 10000.0f); + short i = (short)(num * 10000.0f); + return i; + } + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static float UshorToFloat100(ushort num) + public static float UshorToFloat100(short num) + { + float j = num / 100.0f; + return j; + } + public static float ShorToFloat100(short num) + { + float j = num / 100.0f; + return j; + } + public static float ShorToFloat1000(short num) + { + float j = num / 1000.0f; + return j; + } + public static float ShorToFloat10000(short num) + { + float j = num / 10000.0f; + return j; + } + + public static void reverseByteArray(byte[] arr) { + int start = 0; + int end = arr.length - 1; + while (start < end) { + byte temp = arr[start]; + arr[start] = arr[end]; + arr[end] = temp; + start++; + end--; + } + } + + //C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: + ///#endregion + public static byte[] ByteReversa(byte[] temp) //翻转Byte数组 + { + + reverseByteArray(temp); + return temp; + } + public enum enum_Value_type + { + Value_uint(1), + Value_int(2), + Value_ushort(3), + Value_short(4), + Value_float(5), + Value_Long(6), + Value_UInt64(7); + + private int intValue; + private static java.util.HashMap mappings; + private synchronized static java.util.HashMap getMappings() + { + if (mappings == null) + { + mappings = new java.util.HashMap(); + } + return mappings; + } + + private enum_Value_type(int value) + { + intValue = value; + enum_Value_type.getMappings().put(value, this); + } + + public int getValue() + { + return intValue; + } + + public static enum_Value_type forValue(int value) + { + return getMappings().get(value); + } + } + /** + @brief 将数据写入到byte[]中去 + // @param byte[] in 二进制流数组 + // @param int in 二进制流数组 + // @param object in 待写入的数据 + // @param uint in 数据类型 enum_Value_type的枚举类型 + @return int out 转换的长度 + 注:AddObjectToByteArray函数中的nType其实可以换成typeof来进行数据类型定义。——zl 2018-4-12 10:44:45 + + */ + public static int AddObjectToByteArray(RefObject bArray, int nHaveRead, Object ob_Value, enum_Value_type nType) + { + byte[] bTemp = new byte[8]; + int nSize = 0; + switch (nType) + { + case Value_uint: + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint nValue = (uint)ob_Value; + int nValue = ((Integer)ob_Value).intValue(); + bTemp = ByteBuffer.allocate(4).putInt(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Integer.SIZE / Byte.SIZE; + break; + } + case Value_int: + { + int nValue = ((Integer)ob_Value).intValue(); + bTemp = ByteBuffer.allocate(4).putInt(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Integer.SIZE / Byte.SIZE; + break; + } + case Value_ushort: + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort nValue = (ushort)ob_Value; + short nValue = ((Short)ob_Value).shortValue(); + bTemp = ByteBuffer.allocate(4).putInt(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Short.SIZE / Byte.SIZE; + break; + } + case Value_short: + { + short nValue = ((Short)ob_Value).shortValue(); + bTemp = ByteBuffer.allocate(4).putInt(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Short.SIZE / Byte.SIZE; + break; + } + case Value_float: + { + float nValue = ((Float)ob_Value).floatValue(); + bTemp = ByteBuffer.allocate(4).putFloat(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Float.SIZE / Byte.SIZE; + break; + } + case Value_Long: + { + long nValue = ((Long)ob_Value).longValue(); + bTemp = ByteBuffer.allocate(4).putLong(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Long.SIZE; + break; + } + + } + int i = 0; + for (i = 0; i < nSize; i++) + { + bArray.argvalue[nHaveRead + i] = bTemp[i]; + } + + return nSize; + } + /** + @brief 将数据写入到byte[]中去,字节颠倒 + // @param byte[] in 二进制流数组 + // @param int in 二进制流数组 + // @param object in 待写入的数据 + // @param uint in 数据类型 enum_Value_type的枚举类型 + @return int out 转换的长度 + + */ + public static int AddObjectToByteArray_net(RefObject bArray, int nHaveRead, Object ob_Value, enum_Value_type nType) + { + byte[] bTemp = new byte[8]; + int nSize = 0; + + switch (nType) + { + case Value_uint: + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint nValue = (uint)ob_Value; + int nValue = ((Integer)ob_Value).intValue(); + bTemp = ByteBuffer.allocate(Integer.BYTES).putInt(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Integer.SIZE / Byte.SIZE; + break; + } + case Value_int: + { + int nValue = ((Integer)ob_Value).intValue(); + bTemp = ByteBuffer.allocate(Integer.BYTES).putInt(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Integer.SIZE / Byte.SIZE; + break; + } + case Value_ushort: + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort nValue = (ushort)ob_Value; + short nValue = ((Short)ob_Value).shortValue(); + bTemp = ByteBuffer.allocate(Short.BYTES).putInt(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Short.SIZE / Byte.SIZE; + break; + } + case Value_short: + { + short nValue = ((Short)ob_Value).shortValue(); + bTemp = ByteBuffer.allocate(4).putInt(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Short.SIZE / Byte.SIZE; + break; + } + case Value_float: + { + float nValue = ((Float)ob_Value).floatValue(); + bTemp = ByteBuffer.allocate(Float.BYTES).putFloat(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Float.SIZE / Byte.SIZE; + break; + } + case Value_Long: + { + long nValue = ((Long)ob_Value).longValue(); + bTemp = ByteBuffer.allocate(Long.BYTES).putLong(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Long.SIZE; + break; + } + case Value_UInt64: + { +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: UInt64 nValue = (UInt64)ob_Value; + long nValue = ((Long)ob_Value).longValue(); + bTemp = ByteBuffer.allocate(Long.BYTES).putLong(nValue).array(); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nSize = Long.SIZE; + break; + } + } + int i = 0; + for (i = 0; i < nSize; i++) + { + bArray.argvalue[nHaveRead + i] = bTemp[nSize - i - 1]; + } + + return nSize; + } + /** + @brief 将二进制流的数组转换为制定的数据类型,增加字节序的转换 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return uint out 32位无符号整型数据 + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static uint convertUInt32_net(byte[] b, int haveread) + public static int convertUInt32_net(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread])).toString(); + String s2 = (new Byte(b[haveread + 1])).toString(); + String s3 = (new Byte(b[haveread + 2])).toString(); + String s4 = (new Byte(b[haveread + 3])).toString(); + return (int)convertInt32(s1, s2, s3, s4); + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return uint out 32位无符号整型数据 + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static uint convertUInt32(byte[] b, int haveread) + public static int convertUInt32(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread + 3])).toString(); + String s2 = (new Byte(b[haveread + 2])).toString(); + String s3 = (new Byte(b[haveread + 1])).toString(); + String s4 = (new Byte(b[haveread])).toString(); + return (int)convertInt32(s1, s2, s3, s4); + } + /** + @brief 将二进制流的数组转换为制定的数据类型,增加字节序的转换 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 32位整型数据 + + */ + public static int convertInt32_net(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread])).toString(); + String s2 = (new Byte(b[haveread + 1])).toString(); + String s3 = (new Byte(b[haveread + 2])).toString(); + String s4 = (new Byte(b[haveread + 3])).toString(); + return convertInt32(s1, s2, s3, s4); + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 32位整型数据 + + */ + public static int convertInt32(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread + 3])).toString(); + String s2 = (new Byte(b[haveread + 2])).toString(); + String s3 = (new Byte(b[haveread + 1])).toString(); + String s4 = (new Byte(b[haveread])).toString(); + return convertInt32(s1, s2, s3, s4); + } + /** + @brief 将字符型的数据转换无符号的整数 + // @param string in 高位字符 + // @param string in 低位字符 + @return int out 16位无符号整型数据 + + */ + public static int convertInt32(String s1, String s2, String s3, String s4) + { + int nValue = (Integer.parseInt(s1, 10) * 256 * 256 * 256 + Integer.parseInt(s2, 10) * 256 * 256 + Integer.parseInt(s3, 10) * 256 + Integer.parseInt(s4, 10)); + return nValue; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param int[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ + public static int convertInt32ArraySigle(byte[] b, int haveread, RefObject int32Array) + { + int i = 0, iStep = 0; + int nSize = int32Array.argvalue.length; + for (i = 0; i < nSize; i++) + { + int32Array.argvalue[i]= convertInt32_net(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + } + + return iStep; + } + + + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param uint[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static int convertUInt32Array(byte[] b, int haveread, ref uint[] UInt32Array) + public static int convertUInt32Array(byte[] b, int haveread, RefObject UInt32Array) + { + int i = 0, iStep = 0; + int nSize = UInt32Array.argvalue.length; + for (i = 0; i < nSize; i++) + { + UInt32Array.argvalue[i] = convertUInt32_net(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + } + + return iStep; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + @return int out 总共转换了多少个byte + + */ + public static int convertInt32Array(byte[] b, int haveread, RefObject Int32Array) + { + int i = 0, j = 0, iStep = 0; + int nColLength = Int32Array.argvalue[0].length; + int nSize = Int32Array.argvalue.length; + for (i = 0; i < nSize; i++) + { + for (j = 0; j < nColLength; j++) + { + Int32Array.argvalue[i][j] = convertInt32_net(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + } + } + + return iStep; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param short[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ + public static int convertInt16Array(byte[] b, int haveread, RefObject Int16Array) + { + int i = 0, j = 0, iStep = 0; + int nColLength = Int16Array.argvalue[0].length; + int nSize = Int16Array.argvalue.length; + for (i = 0; i < nSize; i++) + { + for (j = 0; j < nColLength; j++) + { + Int16Array.argvalue[i][j] = convertInt16_net(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + } + } + + return iStep; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param short[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ + public static int convertInt16ArraySingle(byte[] b, int haveread, RefObject Int16Array) + { + int i = 0, iStep = 0; + int nSize = Int16Array.argvalue.length; + for (i = 0; i < nSize; i++) + { + Int16Array.argvalue[i] = convertInt16_net(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + } + + return iStep; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param ushort[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static int convertUInt16Array(byte[] b, int haveread, ref ushort[] UInt16Array) + public static int convertUInt16Array(byte[] b, int haveread, RefObject UInt16Array) + { + int i = 0, iStep = 0; + int nSize = UInt16Array.argvalue.length; + for (i = 0; i < nSize; i++) + { + UInt16Array.argvalue[i] = convertUInt16_net(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + } + + return iStep; + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return float out 32位浮点数据 + + */ + public static float convertfloat(byte[] b, int haveread) + { + // 确保有足够的数据来读取一个float(4字节) + if (haveread + 4 > b.length) { + throw new IndexOutOfBoundsException("Not enough bytes to read a float."); + } + + // 创建一个ByteBuffer来处理字节 + ByteBuffer buffer = ByteBuffer.wrap(b, haveread, 4); + // 设置字节顺序,假设是大端序(与许多C#系统和网络协议相同) + buffer.order(ByteOrder.BIG_ENDIAN); + + // 从ByteBuffer中读取float + float fValue = buffer.getFloat(); + + return fValue; + } + /** + @brief 将二进制流的数组转换为制定的数据类型,增加字节序的转换 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return float out 32位浮点数据 + + */ + public static float convertfloat_net(byte[] b, int haveread) + { + // 确保有足够的数据来读取一个float(4字节) + if (haveread + 4 > b.length) { + throw new IndexOutOfBoundsException("Not enough bytes to read a float."); + } + + // 创建一个ByteBuffer来处理字节 + ByteBuffer buffer = ByteBuffer.wrap(b, haveread, 4); + // 设置字节顺序,假设是大端序(与许多C#系统和网络协议相同) + buffer.order(ByteOrder.BIG_ENDIAN); + + // 从ByteBuffer中读取float + float fValue = buffer.getFloat(); + + return fValue; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param float[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ + public static int convertFloatArrayTwo(byte[] b, int haveread, RefObject FloatArray) + { + int i = 0, j = 0, iStep = 0; + int nColLength = FloatArray.argvalue[0].length; + int nSize = FloatArray.argvalue.length; + for (i = 0; i < nSize; i++) + { + for (j = 0; j < nColLength; j++) + { + FloatArray.argvalue[i][j] = convertfloat(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + } + } + + return iStep; + } + public static int convertFloatArrayThree(byte[] b, int haveread, RefObject FloatArray) + { + int i = 0, j = 0, k = 0, iStep = 0; + int n2ColLength = FloatArray.argvalue[0][0].length; + int nColLength = FloatArray.argvalue[0].length; + int nSize = FloatArray.argvalue.length; + for (i = 0; i < nSize; i++) + { + for (j = 0; j < nColLength; j++) + { + for (k = 0; k < n2ColLength; k++) + { + FloatArray.argvalue[i][j][k] = convertfloat(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + } + } + } + + return iStep; + } + /** + @brief 将二进制流写入到数组中 + // @param byte[] in 待转换的二进制流 + // @param int in 已读取的二进制个数 + // @param float[] in 需写入的数组 + @return int out 总共转换了多少个byte + + */ + public static int convertFloatArraySingle(byte[] b, int haveread, RefObject FloatArray) + { + int i = 0, iStep = 0; + int nSize = FloatArray.argvalue.length; + for (i = 0; i < nSize; i++) + { + FloatArray.argvalue[i] = convertfloat(b, haveread + iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + } + + return iStep; + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 16位无符号整型数据 + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static ushort convertUInt16_net(byte[] b, int haveread) +// public static short convertUInt16_net(byte[] b, int haveread) +// { +// String s1 = (new Byte(b[haveread])).toString(); +// String s2 = (new Byte(b[haveread + 1])).toString(); +// return (short)convertInt16(s1, s2); +// } + + public static short convertUInt16_net(byte[] b, int offset) { + // 确保offset是有效的,并且偏移量之后至少还有一个字节 + if (b == null || offset < 0 || offset + 1 >= b.length) { + throw new IndexOutOfBoundsException("Invalid offset or array length"); + } + + // 假设字节顺序是大端的(网络字节序通常是大端的),我们需要先读取高字节再读取低字节 + // Java的byte类型是有符号的,但我们可以使用无符号右移(>>>)来确保结果是无符号的 + return (short) (((b[offset] & 0xFF) << 8) | (b[offset + 1] & 0xFF)); + + // 如果需要确保结果是正的(即无符号的),并且不会超出short的范围,可以返回强制类型转换后的short + // 但请注意,如果结果超过了short的最大值(32767),这里会丢失高位的信息 + // 在大多数情况下,这不会是一个问题,因为网络数据通常被设计为不会超出这些范围 +// return (short) result; + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 16位无符号整型数据 + + */ +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public static ushort convertUInt16(byte[] b, int haveread) + public static short convertUInt16(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread + 1])).toString(); + String s2 = (new Byte(b[haveread])).toString(); + return (short)convertInt16(s1, s2); + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 16位整型数据 + + */ + public static short convertInt16_net(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread])).toString(); + String s2 = (new Byte(b[haveread + 1])).toString(); + return convertInt16(s1, s2); + } + /** + @brief 将二进制流的数组转换为制定的数据类型 + // @param byte[] in 二进制流数据 + // @param int in 需转换的数据在二进制流的位置 + @return int out 16位整型数据 + + */ + public static short convertInt16(byte[] b, int haveread) + { + String s1 = (new Byte(b[haveread + 1])).toString(); + String s2 = (new Byte(b[haveread])).toString(); + return convertInt16(s1, s2); + } + /** + @brief 将字符型的数据转换无符号的整数 + // @param string in 高位字符 + // @param string in 低位字符 + @return int out 16位无符号整型数据 + + */ + public static short convertInt16(String s1, String s2) + { + short Value = (short)(Short.parseShort(s1, 10) * 256 + Integer.parseInt(s2, 10)); + return Value; + } + //解析结构体 +// public static Object BytesToStuct(byte[] bytes, Class type) +// { +// //得到结构体的大小 +// int size = Marshal.SizeOf(type); +// //byte数组长度小于结构体的大小 +// if (size > bytes.length) +// { +// //返回空 +// return null; +// } +// //分配结构体大小的内存空间 +// IntPtr structPtr = Marshal.AllocHGlobal(size); +// //将byte数组拷到分配好的内存空间 +// Marshal.Copy(bytes, 0, structPtr, size); +// //将内存空间转换为目标结构体 +// Object obj = Marshal.PtrToStructure(structPtr, type); +// //释放内存空间 +// Marshal.FreeHGlobal(structPtr); +// //返回结构体 +// return obj; +// } + +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: + ///#endregion +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/TagMsTime.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/TagMsTime.java new file mode 100644 index 0000000..4b5d9a1 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/TagMsTime.java @@ -0,0 +1,49 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +/** + 告警事件结构扩展——时间结构定义 + + */ +//C# TO JAVA CONVERTER WARNING: Java does not allow user-defined value types. The behavior of this class will differ from the original: +//ORIGINAL LINE: public struct TagMsTime +//C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: +//[StructLayout(LayoutKind.Sequential)] +public final class TagMsTime +{ + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 Year; + public short Year; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 Month; + public short Month; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 Day; + public short Day; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 Hour; + public short Hour; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 Min; + public short Min; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 Sec; + public short Sec; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt16 Ms; + public short Ms; + @Override + public TagMsTime clone() + { + TagMsTime varCopy = new TagMsTime(); + + varCopy.Year = this.Year; + varCopy.Month = this.Month; + varCopy.Day = this.Day; + varCopy.Hour = this.Hour; + varCopy.Min = this.Min; + varCopy.Sec = this.Sec; + varCopy.Ms = this.Ms; + + return varCopy; + } +} \ No newline at end of file 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/cmn_mode_cfg.java new file mode 100644 index 0000000..7129267 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/cmn_mode_cfg.java @@ -0,0 +1,363 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + + +/** + 装置普测工程配置信息 + + */ +public class cmn_mode_cfg +{ + public byte[] prj_name = new byte[128]; //工程名称 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint line_idx; + public int line_idx; //监测点序号,备用,配置文件按文件名区分 + public float un; //电压等级,一次值,单位kV + public float u_run; //运行电压,一次值,单位kV + public float pt_ratio; //pt变比 + public float ct_ratio; //ct变比 + + public float fDL_Capability; //短路容量,单位MW + public float fJZ_Capability; //基准容量,单位MW + public float fSB_Capability; //设备容量,单位MW + public float fXY_Capability; //协议容量,单位MW + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint vol_sel; + public int vol_sel; //电压接线方式选择 星型 三角形 V型 1 2 4 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint cur_sel; + public int cur_sel; //电流接线方式选择 //IA和IC合成计算 IB //IA和IB合成计算 IC + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint sel_cur_input; + public int sel_cur_input; //电流输入选择:各类电流钳或柔性环 + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint data_type; + public int data_type; //记录数据类型 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint stat_min_time; + public int stat_min_time; //分钟统计时间间隔,单位分钟,范围1-10 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint min_max_file_size; + public int min_max_file_size; //分钟文件分配空间,单位MB + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint sec_max_file_size; + public int sec_max_file_size; //3秒文件分配空间,单位MB + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint ms_max_file_size; + public int ms_max_file_size; //200ms文件分配空间,单位MB + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint lb_max_file_size; + public int lb_max_file_size; //暂态录波分配空间,单位MB + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint lb_max_file_num; + public int lb_max_file_num; //录波文件最大个数 + + //********************************************************************************* + //数字化配置 +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort app_id_u; + private short app_id_u; //电压通道APPID + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort app_id_i; + private short app_id_i; //电流通道APPID + private byte[] mult_mac_u = new byte[6]; //电压通道组播MAC + private byte[] mult_mac_i = new byte[6]; //电流通道组播MAC + private int smp_rate; //采样率 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort[] link_cfg = new ushort[8]; + private Short[] link_cfg = new Short[8]; //虚拟端子配置 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort is_91_or_92; + private Short is_91_or_92; //9-1 或9-2选择,初始化系数 // 0位置1选择9-1; 1位置1选择9-2; + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: ushort dig_is_use; + private Short dig_is_use; //数字化是否投入,0:退出 1:投入 + //********************************************************************************* + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint sel_vol_input; + public int sel_vol_input; //电压输入选择:目前电阻分压回路不需要,备用 + public char[] by = new char[1024]; //1024个字节,留着后期扩展备用 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort uStatus; + public short uStatus; //配置有效位 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public ushort crc; + public short crc; //校验码 + + public static int GetSize() //用于定义Byte数组 + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + int nSize = 12 * Integer.SIZE / Byte.SIZE + 8 * Float.SIZE / Byte.SIZE+ 2 * Short.SIZE / Byte.SIZE + 1152 + 12 * Short.SIZE / Byte.SIZE + 12 + 1 * Integer.SIZE / Byte.SIZE; //CComtradeDataItem数据结构数据长度 + return nSize; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + int iStep = nHaveRead; + + for (int i = 0; i < prj_name.length; i++) + { + prj_name[i] = bArray[iStep]; + iStep++; + } + line_idx = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + un = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + u_run = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + pt_ratio = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + ct_ratio = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + fDL_Capability = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + fJZ_Capability = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + fSB_Capability = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + fXY_Capability = Service.convertfloat(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + vol_sel = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + cur_sel = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sel_cur_input = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + data_type = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + stat_min_time = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + min_max_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sec_max_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + ms_max_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_max_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_max_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + + app_id_u = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + app_id_i = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + for (int i = 0; i < mult_mac_u.length; i++) + { + mult_mac_u[i] = bArray[iStep]; + iStep++; + } + for (int i = 0; i < mult_mac_i.length; i++) + { + mult_mac_i[i] = bArray[iStep]; + iStep++; + } + smp_rate = Service.convertInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + RefObject tempRef_link_cfg = new RefObject(link_cfg); + iStep += Service.convertUInt16Array(bArray, iStep, tempRef_link_cfg); + link_cfg = tempRef_link_cfg.argvalue; + is_91_or_92 = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + dig_is_use = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + + sel_vol_input = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + for (int i = 0; i < by.length; i++) + { + by[i] = (char)bArray[iStep]; + iStep++; + } + uStatus = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + crc = Service.convertUInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + return true; + } + public final boolean SetStructBuf_net(byte[] bArray, int nHaveRead) //报文大小头处理 + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + int iStep = nHaveRead; + + for (int i = 0; i < prj_name.length; i++) + { + prj_name[i] = bArray[iStep]; + iStep++; + } + line_idx = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + un = Service.convertfloat_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + u_run = Service.convertfloat_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + pt_ratio = Service.convertfloat_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + ct_ratio = Service.convertfloat_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + fDL_Capability = Service.convertfloat_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + fJZ_Capability = Service.convertfloat_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + fSB_Capability = Service.convertfloat_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + fXY_Capability = Service.convertfloat_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Float.SIZE / Byte.SIZE; + vol_sel = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + cur_sel = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sel_cur_input = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + data_type = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + stat_min_time = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + min_max_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sec_max_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + ms_max_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_max_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_max_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sel_vol_input = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + for (int i = 0; i < by.length; i++) + { + by[i] = (char)bArray[iStep]; + iStep++; + } + uStatus = Service.convertUInt16(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + crc = Service.convertUInt16(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + return true; + } + public final int GetStructBuf(RefObject bArray, int nHaveRead) + { + int nSize = bArray.argvalue.length; + if (nSize < (nHaveRead + GetSize())) + { + return 0; + } + int iStep = nHaveRead; + + for (int i = 0; i < prj_name.length; i++) + { + bArray.argvalue[iStep] = (byte)prj_name[i]; + iStep++; + } + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)line_idx, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)un, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)u_run, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)pt_ratio, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)ct_ratio, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)fDL_Capability, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)fJZ_Capability, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)fSB_Capability, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Float)fXY_Capability, Service.enum_Value_type.Value_float); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)vol_sel, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)cur_sel, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)sel_cur_input, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)data_type, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)stat_min_time, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)min_max_file_size, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)sec_max_file_size, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)ms_max_file_size, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)lb_max_file_size, Service.enum_Value_type.Value_uint); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)lb_max_file_num, Service.enum_Value_type.Value_uint); + + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)app_id_u, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)app_id_i, Service.enum_Value_type.Value_ushort); + for (int i = 0; i < mult_mac_u.length; i++) + { + bArray.argvalue[iStep] = mult_mac_u[i]; + iStep++; + } + for (int i = 0; i < mult_mac_i.length; i++) + { + bArray.argvalue[iStep] = mult_mac_i[i]; + iStep++; + } + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)smp_rate, Service.enum_Value_type.Value_int); + for (int i = 0; i < link_cfg.length; i++) + { + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)link_cfg[i], Service.enum_Value_type.Value_ushort); + } + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)is_91_or_92, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)dig_is_use, Service.enum_Value_type.Value_ushort); + + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)sel_vol_input, Service.enum_Value_type.Value_uint); + for (int i = 0; i < by.length; i++) + { + bArray.argvalue[iStep] = (byte)by[i]; + iStep++; + } + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)uStatus, Service.enum_Value_type.Value_ushort); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Short)crc, Service.enum_Value_type.Value_ushort); + return GetSize(); + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_int.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_int.java new file mode 100644 index 0000000..50e9c13 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_int.java @@ -0,0 +1,68 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +/** + 装置固化信息 + + */ +public class pqv_dev_info_int +{ + public byte[] dev_type = new byte[64]; //装置型号,如"PQV-520A" + public byte[] soft_app_ver = new byte[64]; //装置程序版本,格式为"版本号:日期:校验码",如"V1.00:20230606:xxxx"。 + public byte[] MAC = new byte[6]; //装置有线网口MAC地址 + public byte[] line_num = new byte[1]; //检测点数目 + public byte[] max_prj_num = new byte[1]; //最大测量工程数 默认10 + public byte[] protocol_ver = new byte[16]; //通讯协议版本号 + public byte[] by = new byte[240]; //备用信息 + + public static int GetSize() //用于定义Byte数组 + { + return 392; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + int iStep = nHaveRead; + + for (int i = 0; i < dev_type.length; i++) + { + dev_type[i] = bArray[iStep]; + iStep++; + } + for (int i = 0; i < soft_app_ver.length; i++) + { + soft_app_ver[i] = bArray[iStep]; + iStep++; + } + for (int i = 0; i < MAC.length; i++) + { + MAC[i] = bArray[iStep]; + iStep++; + } + for (int i = 0; i < line_num.length; i++) + { + line_num[i] = bArray[iStep]; + iStep++; + } + for (int i = 0; i < max_prj_num.length; i++) + { + max_prj_num[i] = bArray[iStep]; + iStep++; + } + for (int i = 0; i < protocol_ver.length; i++) + { + protocol_ver[i] = bArray[iStep]; + iStep++; + } + + for (int i = 0; i < by.length; i++) + { + by[i] = bArray[iStep]; + iStep++; + } + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_int1.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_int1.java new file mode 100644 index 0000000..728046a --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_int1.java @@ -0,0 +1,41 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +///#region 报文解析格式 +/** + 装置固化信息 + + */ +//C# TO JAVA CONVERTER WARNING: Java does not allow user-defined value types. The behavior of this class will differ from the original: +//ORIGINAL LINE: public struct pqv_dev_info_int1 +public final class pqv_dev_info_int1 +{ + //C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: + //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] + private char[] dev_type; //装置型号,如"PQV-520A" + //C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: + //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] + private char[] soft_app_ver; //装置程序版本,格式为"版本号:日期:校验码",如"V1.00:20230606:xxxx"。 + //C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: + //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] + private char[] MAC; //装置有线网口MAC地址 + //C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: + //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] + private char[] line_num; //检测点号 + //C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: + //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 257)] + private char[] by; //备用信息 + @Override + public pqv_dev_info_int1 clone() + { + pqv_dev_info_int1 varCopy = new pqv_dev_info_int1(); + + varCopy.dev_type = this.dev_type; + varCopy.soft_app_ver = this.soft_app_ver; + varCopy.MAC = this.MAC; + varCopy.line_num = this.line_num; + varCopy.by = this.by; + + return varCopy; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_run.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_run.java new file mode 100644 index 0000000..896e72b --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/pqv_dev_info_run.java @@ -0,0 +1,39 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class pqv_dev_info_run +{ + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint[] line_run_sts; + private Integer[] line_run_sts; //各个监测点测试运行状态 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: uint[] line_cur_dir_idx; + private Integer[] line_cur_dir_idx; //各个监测点当前存储数据文件目录序号1-10.只有记录运行状态时有效 + public static int GetSize(int count) + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + int len = 2 * count * Integer.SIZE / Byte.SIZE; + return len; + } + public pqv_dev_info_run(int count) + { + line_run_sts = new Integer[count]; + line_cur_dir_idx = new Integer[count]; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead, int count) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize(count)) + { + return false; + } + int iStep = nHaveRead; + + RefObject tempRef_line_run_sts = new RefObject(line_run_sts); + iStep += Service.convertUInt32Array(bArray, iStep, tempRef_line_run_sts); + line_run_sts = tempRef_line_run_sts.argvalue; + RefObject tempRef_line_cur_dir_idx = new RefObject(line_cur_dir_idx); + iStep += Service.convertUInt32Array(bArray, iStep, tempRef_line_cur_dir_idx); + line_cur_dir_idx = tempRef_line_cur_dir_idx.argvalue; + return true; + } +} \ No newline at end of file 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/prj_record_info.java new file mode 100644 index 0000000..c6a1a2a --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_record_info.java @@ -0,0 +1,83 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +/** + 工程数据文件信息 + + */ +public class prj_record_info +{ + public pqv_dev_info_int dev_info; //装置信息 + public cmn_mode_cfg cfg; //测试记录工程配置 + public prj_store_info store_mag; //存储管理缓冲 + public int tv_sec_s; //开始记录时间 + public int tv_sec_e; //结束记录时间 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint status; + public int status; //测试工程数据是否有效标志 + + public prj_record_info() + { + dev_info = new pqv_dev_info_int(); + cfg = new cmn_mode_cfg(); + 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数据结构数据长度 + return nSize; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + int iStep = nHaveRead; + + dev_info.SetStructBuf(bArray, iStep); + iStep = iStep + pqv_dev_info_int.GetSize(); + cfg.SetStructBuf(bArray, iStep); + iStep = iStep + cmn_mode_cfg.GetSize(); + store_mag.SetStructBuf(bArray, iStep); + iStep = iStep + prj_store_info.GetSize(); + tv_sec_s = Service.convertInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + tv_sec_e = Service.convertInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + status = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + return true; + } + + public final boolean SetStructBuf_net(byte[] bArray, int nHaveRead) //处理文件解析时 需要处理报文大小头 + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + int iStep = nHaveRead; + + dev_info.SetStructBuf(bArray, iStep); + iStep = iStep + pqv_dev_info_int.GetSize(); + cfg.SetStructBuf_net(bArray, iStep); + iStep = iStep + cmn_mode_cfg.GetSize(); + store_mag.SetStructBuf_net(bArray, iStep); + iStep = iStep + prj_store_info.GetSize(); + tv_sec_s = Service.convertInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + tv_sec_e = Service.convertInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + status = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_store_info.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_store_info.java new file mode 100644 index 0000000..8c8825c --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/prj_store_info.java @@ -0,0 +1,300 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +/** + 存储管理缓冲 + + */ +public class prj_store_info +{ + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint ms_file_num; + public int ms_file_num; //200ms数据文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint ms_file_size; + public int ms_file_size; //200ms数据文件大小 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint sec_file_num; + public int sec_file_num; //3s数据文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint sec_file_size; + public int sec_file_size; //3s数据文件大小 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint min_file_num; + public int min_file_num; //min数据文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint min_file_size; + public int min_file_size; //min数据文件大小 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint lb_file_num; + public int lb_file_num; //录波文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint lb_file_size; + public int lb_file_size; //录波文件大小 + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint ms_file_on; + public int ms_file_on; //200ms数据记录开关 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint sec_file_on; + public int sec_file_on; //3s数据记录开关 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint min_file_on; + public int min_file_on; //分钟数据记录开关 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint lb_file_on; + public int lb_file_on; //录波数据记录开关 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint log_file_on; + public int log_file_on; //日志数据记录开关 + + //大小限制,单位kb +//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint max_ms_file_num; + public int max_ms_file_num; //200ms数据文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint max_ms_file_size; + public int max_ms_file_size; //200ms数据文件大小 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint max_sec_file_num; + public int max_sec_file_num; //3s数据文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint max_sec_file_size; + public int max_sec_file_size; //3s数据文件大小 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint max_min_file_num; + public int max_min_file_num; //min数据文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint max_min_file_size; + public int max_min_file_size; //min数据文件大小 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint max_lb_file_num; + public int max_lb_file_num; //录波文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint max_lb_file_size; + public int max_lb_file_size; //录波文件大小*(字节) + + public byte[] path = new byte[32]; //32字节 文件存储全路径 + + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint fg_file_num; + public int fg_file_num; //风电光伏文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint fg_file_size; + public int fg_file_size; //风电光伏文件大小(kB) + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint fg_file_on; + public int fg_file_on; //风电光优数据记录开关 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint log_file_num; + public int log_file_num; //日志文件个数 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public uint log_file_size; + public int log_file_size; //日志文件大小 + public char[] by = new char[1016]; //1024个字节,留着后期扩展备用 + + public static int GetSize() //用于定义Byte数组 + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + int nSize = 26 * Integer.SIZE / Byte.SIZE + 32 + 1016; //数据结构数据长度 + return nSize; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + int iStep = nHaveRead; + + ms_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + ms_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sec_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sec_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + min_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + min_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + ms_file_on = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sec_file_on = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + min_file_on = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_file_on = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + log_file_on = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_ms_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_ms_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_sec_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_sec_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_min_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_min_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_lb_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_lb_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + for (int i = 0; i < path.length; i++) + { + path[i] = bArray[iStep]; + iStep++; + } + fg_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + fg_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + fg_file_on = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + log_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + log_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + for (int i = 0; i < by.length; i++) + { + by[i] = (char)bArray[iStep]; + iStep++; + } + return true; + } + public final boolean SetStructBuf_net(byte[] bArray, int nHaveRead) //处理文件大小头 + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + int iStep = nHaveRead; + + ms_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + ms_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sec_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sec_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + min_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + min_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + ms_file_on = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + sec_file_on = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + min_file_on = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + lb_file_on = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + log_file_on = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_ms_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_ms_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_sec_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_sec_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_min_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_min_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_lb_file_num = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + max_lb_file_size = Service.convertUInt32(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + + for (int i = 0; i < path.length; i++) + { + path[i] = bArray[iStep]; + iStep++; + } + fg_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + fg_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + fg_file_on = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + log_file_num = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + log_file_size = Service.convertUInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + for (int i = 0; i < by.length; i++) + { + by[i] = (char)bArray[iStep]; + iStep++; + } + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagInHarmData.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagInHarmData.java new file mode 100644 index 0000000..2c22e4c --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagInHarmData.java @@ -0,0 +1,51 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//间谐波的幅值和频率结构 +public class tagInHarmData +{ + public int Val; + public int f; + + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 2 * Integer.SIZE / Byte.SIZE; + } + + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + + int iStep = nHaveRead; + + Val = Service.convertInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + f = Service.convertInt32_net(bArray, iStep); + + return true; + } + + /** + @brief 将类中的变量组装成byte[]二进制流 + @return byte[] out 二进制数组 + + */ + public final int GetStructBuf(RefObject bArray, int nHaveRead) + { + int nSize = bArray.argvalue.length; + if (nSize < (nHaveRead + GetSize())) + { + return 0; + } + int iStep = nHaveRead; + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)Val, Service.enum_Value_type.Value_int); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)f, Service.enum_Value_type.Value_int); + + return GetSize(); + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagInHarmData_float.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagInHarmData_float.java new file mode 100644 index 0000000..1ea6ee8 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagInHarmData_float.java @@ -0,0 +1,12 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: //波动闪变 +///#endregion +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +///#region 浮点数据结构 + +public class tagInHarmData_float +{ + public float Val; + public float f; +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPQDataCmn.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPQDataCmn.java new file mode 100644 index 0000000..1c976df --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPQDataCmn.java @@ -0,0 +1,131 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//新版 3秒,分钟统计结构 + +import lombok.Data; + +@Data +public class tagPQDataCmn +{ + public short name; ///监测点号 12 /// + public short Data_Type; ///数据类型 2 /// + public int DataTag; // 标记 1:暂态标记 2:无效数据 + public RTC_Timer_MS time; ///时间 /// + public Float[] Rms; ///电压A B C 电流A B C 线电压AB BC CA/// + public Float[] UU_Deviation; ///电压上偏差相电压abc,线电压AB BC CA /// + public Float[] UL_Deviation; ///电压下偏差相电压abc,线电压AB BC CA/// + public Float[] F_Deviation; ///频率偏差 8 /// + public Float[][] UI_Seq; ///电压电流零、正、负序、不平衡度32 第一个[]电压,电流;第二个[]零、正、负序、不平衡度/// + public Float[][] FuHarm; ///整次谐波 电压A B C N 电流A B C N 1200 /// + public Float[][] FuHarmPhase; ///谐波相角-送一半数据 600 /// + public Float[][] InHarm; ///间谐波-送一半数据 1200 /// + public Float[][] Total_Power; ///a,b,c,total 总功率(P.Q.S) 48 /// + public Float[][][] Harm_Power; ///谐波功率-送一半数据 1200 /// + public Float[][] Harm_Contain; ///谐波含有率 xxx.xx 600 /// + public Float[] Harm_Aberrance; ///谐波畸变率 xxx.xx 12 /// + public Float[] Cos_PF; ///视在功率因数 =P/S xx.xxx 8 /// + public Float[] Cos_DF; ///位移功率因数=P/S1 xx.xxx 8 /// + public Float[] U_Fluctuation; ///电压波动 xx.xxx 6 /// + public Float[] U_Flicker; ///电压闪变 xx.xxx 6 /// + public Float[] UL_Flicker; ///电压长闪变 xx.xxx 6 /// + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + int nLen = RTC_Timer_MS.GetSize() + 1 * Integer.SIZE / Byte.SIZE + 2 * Short.SIZE / Byte.SIZE + 1866 * Float.SIZE / Byte.SIZE; + return nLen; + } + public tagPQDataCmn() + { + time = new RTC_Timer_MS(); + Rms = new Float[9]; + UU_Deviation = new Float[6]; + UL_Deviation = new Float[6]; + F_Deviation = new Float[2]; + UI_Seq = new Float[2][4]; + FuHarm = new Float[6][50]; + FuHarmPhase = new Float[6][50]; + InHarm = new Float[6][50]; + Total_Power = new Float[4][3]; + Harm_Power = new Float[4][50][3]; + Harm_Contain = new Float[6][50]; + Harm_Aberrance = new Float[6]; + Cos_PF = new Float[4]; + Cos_DF = new Float[4]; + U_Fluctuation = new Float[3]; + U_Flicker = new Float[3]; + UL_Flicker = new Float[3]; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nSize = bArray.length; + int nStep = nHaveRead; //读取数据的步长 + + if (nSize < (GetSize() + nHaveRead)) + { + return false; + } + name = Service.convertInt16_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Short.SIZE / Byte.SIZE; + Data_Type = Service.convertInt16_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Short.SIZE / Byte.SIZE; + DataTag = Service.convertInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + time.SetStructBuf(bArray, nStep); + nStep += RTC_Timer_MS.GetSize(); + RefObject tempRef_Rms = new RefObject(Rms); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_Rms); + Rms = tempRef_Rms.argvalue; + RefObject tempRef_UU_Deviation = new RefObject(UU_Deviation); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_UU_Deviation); + UU_Deviation = tempRef_UU_Deviation.argvalue; + RefObject tempRef_UL_Deviation = new RefObject(UL_Deviation); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_UL_Deviation); + UL_Deviation = tempRef_UL_Deviation.argvalue; + RefObject tempRef_F_Deviation = new RefObject(F_Deviation); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_F_Deviation); + F_Deviation = tempRef_F_Deviation.argvalue; + RefObject tempRef_UI_Seq = new RefObject(UI_Seq); + nStep += Service.convertFloatArrayTwo(bArray, nStep, tempRef_UI_Seq); + UI_Seq = tempRef_UI_Seq.argvalue; + RefObject tempRef_FuHarm = new RefObject(FuHarm); + nStep += Service.convertFloatArrayTwo(bArray, nStep, tempRef_FuHarm); + FuHarm = tempRef_FuHarm.argvalue; + RefObject tempRef_FuHarmPhase = new RefObject(FuHarmPhase); + nStep += Service.convertFloatArrayTwo(bArray, nStep, tempRef_FuHarmPhase); + FuHarmPhase = tempRef_FuHarmPhase.argvalue; + RefObject tempRef_InHarm = new RefObject(InHarm); + nStep += Service.convertFloatArrayTwo(bArray, nStep, tempRef_InHarm); + InHarm = tempRef_InHarm.argvalue; + RefObject tempRef_Total_Power = new RefObject(Total_Power); + nStep += Service.convertFloatArrayTwo(bArray, nStep, tempRef_Total_Power); + Total_Power = tempRef_Total_Power.argvalue; + RefObject tempRef_Harm_Power = new RefObject(Harm_Power); + nStep += Service.convertFloatArrayThree(bArray, nStep, tempRef_Harm_Power); + Harm_Power = tempRef_Harm_Power.argvalue; + RefObject tempRef_Harm_Contain = new RefObject(Harm_Contain); + nStep += Service.convertFloatArrayTwo(bArray, nStep, tempRef_Harm_Contain); + Harm_Contain = tempRef_Harm_Contain.argvalue; + RefObject tempRef_Harm_Aberrance = new RefObject(Harm_Aberrance); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_Harm_Aberrance); + Harm_Aberrance = tempRef_Harm_Aberrance.argvalue; + RefObject tempRef_Cos_PF = new RefObject(Cos_PF); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_Cos_PF); + Cos_PF = tempRef_Cos_PF.argvalue; + RefObject tempRef_Cos_DF = new RefObject(Cos_DF); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_Cos_DF); + Cos_DF = tempRef_Cos_DF.argvalue; + RefObject tempRef_U_Fluctuation = new RefObject(U_Fluctuation); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_U_Fluctuation); + U_Fluctuation = tempRef_U_Fluctuation.argvalue; + RefObject tempRef_U_Flicker = new RefObject(U_Flicker); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_U_Flicker); + U_Flicker = tempRef_U_Flicker.argvalue; + RefObject tempRef_UL_Flicker = new RefObject(UL_Flicker); + nStep += Service.convertFloatArraySingle(bArray, nStep, tempRef_UL_Flicker); + UL_Flicker = tempRef_UL_Flicker.argvalue; + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPQDataCmnHh.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPQDataCmnHh.java new file mode 100644 index 0000000..c12ce06 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPQDataCmnHh.java @@ -0,0 +1,118 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class tagPQDataCmnHh //高频谐波结构 +{ + private short name; //监测点序号 2 + private short Data_Type; //数据类型 2 + public int DataTag; // 标记 1:暂态标记 2:无效数据 + public RTC_Timer_MS time; // 时标 + //2-9k谐波 2.1kHz / 2.3kHZ … 8.9kHz + public Float[][] Hharm_rms_list_2_9K; //6-35 谐波有效值序列(Uabc/Iabc) + public Float[][] Hharm_thd_list_2_9K; //6-35 谐波含有率序列 + public Float[] Hharm_total_rms_2_9K; //6 谐波总有效值 + public Float[] Hharm_total_thd_2_9K; //6 谐波总畸变率 + public Float[] Hharm_max_rms_2_9K; //6 谐波最大有效值 + public Float[] Hharm_max_thd_2_9K; //6 谐波最大畸变率 + public Float[] Hharm_max_freq_2_9K; //6 谐波最大值频点 + //2-150k谐波 2kHz / 4kHz … 150kHz + public Float[][] Hharm_rms_list_2_150K; //6-75 谐波有效值序列(2-150) + public Float[][] Hharm_thd_list_2_150K; //6-75 谐波含有率序列 + public Float[] Hharm_total_rms_2_150K; //6 谐波总有效值 + public Float[] Hharm_total_thd_2_150K; //6 谐波总畸变率 + public Float[] Hharm_max_rms_2_150K; //6 谐波最大有效值 + public Float[] Hharm_max_thd_2_150K; //6 谐波最大畸变率 + public Float[] Hharm_max_freq_2_150K; //6 谐波最大值频点 + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + int len = RTC_Timer_MS.GetSize() + 2 * Short.SIZE / Byte.SIZE + 1 * Integer.SIZE / Byte.SIZE + 6 * 35 * 2 * Float.SIZE / Byte.SIZE+ 6 * 75 * 2 * Float.SIZE / Byte.SIZE+ 6 * 10 * Float.SIZE / Byte.SIZE; + return len; + } + public tagPQDataCmnHh() + { + time = new RTC_Timer_MS(); + Hharm_rms_list_2_9K = new Float[6][35]; + Hharm_thd_list_2_9K = new Float[6][35]; + Hharm_total_rms_2_9K = new Float[6]; + Hharm_total_thd_2_9K = new Float[6]; + Hharm_max_rms_2_9K = new Float[6]; + Hharm_max_thd_2_9K = new Float[6]; + Hharm_max_freq_2_9K = new Float[6]; + Hharm_rms_list_2_150K = new Float[6][75]; + Hharm_thd_list_2_150K = new Float[6][75]; + Hharm_total_rms_2_150K = new Float[6]; + Hharm_total_thd_2_150K = new Float[6]; + Hharm_max_rms_2_150K = new Float[6]; + Hharm_max_thd_2_150K = new Float[6]; + Hharm_max_freq_2_150K = new Float[6]; + } + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + //int size = GetSize(); + if (nByteSize < GetSize()) + { + return false; + } + + int iStep = nHaveRead; + name = Service.convertInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + Data_Type = Service.convertInt16_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Short.SIZE / Byte.SIZE; + DataTag = Service.convertInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + time.SetStructBuf(bArray, iStep); + iStep += RTC_Timer_MS.GetSize(); + + RefObject tempRef_Hharm_rms_list_2_9K = new RefObject(Hharm_rms_list_2_9K); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_Hharm_rms_list_2_9K); + Hharm_rms_list_2_9K = tempRef_Hharm_rms_list_2_9K.argvalue; + RefObject tempRef_Hharm_thd_list_2_9K = new RefObject(Hharm_thd_list_2_9K); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_Hharm_thd_list_2_9K); + Hharm_thd_list_2_9K = tempRef_Hharm_thd_list_2_9K.argvalue; + RefObject tempRef_Hharm_total_rms_2_9K = new RefObject(Hharm_total_rms_2_9K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_total_rms_2_9K); + Hharm_total_rms_2_9K = tempRef_Hharm_total_rms_2_9K.argvalue; + RefObject tempRef_Hharm_total_thd_2_9K = new RefObject(Hharm_total_thd_2_9K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_total_thd_2_9K); + Hharm_total_thd_2_9K = tempRef_Hharm_total_thd_2_9K.argvalue; + RefObject tempRef_Hharm_max_rms_2_9K = new RefObject(Hharm_max_rms_2_9K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_max_rms_2_9K); + Hharm_max_rms_2_9K = tempRef_Hharm_max_rms_2_9K.argvalue; + RefObject tempRef_Hharm_max_thd_2_9K = new RefObject(Hharm_max_thd_2_9K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_max_thd_2_9K); + Hharm_max_thd_2_9K = tempRef_Hharm_max_thd_2_9K.argvalue; + RefObject tempRef_Hharm_max_freq_2_9K = new RefObject(Hharm_max_freq_2_9K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_max_freq_2_9K); + Hharm_max_freq_2_9K = tempRef_Hharm_max_freq_2_9K.argvalue; + RefObject tempRef_Hharm_rms_list_2_150K = new RefObject(Hharm_rms_list_2_150K); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_Hharm_rms_list_2_150K); + Hharm_rms_list_2_150K = tempRef_Hharm_rms_list_2_150K.argvalue; + RefObject tempRef_Hharm_thd_list_2_150K = new RefObject(Hharm_thd_list_2_150K); + iStep += Service.convertFloatArrayTwo(bArray, iStep, tempRef_Hharm_thd_list_2_150K); + Hharm_thd_list_2_150K = tempRef_Hharm_thd_list_2_150K.argvalue; + RefObject tempRef_Hharm_total_rms_2_150K = new RefObject(Hharm_total_rms_2_150K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_total_rms_2_150K); + Hharm_total_rms_2_150K = tempRef_Hharm_total_rms_2_150K.argvalue; + RefObject tempRef_Hharm_total_thd_2_150K = new RefObject(Hharm_total_thd_2_150K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_total_thd_2_150K); + Hharm_total_thd_2_150K = tempRef_Hharm_total_thd_2_150K.argvalue; + RefObject tempRef_Hharm_max_rms_2_150K = new RefObject(Hharm_max_rms_2_150K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_max_rms_2_150K); + Hharm_max_rms_2_150K = tempRef_Hharm_max_rms_2_150K.argvalue; + RefObject tempRef_Hharm_max_thd_2_150K = new RefObject(Hharm_max_thd_2_150K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_max_thd_2_150K); + Hharm_max_thd_2_150K = tempRef_Hharm_max_thd_2_150K.argvalue; + RefObject tempRef_Hharm_max_freq_2_150K = new RefObject(Hharm_max_freq_2_150K); + iStep += Service.convertFloatArraySingle(bArray, iStep, tempRef_Hharm_max_freq_2_150K); + Hharm_max_freq_2_150K = tempRef_Hharm_max_freq_2_150K.argvalue; + return true; + } +} +//高频谐波结构 +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +///#endregion diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPowerData.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPowerData.java new file mode 100644 index 0000000..d973daf --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPowerData.java @@ -0,0 +1,57 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//功率结构 +public class tagPowerData +{ + public int P; + public int Q; + public int S; + + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + return 3 * Integer.SIZE / Byte.SIZE; + } + + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int nByteSize = bArray.length; + if (nByteSize < GetSize()) + { + return false; + } + + int iStep = nHaveRead; + + P = Service.convertInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + Q = Service.convertInt32_net(bArray, iStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + iStep += Integer.SIZE / Byte.SIZE; + S = Service.convertInt32_net(bArray, iStep); + + return true; + } + + /** + @brief 将类中的变量组装成byte[]二进制流 + @return byte[] out 二进制数组 + + */ + public final int GetStructBuf(RefObject bArray, int nHaveRead) + { + int nSize = bArray.argvalue.length; + if (nSize < (nHaveRead + GetSize())) + { + return 0; + } + int iStep = nHaveRead; + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)P, Service.enum_Value_type.Value_int); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)Q, Service.enum_Value_type.Value_int); + iStep += Service.AddObjectToByteArray_net(bArray, iStep, (Object)(Integer)S, Service.enum_Value_type.Value_int); + + return GetSize(); + } + +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPowerData_float.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPowerData_float.java new file mode 100644 index 0000000..f9c73e2 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPowerData_float.java @@ -0,0 +1,8 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +public class tagPowerData_float +{ + public float P; + public float Q; + public float S; +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPqData.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPqData.java new file mode 100644 index 0000000..3466a98 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPqData.java @@ -0,0 +1,211 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java: +///#endregion + +/** + @brief 3秒、分钟统计数据、日统计单个类型结构 + + */ +public class tagPqData +{ + public short name; ///监测点号 12 /// + public short Data_Type; ///数据类型 2 /// + public RTC_Timer time; ///时间 /// + public Integer[] Rms; ///电压A B C N 电流A B C N 线电压AB BC CA/// + public Integer[] UU_Deviation; ///电压上偏差(3线电压)24 /// + public Integer[] UL_Deviation; ///电压下偏差/// + public Integer[] F_Deviation; ///频率偏差 8 /// + public Integer[][] UI_Seq; ///电压电流零、正、负序、不平衡度32 第一个[]电压,电流;第二个[]零、正、负序、不平衡度/// + public Integer[][] FuHarm; ///整次谐波 电压A B C N 电流A B C N 1200 /// + public Integer[][] FuHarmPhase; ///谐波相角-送一半数据 600 /// + public tagInHarmData[][] InHarm; ///间谐波-送一半数据 1200 /// + public Integer[][] Total_Power; ///a,b,c,total 总功率(P.Q.S) 48 /// + public tagPowerData[][] Harm_Power; ///谐波功率-送一半数据 1200 /// + public Short[][] Harm_Contain; ///谐波含有率 xxx.xx 600 /// + public Short[] Harm_Aberrance; ///谐波畸变率 xxx.xx 12 /// + public Short[] Cos_PF; ///视在功率因数 =P/S xx.xxx 8 /// + public Short[] Cos_DF; ///位移功率因数=P/S1 xx.xxx 8 /// + public Short[] U_Fluctuation; ///电压波动 xx.xxx 6 /// + public Short[] U_Flicker; ///电压闪变 xx.xxx 6 /// + public Short[] UL_Flicker; ///电压长闪变 xx.xxx 6 /// + + public tagPqData() + { + int i = 0, j = 0; + + time = new RTC_Timer(); + Rms = new Integer[9]; + UU_Deviation = new Integer[6]; + UL_Deviation = new Integer[6]; + F_Deviation = new Integer[2]; + UI_Seq = new Integer[2][4]; + FuHarm = new Integer[6][50]; + FuHarmPhase = new Integer[6][50]; + InHarm = new tagInHarmData[6][50]; + for (i = 0; i < 6; i++) + { + for (j = 0; j < 50; j++) + { + InHarm[i][j] = new tagInHarmData(); + } + } + Total_Power = new Integer[4][3]; + Harm_Power = new tagPowerData[4][50]; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 50; j++) + { + Harm_Power[i][j] = new tagPowerData(); + } + } + Harm_Contain = new Short[6][50]; + Harm_Aberrance = new Short[6]; + Cos_PF = new Short[4]; + Cos_DF = new Short[4]; + U_Fluctuation = new Short[3]; + U_Flicker = new Short[3]; + UL_Flicker = new Short[3]; + } + /** + @brief 读取类的长度 + @return int out 类的长度 + + */ + public static int GetSize() + { +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + int nLen = RTC_Timer.GetSize() + (9 + 6 + 6 + 2 + 8 + 300 + 300 + 12) * Integer.SIZE / Byte.SIZE + 300 * tagInHarmData.GetSize() + 200 * tagPowerData.GetSize() + (300 + 6 + 4 + 4 + 3 + 3 + 3 + 2) * Short.SIZE / Byte.SIZE; + + return nLen + 2; //2字节补齐 + } + /** + @brief 将通讯或者文件读取的二进制流写入到类中 + @return int out 类的长度 + + */ + public final boolean GetStructBuf(RefObject bArray, int nHaveRead) + { + int nSize = bArray.argvalue.length; + int nStep = nHaveRead; //读取数据的步长 + + if (nSize < (GetSize() + nHaveRead)) + { + return false; + } + nStep += Service.AddObjectToByteArray_net(bArray, nStep, (Object)(Short)name, Service.enum_Value_type.Value_short); + + nStep += Service.AddObjectToByteArray_net(bArray, nStep, (Object)(Short)Data_Type, Service.enum_Value_type.Value_short); + + time.GetStructBuf(bArray, nStep); + nStep += RTC_Timer.GetSize(); + + nStep += Service.AddObjectToByteArray_net(bArray, nStep, (Object)(Integer)Rms[0], Service.enum_Value_type.Value_int); + nStep += Service.AddObjectToByteArray_net(bArray, nStep, (Object)(Integer)Rms[1], Service.enum_Value_type.Value_int); + nStep += Service.AddObjectToByteArray_net(bArray, nStep, (Object)(Integer)Rms[2], Service.enum_Value_type.Value_int); + + return true; + } + /** + @brief 将通讯或者文件读取的二进制流写入到类中 + @return int out 类的长度 + + */ + public final boolean SetStructBuf(byte[] bArray, int nHaveRead) + { + int i = 0, j = 0; + int nSize = bArray.length; + int nStep = nHaveRead; //读取数据的步长 + + if (nSize < (GetSize() + nHaveRead)) + { + return false; + } + name = Service.convertInt16_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Short.SIZE / Byte.SIZE; + + Data_Type = Service.convertInt16_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Short.SIZE / Byte.SIZE; + + time.SetStructBuf(bArray, nStep); + nStep += RTC_Timer.GetSize(); + + RefObject tempRef_Rms = new RefObject(Rms); + nStep += Service.convertInt32ArraySigle(bArray, nStep, tempRef_Rms); + Rms = tempRef_Rms.argvalue; + RefObject tempRef_UU_Deviation = new RefObject(UU_Deviation); + nStep += Service.convertInt32ArraySigle(bArray, nStep, tempRef_UU_Deviation); + UU_Deviation = tempRef_UU_Deviation.argvalue; + RefObject tempRef_UL_Deviation = new RefObject(UL_Deviation); + nStep += Service.convertInt32ArraySigle(bArray, nStep, tempRef_UL_Deviation); + UL_Deviation = tempRef_UL_Deviation.argvalue; + RefObject tempRef_F_Deviation = new RefObject(F_Deviation); + nStep += Service.convertInt32ArraySigle(bArray, nStep, tempRef_F_Deviation); + F_Deviation = tempRef_F_Deviation.argvalue; + RefObject tempRef_UI_Seq = new RefObject(UI_Seq); + nStep += Service.convertInt32Array(bArray, nStep, tempRef_UI_Seq); + UI_Seq = tempRef_UI_Seq.argvalue; + RefObject tempRef_FuHarm = new RefObject(FuHarm); + nStep += Service.convertInt32Array(bArray, nStep, tempRef_FuHarm); + FuHarm = tempRef_FuHarm.argvalue; + RefObject tempRef_FuHarmPhase = new RefObject(FuHarmPhase); + nStep += Service.convertInt32Array(bArray, nStep, tempRef_FuHarmPhase); + FuHarmPhase = tempRef_FuHarmPhase.argvalue; + + for (i = 0; i < 6; i++) + { + for (j = 0; j < 50; j++) + { + InHarm[i][j].Val = Service.convertInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + InHarm[i][j].f = Service.convertInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + } + } + RefObject tempRef_Total_Power = new RefObject(Total_Power); + nStep += Service.convertInt32Array(bArray, nStep, tempRef_Total_Power); + Total_Power = tempRef_Total_Power.argvalue; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 50; j++) + { + Harm_Power[i][j].P = Service.convertInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + Harm_Power[i][j].Q = Service.convertInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + Harm_Power[i][j].S = Service.convertInt32_net(bArray, nStep); +//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'sizeof': + nStep += Integer.SIZE / Byte.SIZE; + } + } + RefObject tempRef_Harm_Contain = new RefObject(Harm_Contain); + nStep += Service.convertInt16Array(bArray, nStep, tempRef_Harm_Contain); + Harm_Contain = tempRef_Harm_Contain.argvalue; + RefObject tempRef_Harm_Aberrance = new RefObject(Harm_Aberrance); + nStep += Service.convertInt16ArraySingle(bArray, nStep, tempRef_Harm_Aberrance); + Harm_Aberrance = tempRef_Harm_Aberrance.argvalue; + RefObject tempRef_Cos_PF = new RefObject(Cos_PF); + nStep += Service.convertInt16ArraySingle(bArray, nStep, tempRef_Cos_PF); + Cos_PF = tempRef_Cos_PF.argvalue; + RefObject tempRef_Cos_DF = new RefObject(Cos_DF); + nStep += Service.convertInt16ArraySingle(bArray, nStep, tempRef_Cos_DF); + Cos_DF = tempRef_Cos_DF.argvalue; + RefObject tempRef_U_Fluctuation = new RefObject(U_Fluctuation); + nStep += Service.convertInt16ArraySingle(bArray, nStep, tempRef_U_Fluctuation); + U_Fluctuation = tempRef_U_Fluctuation.argvalue; + RefObject tempRef_U_Flicker = new RefObject(U_Flicker); + nStep += Service.convertInt16ArraySingle(bArray, nStep, tempRef_U_Flicker); + U_Flicker = tempRef_U_Flicker.argvalue; + RefObject tempRef_UL_Flicker = new RefObject(UL_Flicker); + nStep += Service.convertInt16ArraySingle(bArray, nStep, tempRef_UL_Flicker); + UL_Flicker = tempRef_UL_Flicker.argvalue; + + return true; + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPqData_Float.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPqData_Float.java new file mode 100644 index 0000000..6c4ce3e --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tagPqData_Float.java @@ -0,0 +1,164 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +/** + @brief 3秒、分钟统计数据、日统计单个类型结构 + + */ +public class tagPqData_Float +{ + public short name; ///监测点号 12 /// + public short Data_Type; ///数据类型 2 /// + public RTC_Timer time; ///时间 /// + public float[] Rms; ///电压A B C N 电流A B C N 线电压AB BC CA/// + public float[] UU_Deviation; ///电压上偏差(3线电压)24 /// + public float[] UL_Deviation; ///电压下偏差/// + public float[] F_Deviation; ///频率偏差 8 /// + public float[][] UI_Seq; ///电压电流零、正、负序、不平衡度32 第一个[]电压,电流;第二个[]零、正、负序、不平衡度/// + public float[][] FuHarm; ///整次谐波 电压A B C N 电流A B C N 1200 /// + public float[][] FuHarmPhase; ///谐波相角-送一半数据 600 /// + public tagInHarmData_float[][] InHarm; ///间谐波-送一半数据 1200 /// + public float[][] Total_Power; ///a,b,c,total 总功率(P.Q.S) 48 /// + public tagPowerData_float[][] Harm_Power; ///谐波功率-送一半数据 1200 /// + public float[][] Harm_Contain; ///谐波含有率 xxx.xx 600 /// + public float[] Harm_Aberrance; ///谐波畸变率 xxx.xx 12 /// + public float[] Cos_PF; ///视在功率因数 =P/S xx.xxx 8 /// + public float[] Cos_DF; ///位移功率因数=P/S1 xx.xxx 8 /// + public float[] U_Fluctuation; ///电压波动 xx.xxx 6 /// + public float[] U_Flicker; ///电压闪变 xx.xxx 6 /// + public float[] UL_Flicker; ///电压长闪变 xx.xxx 6 /// + + public int EventFlag = 0; //暂态发生标志 1表示期间发生暂态 0表示暂未发生暂态 + public int DataFlag = 0; //数据去除标志 1表示去除 0表示保留 + public tagPqData_Float() + { + int i = 0, j = 0; + + time = new RTC_Timer(); + Rms = new float[9]; + UU_Deviation = new float[6]; + UL_Deviation = new float[6]; + F_Deviation = new float[2]; + UI_Seq = new float[2][4]; + FuHarm = new float[6][50]; + FuHarmPhase = new float[6][50]; + InHarm = new tagInHarmData_float[6][50]; + for (i = 0; i < 6; i++) + { + for (j = 0; j < 50; j++) + { + InHarm[i][j] = new tagInHarmData_float(); + } + } + Total_Power = new float[4][3]; + Harm_Power = new tagPowerData_float[4][50]; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 50; j++) + { + Harm_Power[i][j] = new tagPowerData_float(); + } + } + Harm_Contain = new float[6][50]; + Harm_Aberrance = new float[8]; + Cos_PF = new float[4]; + Cos_DF = new float[4]; + U_Fluctuation = new float[3]; + U_Flicker = new float[3]; + UL_Flicker = new float[3]; + } + + public final void SetFloatValue(tagPqData SrcData, float fPT, float fCT) + { + name = SrcData.name; + Data_Type = SrcData.Data_Type; + time.clone(SrcData.time); + int i = 0, j = 0; + for (i = 0; i < 2; i++) + { + F_Deviation[i] = Service.IntToFloat(SrcData.F_Deviation[i]); + for (j = 0; j < 4; j++) + { + if (i == 0) + { + if (j == 2) //正序 + { + UI_Seq[i][j] = Service.IntToFloat(SrcData.UI_Seq[i][j]) * fPT; // / 1000 2019/9/9 修改 正序的值小了1000倍 + } + else if (j < 3) + { + UI_Seq[i][j] = Service.IntToFloat(SrcData.UI_Seq[i][j]) * fPT * 1000; + } + else + { + UI_Seq[i][j] = Service.IntToFloat(SrcData.UI_Seq[i][j]); + } + } + else + { + if (j < 3) + { + UI_Seq[i][j] = Service.IntToFloat(SrcData.UI_Seq[i][j]) * fCT; + } + else + { + UI_Seq[i][j] = Service.IntToFloat(SrcData.UI_Seq[i][j]); + } + } + } + } + for (i = 0; i < 3; i++) + { + U_Fluctuation[i] = Service.ShorToFloat1000(SrcData.U_Fluctuation[i]); + U_Flicker[i] = Service.ShorToFloat1000(SrcData.U_Flicker[i]); + UL_Flicker[i] = Service.ShorToFloat1000(SrcData.UL_Flicker[i]); + } + for (i = 0; i < 4; i++) + { + Cos_PF[i] = Service.ShorToFloat10000(SrcData.Cos_PF[i]); + Cos_DF[i] = Service.ShorToFloat10000(SrcData.Cos_DF[i]); + for (j = 0; j < 3; j++) + { + Total_Power[i][j] = Service.IntToFloat(SrcData.Total_Power[i][j]) * fPT * fCT; + } + for (j = 0; j < 50; j++) + { + Harm_Power[i][j].P = Service.IntToFloat(SrcData.Harm_Power[i][j].P) * fPT * fCT; + Harm_Power[i][j].Q = Service.IntToFloat(SrcData.Harm_Power[i][j].Q) * fPT * fCT; + Harm_Power[i][j].S = Service.IntToFloat(SrcData.Harm_Power[i][j].S) * fPT * fCT; + } + + } + for (i = 0; i < 6; i++) + { + UU_Deviation[i] = Service.IntToFloat(SrcData.UU_Deviation[i]); + UL_Deviation[i] = Service.IntToFloat(SrcData.UL_Deviation[i]); + Harm_Aberrance[i] = Service.ShorToFloat100(SrcData.Harm_Aberrance[i]); + for (j = 0; j < 50; j++) + { + if (i < 3) + { + FuHarm[i][j] = Service.IntToFloat(SrcData.FuHarm[i][j]) * fPT; + } + else + { + FuHarm[i][j] = Service.IntToFloat(SrcData.FuHarm[i][j]) * fCT; + } + FuHarmPhase[i][j] = Service.IntToFloat(SrcData.FuHarmPhase[i][j]); + InHarm[i][j].Val = Service.IntToFloat(SrcData.InHarm[i][j].Val); + Harm_Contain[i][j] = Service.ShorToFloat100(SrcData.Harm_Contain[i][j]); + } + } + for (i = 0; i < 9; i++) + { + if (i > 2 && i < 6) + { + Rms[i] = Service.IntToFloat(SrcData.Rms[i]) * fCT; + } + else + { + Rms[i] = Service.IntToFloat(SrcData.Rms[i]) * fPT; + } + } + + } +} \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tag_dir_info.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tag_dir_info.java new file mode 100644 index 0000000..f7505dc --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/mincfg/vo/tag_dir_info.java @@ -0,0 +1,30 @@ +package com.njcn.csharmonic.offline.mincfg.vo; + +/** + 文件目录信息 + + */ +//C# TO JAVA CONVERTER WARNING: Java does not allow user-defined value types. The behavior of this class will differ from the original: +//ORIGINAL LINE: public struct tag_dir_info +public final class tag_dir_info +{ + public int flag; //0-目录,1-文件 + + //C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes: + //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] + public char[] name; //目录名或者文件名 + //C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java: +//ORIGINAL LINE: public UInt32 size; + public int size; //文件大小 + @Override + public tag_dir_info clone() + { + tag_dir_info varCopy = new tag_dir_info(); + + varCopy.flag = this.flag; + varCopy.name = this.name; + varCopy.size = this.size; + + return varCopy; + } +} //单个记录信息(是否考虑增加文件修改时间) \ No newline at end of file diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/vo/Response.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/vo/Response.java new file mode 100644 index 0000000..a7bdd2b --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/offline/vo/Response.java @@ -0,0 +1,16 @@ +package com.njcn.csharmonic.offline.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; + +@Data +public class Response implements Serializable { + + @ApiModelProperty("文件名") + private String filename; + + @ApiModelProperty("解析后数据") + private Object obj; + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/OfflineDataUploadController.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/OfflineDataUploadController.java new file mode 100644 index 0000000..b583aaa --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/OfflineDataUploadController.java @@ -0,0 +1,44 @@ +package com.njcn.csharmonic.controller; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.csharmonic.service.OfflineDataUploadService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.List; + +/** + * 类的介绍:离线数据上传解析控制类 + * + * @author gfh + * @version 1.0.0 + * @createTime 2024/7/22 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/offlineDataUpload") +@Api(tags = "离线数据上传") +@AllArgsConstructor +public class OfflineDataUploadController extends BaseController { + + private final OfflineDataUploadService offlineDataUploadService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping(value = "/uploadAnalysis",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @ApiOperation("解析上传的文件") + public HttpResult uploadAnalysis(@RequestPart("files") List files,@RequestParam("type") String type) throws Exception{ + String methodDescribe = getMethodDescribe("uploadAnalysis"); + byte[] result = offlineDataUploadService.uploadAnalysis(files,type); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/OfflineDataUploadService.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/OfflineDataUploadService.java new file mode 100644 index 0000000..1ace52d --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/OfflineDataUploadService.java @@ -0,0 +1,18 @@ +package com.njcn.csharmonic.service; + +import org.springframework.web.multipart.MultipartFile; +import java.util.List; + +/** + *

+ * 类的介绍:离线数据上传解析服务类 + *

+ * + * @author gfh + * @since 2024/7/22 13:56 + */ +public interface OfflineDataUploadService { + + byte[] uploadAnalysis(List files,String type) throws Exception; + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/OfflineDataUploadServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/OfflineDataUploadServiceImpl.java new file mode 100644 index 0000000..101d92a --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/OfflineDataUploadServiceImpl.java @@ -0,0 +1,69 @@ +package com.njcn.csharmonic.service.impl; + +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.csharmonic.offline.log.Log; +import com.njcn.csharmonic.offline.log.vo.NewTaglogbuffer; +import com.njcn.csharmonic.offline.mincfg.AnalyseComtradeCfg; +import com.njcn.csharmonic.offline.mincfg.tagComtradeCfg; +import com.njcn.csharmonic.offline.vo.Response; +import com.njcn.csharmonic.service.OfflineDataUploadService; +import com.njcn.influx.pojo.po.cs.PqdData; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * 类的介绍:离线数据上传解析服务实现类 + * + * @author gfh + * @version 1.0.0 + * @createTime 2024/7/22 13:56 + */ +@Service +public class OfflineDataUploadServiceImpl implements OfflineDataUploadService { + + @Override + public byte[] uploadAnalysis(List files,String type) throws Exception{ + byte[] bytes = null; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + + List responses = new ArrayList<>(); + //min解析较为特殊需要同时解析所有文件 + if(!files.isEmpty() && "min".equals(type)){ + Response response = new Response(); + response.setFilename("min"); + List pqdData = AnalyseComtradeCfg.processDirectory(files); + response.setObj(pqdData); + responses.add(response); + }else{ + for(MultipartFile file : files){ + Response response = new Response(); + response.setFilename(file.getOriginalFilename()); + if("comtrade".equals(type) && file.getOriginalFilename().indexOf(".cfg") != -1) { + tagComtradeCfg tagComtradeCfg = AnalyseComtradeCfg.analyseComtradeCfg(file); + response.setObj(tagComtradeCfg); + }else if("log".equals(type) && file.getOriginalFilename().indexOf(".bin") != -1){ + List newTaglogbuffers = Log.convertLog(file); + response.setObj(newTaglogbuffers); + } + responses.add(response); + } + } + try { + oos.writeObject(responses); + bytes = baos.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + throw new BusinessException("数据集对象转字节数组失败"); + } finally { + oos.close(); + baos.close(); + } + return bytes; + } +}