diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDataArrayServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDataArrayServiceImpl.java index e6fb893..e96ab5a 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDataArrayServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDataArrayServiceImpl.java @@ -1,5 +1,6 @@ package com.njcn.csdevice.service.impl; +import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.csdevice.mapper.CsDataArrayMapper; import com.njcn.csdevice.pojo.dto.DataArrayDTO; @@ -49,21 +50,21 @@ public class CsDataArrayServiceImpl extends ServiceImpl statMethodList = Arrays.asList(item.getStatMethod().split(",")); List phaseList = Arrays.asList(item.getPhase().split(",")); - statMethodList.forEach(item2->{ + phaseList.forEach(item2->{ List list4 = new ArrayList<>(); DataArrayTreeVO vo3 = new DataArrayTreeVO(); vo3.setId("2"); vo3.setName(item2); - vo3.setShowName(item2); - phaseList.forEach(item3->{ + if (Objects.equals(item2,"M")){ + vo3.setShowName("无相别"); + } else { + vo3.setShowName(item2); + } + statMethodList.forEach(item3->{ DataArrayTreeVO vo4 = new DataArrayTreeVO(); - vo4.setId("3"); + vo4.setId(IdUtil.simpleUUID()+IdUtil.simpleUUID()); vo4.setName(item3); - if (Objects.equals(item3,"M")){ - vo4.setShowName("无相别"); - } else { - vo4.setShowName(item3); - } + vo4.setShowName(item3); list4.add(vo4); }); vo3.setChildren(list4); diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/po/CsElement.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/po/CsElement.java new file mode 100644 index 0000000..088f901 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/po/CsElement.java @@ -0,0 +1,39 @@ +package com.njcn.csharmonic.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import java.io.Serializable; +import java.time.LocalDateTime; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 组态图元库 + *

+ * + * @author xuyang + * @since 2023-06-14 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName("cs_element") +public class CsElement extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private String id; + + /** + * 图元文件路径 + */ + private String path; + + +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ConditionVO.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ConditionVO.java deleted file mode 100644 index df0fc36..0000000 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ConditionVO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.njcn.csharmonic.pojo.vo; - -import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName; -import lombok.Data; - -import java.io.Serializable; - -/** - * 类的介绍: - * - * @author xuyang - * @version 1.0.0 - * @createTime 2023/6/2 15:30 - */ -@Data -public class ConditionVO implements Serializable { - - @SerializedName("pic") - private String pic; - - @SerializedName("value") - private String value; -} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ElementsVO.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ElementsVO.java index 40c556f..c2c0ddc 100644 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ElementsVO.java +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ElementsVO.java @@ -1,10 +1,8 @@ package com.njcn.csharmonic.pojo.vo; -import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName; import lombok.Data; import java.io.Serializable; -import java.util.List; /** * 类的介绍: @@ -16,52 +14,8 @@ import java.util.List; @Data public class ElementsVO implements Serializable { - @SerializedName("type") - private String type; + private String id; - @SerializedName("lineId") - private List lineId; - - @SerializedName("lineName") - private String lineName; - - @SerializedName("targetId") - private List targetId; - - @SerializedName("targetPid") - private String targetPid; - - @SerializedName("targetName") - private String targetName; - - @SerializedName("dataType") - private String dataType; - - @SerializedName("phasic") - private String phasic; - - @SerializedName("defaultPic") - private String defaultPic; - - @SerializedName("width") - private String width; - - @SerializedName("height") - private Integer height; - - @SerializedName("top") - private Integer top; - - @SerializedName("left") - private Integer left; - - @SerializedName("condition") - private List condition; - - @SerializedName("color") - private String color; - - @SerializedName("fontSize") - private Integer fontSize; + private String json; } diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ZuTaiVo.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ZuTaiVo.java deleted file mode 100644 index bb3dbfd..0000000 --- a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/ZuTaiVo.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.njcn.csharmonic.pojo.vo; - -import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** - * 类的介绍: - * - * @author xuyang - * @version 1.0.0 - * @createTime 2023/6/2 15:39 - */ -@Data -public class ZuTaiVo implements Serializable { - - @SerializedName("background") - private String background; - - @SerializedName("elements") - private List elements; - -} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsElementController.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsElementController.java new file mode 100644 index 0000000..4c0a127 --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsElementController.java @@ -0,0 +1,62 @@ +package com.njcn.csharmonic.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +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.param.CsPageParm; +import com.njcn.csharmonic.pojo.vo.CsPageVO; +import com.njcn.csharmonic.pojo.vo.ElementsVO; +import com.njcn.csharmonic.service.ICsElementService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +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; +import com.njcn.web.controller.BaseController; + +/** + *

+ * 组态图元库 前端控制器 + *

+ * + * @author xuyang + * @since 2023-06-14 + */ +@RestController +@RequestMapping("/csElement") +@Api(tags = "组态图元") +@AllArgsConstructor +public class CsElementController extends BaseController { + + private final ICsElementService csElementService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/add") + @ApiOperation("组态图元新增") + @ApiImplicitParam(name = "param", value = "组态图元", required = true) + public HttpResult add(@RequestBody @Validated CsPageParm param){ + String methodDescribe = getMethodDescribe("add"); + csElementService.addElement(param.getJsonFile()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, CommonResponseEnum.SUCCESS.getMessage(), methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/find") + @ApiOperation("查询组态图元数据") + public HttpResult find(){ + String methodDescribe = getMethodDescribe("find"); + ElementsVO elementsVo = csElementService.findElement(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, elementsVo, methodDescribe); + } + +} + diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/LineTargetController.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/LineTargetController.java index 5a614e4..6e1d419 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/LineTargetController.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/LineTargetController.java @@ -6,14 +6,10 @@ 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.DataArrayTreeVO; -import com.njcn.csdevice.pojo.vo.LineTargetVO; -import com.njcn.csharmonic.pojo.vo.TargetDetailVO; import com.njcn.csharmonic.service.ILineTargetService; -import com.njcn.influx.pojo.dto.StatisticalDataDTO; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -50,28 +46,4 @@ public class LineTargetController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } - @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/targetDetail") - @ApiOperation("获取指标数据类型和相别") - @ApiImplicitParams({ - @ApiImplicitParam(name = "pid", value = "数据集id", required = true), - @ApiImplicitParam(name = "name", value = "名称", required = true) - }) - public HttpResult getTargetDetail(@RequestParam("pid") String pid, @RequestParam("name") String name) { - String methodDescribe = getMethodDescribe("getTargetDetail"); - TargetDetailVO list = lineTargetService.getTargetDetail(pid,name); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); - } - - @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/lineData") - @ApiOperation("获取指标数据") - @ApiImplicitParam(name = "id", value = "组态页面id", required = true) - @Deprecated - public HttpResult> getLineData(@RequestParam("id") String id) { - String methodDescribe = getMethodDescribe("getLineData"); - List list = lineTargetService.getLineData(id); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); - } - } diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/CsElementMapper.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/CsElementMapper.java new file mode 100644 index 0000000..9809f87 --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/CsElementMapper.java @@ -0,0 +1,16 @@ +package com.njcn.csharmonic.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.csharmonic.pojo.po.CsElement; + +/** + *

+ * 组态图元库 Mapper 接口 + *

+ * + * @author xuyang + * @since 2023-06-14 + */ +public interface CsElementMapper extends BaseMapper { + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/ICsElementService.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/ICsElementService.java new file mode 100644 index 0000000..2955167 --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/ICsElementService.java @@ -0,0 +1,29 @@ +package com.njcn.csharmonic.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.csharmonic.param.CsPageParm; +import com.njcn.csharmonic.pojo.po.CsElement; +import com.njcn.csharmonic.pojo.vo.ElementsVO; + +/** + *

+ * 组态图元库 服务类 + *

+ * + * @author xuyang + * @since 2023-06-14 + */ +public interface ICsElementService extends IService { + + /** + * 新增组态图元 + * @param json 参数 + */ + void addElement(String json); + + /** + * 组态图元数据查询 + */ + ElementsVO findElement(); + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/ILineTargetService.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/ILineTargetService.java index 29f0fe7..59944ce 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/ILineTargetService.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/ILineTargetService.java @@ -1,8 +1,6 @@ package com.njcn.csharmonic.service; import com.njcn.csdevice.pojo.vo.DataArrayTreeVO; -import com.njcn.csdevice.pojo.vo.LineTargetVO; -import com.njcn.csharmonic.pojo.vo.TargetDetailVO; import com.njcn.influx.pojo.dto.StatisticalDataDTO; import java.util.List; @@ -19,14 +17,6 @@ public interface ILineTargetService { */ List getLineTarget(String lineId); - /** - * 获取指标的数据类型和相别 - * @param pid - * @param name - * @return - */ - TargetDetailVO getTargetDetail(String pid, String name); - /** * 获取绑定指标的数据 * @param id diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsElementServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsElementServiceImpl.java new file mode 100644 index 0000000..d0bb119 --- /dev/null +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsElementServiceImpl.java @@ -0,0 +1,84 @@ +package com.njcn.csharmonic.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.utils.FileUtil; +import com.njcn.csharmonic.mapper.CsElementMapper; +import com.njcn.csharmonic.pojo.po.CsElement; +import com.njcn.csharmonic.pojo.vo.ElementsVO; +import com.njcn.csharmonic.service.ICsElementService; +import com.njcn.oss.constant.OssPath; +import com.njcn.oss.utils.FileStorageUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + *

+ * 组态图元库 服务实现类 + *

+ * + * @author xuyang + * @since 2023-06-14 + */ +@Service +@AllArgsConstructor +public class CsElementServiceImpl extends ServiceImpl implements ICsElementService { + + private final FileStorageUtil fileStorageUtil; + + @Override + @Transactional(rollbackFor = Exception.class) + public void addElement(String json) { + CsElement csElement = new CsElement(); + if (Objects.isNull(json)){ + throw new BusinessException("组态图元json缺失"); + } + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + csElement = this.baseMapper.selectOne(lambdaQueryWrapper); + if (!Objects.isNull(csElement)){ + fileStorageUtil.deleteFile(csElement.getPath()); + } else { + csElement = new CsElement(); + } + InputStream inputStream = this.writeJsonStringToInputStream(json); + String path = fileStorageUtil.uploadStream(inputStream, OssPath.ELEMENT, FileUtil.generateFileName("json")); + csElement.setPath(path); + this.saveOrUpdate(csElement); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ElementsVO findElement() { + ElementsVO elementsVo = new ElementsVO(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + CsElement csElement = this.baseMapper.selectOne(lambdaQueryWrapper); + if (!Objects.isNull(csElement)){ + InputStream inputStream = fileStorageUtil.getFileStream(csElement.getPath()); + String text = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)).lines().collect(Collectors.joining("\n")); + elementsVo.setId(csElement.getId()); + elementsVo.setJson(text); + } + return elementsVo; + } + + + /** + * 将json转成流 + * @param jsonString + * @return + */ + public InputStream writeJsonStringToInputStream(String jsonString) { + return new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8)); + } + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/LineTargetServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/LineTargetServiceImpl.java index 0ea688a..cae6a73 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/LineTargetServiceImpl.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/LineTargetServiceImpl.java @@ -1,16 +1,10 @@ package com.njcn.csharmonic.service.impl; -import cn.hutool.core.collection.CollectionUtil; -import com.alibaba.nacos.shaded.com.google.gson.Gson; import com.njcn.csdevice.api.*; -import com.njcn.csdevice.pojo.po.CsDataArray; import com.njcn.csdevice.pojo.po.CsDevModelPO; import com.njcn.csdevice.pojo.po.CsDevModelRelationPO; import com.njcn.csdevice.pojo.vo.DataArrayTreeVO; import com.njcn.csdevice.pojo.vo.LineTargetVO; -import com.njcn.csharmonic.pojo.vo.ElementsVO; -import com.njcn.csharmonic.pojo.vo.TargetDetailVO; -import com.njcn.csharmonic.pojo.vo.ZuTaiVo; import com.njcn.csharmonic.service.CsPagePOService; import com.njcn.csharmonic.service.ILineTargetService; import com.njcn.influx.pojo.dto.StatisticalDataDTO; @@ -20,12 +14,9 @@ import com.njcn.system.api.EpdFeignClient; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; -import java.io.BufferedReader; import java.io.InputStream; -import java.io.InputStreamReader; import java.math.BigDecimal; import java.math.RoundingMode; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -77,60 +68,15 @@ public class LineTargetServiceImpl implements ILineTargetService { return dataArrayList; } - @Override - public TargetDetailVO getTargetDetail(String pid, String name) { - TargetDetailVO vo = new TargetDetailVO(); - List dataArrayList = dataArrayFeignClient.getDataArrayById(pid,name).getData(); - List dataType = dataArrayList.stream().map(CsDataArray::getStatMethod).distinct().collect(Collectors.toList()); - List phasic = dataArrayList.stream().map(CsDataArray::getPhase).distinct().collect(Collectors.toList()); - vo.setDataTypeList(dataType); - vo.setPhasicList(phasic); - return vo; - } - @Override public List getLineData(String id) { List result = new ArrayList<>(); String path = csPagePOService.queryById(id).getPath(); InputStream inputStream = fileStorageUtil.getFileStream(path); - List list = analysisJson(inputStream); - if (CollectionUtil.isNotEmpty(list)){ - list.forEach(item->{ - String targetTag = item.getTargetId().stream().reduce((first, second) -> second).orElse("no last element"); - if (CollectionUtil.isNotEmpty(dataArrayFeignClient.getDataArrayById(item.getTargetPid(),targetTag).getData())){ - String targetName = dataArrayFeignClient.getDataArrayById(item.getTargetPid(),targetTag).getData().get(0).getAnotherName(); - String dataId = dataArrayFeignClient.getDataArrayById(item.getTargetPid(),targetTag).getData().get(0).getDataId(); - String classId = epdFeignClient.selectById(dataId).getData().getClassId(); - String lineId = item.getLineId().stream().reduce((first, second) -> second).orElse("no last element"); - String dataType = item.getDataType(); - String phasic = item.getPhasic(); - result.add(getLineRtData(lineId,classId,targetTag,phasic,dataType,targetName)); - } - }); - } + return result; } - /** - * 获取子节点 - */ - public List getChildren(LineTargetVO item, List all) { - return all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList()); - } - - /** - * 解析json文件 - */ - public List analysisJson(InputStream inputStream) { - Gson gson = new Gson(); - String text = new BufferedReader( - new InputStreamReader(inputStream, StandardCharsets.UTF_8)) - .lines() - .collect(Collectors.joining("\n")); - ZuTaiVo zuTai = gson.fromJson(text, ZuTaiVo.class); - return zuTai.getElements(); - } - /** * 通过orm框架获取数据 * @param lineId 监测点Id