diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/WlRecordFeignClient.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/WlRecordFeignClient.java index 04ddce5..26f9cf0 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/WlRecordFeignClient.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/WlRecordFeignClient.java @@ -5,6 +5,7 @@ import com.njcn.common.pojo.response.HttpResult; import com.njcn.csdevice.api.fallback.WlRecordClientFallbackFactory; import com.njcn.csdevice.pojo.param.WlRecordParam; import com.njcn.csdevice.pojo.po.WlRecord; +import com.njcn.csdevice.pojo.vo.RecordVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -50,4 +51,7 @@ public interface WlRecordFeignClient { @GetMapping("/getWlAssByWlId") HttpResult> getWlAssByWlId(@RequestParam("wlId")String wlId); + + @PostMapping("/findDevBaseDataByLineId") + HttpResult> findDevBaseDataByLineId(@RequestBody @Validated WlRecordParam.lineRecord param); } diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/WlRecordClientFallbackFactory.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/WlRecordClientFallbackFactory.java index 7a7ee05..9e3b3b1 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/WlRecordClientFallbackFactory.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/WlRecordClientFallbackFactory.java @@ -6,6 +6,7 @@ import com.njcn.common.pojo.response.HttpResult; import com.njcn.csdevice.api.WlRecordFeignClient; import com.njcn.csdevice.pojo.param.WlRecordParam; import com.njcn.csdevice.pojo.po.WlRecord; +import com.njcn.csdevice.pojo.vo.RecordVo; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -63,6 +64,12 @@ public class WlRecordClientFallbackFactory implements FallbackFactory> findDevBaseDataByLineId(WlRecordParam.lineRecord param) { + log.error("{}异常,降级处理,异常为:{}","根据监测点id查询装置基础数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } }; } } diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/CsEquipmentDeliveryAuditParm.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/CsEquipmentDeliveryAuditParm.java index bf8c13c..39b8810 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/CsEquipmentDeliveryAuditParm.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/CsEquipmentDeliveryAuditParm.java @@ -1,12 +1,10 @@ package com.njcn.csdevice.pojo.param; import com.baomidou.mybatisplus.annotation.TableField; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; -import java.util.Date; /** * @@ -60,51 +58,12 @@ public class CsEquipmentDeliveryAuditParm { @ApiModelProperty(value="装置接入方式") private String devAccessMethod; -// /** -// * 装置程序版本 -// */ -// @ApiModelProperty(value="装置程序版本") -// private String programVersion; - -// /** -// * 调试人员 -// */ -// @ApiModelProperty(value="调试人员") -// private String debugPerson; -// -// /** -// * 出厂日期 -// */ -// @ApiModelProperty(value="出厂日期") -// @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") -// private Date producteTime; -// -// /** -// * 检修日期 -// */ -// @ApiModelProperty(value="检修日期") -// @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") -// private Date checkTime; -// -// /** -// * 调试日期 -// */ -// @ApiModelProperty(value="调试日期") -// @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") -// private Date debugTime; - /** * 合同号 */ @ApiModelProperty(value="合同号") private String cntractNo; -// /** -// * 营销经理 -// */ -// @ApiModelProperty(value="营销经理") -// private String salesManager; - /** * 状态 */ @@ -128,4 +87,7 @@ public class CsEquipmentDeliveryAuditParm { */ @ApiModelProperty(value="模块个数") private Integer modelNumber; + + @ApiModelProperty(value="装置使用状态(0:停用 1:启用)") + private Integer usageStatus; } \ No newline at end of file diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/WlRecordParam.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/WlRecordParam.java index ea09374..564a2f9 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/WlRecordParam.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/WlRecordParam.java @@ -99,4 +99,19 @@ public class WlRecordParam { private String id; } + @Data + @EqualsAndHashCode(callSuper = true) + public static class lineRecord extends WlRecordParam { + + @ApiModelProperty("监测点id") + private String lineId; + + @ApiModelProperty("测试项起始时间") + private String itemStartTime; + + @ApiModelProperty("测试项结束时间") + private String itemEndTime; + + } + } diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsEquipmentDeliveryPO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsEquipmentDeliveryPO.java index 8af5634..3c67ef0 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsEquipmentDeliveryPO.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsEquipmentDeliveryPO.java @@ -108,4 +108,10 @@ public class CsEquipmentDeliveryPO extends BaseEntity { @TableField(value = "process") private Integer process; + /** + * 装置使用状态(0:停用 1:启用) + */ + @TableField(value = "usage_status") + private Integer usageStatus; + } \ No newline at end of file diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsEquipmentDeliveryVO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsEquipmentDeliveryVO.java index b763da0..818eaa1 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsEquipmentDeliveryVO.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsEquipmentDeliveryVO.java @@ -83,4 +83,7 @@ public class CsEquipmentDeliveryVO extends BaseEntity { @ApiModelProperty(value="设备当前流程状态") private Integer process ; + @ApiModelProperty(value="装置使用状态(0:停用 1:启用)") + private Integer usageStatus ; + } \ No newline at end of file diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsLedgerVO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsLedgerVO.java index 2496101..95639e9 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsLedgerVO.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsLedgerVO.java @@ -48,6 +48,9 @@ public class CsLedgerVO implements Serializable { @ApiModelProperty(name = "type",value = "类型 项目 工程 装置 监测点") private String type; + @ApiModelProperty(name = "lineType",value = "监测点类型 0:治理监测点 1:电能质量监测点") + private Integer lineType; + @ApiModelProperty(name = "children",value = "子节点") private List children = new ArrayList<>(); diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/EquipmentDeliveryController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/EquipmentDeliveryController.java index 361d1c5..448716e 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/EquipmentDeliveryController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/EquipmentDeliveryController.java @@ -38,6 +38,7 @@ import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -66,10 +67,10 @@ public class EquipmentDeliveryController extends BaseController { @ApiOperation("新增出厂设备") @ApiImplicitParam(name = "csEquipmentDeliveryAddParm", value = "新增项目参数", required = true) @DeviceLog(operateType = DeviceOperate.ADD) - public HttpResult addEquipmentDelivery(@RequestBody @Validated CsEquipmentDeliveryAddParm csEquipmentDeliveryAddParm){ + public HttpResult addEquipmentDelivery(@RequestBody @Validated CsEquipmentDeliveryAddParm csEquipmentDeliveryAddParm){ String methodDescribe = getMethodDescribe("addEquipmentDelivery"); - Boolean flag = csEquipmentDeliveryService.save(csEquipmentDeliveryAddParm); - if (flag){ + CsEquipmentDeliveryPO po = csEquipmentDeliveryService.save(csEquipmentDeliveryAddParm); + if (Objects.nonNull(po)){ //查询mqtt用户名和密码是否存在 boolean result = mqttUserService.findMqttUser(csEquipmentDeliveryAddParm.getNdid()); if (result){ @@ -77,7 +78,7 @@ public class EquipmentDeliveryController extends BaseController { mqttUserService.insertMqttUser(csEquipmentDeliveryAddParm.getNdid()); } } - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/scheme/WlRecordController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/scheme/WlRecordController.java index 5cc1831..fba7dbc 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/scheme/WlRecordController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/scheme/WlRecordController.java @@ -168,6 +168,20 @@ public class WlRecordController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + /** + * 删除装置测试项 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PostMapping("/deleteItem") + @ApiOperation("删除装置测试项") + @ApiImplicitParam(name = "id", value = "装置测试项Id", required = true) + public HttpResult deleteItem(@RequestParam @Validated String id) { + String methodDescribe = getMethodDescribe("deleteItem"); + LogUtil.njcnDebug(log, "{},装置测试项Id为:{}", methodDescribe, id); + wlRecordService.deleteItem(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + /** * 查询测试项时间段实时数据 */ @@ -195,6 +209,19 @@ public class WlRecordController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, record, methodDescribe); } + /** + * 根据监测点id查询装置基础数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.QUERY) + @PostMapping("/findDevBaseDataByLineId") + @ApiOperation("根据监测点id查询装置基础数据") + @ApiImplicitParam(name = "param", value = "查询条件", required = true) + public HttpResult> findDevBaseDataByLineId(@RequestBody @Validated WlRecordParam.lineRecord param) { + String methodDescribe = getMethodDescribe("findDevBaseDataByLineId"); + LogUtil.njcnDebug(log, "{},查询对象为:{}", methodDescribe, param); + List record = wlRecordService.findDevBaseDataByLineId(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, record, methodDescribe); + } /** diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEquipmentDeliveryService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEquipmentDeliveryService.java index fb38fc3..af1440b 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEquipmentDeliveryService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEquipmentDeliveryService.java @@ -39,7 +39,7 @@ public interface CsEquipmentDeliveryService extends IService { */ WlRecord findDevBaseData(WlRecordParam.Record param); + List findDevBaseDataByLineId(WlRecordParam.lineRecord param); /** * 每日处理没有结束时间的测试基础数据 @@ -110,4 +111,5 @@ public interface IWlRecordService extends IService { List getWlAssByWlId(String wlId); + void deleteItem(String id); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEquipmentDeliveryServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEquipmentDeliveryServiceImpl.java index 1d6eefe..2acf228 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEquipmentDeliveryServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEquipmentDeliveryServiceImpl.java @@ -40,6 +40,7 @@ import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.api.DictTreeFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.system.enums.DicTreeEnum; +import com.njcn.system.pojo.po.SysDicTreePO; import com.njcn.system.pojo.vo.DictTreeVO; import com.njcn.web.factory.PageFactory; import com.njcn.web.utils.RequestUtil; @@ -101,7 +102,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl i List finalLineList = allList.stream() .filter(item -> item.getLevel().equals(LineBaseEnum.LINE_LEVEL.getCode())) .sorted(Comparator.comparing(CsLedgerVO::getSort)) - .peek(item -> item.setType("line")) + .peek( + item -> { + item.setType("line"); + String index = item.getId().substring(item.getId().length()-1); + if (Objects.equals(index,"0")) { + item.setLineType(0); + } else { + item.setLineType(1); + } + } + ) .collect(Collectors.toList()); checkDevSetData(deviceList); deviceList.forEach(dev -> dev.setChildren(getChildren(dev, finalLineList))); diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/WlRecordServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/WlRecordServiceImpl.java index abd5303..999d081 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/WlRecordServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/WlRecordServiceImpl.java @@ -522,6 +522,25 @@ public class WlRecordServiceImpl extends ServiceImpl i return this.getOne(lambdaQueryWrapper); } + @Override + public List findDevBaseDataByLineId(WlRecordParam.lineRecord param) { + List result = new ArrayList<>(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(WlRecord::getLineId,param.getLineId()) + .between(WlRecord::getStartTime,param.getItemStartTime(),param.getItemEndTime()) + .eq(WlRecord::getType,1) + .eq(WlRecord::getState,1).orderByDesc(WlRecord::getStartTime); + List list = this.list(lambdaQueryWrapper); + if (CollUtil.isNotEmpty(list)) { + list.forEach(item->{ + RecordVo vo = new RecordVo(); + BeanUtils.copyProperties(item,vo); + result.add(vo); + }); + } + return result; + } + @Override @Transactional(rollbackFor = Exception.class) public void dayDealNoEndTimeEvent(String date) { @@ -620,6 +639,13 @@ public class WlRecordServiceImpl extends ServiceImpl i return this.baseMapper.getDataRecordByTestId(wlId,0); } + @Override + public void deleteItem(String id) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(WlRecord::getId,id).set(WlRecord::getState,0); + this.update(lambdaUpdateWrapper); + } + /** * 数据项内的时间进行覆盖:解决多个数据项的startTime及endTime之间存在时间冲突 * @param data 数据项 diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/param/DataParam.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/param/DataParam.java new file mode 100644 index 0000000..76fd699 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/param/DataParam.java @@ -0,0 +1,29 @@ +package com.njcn.csharmonic.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author xy + */ +@Data +public class DataParam implements Serializable { + + @ApiModelProperty("起始时间") + private String startTime; + + @ApiModelProperty("结束时间") + private String endTime; + + @ApiModelProperty("监测点id") + private String lineId; + + @ApiModelProperty("指标统计类型") + private String targetType; + + @ApiModelProperty("数据标志") + private String dataLevel; + +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/RealTimeDataVo.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/RealTimeDataVo.java new file mode 100644 index 0000000..a77b1cc --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/RealTimeDataVo.java @@ -0,0 +1,53 @@ +package com.njcn.csharmonic.pojo.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.njcn.influx.utils.InstantDateSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.Instant; + +/** + * @author xy + */ +@Data +public class RealTimeDataVo implements Serializable { + + @ApiModelProperty("数据时间") + @JsonSerialize(using = InstantDateSerializer.class) + private Instant time; + + @ApiModelProperty("指标id") + private String id; + + @ApiModelProperty("指标名称") + private String name; + + @ApiModelProperty("指标别名") + private String otherName; + + @ApiModelProperty("相别") + private String phase; + + @ApiModelProperty("单位") + private String unit; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("平均值") + private Double avgValue; + + @ApiModelProperty("A相值") + private Double valueA; + + @ApiModelProperty("B相值") + private Double valueB; + + @ApiModelProperty("C相值") + private Double valueC; + + @ApiModelProperty("无相值") + private Double valueM; +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/DataController.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/DataController.java new file mode 100644 index 0000000..8ba931b --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/DataController.java @@ -0,0 +1,56 @@ +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.csdevice.pojo.vo.RecordVo; +import com.njcn.csharmonic.param.DataParam; +import com.njcn.csharmonic.pojo.vo.RealTimeDataVo; +import com.njcn.csharmonic.service.IDataService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author xy + */ +@Slf4j +@RestController +@RequestMapping("/data") +@Api(tags = "装置数据") +@AllArgsConstructor +public class DataController extends BaseController { + + private final IDataService dataService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/realTimeData") + @ApiOperation("设备监控-》准实时数据") + @ApiImplicitParam(name = "param", value = "参数", required = true) + public HttpResult> realTimeData(@RequestBody DataParam param) { + String methodDescribe = getMethodDescribe("realTimeData"); + List list = dataService.getRealTimeData(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getTestData") + @ApiOperation("设备监控-》测试项数据") + @ApiImplicitParam(name = "param", value = "参数", required = true) + public HttpResult> getTestData(@RequestBody DataParam param) { + String methodDescribe = getMethodDescribe("getTestData"); + List list = dataService.getTestData(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/CsDataSetMapper.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/CsDataSetMapper.java new file mode 100644 index 0000000..f71dda0 --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/CsDataSetMapper.java @@ -0,0 +1,16 @@ +package com.njcn.csharmonic.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.csdevice.pojo.po.CsDataSet; + +/** + *

+ * 数据集表 Mapper 接口 + *

+ * + * @author xuyang + * @since 2023-05-31 + */ +public interface CsDataSetMapper extends BaseMapper { + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/IDataService.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/IDataService.java new file mode 100644 index 0000000..b5a95c6 --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/IDataService.java @@ -0,0 +1,26 @@ +package com.njcn.csharmonic.service; + +import com.njcn.csdevice.pojo.vo.RecordVo; +import com.njcn.csharmonic.param.DataParam; +import com.njcn.csharmonic.pojo.vo.RealTimeDataVo; + +import java.util.List; + +/** + * @author xuyang + */ +public interface IDataService { + + /** + * 获取设备准实时数据 + * @param param + * @return + */ + List getRealTimeData(DataParam param); + + /** + * 获取监测点测试项信息 + */ + List getTestData(DataParam param); + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/DataServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/DataServiceImpl.java new file mode 100644 index 0000000..732d439 --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/DataServiceImpl.java @@ -0,0 +1,223 @@ +package com.njcn.csharmonic.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.njcn.csdevice.api.CsLineFeignClient; +import com.njcn.csdevice.api.WlRecordFeignClient; +import com.njcn.csdevice.pojo.param.WlRecordParam; +import com.njcn.csdevice.pojo.po.CsDataSet; +import com.njcn.csdevice.pojo.po.CsLinePO; +import com.njcn.csdevice.pojo.vo.RecordVo; +import com.njcn.csdevice.utils.DataChangeUtil; +import com.njcn.csharmonic.constant.HarmonicConstant; +import com.njcn.csharmonic.mapper.CsDataSetMapper; +import com.njcn.csharmonic.param.DataParam; +import com.njcn.csharmonic.pojo.vo.RealTimeDataVo; +import com.njcn.csharmonic.service.IDataService; +import com.njcn.csharmonic.util.InfluxDbParamUtil; +import com.njcn.influx.pojo.dto.StatisticalDataDTO; +import com.njcn.influx.service.CommonService; +import com.njcn.system.api.CsStatisticalSetFeignClient; +import com.njcn.system.api.DictTreeFeignClient; +import com.njcn.system.pojo.po.EleEpdPqd; +import com.njcn.system.pojo.vo.DictTreeVO; +import lombok.AllArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/1 10:11 + */ +@Service +@AllArgsConstructor +public class DataServiceImpl implements IDataService { + + private final CommonService commonService; + private final CsStatisticalSetFeignClient csStatisticalSetFeignClient; + private final DictTreeFeignClient dictTreeFeignClient; + private final InfluxDbParamUtil influxDbParamUtil; + private final CsLineFeignClient csLineFeignClient; + private final CsDataSetMapper csDataSetMapper; + private final WlRecordFeignClient wlRecordFeignClient; + private final DecimalFormat df = new DecimalFormat("#0.00"); + + @Override + public List getRealTimeData(DataParam param) { + List result = new ArrayList<>(); + //获取监测点使用的数据集 + List finalCsLinePOList = csLineFeignClient.queryLineById(Arrays.asList(param.getLineId())).getData(); + CsDataSet csDataSet = csDataSetMapper.selectOne(new LambdaQueryWrapper().eq(CsDataSet::getId,finalCsLinePOList.get(0).getDataSetId())); + Double ct = finalCsLinePOList.get(0).getCtRatio(); + Double pt = finalCsLinePOList.get(0).getPtRatio(); + //根据类型id获取指标分组 + List dictTreeVOList = dictTreeFeignClient.query(param.getTargetType()).getData(); + if (CollUtil.isNotEmpty(dictTreeVOList)) { + dictTreeVOList = dictTreeVOList.stream().sorted(Comparator.comparing(DictTreeVO::getSort)).collect(Collectors.toList()); + //根据分组获取对应指标 + List finalResult = result; + dictTreeVOList.forEach(item->{ + List epdPqdList = csStatisticalSetFeignClient.queryStatisticalSelect(item.getId()).getData(); + epdPqdList.forEach(item2->{ + if (Objects.isNull(item2.getHarmStart())) { + RealTimeDataVo vo = getBaseData(item2,param.getLineId(),param.getDataLevel(),csDataSet.getDataLevel(),pt,ct); + if (Objects.nonNull(vo)) { + finalResult.add(vo); + } + } else if (Objects.equals(item2.getHarmStart(),2)) { + List harmList = getHarmData(item2,param.getLineId()); + finalResult.addAll(harmList); + } else if (Objects.equals(item2.getHarmStart(),1)) { + List inuharmList = getInuHarmData(item2,param.getLineId()); + finalResult.addAll(inuharmList); + } + }); + }); + } + if (CollUtil.isNotEmpty(result)) { + result = channelData(result); + } + return result; + } + + @Override + public List getTestData(DataParam param) { + WlRecordParam.lineRecord record = new WlRecordParam.lineRecord(); + record.setLineId(param.getLineId()); + String beginDay = LocalDateTimeUtil.format(LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(param.getStartTime(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN); + String endDay = LocalDateTimeUtil.format(LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(param.getEndTime(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN); + record.setItemStartTime(beginDay); + record.setItemEndTime(endDay); + return wlRecordFeignClient.findDevBaseDataByLineId(record).getData(); + } + + //基础数据 + public RealTimeDataVo getBaseData(EleEpdPqd item2, String lineId, String dataLevel, String csDataSetLevel,Double pt, Double ct) { + RealTimeDataVo vo = new RealTimeDataVo(); + String unit; + double re; + vo.setId(item2.getId()); + vo.setName(item2.getName()); + StatisticalDataDTO statisticalDataDTO = commonService.getLineRtData(lineId,influxDbParamUtil.getTableNameByClassId(item2.getClassId()),item2.getName(),item2.getPhase(),"avg",influxDbParamUtil.getClDidByLineId(lineId)); + if (Objects.isNull(statisticalDataDTO)) { + return null; + } + vo.setTime(statisticalDataDTO.getTime()); + vo.setAvgValue(statisticalDataDTO.getValue()); + vo.setPhase(item2.getPhase()); + vo.setOtherName(item2.getShowName()); + vo.setSort(item2.getSort()); + if (Objects.equals("Primary",dataLevel)) { + if (Objects.equals("Primary",csDataSetLevel)) { + vo.setAvgValue(Double.valueOf(df.format(statisticalDataDTO.getValue()))); + unit = item2.getUnit(); + } else { + if (HarmonicConstant.POWER_LIST.contains(item2.getShowName())) { + re = DataChangeUtil.secondaryToPrimary(item2.getPrimaryFormula(), statisticalDataDTO.getValue(), pt, ct) / 1000; + vo.setAvgValue(Double.valueOf(df.format(re))); + unit = "k" + item2.getUnit(); + } else { + vo.setAvgValue(Double.valueOf(df.format(statisticalDataDTO.getValue()))); + unit = item2.getUnit(); + } + } + } else { + if (Objects.equals("Primary",csDataSetLevel)) { + if (HarmonicConstant.POWER_LIST.contains(item2.getShowName())) { + re = DataChangeUtil.primaryToSecondary(item2.getPrimaryFormula(), statisticalDataDTO.getValue(), pt, ct); + vo.setAvgValue(Double.valueOf(df.format(re))); + } else { + vo.setAvgValue(Double.valueOf(df.format(statisticalDataDTO.getValue()))); + } + } else { + vo.setAvgValue(Double.valueOf(df.format(statisticalDataDTO.getValue()))); + } + unit = item2.getUnit(); + } + vo.setUnit(unit); + if (Objects.nonNull(unit)) { + vo.setOtherName(item2.getShowName() + "(" + unit + ")"); + } + return vo; + } + + //谐波数据 + public List getHarmData(EleEpdPqd item2, String lineId) { + List list = new ArrayList<>(); + for (int i = item2.getHarmStart(); i <= item2.getHarmEnd(); i++) { + RealTimeDataVo vo = new RealTimeDataVo(); + vo.setId(item2.getId()); + vo.setName(item2.getName().concat("_").concat(Integer.toString(i))); + StatisticalDataDTO statisticalDataDTO = commonService.getLineRtData(lineId,influxDbParamUtil.getTableNameByClassId(item2.getClassId()),item2.getName().concat("_").concat(Integer.toString(i)),item2.getPhase(),"avg",influxDbParamUtil.getClDidByLineId(lineId)); + vo.setTime(statisticalDataDTO.getTime()); + vo.setAvgValue(Double.valueOf(df.format(statisticalDataDTO.getValue()))); + vo.setPhase(item2.getPhase()); + vo.setOtherName(i + "次" + "(" + item2.getUnit() + ")"); + vo.setSort(item2.getSort()); + vo.setUnit(item2.getUnit()); + list.add(vo); + } + return list; + } + + //间谐波数据 + public List getInuHarmData(EleEpdPqd item2, String lineId) { + List list = new ArrayList<>(); + for (int i = item2.getHarmStart(); i <= item2.getHarmEnd(); i++) { + RealTimeDataVo vo = new RealTimeDataVo(); + vo.setId(item2.getId()); + vo.setName(item2.getName().concat("_").concat(Integer.toString(i))); + StatisticalDataDTO statisticalDataDTO = commonService.getLineRtData(lineId,influxDbParamUtil.getTableNameByClassId(item2.getClassId()),item2.getName().concat("_").concat(Integer.toString(i)),item2.getPhase(),"avg",influxDbParamUtil.getClDidByLineId(lineId)); + vo.setTime(statisticalDataDTO.getTime()); + vo.setAvgValue(Double.valueOf(df.format(statisticalDataDTO.getValue()))); + vo.setPhase(item2.getPhase()); + vo.setOtherName((i-0.5) + "次" + "(" + item2.getUnit() + ")"); + vo.setSort(item2.getSort()); + vo.setUnit(item2.getUnit()); + list.add(vo); + } + return list; + } + + //数据格式处理 + public List channelData(List list) { + List result = new ArrayList<>(); + //将list 排序,并按照排序后的结果进行有序分组 + LinkedHashMap> map = list.stream().sorted(Comparator.comparing(RealTimeDataVo::getSort)).collect(Collectors.groupingBy(RealTimeDataVo::getName, LinkedHashMap::new, Collectors.toList())); + map.forEach((k,v)->{ + RealTimeDataVo vo = new RealTimeDataVo(); + RealTimeDataVo vo1 = v.get(0); + BeanUtils.copyProperties(vo1,vo); + RealTimeDataVo phaseA = v.stream().filter(s->Objects.equals(s.getPhase(),"A") || Objects.equals(s.getPhase(),"AB")).findFirst().orElse(null); + if (Objects.nonNull(phaseA)) { + vo.setValueA(phaseA.getAvgValue()); + } + RealTimeDataVo phaseB = v.stream().filter(s->Objects.equals(s.getPhase(),"B") || Objects.equals(s.getPhase(),"BC")).findFirst().orElse(null); + if (Objects.nonNull(phaseB)) { + vo.setValueB(phaseB.getAvgValue()); + } + RealTimeDataVo phaseC = v.stream().filter(s->Objects.equals(s.getPhase(),"C") || Objects.equals(s.getPhase(),"CA")).findFirst().orElse(null); + if (Objects.nonNull(phaseC)) { + vo.setValueC(phaseC.getAvgValue()); + } + RealTimeDataVo phaseM = v.stream().filter(s->Objects.equals(s.getPhase(),"M")).findFirst().orElse(null); + if (Objects.nonNull(phaseM)) { + vo.setValueM(phaseM.getAvgValue()); + } + vo.setPhase("/"); + vo.setAvgValue(null); + result.add(vo); + }); + return result; + } + +} diff --git a/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/param/AppVersionParam.java b/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/param/AppVersionParam.java new file mode 100644 index 0000000..453f8ac --- /dev/null +++ b/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/param/AppVersionParam.java @@ -0,0 +1,28 @@ +package com.njcn.cssystem.pojo.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @author xy + */ +@Data +public class AppVersionParam implements Serializable { + + @ApiModelProperty("app版本信息") + @NotBlank(message = "app版本信息不能为空") + private String appVersion; + + @ApiModelProperty("严重度(0:优化 1:bug调整)") + @NotNull(message = "更新严重度不能为空") + private Integer sev; + + @ApiModelProperty("整改内容") + private String content; + + +} diff --git a/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/po/AppVersion.java b/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/po/AppVersion.java new file mode 100644 index 0000000..7d863fe --- /dev/null +++ b/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/po/AppVersion.java @@ -0,0 +1,53 @@ +package com.njcn.cssystem.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.njcn.db.bo.BaseEntity; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author xy + * @since 2024-11-21 + */ +@Getter +@Setter +@TableName("app_version") +public class AppVersion extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private String id; + + /** + * app版本名称 + */ + private String versionName; + + /** + * 版本发布时间 + */ + private LocalDateTime publishTime; + + /** + * 严重度(0:优化 1:bug调整) + */ + private Integer sev; + + /** + * 修改内容 + */ + private String content; + + +} diff --git a/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/vo/AppVersionVo.java b/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/vo/AppVersionVo.java new file mode 100644 index 0000000..46cd4ce --- /dev/null +++ b/cs-system/cs-system-api/src/main/java/com/njcn/cssystem/pojo/vo/AppVersionVo.java @@ -0,0 +1,26 @@ +package com.njcn.cssystem.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author xy + */ +@Data +public class AppVersionVo implements Serializable { + + @ApiModelProperty("app版本名称") + private String versionName; + + @ApiModelProperty("版本发布时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime publishTime; + + @ApiModelProperty("严重度(0:优化 1:bug调整)") + private Integer sev; + +} diff --git a/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/controller/baseinfo/AppVersionController.java b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/controller/baseinfo/AppVersionController.java new file mode 100644 index 0000000..6944bc9 --- /dev/null +++ b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/controller/baseinfo/AppVersionController.java @@ -0,0 +1,65 @@ +package com.njcn.cssystem.controller.baseinfo; + + +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.cssystem.pojo.param.AppVersionParam; +import com.njcn.cssystem.pojo.vo.AppVersionVo; +import com.njcn.cssystem.service.IAppVersionService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author xy + * @since 2024-11-21 + */ +@RestController +@Slf4j +@RequestMapping("/appVersion") +@Api(tags = "app版本信息") +@AllArgsConstructor +public class AppVersionController extends BaseController { + + private final IAppVersionService appVersionService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/add") + @ApiOperation("新增app版本信息") + @ApiImplicitParam(name = "param", value = "app版本信息", required = true) + public HttpResult add(@RequestBody @Validated AppVersionParam param){ + String methodDescribe = getMethodDescribe("add"); + boolean result = appVersionService.add(param); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "新增成功", methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, "新增失败", methodDescribe); + } + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getLastData") + @ApiOperation("查询app最新版本信息") + public HttpResult getLastData(){ + String methodDescribe = getMethodDescribe("getLastData"); + AppVersionVo vo = appVersionService.getLastData(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, vo, methodDescribe); + } + +} + diff --git a/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/mapper/AppVersionMapper.java b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/mapper/AppVersionMapper.java new file mode 100644 index 0000000..bd8c9cf --- /dev/null +++ b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/mapper/AppVersionMapper.java @@ -0,0 +1,16 @@ +package com.njcn.cssystem.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.cssystem.pojo.po.AppVersion; + +/** + *

+ * Mapper 接口 + *

+ * + * @author xy + * @since 2024-11-21 + */ +public interface AppVersionMapper extends BaseMapper { + +} diff --git a/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/IAppVersionService.java b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/IAppVersionService.java new file mode 100644 index 0000000..c98bbd4 --- /dev/null +++ b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/IAppVersionService.java @@ -0,0 +1,21 @@ +package com.njcn.cssystem.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.cssystem.pojo.param.AppVersionParam; +import com.njcn.cssystem.pojo.po.AppVersion; +import com.njcn.cssystem.pojo.vo.AppVersionVo; + +/** + *

+ * 服务类 + *

+ * + * @author xy + * @since 2024-11-21 + */ +public interface IAppVersionService extends IService { + + boolean add(AppVersionParam param); + + AppVersionVo getLastData(); +} diff --git a/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/impl/AppVersionServiceImpl.java b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/impl/AppVersionServiceImpl.java new file mode 100644 index 0000000..7298dce --- /dev/null +++ b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/impl/AppVersionServiceImpl.java @@ -0,0 +1,48 @@ +package com.njcn.cssystem.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.cssystem.mapper.AppVersionMapper; +import com.njcn.cssystem.pojo.param.AppVersionParam; +import com.njcn.cssystem.pojo.po.AppVersion; +import com.njcn.cssystem.pojo.vo.AppVersionVo; +import com.njcn.cssystem.service.IAppVersionService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Objects; + +/** + *

+ * 服务实现类 + *

+ * + * @author xy + * @since 2024-11-21 + */ +@Service +public class AppVersionServiceImpl extends ServiceImpl implements IAppVersionService { + + @Override + public boolean add(AppVersionParam param) { + AppVersion appVersion = new AppVersion(); + appVersion.setVersionName(param.getAppVersion()); + appVersion.setPublishTime(LocalDateTime.now()); + appVersion.setSev(param.getSev()); + appVersion.setContent(param.getContent()); + return this.save(appVersion); + } + + @Override + public AppVersionVo getLastData() { + AppVersionVo vo = new AppVersionVo(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.orderByDesc(AppVersion::getPublishTime).last("limit 1"); + AppVersion appVersion = this.getOne(queryWrapper); + if (Objects.nonNull(appVersion)) { + BeanUtils.copyProperties(appVersion, vo); + } + return vo; + } +}