diff --git a/das/src/main/java/com/das/modules/equipment/domain/dto/SysIotModelFieldDto.java b/das/src/main/java/com/das/modules/equipment/domain/dto/SysIotModelFieldDto.java index a800f88d..93db7246 100644 --- a/das/src/main/java/com/das/modules/equipment/domain/dto/SysIotModelFieldDto.java +++ b/das/src/main/java/com/das/modules/equipment/domain/dto/SysIotModelFieldDto.java @@ -73,5 +73,7 @@ public class SysIotModelFieldDto implements Serializable { */ private String unit; + private Integer level; + } diff --git a/das/src/main/java/com/das/modules/equipment/domain/excel/SysIotModelFieldExcel.java b/das/src/main/java/com/das/modules/equipment/domain/excel/SysIotModelFieldExcel.java index 86717758..3d272ef7 100644 --- a/das/src/main/java/com/das/modules/equipment/domain/excel/SysIotModelFieldExcel.java +++ b/das/src/main/java/com/das/modules/equipment/domain/excel/SysIotModelFieldExcel.java @@ -65,5 +65,6 @@ public class SysIotModelFieldExcel { */ private String unit; + private Integer level; } diff --git a/das/src/main/java/com/das/modules/equipment/domain/vo/SysIotModelFieldVo.java b/das/src/main/java/com/das/modules/equipment/domain/vo/SysIotModelFieldVo.java index 56c4ca55..9f72e637 100644 --- a/das/src/main/java/com/das/modules/equipment/domain/vo/SysIotModelFieldVo.java +++ b/das/src/main/java/com/das/modules/equipment/domain/vo/SysIotModelFieldVo.java @@ -66,4 +66,6 @@ public class SysIotModelFieldVo { */ private String unit; + private Integer level; + } diff --git a/das/src/main/java/com/das/modules/equipment/entity/SysIotModelField.java b/das/src/main/java/com/das/modules/equipment/entity/SysIotModelField.java index 58e87492..3180601c 100644 --- a/das/src/main/java/com/das/modules/equipment/entity/SysIotModelField.java +++ b/das/src/main/java/com/das/modules/equipment/entity/SysIotModelField.java @@ -99,4 +99,10 @@ public class SysIotModelField extends BaseEntity { */ @TableField("unit") private String unit; + + /** + * 离散量级别。0 提示;1告警;2 故障 + */ + @TableField("level") + private Integer level; } diff --git a/das/src/main/java/com/das/modules/equipment/service/impl/SysIotModelServiceImpl.java b/das/src/main/java/com/das/modules/equipment/service/impl/SysIotModelServiceImpl.java index 0476b8c3..b9ffc771 100644 --- a/das/src/main/java/com/das/modules/equipment/service/impl/SysIotModelServiceImpl.java +++ b/das/src/main/java/com/das/modules/equipment/service/impl/SysIotModelServiceImpl.java @@ -304,6 +304,7 @@ public class SysIotModelServiceImpl implements SysIotModelService { map.put("dataType", "*数据类型"); map.put("visible", "是否可见(0:不可见,1:可见)"); map.put("highSpeed", "*属性频度(0低频属性,1高频属性)"); + map.put("level","离散量级别:0提示;1告警;2故障"); sheetDTO.setSheetName("物模型属性"); sheetDTO.setFieldAndAlias(map); sheetDTO.setCollection(sysIotModelFieldVoList); @@ -517,6 +518,7 @@ public class SysIotModelServiceImpl implements SysIotModelService { field.setDataType(row.get(9).toString()); field.setVisible(ObjectUtil.isEmpty(row.get(10)) ? null : Integer.valueOf(row.get(10).toString())); field.setHighSpeed(Integer.valueOf(row.get(11).toString())); + field.setLevel(ObjectUtil.isEmpty(row.get(12)) ? null : Integer.valueOf(row.get(12).toString())); field.setIotModelId(Long.valueOf(iotModelId)); } diff --git a/das/src/main/java/com/das/modules/fdr/controller/FaultRecorderController.java b/das/src/main/java/com/das/modules/fdr/controller/FaultRecorderController.java index fd41d8bf..4159610d 100644 --- a/das/src/main/java/com/das/modules/fdr/controller/FaultRecorderController.java +++ b/das/src/main/java/com/das/modules/fdr/controller/FaultRecorderController.java @@ -1,16 +1,26 @@ package com.das.modules.fdr.controller; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.read.builder.ExcelReaderBuilder; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.das.common.result.R; +import com.das.modules.curve.domain.dto.TheoreticalPowerCurveDto; +import com.das.modules.curve.domain.entity.CurveItemEntity; +import com.das.modules.curve.domain.excel.CurveItemExcel; import com.das.modules.equipment.entity.SysEquipment; import com.das.modules.fdr.domain.FileNode; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; import com.das.modules.fdr.domain.dto.FileDownloadDto; +import com.das.modules.fdr.domain.excel.SysFaultRecordingExcel; +import com.das.modules.fdr.listener.SysFaultRecordingListener; import com.das.modules.fdr.service.FaultRecorderService; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; @@ -27,6 +37,9 @@ public class FaultRecorderController { @Autowired private FaultRecorderService faultRecorderService; + @Autowired + private SysFaultRecordingListener sysFaultRecordingListener; + @RequestMapping(value = "/files", method = RequestMethod.POST) public R> findList(@RequestBody JSONObject jsonObject) { String code = jsonObject.getString("deviceCode"); @@ -53,4 +66,35 @@ public class FaultRecorderController { faultRecorderService.download(fileDownloadDto.getUrl(),httpServletResponse); } + + /** + * 描述导出 + */ + @PostMapping("/export") + public void exportTheoreticalPowerCurve(@RequestBody SysFaultRecordingDesc sysFaultRecordingDesc, HttpServletRequest request, HttpServletResponse response) { + faultRecorderService.exportFaultRecordingDesc(sysFaultRecordingDesc,request, response); + } + + /** + * 故障录波描述导入 + */ + @PostMapping("/import") + public R importSysIotModel(String id, @RequestParam("file") MultipartFile file) throws IOException { + sysFaultRecordingListener.setParent(Long.valueOf(id)); + ExcelReaderBuilder read = EasyExcel.read(file.getInputStream(), SysFaultRecordingExcel.class,sysFaultRecordingListener); + read.sheet().doRead(); + return R.success("导入成功"); + } + + /** + * 根据制造商厂家型号查询故障信息描述 + * @return 信息中英文描述 + */ + @PostMapping("/queryFdrDesc") + public R> queryAllCurve(@RequestBody JSONObject jsonObject) { + String madeinfactory = jsonObject.getString("madeinfactory"); + String model = jsonObject.getString("model"); + List sysFaultRecordingDescList = faultRecorderService.queryFaultRecordingDes(madeinfactory,model); + return R.success(sysFaultRecordingDescList); + } } diff --git a/das/src/main/java/com/das/modules/fdr/domain/SysFaultRecordingDesc.java b/das/src/main/java/com/das/modules/fdr/domain/SysFaultRecordingDesc.java new file mode 100644 index 00000000..49098561 --- /dev/null +++ b/das/src/main/java/com/das/modules/fdr/domain/SysFaultRecordingDesc.java @@ -0,0 +1,49 @@ +package com.das.modules.fdr.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@TableName("sys_fault_recording_var_desc") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysFaultRecordingDesc { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + @TableField("parent") + private Long parent; + + @TableField("variable") + private String variable; + + @TableField("description") + private String description; + + @TableField("revision") + private Integer revision; + + @TableField("created_by") + private String createdBy; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("created_time") + private Date createdTime; + + @TableField("updated_by") + private String updatedBy; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("updated_time") + private Date updatedTime; + +} diff --git a/das/src/main/java/com/das/modules/fdr/domain/excel/SysFaultRecordingExcel.java b/das/src/main/java/com/das/modules/fdr/domain/excel/SysFaultRecordingExcel.java new file mode 100644 index 00000000..269e5ee9 --- /dev/null +++ b/das/src/main/java/com/das/modules/fdr/domain/excel/SysFaultRecordingExcel.java @@ -0,0 +1,23 @@ +package com.das.modules.fdr.domain.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SysFaultRecordingExcel implements Serializable { + + + /** + * 主键id + */ + @ExcelProperty(value = "英文名称",index = 0) + private String variable; + /** + * 物模型ID + */ + @ExcelProperty(value = "中文描述",index = 1) + private String description; + +} diff --git a/das/src/main/java/com/das/modules/fdr/listener/SysFaultRecordingListener.java b/das/src/main/java/com/das/modules/fdr/listener/SysFaultRecordingListener.java new file mode 100644 index 00000000..a665ae4e --- /dev/null +++ b/das/src/main/java/com/das/modules/fdr/listener/SysFaultRecordingListener.java @@ -0,0 +1,94 @@ +package com.das.modules.fdr.listener; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.fastjson.JSON; +import com.das.common.exceptions.ServiceException; +import com.das.common.utils.BeanCopyUtils; +import com.das.common.utils.CommonFunction; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; +import com.das.modules.fdr.domain.excel.SysFaultRecordingExcel; +import com.das.modules.fdr.service.impl.FaultRecorderServiceImpl; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; + + +/** + * 物模型属性监听器 + * + * @author huguanghan + */ +@Component +@Slf4j +@Data +public class SysFaultRecordingListener extends AnalysisEventListener { + @Autowired + private FaultRecorderServiceImpl faultRecorderService; + + public SysFaultRecordingListener(FaultRecorderServiceImpl faultRecorderService) { + this.faultRecorderService = faultRecorderService; + } + + //parentId + private Long parent; + + /**计数标记*/ + private Integer flag=0; + + /**存放插入*/ + ArrayList sysFaultRecordingDescArrayList = new ArrayList<>(); + + + @Override + public void invoke(SysFaultRecordingExcel sysFaultRecordingExcel, AnalysisContext analysisContext) { + // 如果一行Excel数据均为空值,则不装载该行数据 + if (CommonFunction.objCheckIsNull(sysFaultRecordingExcel)) { + return; + } + log.info("解析到一条数据:{}", JSON.toJSONString(sysFaultRecordingExcel)); + SysFaultRecordingDesc sysFaultRecordingDesc = new SysFaultRecordingDesc(); + BeanCopyUtils.copy(sysFaultRecordingExcel, sysFaultRecordingDesc); + sysFaultRecordingDesc.setParent(parent); + //加入集合 + sysFaultRecordingDescArrayList.add(sysFaultRecordingDesc); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + //确保最后遗留的数据也存储到数据库 + if (!sysFaultRecordingDescArrayList.isEmpty()){ + saveData(); + } + log.info("所有数据解析完成!"); + } + + + /** + * 存储数据库 + * @return + */ + private void saveData() { + log.info("{}条数据,开始存储数据库!", flag); + try { + faultRecorderService.batchProcessing(sysFaultRecordingDescArrayList,parent); + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + }finally { + clear(); + } + log.info("存储数据库成功!"); + } + + public void clear(){ + //清理缓存 + sysFaultRecordingDescArrayList.clear(); + flag=0; + log.info("缓存已清理"); + } +} + diff --git a/das/src/main/java/com/das/modules/fdr/mapper/SysFaultRecordingDescMapper.java b/das/src/main/java/com/das/modules/fdr/mapper/SysFaultRecordingDescMapper.java new file mode 100644 index 00000000..53b9aa4c --- /dev/null +++ b/das/src/main/java/com/das/modules/fdr/mapper/SysFaultRecordingDescMapper.java @@ -0,0 +1,10 @@ +package com.das.modules.fdr.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysFaultRecordingDescMapper extends BaseMapper { + +} diff --git a/das/src/main/java/com/das/modules/fdr/service/FaultRecorderService.java b/das/src/main/java/com/das/modules/fdr/service/FaultRecorderService.java index 27058944..739690b8 100644 --- a/das/src/main/java/com/das/modules/fdr/service/FaultRecorderService.java +++ b/das/src/main/java/com/das/modules/fdr/service/FaultRecorderService.java @@ -2,6 +2,8 @@ package com.das.modules.fdr.service; import com.das.modules.equipment.entity.SysEquipment; import com.das.modules.fdr.domain.FileNode; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; @@ -23,4 +25,8 @@ public interface FaultRecorderService { String upload(String parent, String folderName, MultipartFile file); void readFileToSteam(String path, OutputStream stream); + + void exportFaultRecordingDesc(SysFaultRecordingDesc sysFaultRecordingDesc, HttpServletRequest request, HttpServletResponse response); + + List queryFaultRecordingDes(String madeinfactory, String model); } diff --git a/das/src/main/java/com/das/modules/fdr/service/impl/FaultRecorderServiceImpl.java b/das/src/main/java/com/das/modules/fdr/service/impl/FaultRecorderServiceImpl.java index a94e629e..848867f0 100644 --- a/das/src/main/java/com/das/modules/fdr/service/impl/FaultRecorderServiceImpl.java +++ b/das/src/main/java/com/das/modules/fdr/service/impl/FaultRecorderServiceImpl.java @@ -1,19 +1,30 @@ package com.das.modules.fdr.service.impl; +import cn.dev33.satoken.stp.StpUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.das.common.config.SessionUtil; import com.das.common.constant.FileConstants; import com.das.common.exceptions.ServiceException; +import com.das.common.utils.HuExcelUtils; +import com.das.modules.auth.domain.vo.SysUserVo; +import com.das.modules.curve.domain.entity.CurveItemEntity; +import com.das.modules.curve.domain.entity.TheoreticalPowerCurveEntity; +import com.das.modules.curve.mapper.TheoreticalPowerCurveMapper; +import com.das.modules.equipment.domain.excel.SheetInfoBean; import com.das.modules.equipment.entity.SysEquipment; import com.das.modules.equipment.mapper.SysEquipmentMapper; import com.das.modules.fdr.config.MinioProperties; import com.das.modules.fdr.domain.FileNode; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; import com.das.modules.fdr.domain.vo.FdrFormatVo; import com.das.modules.fdr.domain.vo.FileParseConfig; +import com.das.modules.fdr.mapper.SysFaultRecordingDescMapper; import com.das.modules.fdr.service.FaultRecorderService; import com.das.modules.fdr.service.MinioViewsServcie; import io.micrometer.common.util.StringUtils; import io.minio.MinioClient; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -46,6 +57,12 @@ public class FaultRecorderServiceImpl implements FaultRecorderService { @Autowired private SysEquipmentMapper sysEquipmentMapper; + @Autowired + private SysFaultRecordingDescMapper sysFaultRecordingDescMapper; + + @Autowired + private TheoreticalPowerCurveMapper theoreticalPowerCurveMapper; + @Override public List getDirOrFileList(String fileType,String name, String startTime, String endTime) { @@ -72,6 +89,37 @@ public class FaultRecorderServiceImpl implements FaultRecorderService { minioViewsServcie.readFileToStream(path, stream); } + @Override + public void exportFaultRecordingDesc(SysFaultRecordingDesc sysFaultRecordingDesc, HttpServletRequest request, HttpServletResponse response) { + List exportList = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("PARENT",sysFaultRecordingDesc.getId()); + queryWrapper.orderByAsc("variable"); + List sysFaultRecordingDescList = sysFaultRecordingDescMapper.selectList(queryWrapper); + TheoreticalPowerCurveEntity theoreticalPowerCurve = theoreticalPowerCurveMapper.selectById(sysFaultRecordingDesc.getId()); + LinkedHashMap map = new LinkedHashMap<>(); + SheetInfoBean sheetDTO = new SheetInfoBean(); + map.put("variable", "英文名称"); + map.put("description", "中文描述"); + sheetDTO.setSheetName(theoreticalPowerCurve.getMadeinfactory()); + sheetDTO.setFieldAndAlias(map); + sheetDTO.setCollection(sysFaultRecordingDescList); + exportList.add(sheetDTO); + HuExcelUtils.exportExcel(response, exportList, theoreticalPowerCurve.getMadeinfactory()+theoreticalPowerCurve.getModel()+"故障录波日志变量描述"); + } + + @Override + public List queryFaultRecordingDes(String madeinfactory, String model) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("madeinfactory",madeinfactory); + queryWrapper.eq("MODEL",model); + TheoreticalPowerCurveEntity theoreticalPowerCurveEntity = theoreticalPowerCurveMapper.selectOne(queryWrapper); + QueryWrapper sysFaultRecordingDescQueryWrapper = new QueryWrapper<>(); + sysFaultRecordingDescQueryWrapper.eq("parent",theoreticalPowerCurveEntity.getId()); + sysFaultRecordingDescQueryWrapper.orderByAsc("variable"); + return sysFaultRecordingDescMapper.selectList(sysFaultRecordingDescQueryWrapper); + } + @Override public void download(String path,HttpServletResponse httpServletResponse) throws IOException { Path tempDir = Files.createTempDirectory(null); @@ -200,4 +248,22 @@ public class FaultRecorderServiceImpl implements FaultRecorderService { SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.parse(time).getTime(); } + + public void batchProcessing(List insertSysIotModelFieldList, Long parent) { + //先删除制造商数据 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("PARENT",parent); + sysFaultRecordingDescMapper.delete(queryWrapper); + + //新增新的制造商数据 + for (SysFaultRecordingDesc item : insertSysIotModelFieldList){ + SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY); + item.setCreatedTime(new Date()); + item.setUpdatedTime(new Date()); + item.setCreatedBy(sysUserVo.getAccount()); + item.setUpdatedBy(sysUserVo.getAccount()); + item.setRevision(1); + sysFaultRecordingDescMapper.insert(item); + } + } } diff --git a/das/src/main/java/com/das/modules/plc/controller/PlcLogsController.java b/das/src/main/java/com/das/modules/plc/controller/PlcLogsController.java index cc80f312..0c61e2b8 100644 --- a/das/src/main/java/com/das/modules/plc/controller/PlcLogsController.java +++ b/das/src/main/java/com/das/modules/plc/controller/PlcLogsController.java @@ -1,19 +1,25 @@ package com.das.modules.plc.controller; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.read.builder.ExcelReaderBuilder; import com.alibaba.fastjson.JSONObject; import com.das.common.result.R; import com.das.modules.equipment.entity.SysEquipment; import com.das.modules.fdr.domain.FileNode; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; import com.das.modules.fdr.domain.dto.FileDownloadDto; +import com.das.modules.fdr.domain.excel.SysFaultRecordingExcel; import com.das.modules.fdr.service.FaultRecorderService; +import com.das.modules.plc.domain.Excel.SysRunLogExcel; +import com.das.modules.plc.domain.SysRunLogDesc; +import com.das.modules.plc.listener.SysRunLogListener; import com.das.modules.plc.service.PlcLogService; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; @@ -30,6 +36,9 @@ public class PlcLogsController { @Autowired private PlcLogService plcLogService; + @Autowired + private SysRunLogListener sysRunLogListener; + @RequestMapping(value = "/files", method = RequestMethod.POST) public R> findList(@RequestBody JSONObject jsonObject) { String code = jsonObject.getString("deviceCode"); @@ -56,4 +65,35 @@ public class PlcLogsController { plcLogService.download(fileDownloadDto.getUrl(),httpServletResponse); } + + /** + * 描述导出 + */ + @PostMapping("/export") + public void exportTheoreticalPowerCurve(@RequestBody SysRunLogDesc sysRunLogDesc, HttpServletRequest request, HttpServletResponse response) { + plcLogService.exportRunLogDesc(sysRunLogDesc,request, response); + } + + /** + * 故障录波描述导入 + */ + @PostMapping("/import") + public R importSysIotModel(String id, @RequestParam("file") MultipartFile file) throws IOException { + sysRunLogListener.setParent(Long.valueOf(id)); + ExcelReaderBuilder read = EasyExcel.read(file.getInputStream(), SysRunLogExcel.class,sysRunLogListener); + read.sheet().doRead(); + return R.success("导入成功"); + } + + /** + * 根据制造商厂家型号查询故障信息描述 + * @return 信息中英文描述 + */ + @PostMapping("/queryPlcDesc") + public R> queryAllCurve(@RequestBody JSONObject jsonObject) { + String madeinfactory = jsonObject.getString("madeinfactory"); + String model = jsonObject.getString("model"); + List sysRunLogDescList = plcLogService.queryRunLogDesc(madeinfactory,model); + return R.success(sysRunLogDescList); + } } diff --git a/das/src/main/java/com/das/modules/plc/domain/Excel/SysRunLogExcel.java b/das/src/main/java/com/das/modules/plc/domain/Excel/SysRunLogExcel.java new file mode 100644 index 00000000..c4d206a2 --- /dev/null +++ b/das/src/main/java/com/das/modules/plc/domain/Excel/SysRunLogExcel.java @@ -0,0 +1,23 @@ +package com.das.modules.plc.domain.Excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SysRunLogExcel implements Serializable { + + + /** + * 主键id + */ + @ExcelProperty(value = "英文名称",index = 0) + private String variable; + /** + * 物模型ID + */ + @ExcelProperty(value = "中文描述",index = 1) + private String description; + +} diff --git a/das/src/main/java/com/das/modules/plc/domain/SysRunLogDesc.java b/das/src/main/java/com/das/modules/plc/domain/SysRunLogDesc.java new file mode 100644 index 00000000..5825be83 --- /dev/null +++ b/das/src/main/java/com/das/modules/plc/domain/SysRunLogDesc.java @@ -0,0 +1,49 @@ +package com.das.modules.plc.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@TableName("sys_run_log_var_desc") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysRunLogDesc { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + @TableField("parent") + private Long parent; + + @TableField("variable") + private String variable; + + @TableField("description") + private String description; + + @TableField("revision") + private Integer revision; + + @TableField("created_by") + private String createdBy; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("created_time") + private Date createdTime; + + @TableField("updated_by") + private String updatedBy; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("updated_time") + private Date updatedTime; + +} diff --git a/das/src/main/java/com/das/modules/plc/listener/SysRunLogListener.java b/das/src/main/java/com/das/modules/plc/listener/SysRunLogListener.java new file mode 100644 index 00000000..da26f8b9 --- /dev/null +++ b/das/src/main/java/com/das/modules/plc/listener/SysRunLogListener.java @@ -0,0 +1,97 @@ +package com.das.modules.plc.listener; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.fastjson.JSON; +import com.das.common.exceptions.ServiceException; +import com.das.common.utils.BeanCopyUtils; +import com.das.common.utils.CommonFunction; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; +import com.das.modules.fdr.domain.excel.SysFaultRecordingExcel; +import com.das.modules.fdr.service.impl.FaultRecorderServiceImpl; +import com.das.modules.plc.domain.Excel.SysRunLogExcel; +import com.das.modules.plc.domain.SysRunLogDesc; +import com.das.modules.plc.service.impl.PlcLogsServiceImpl; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; + + +/** + * 物模型属性监听器 + * + * @author huguanghan + */ +@Component +@Slf4j +@Data +public class SysRunLogListener extends AnalysisEventListener { + @Autowired + private PlcLogsServiceImpl plcLogsService; + + public SysRunLogListener(PlcLogsServiceImpl plcLogsService) { + this.plcLogsService = plcLogsService; + } + + //parentId + private Long parent; + + /**计数标记*/ + private Integer flag=0; + + /**存放插入*/ + ArrayList sysRunLogDescArrayList = new ArrayList<>(); + + + @Override + public void invoke(SysRunLogExcel sysRunLogExcel, AnalysisContext analysisContext) { + // 如果一行Excel数据均为空值,则不装载该行数据 + if (CommonFunction.objCheckIsNull(sysRunLogExcel)) { + return; + } + log.info("解析到一条数据:{}", JSON.toJSONString(sysRunLogExcel)); + SysRunLogDesc sysRunLogDesc = new SysRunLogDesc(); + BeanCopyUtils.copy(sysRunLogExcel, sysRunLogDesc); + sysRunLogDesc.setParent(parent); + //加入集合 + sysRunLogDescArrayList.add(sysRunLogDesc); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + //确保最后遗留的数据也存储到数据库 + if (!sysRunLogDescArrayList.isEmpty()){ + saveData(); + } + log.info("所有数据解析完成!"); + } + + + /** + * 存储数据库 + * @return + */ + private void saveData() { + log.info("{}条数据,开始存储数据库!", flag); + try { + plcLogsService.batchProcessing(sysRunLogDescArrayList,parent); + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + }finally { + clear(); + } + log.info("存储数据库成功!"); + } + + public void clear(){ + //清理缓存 + sysRunLogDescArrayList.clear(); + flag=0; + log.info("缓存已清理"); + } +} + diff --git a/das/src/main/java/com/das/modules/plc/mapper/SysRunLogDescMapper.java b/das/src/main/java/com/das/modules/plc/mapper/SysRunLogDescMapper.java new file mode 100644 index 00000000..8d1850ad --- /dev/null +++ b/das/src/main/java/com/das/modules/plc/mapper/SysRunLogDescMapper.java @@ -0,0 +1,11 @@ +package com.das.modules.plc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; +import com.das.modules.plc.domain.SysRunLogDesc; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysRunLogDescMapper extends BaseMapper { + +} diff --git a/das/src/main/java/com/das/modules/plc/service/PlcLogService.java b/das/src/main/java/com/das/modules/plc/service/PlcLogService.java index f5f59426..9d8485f8 100644 --- a/das/src/main/java/com/das/modules/plc/service/PlcLogService.java +++ b/das/src/main/java/com/das/modules/plc/service/PlcLogService.java @@ -2,6 +2,8 @@ package com.das.modules.plc.service; import com.das.modules.equipment.entity.SysEquipment; import com.das.modules.fdr.domain.FileNode; +import com.das.modules.plc.domain.SysRunLogDesc; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @@ -17,4 +19,8 @@ public interface PlcLogService { void updatePlcConfig(SysEquipment sysEquipment); void download(String path, HttpServletResponse httpServletResponse) throws IOException; + + void exportRunLogDesc(SysRunLogDesc sysRunLogDesc, HttpServletRequest request, HttpServletResponse response); + + List queryRunLogDesc(String madeinfactory, String model); } diff --git a/das/src/main/java/com/das/modules/plc/service/impl/PlcLogsServiceImpl.java b/das/src/main/java/com/das/modules/plc/service/impl/PlcLogsServiceImpl.java index 7bbf58c1..652124c9 100644 --- a/das/src/main/java/com/das/modules/plc/service/impl/PlcLogsServiceImpl.java +++ b/das/src/main/java/com/das/modules/plc/service/impl/PlcLogsServiceImpl.java @@ -1,18 +1,29 @@ package com.das.modules.plc.service.impl; +import cn.dev33.satoken.stp.StpUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.das.common.config.SessionUtil; import com.das.common.exceptions.ServiceException; +import com.das.common.utils.HuExcelUtils; +import com.das.modules.auth.domain.vo.SysUserVo; +import com.das.modules.curve.domain.entity.TheoreticalPowerCurveEntity; +import com.das.modules.curve.mapper.TheoreticalPowerCurveMapper; +import com.das.modules.equipment.domain.excel.SheetInfoBean; import com.das.modules.equipment.entity.SysEquipment; import com.das.modules.equipment.mapper.SysEquipmentMapper; import com.das.modules.fdr.domain.FileNode; +import com.das.modules.fdr.domain.SysFaultRecordingDesc; import com.das.modules.fdr.domain.vo.FdrFormatVo; import com.das.modules.fdr.domain.vo.FileParseConfig; import com.das.modules.fdr.service.FaultRecorderService; import com.das.modules.fdr.service.MinioViewsServcie; +import com.das.modules.plc.domain.SysRunLogDesc; +import com.das.modules.plc.mapper.SysRunLogDescMapper; import com.das.modules.plc.service.PlcLogService; import io.micrometer.common.util.StringUtils; import io.minio.MinioClient; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -39,6 +50,12 @@ public class PlcLogsServiceImpl implements PlcLogService { @Autowired private SysEquipmentMapper sysEquipmentMapper; + @Autowired + private TheoreticalPowerCurveMapper theoreticalPowerCurveMapper; + + @Autowired + private SysRunLogDescMapper sysRunLogDescMapper; + @Override public List getDirOrFileList(String fileType, String name, String startTime, String endTime) { @@ -93,6 +110,37 @@ public class PlcLogsServiceImpl implements PlcLogService { faultRecorderService.download(path,httpServletResponse); } + @Override + public void exportRunLogDesc(SysRunLogDesc sysRunLogDesc, HttpServletRequest request, HttpServletResponse response) { + List exportList = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("PARENT",sysRunLogDesc.getId()); + queryWrapper.orderByAsc("variable"); + List sysFaultRecordingDescList = sysRunLogDescMapper.selectList(queryWrapper); + TheoreticalPowerCurveEntity theoreticalPowerCurve = theoreticalPowerCurveMapper.selectById(sysRunLogDesc.getId()); + LinkedHashMap map = new LinkedHashMap<>(); + SheetInfoBean sheetDTO = new SheetInfoBean(); + map.put("variable", "英文名称"); + map.put("description", "中文描述"); + sheetDTO.setSheetName(theoreticalPowerCurve.getMadeinfactory()); + sheetDTO.setFieldAndAlias(map); + sheetDTO.setCollection(sysFaultRecordingDescList); + exportList.add(sheetDTO); + HuExcelUtils.exportExcel(response, exportList, theoreticalPowerCurve.getMadeinfactory()+theoreticalPowerCurve.getModel()+"运行日志变量描述"); + } + + @Override + public List queryRunLogDesc(String madeinfactory, String model) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("madeinfactory",madeinfactory); + queryWrapper.eq("MODEL",model); + TheoreticalPowerCurveEntity theoreticalPowerCurveEntity = theoreticalPowerCurveMapper.selectOne(queryWrapper); + QueryWrapper sysRunLogDescQueryWrapper = new QueryWrapper<>(); + sysRunLogDescQueryWrapper.eq("parent",theoreticalPowerCurveEntity.getId()); + sysRunLogDescQueryWrapper.orderByAsc("variable"); + return sysRunLogDescMapper.selectList(sysRunLogDescQueryWrapper); + } + public Map> parseFile(InputStream inputStream, String timeFormat, String delimiter, int validStartLine) { List> result = new ArrayList<>(); Map> stringListMap = null; @@ -160,4 +208,23 @@ public class PlcLogsServiceImpl implements PlcLogService { SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.parse(time).getTime(); } + + public void batchProcessing(List sysRunLogDescArrayList, Long parent) { + + //先删除制造商数据 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("PARENT",parent); + sysRunLogDescMapper.delete(queryWrapper); + + //新增新的制造商数据 + for (SysRunLogDesc item : sysRunLogDescArrayList){ + SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY); + item.setCreatedTime(new Date()); + item.setUpdatedTime(new Date()); + item.setCreatedBy(sysUserVo.getAccount()); + item.setUpdatedBy(sysUserVo.getAccount()); + item.setRevision(1); + sysRunLogDescMapper.insert(item); + } + } } diff --git a/database/风场采集.pdma.json b/database/风场采集.pdma.json index 10d6af6b..f6ab283b 100644 --- a/database/风场采集.pdma.json +++ b/database/风场采集.pdma.json @@ -4,7 +4,7 @@ "avatar": "", "version": "4.9.2", "createdTime": "2024-5-29 17:03:05", - "updatedTime": "2024-11-19 10:52:27", + "updatedTime": "2024-11-19 14:31:49", "dbConns": [], "profile": { "default": { @@ -2244,6 +2244,24 @@ "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573", "id": "4DC8240C-6F32-4A96-A6F2-453DA7E26665" }, + { + "defKey": "level", + "defName": "告警等级", + "comment": "离散量级别。0 提示;1告警;2 故障", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E", + "extProps": {}, + "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4", + "id": "563C69AD-0398-46FE-8A92-436C3B20E235" + }, { "defKey": "revision", "defName": "乐观锁", @@ -9773,284 +9791,6 @@ ] } }, - { - "id": "ee3bb43a-2484-4a03-8cc3-219f30706ca2", - "shape": "table", - "position": { - "x": -1550, - "y": -1024.5 - }, - "count": 0, - "originKey": "044FECED-CF78-4907-806F-DC4C98C2BCBA", - "type": "P", - "size": { - "width": 393, - "height": 376 - }, - "autoSize": true, - "ports": { - "groups": { - "in": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "zIndex": 3, - "position": { - "name": "left" - } - }, - "out": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "right" - } - }, - "top": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "top" - } - }, - "bottom": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "bottom" - } - } - }, - "items": [ - { - "group": "in", - "id": "in" - }, - { - "group": "in", - "id": "in2" - }, - { - "group": "in", - "id": "in3" - }, - { - "group": "out", - "id": "out" - }, - { - "group": "out", - "id": "out2" - }, - { - "group": "out", - "id": "out3" - }, - { - "group": "top", - "id": "top" - }, - { - "group": "top", - "id": "top2" - }, - { - "group": "top", - "id": "top3" - }, - { - "group": "bottom", - "id": "bottom" - }, - { - "group": "bottom", - "id": "bottom2" - }, - { - "group": "bottom", - "id": "bottom3" - } - ] - } - }, - { - "id": "1a42f2a5-52d2-4f20-9ea7-6f3bd8f3441e", - "shape": "table", - "position": { - "x": -1060.5, - "y": -990 - }, - "count": 0, - "originKey": "6CCDA6D5-AABD-4DCA-A3C6-868F4F23AFFB", - "type": "P", - "size": { - "width": 386, - "height": 284 - }, - "autoSize": true, - "ports": { - "groups": { - "in": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "zIndex": 3, - "position": { - "name": "left" - } - }, - "out": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "right" - } - }, - "top": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "top" - } - }, - "bottom": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "bottom" - } - } - }, - "items": [ - { - "group": "in", - "id": "in" - }, - { - "group": "in", - "id": "in2" - }, - { - "group": "in", - "id": "in3" - }, - { - "group": "out", - "id": "out" - }, - { - "group": "out", - "id": "out2" - }, - { - "group": "out", - "id": "out3" - }, - { - "group": "top", - "id": "top" - }, - { - "group": "top", - "id": "top2" - }, - { - "group": "top", - "id": "top3" - }, - { - "group": "bottom", - "id": "bottom" - }, - { - "group": "bottom", - "id": "bottom2" - }, - { - "group": "bottom", - "id": "bottom3" - } - ] - } - }, { "id": "4e9a7a00-d60a-43d2-8600-f83922c37647", "shape": "table", @@ -10190,146 +9930,6 @@ ] } }, - { - "id": "1d3dd585-bacc-4259-9521-98795230b154", - "shape": "table", - "position": { - "x": -1260, - "y": -630 - }, - "count": 0, - "originKey": "3B7828B3-38C2-4A5B-9B5A-84E81DAB3A03", - "fillColor": "#DDE5FF", - "type": "P", - "size": { - "width": 396, - "height": 238 - }, - "autoSize": true, - "ports": { - "groups": { - "in": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "zIndex": 3, - "position": { - "name": "left" - } - }, - "out": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "right" - } - }, - "top": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "top" - } - }, - "bottom": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "bottom" - } - } - }, - "items": [ - { - "group": "in", - "id": "in" - }, - { - "group": "in", - "id": "in2" - }, - { - "group": "in", - "id": "in3" - }, - { - "group": "out", - "id": "out" - }, - { - "group": "out", - "id": "out2" - }, - { - "group": "out", - "id": "out3" - }, - { - "group": "top", - "id": "top" - }, - { - "group": "top", - "id": "top2" - }, - { - "group": "top", - "id": "top3" - }, - { - "group": "bottom", - "id": "bottom" - }, - { - "group": "bottom", - "id": "bottom2" - }, - { - "group": "bottom", - "id": "bottom3" - } - ] - } - }, { "id": "5030703c-3b10-44b9-bc28-1bb8d31c8fac", "shape": "table", @@ -10609,6 +10209,981 @@ ] } }, + { + "id": "aa4e8223-979d-4f00-95c0-120a4ec4885a", + "shape": "table", + "position": { + "x": 43.5, + "y": -710.5 + }, + "count": 0, + "originKey": "A1C3D378-5246-4F80-9E47-ADF91DFB7EBF", + "fillColor": "#DDE5FF", + "isLock": false, + "type": "P", + "size": { + "width": 383, + "height": 399 + }, + "autoSize": true, + "ports": { + "groups": { + "in": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "zIndex": 3, + "position": { + "name": "left" + } + }, + "out": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "right" + } + }, + "top": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "top" + } + }, + "bottom": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "bottom" + } + } + }, + "items": [ + { + "group": "in", + "id": "in" + }, + { + "group": "in", + "id": "in2" + }, + { + "group": "in", + "id": "in3" + }, + { + "group": "out", + "id": "out" + }, + { + "group": "out", + "id": "out2" + }, + { + "group": "out", + "id": "out3" + }, + { + "group": "top", + "id": "top" + }, + { + "group": "top", + "id": "top2" + }, + { + "group": "top", + "id": "top3" + }, + { + "group": "bottom", + "id": "bottom" + }, + { + "group": "bottom", + "id": "bottom2" + }, + { + "group": "bottom", + "id": "bottom3" + } + ] + } + }, + { + "id": "57f1d22e-9b58-4f23-9cee-f9d539065bd3", + "shape": "table", + "position": { + "x": -2040, + "y": -380 + }, + "count": 0, + "originKey": "75DECB3B-9248-4BCA-B465-5ABD2BA56B40", + "type": "P", + "size": { + "width": 392, + "height": 238 + }, + "autoSize": true, + "ports": { + "groups": { + "in": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "zIndex": 3, + "position": { + "name": "left" + } + }, + "out": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "right" + } + }, + "top": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "top" + } + }, + "bottom": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "bottom" + } + } + }, + "items": [ + { + "group": "in", + "id": "in" + }, + { + "group": "in", + "id": "in2" + }, + { + "group": "in", + "id": "in3" + }, + { + "group": "out", + "id": "out" + }, + { + "group": "out", + "id": "out2" + }, + { + "group": "out", + "id": "out3" + }, + { + "group": "top", + "id": "top" + }, + { + "group": "top", + "id": "top2" + }, + { + "group": "top", + "id": "top3" + }, + { + "group": "bottom", + "id": "bottom" + }, + { + "group": "bottom", + "id": "bottom2" + }, + { + "group": "bottom", + "id": "bottom3" + } + ] + } + }, + { + "id": "5b839cde-787e-4473-bf89-49516de59e45", + "shape": "table", + "position": { + "x": -2004.5, + "y": -85 + }, + "count": 0, + "originKey": "91968974-19D5-4C44-B8BD-741703AB01E3", + "type": "P", + "size": { + "width": 344, + "height": 215 + }, + "autoSize": true, + "ports": { + "groups": { + "in": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "zIndex": 3, + "position": { + "name": "left" + } + }, + "out": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "right" + } + }, + "top": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "top" + } + }, + "bottom": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "bottom" + } + } + }, + "items": [ + { + "group": "in", + "id": "in" + }, + { + "group": "in", + "id": "in2" + }, + { + "group": "in", + "id": "in3" + }, + { + "group": "out", + "id": "out" + }, + { + "group": "out", + "id": "out2" + }, + { + "group": "out", + "id": "out3" + }, + { + "group": "top", + "id": "top" + }, + { + "group": "top", + "id": "top2" + }, + { + "group": "top", + "id": "top3" + }, + { + "group": "bottom", + "id": "bottom" + }, + { + "group": "bottom", + "id": "bottom2" + }, + { + "group": "bottom", + "id": "bottom3" + } + ] + } + }, + { + "id": "6e0c29a6-a754-4d5f-b4a1-36efa7809f2c", + "shape": "table", + "position": { + "x": -1550, + "y": 119 + }, + "count": 0, + "originKey": "A449B105-0701-4B60-AD35-B9AEC66CBC2A", + "type": "P", + "size": { + "width": 395, + "height": 238 + }, + "autoSize": true, + "ports": { + "groups": { + "in": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "zIndex": 3, + "position": { + "name": "left" + } + }, + "out": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "right" + } + }, + "top": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "top" + } + }, + "bottom": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "bottom" + } + } + }, + "items": [ + { + "group": "in", + "id": "in" + }, + { + "group": "in", + "id": "in2" + }, + { + "group": "in", + "id": "in3" + }, + { + "group": "out", + "id": "out" + }, + { + "group": "out", + "id": "out2" + }, + { + "group": "out", + "id": "out3" + }, + { + "group": "top", + "id": "top" + }, + { + "group": "top", + "id": "top2" + }, + { + "group": "top", + "id": "top3" + }, + { + "group": "bottom", + "id": "bottom" + }, + { + "group": "bottom", + "id": "bottom2" + }, + { + "group": "bottom", + "id": "bottom3" + } + ] + } + }, + { + "id": "b7cca971-e234-47e8-a756-a7e84e828946", + "shape": "table", + "position": { + "x": -1937.5, + "y": 470 + }, + "count": 0, + "originKey": "68316E6D-319D-4B03-B3FA-08781DF9B69A", + "type": "P", + "size": { + "width": 478, + "height": 238 + }, + "autoSize": true, + "ports": { + "groups": { + "in": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "zIndex": 3, + "position": { + "name": "left" + } + }, + "out": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "right" + } + }, + "top": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "top" + } + }, + "bottom": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "bottom" + } + } + }, + "items": [ + { + "group": "in", + "id": "in" + }, + { + "group": "in", + "id": "in2" + }, + { + "group": "in", + "id": "in3" + }, + { + "group": "out", + "id": "out" + }, + { + "group": "out", + "id": "out2" + }, + { + "group": "out", + "id": "out3" + }, + { + "group": "top", + "id": "top" + }, + { + "group": "top", + "id": "top2" + }, + { + "group": "top", + "id": "top3" + }, + { + "group": "bottom", + "id": "bottom" + }, + { + "group": "bottom", + "id": "bottom2" + }, + { + "group": "bottom", + "id": "bottom3" + } + ] + } + }, + { + "id": "4c9da261-60bb-4fd7-9bec-deea0878c5e8", + "shape": "table", + "position": { + "x": -1414, + "y": 470 + }, + "count": 0, + "originKey": "E1F6C045-2BDC-4F99-A744-F8F68B043030", + "type": "P", + "size": { + "width": 518, + "height": 238 + }, + "autoSize": true, + "ports": { + "groups": { + "in": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "zIndex": 3, + "position": { + "name": "left" + } + }, + "out": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "right" + } + }, + "top": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "top" + } + }, + "bottom": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "bottom" + } + } + }, + "items": [ + { + "group": "in", + "id": "in" + }, + { + "group": "in", + "id": "in2" + }, + { + "group": "in", + "id": "in3" + }, + { + "group": "out", + "id": "out" + }, + { + "group": "out", + "id": "out2" + }, + { + "group": "out", + "id": "out3" + }, + { + "group": "top", + "id": "top" + }, + { + "group": "top", + "id": "top2" + }, + { + "group": "top", + "id": "top3" + }, + { + "group": "bottom", + "id": "bottom" + }, + { + "group": "bottom", + "id": "bottom2" + }, + { + "group": "bottom", + "id": "bottom3" + } + ] + } + }, + { + "id": "5dfed35f-bfeb-4170-bb9b-38260ed8aa69", + "shape": "table", + "position": { + "x": -864, + "y": 470 + }, + "count": 0, + "originKey": "E667096D-C347-4A66-BD2D-F671638A9986", + "type": "P", + "size": { + "width": 415, + "height": 238 + }, + "autoSize": true, + "ports": { + "groups": { + "in": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "zIndex": 3, + "position": { + "name": "left" + } + }, + "out": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "right" + } + }, + "top": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "top" + } + }, + "bottom": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "bottom" + } + } + }, + "items": [ + { + "group": "in", + "id": "in" + }, + { + "group": "in", + "id": "in2" + }, + { + "group": "in", + "id": "in3" + }, + { + "group": "out", + "id": "out" + }, + { + "group": "out", + "id": "out2" + }, + { + "group": "out", + "id": "out3" + }, + { + "group": "top", + "id": "top" + }, + { + "group": "top", + "id": "top2" + }, + { + "group": "top", + "id": "top3" + }, + { + "group": "bottom", + "id": "bottom" + }, + { + "group": "bottom", + "id": "bottom2" + }, + { + "group": "bottom", + "id": "bottom3" + } + ] + } + }, { "id": "06afc394-00c8-4dad-ab6a-3700d00d2c66", "shape": "erdRelation", @@ -11060,20 +11635,37 @@ } }, { - "id": "aa4e8223-979d-4f00-95c0-120a4ec4885a", + "id": "f8284e53-7be0-46d9-b8bc-e0434e7f2d48", + "shape": "erdRelation", + "source": { + "cell": "4c9da261-60bb-4fd7-9bec-deea0878c5e8", + "port": "top" + }, + "target": { + "cell": "6e0c29a6-a754-4d5f-b4a1-36efa7809f2c", + "port": "bottom3" + }, + "relation": "1:n", + "fillColor": "#ACDAFC", + "attrs": { + "line": { + "strokeDasharray": "" + } + } + }, + { + "id": "7ac8a5d4-1b88-4286-af3e-bf143e4511ca", "shape": "table", "position": { - "x": 43.5, - "y": -710.5 + "x": 960, + "y": -240 }, "count": 0, - "originKey": "A1C3D378-5246-4F80-9E47-ADF91DFB7EBF", - "fillColor": "#DDE5FF", - "isLock": false, + "originKey": "F68E1B95-2D0C-4F14-B395-10AB5F8910D7", "type": "P", "size": { - "width": 383, - "height": 399 + "width": 358, + "height": 215 }, "autoSize": true, "ports": { @@ -11201,17 +11793,17 @@ } }, { - "id": "7ac8a5d4-1b88-4286-af3e-bf143e4511ca", + "id": "8be908ab-85b6-4230-b708-1ddf2da33830", "shape": "table", "position": { - "x": 960, - "y": -240 + "x": 290, + "y": 150 }, "count": 0, - "originKey": "F68E1B95-2D0C-4F14-B395-10AB5F8910D7", + "originKey": "80203FEF-6CCA-4E85-8EE8-EB117AAEE55C", "type": "P", "size": { - "width": 358, + "width": 348, "height": 215 }, "autoSize": true, @@ -11478,6 +12070,146 @@ ] } }, + { + "id": "1d3dd585-bacc-4259-9521-98795230b154", + "shape": "table", + "position": { + "x": -1260, + "y": -630 + }, + "count": 0, + "originKey": "3B7828B3-38C2-4A5B-9B5A-84E81DAB3A03", + "fillColor": "#DDE5FF", + "type": "P", + "size": { + "width": 396, + "height": 238 + }, + "autoSize": true, + "ports": { + "groups": { + "in": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "zIndex": 3, + "position": { + "name": "left" + } + }, + "out": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "right" + } + }, + "top": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "top" + } + }, + "bottom": { + "attrs": { + "circle": { + "r": 4, + "magnet": true, + "stroke": "#1890FF", + "fill": "#FFF", + "strokeWidth": 1, + "style": { + "visibility": "hidden" + } + } + }, + "position": { + "name": "bottom" + } + } + }, + "items": [ + { + "group": "in", + "id": "in" + }, + { + "group": "in", + "id": "in2" + }, + { + "group": "in", + "id": "in3" + }, + { + "group": "out", + "id": "out" + }, + { + "group": "out", + "id": "out2" + }, + { + "group": "out", + "id": "out3" + }, + { + "group": "top", + "id": "top" + }, + { + "group": "top", + "id": "top2" + }, + { + "group": "top", + "id": "top3" + }, + { + "group": "bottom", + "id": "bottom" + }, + { + "group": "bottom", + "id": "bottom2" + }, + { + "group": "bottom", + "id": "bottom3" + } + ] + } + }, { "id": "1254016c-0ee0-4df2-bc66-8d15a5f2d775", "shape": "table", @@ -11617,284 +12349,6 @@ ] } }, - { - "id": "8be908ab-85b6-4230-b708-1ddf2da33830", - "shape": "table", - "position": { - "x": 290, - "y": 150 - }, - "count": 0, - "originKey": "80203FEF-6CCA-4E85-8EE8-EB117AAEE55C", - "type": "P", - "size": { - "width": 348, - "height": 215 - }, - "autoSize": true, - "ports": { - "groups": { - "in": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "zIndex": 3, - "position": { - "name": "left" - } - }, - "out": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "right" - } - }, - "top": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "top" - } - }, - "bottom": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "bottom" - } - } - }, - "items": [ - { - "group": "in", - "id": "in" - }, - { - "group": "in", - "id": "in2" - }, - { - "group": "in", - "id": "in3" - }, - { - "group": "out", - "id": "out" - }, - { - "group": "out", - "id": "out2" - }, - { - "group": "out", - "id": "out3" - }, - { - "group": "top", - "id": "top" - }, - { - "group": "top", - "id": "top2" - }, - { - "group": "top", - "id": "top3" - }, - { - "group": "bottom", - "id": "bottom" - }, - { - "group": "bottom", - "id": "bottom2" - }, - { - "group": "bottom", - "id": "bottom3" - } - ] - } - }, - { - "id": "57f1d22e-9b58-4f23-9cee-f9d539065bd3", - "shape": "table", - "position": { - "x": -2040, - "y": -380 - }, - "count": 0, - "originKey": "75DECB3B-9248-4BCA-B465-5ABD2BA56B40", - "type": "P", - "size": { - "width": 392, - "height": 238 - }, - "autoSize": true, - "ports": { - "groups": { - "in": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "zIndex": 3, - "position": { - "name": "left" - } - }, - "out": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "right" - } - }, - "top": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "top" - } - }, - "bottom": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "bottom" - } - } - }, - "items": [ - { - "group": "in", - "id": "in" - }, - { - "group": "in", - "id": "in2" - }, - { - "group": "in", - "id": "in3" - }, - { - "group": "out", - "id": "out" - }, - { - "group": "out", - "id": "out2" - }, - { - "group": "out", - "id": "out3" - }, - { - "group": "top", - "id": "top" - }, - { - "group": "top", - "id": "top2" - }, - { - "group": "top", - "id": "top3" - }, - { - "group": "bottom", - "id": "bottom" - }, - { - "group": "bottom", - "id": "bottom2" - }, - { - "group": "bottom", - "id": "bottom3" - } - ] - } - }, { "id": "192f839e-8983-466e-9df7-818c17430f45", "shape": "table", @@ -12035,18 +12489,18 @@ } }, { - "id": "5b839cde-787e-4473-bf89-49516de59e45", + "id": "ee3bb43a-2484-4a03-8cc3-219f30706ca2", "shape": "table", "position": { - "x": -2004.5, - "y": -85 + "x": -1548.5, + "y": -1130 }, "count": 0, - "originKey": "91968974-19D5-4C44-B8BD-741703AB01E3", + "originKey": "044FECED-CF78-4907-806F-DC4C98C2BCBA", "type": "P", "size": { - "width": 344, - "height": 215 + "width": 392, + "height": 399 }, "autoSize": true, "ports": { @@ -12174,457 +12628,18 @@ } }, { - "id": "f8284e53-7be0-46d9-b8bc-e0434e7f2d48", - "shape": "erdRelation", - "source": { - "cell": "4c9da261-60bb-4fd7-9bec-deea0878c5e8", - "port": "top" - }, - "target": { - "cell": "6e0c29a6-a754-4d5f-b4a1-36efa7809f2c", - "port": "bottom3" - }, - "relation": "1:n", - "fillColor": "#ACDAFC", - "router": { - "name": "manhattan" - }, - "attrs": { - "line": { - "strokeDasharray": "" - } - } - }, - { - "id": "6e0c29a6-a754-4d5f-b4a1-36efa7809f2c", + "id": "1a42f2a5-52d2-4f20-9ea7-6f3bd8f3441e", "shape": "table", "position": { - "x": -1550, - "y": 119 + "x": -1100.5, + "y": -1126 }, "count": 0, - "originKey": "A449B105-0701-4B60-AD35-B9AEC66CBC2A", + "originKey": "6CCDA6D5-AABD-4DCA-A3C6-868F4F23AFFB", "type": "P", "size": { - "width": 395, - "height": 238 - }, - "autoSize": true, - "ports": { - "groups": { - "in": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "zIndex": 3, - "position": { - "name": "left" - } - }, - "out": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "right" - } - }, - "top": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "top" - } - }, - "bottom": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "bottom" - } - } - }, - "items": [ - { - "group": "in", - "id": "in" - }, - { - "group": "in", - "id": "in2" - }, - { - "group": "in", - "id": "in3" - }, - { - "group": "out", - "id": "out" - }, - { - "group": "out", - "id": "out2" - }, - { - "group": "out", - "id": "out3" - }, - { - "group": "top", - "id": "top" - }, - { - "group": "top", - "id": "top2" - }, - { - "group": "top", - "id": "top3" - }, - { - "group": "bottom", - "id": "bottom" - }, - { - "group": "bottom", - "id": "bottom2" - }, - { - "group": "bottom", - "id": "bottom3" - } - ] - } - }, - { - "id": "b7cca971-e234-47e8-a756-a7e84e828946", - "shape": "table", - "position": { - "x": -1937.5, - "y": 470 - }, - "count": 0, - "originKey": "68316E6D-319D-4B03-B3FA-08781DF9B69A", - "type": "P", - "size": { - "width": 478, - "height": 238 - }, - "autoSize": true, - "ports": { - "groups": { - "in": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "zIndex": 3, - "position": { - "name": "left" - } - }, - "out": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "right" - } - }, - "top": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "top" - } - }, - "bottom": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "bottom" - } - } - }, - "items": [ - { - "group": "in", - "id": "in" - }, - { - "group": "in", - "id": "in2" - }, - { - "group": "in", - "id": "in3" - }, - { - "group": "out", - "id": "out" - }, - { - "group": "out", - "id": "out2" - }, - { - "group": "out", - "id": "out3" - }, - { - "group": "top", - "id": "top" - }, - { - "group": "top", - "id": "top2" - }, - { - "group": "top", - "id": "top3" - }, - { - "group": "bottom", - "id": "bottom" - }, - { - "group": "bottom", - "id": "bottom2" - }, - { - "group": "bottom", - "id": "bottom3" - } - ] - } - }, - { - "id": "4c9da261-60bb-4fd7-9bec-deea0878c5e8", - "shape": "table", - "position": { - "x": -1414, - "y": 470 - }, - "count": 0, - "originKey": "E1F6C045-2BDC-4F99-A744-F8F68B043030", - "type": "P", - "size": { - "width": 518, - "height": 238 - }, - "autoSize": true, - "ports": { - "groups": { - "in": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "zIndex": 3, - "position": { - "name": "left" - } - }, - "out": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "right" - } - }, - "top": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "top" - } - }, - "bottom": { - "attrs": { - "circle": { - "r": 4, - "magnet": true, - "stroke": "#1890FF", - "fill": "#FFF", - "strokeWidth": 1, - "style": { - "visibility": "hidden" - } - } - }, - "position": { - "name": "bottom" - } - } - }, - "items": [ - { - "group": "in", - "id": "in" - }, - { - "group": "in", - "id": "in2" - }, - { - "group": "in", - "id": "in3" - }, - { - "group": "out", - "id": "out" - }, - { - "group": "out", - "id": "out2" - }, - { - "group": "out", - "id": "out3" - }, - { - "group": "top", - "id": "top" - }, - { - "group": "top", - "id": "top2" - }, - { - "group": "top", - "id": "top3" - }, - { - "group": "bottom", - "id": "bottom" - }, - { - "group": "bottom", - "id": "bottom2" - }, - { - "group": "bottom", - "id": "bottom3" - } - ] - } - }, - { - "id": "5dfed35f-bfeb-4170-bb9b-38260ed8aa69", - "shape": "table", - "position": { - "x": -864, - "y": 470 - }, - "count": 0, - "originKey": "E667096D-C347-4A66-BD2D-F671638A9986", - "type": "P", - "size": { - "width": 415, - "height": 238 + "width": 386, + "height": 284 }, "autoSize": true, "ports": { diff --git a/ui/dasadmin/src/views/backend/dashboard.vue b/ui/dasadmin/src/views/backend/dashboard.vue index cbf724b5..d40abab6 100644 --- a/ui/dasadmin/src/views/backend/dashboard.vue +++ b/ui/dasadmin/src/views/backend/dashboard.vue @@ -1,213 +1,7 @@