From c9158dfa49049cc67cb8144befa0fe53e5f47a0e Mon Sep 17 00:00:00 2001 From: huguanghan Date: Tue, 19 Nov 2024 15:18:12 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E6=95=85=E9=9A=9C=E5=BD=95=E6=B3=A2?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E6=8F=8F=E8=BF=B0=EF=BC=8C=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=8F=98=E9=87=8F=E6=8F=8F=E8=BF=B0=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/FaultRecorderController.java | 44 +++++++++ .../fdr/domain/SysFaultRecordingDesc.java | 49 ++++++++++ .../domain/excel/SysFaultRecordingExcel.java | 23 +++++ .../listener/SysFaultRecordingListener.java | 94 ++++++++++++++++++ .../mapper/SysFaultRecordingDescMapper.java | 10 ++ .../fdr/service/FaultRecorderService.java | 6 ++ .../impl/FaultRecorderServiceImpl.java | 66 +++++++++++++ .../plc/controller/PlcLogsController.java | 48 ++++++++- .../plc/domain/Excel/SysRunLogExcel.java | 23 +++++ .../das/modules/plc/domain/SysRunLogDesc.java | 49 ++++++++++ .../plc/listener/SysRunLogListener.java | 97 +++++++++++++++++++ .../plc/mapper/SysRunLogDescMapper.java | 11 +++ .../modules/plc/service/PlcLogService.java | 6 ++ .../plc/service/impl/PlcLogsServiceImpl.java | 67 +++++++++++++ 14 files changed, 589 insertions(+), 4 deletions(-) create mode 100644 das/src/main/java/com/das/modules/fdr/domain/SysFaultRecordingDesc.java create mode 100644 das/src/main/java/com/das/modules/fdr/domain/excel/SysFaultRecordingExcel.java create mode 100644 das/src/main/java/com/das/modules/fdr/listener/SysFaultRecordingListener.java create mode 100644 das/src/main/java/com/das/modules/fdr/mapper/SysFaultRecordingDescMapper.java create mode 100644 das/src/main/java/com/das/modules/plc/domain/Excel/SysRunLogExcel.java create mode 100644 das/src/main/java/com/das/modules/plc/domain/SysRunLogDesc.java create mode 100644 das/src/main/java/com/das/modules/plc/listener/SysRunLogListener.java create mode 100644 das/src/main/java/com/das/modules/plc/mapper/SysRunLogDescMapper.java 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..4d976ae1 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("/queryFdrDesc") + 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); + } + } } From 9fe33506806bdbe61eafb8b1c06f3d3190c3b18d Mon Sep 17 00:00:00 2001 From: huguanghan Date: Tue, 19 Nov 2024 15:33:44 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E6=95=85=E9=9A=9C=E5=BD=95=E6=B3=A2?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E6=8F=8F=E8=BF=B0=EF=BC=8C=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=8F=98=E9=87=8F=E6=8F=8F=E8=BF=B0=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/das/modules/plc/controller/PlcLogsController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4d976ae1..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 @@ -89,7 +89,7 @@ public class PlcLogsController { * 根据制造商厂家型号查询故障信息描述 * @return 信息中英文描述 */ - @PostMapping("/queryFdrDesc") + @PostMapping("/queryPlcDesc") public R> queryAllCurve(@RequestBody JSONObject jsonObject) { String madeinfactory = jsonObject.getString("madeinfactory"); String model = jsonObject.getString("model"); From e4a029429f0da7edd45c7c2d2bdd5d9579ef78db Mon Sep 17 00:00:00 2001 From: huguanghan Date: Tue, 19 Nov 2024 16:07:58 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E7=89=A9=E6=A8=A1=E5=9E=8B=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E6=96=B0=E5=A2=9Elevel=E5=91=8A=E8=AD=A6=E7=AD=89?= =?UTF-8?q?=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/equipment/domain/dto/SysIotModelFieldDto.java | 2 ++ .../equipment/domain/excel/SysIotModelFieldExcel.java | 1 + .../das/modules/equipment/domain/vo/SysIotModelFieldVo.java | 2 ++ .../com/das/modules/equipment/entity/SysIotModelField.java | 6 ++++++ .../equipment/service/impl/SysIotModelServiceImpl.java | 2 ++ 5 files changed, 13 insertions(+) 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)); } From d262e54a1ac1383f67bc9d7431415e21fff42fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E4=BA=91=E9=B9=8F?= Date: Tue, 19 Nov 2024 16:37:06 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E7=89=A9=E6=A8=A1=E5=9E=8B=EF=BC=9A?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=91=8A=E8=AD=A6=E7=B1=BB=E5=9E=8B=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=20=E6=97=A5=E5=BF=97=E7=AE=A1=E7=90=86=EF=BC=9A?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BE=E8=A1=A8x=E8=BD=B4=E3=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AD=97=E6=AE=B5=E8=BD=AC=E6=9E=9A=E4=B8=BE?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=20=E6=95=85=E9=9A=9C=E5=BD=95=E6=B3=A2?= =?UTF-8?q?=EF=BC=9A=E4=BF=AE=E6=94=B9=E5=9B=BE=E8=A1=A8x=E8=BD=B4?= =?UTF-8?q?=E3=80=81=E6=95=B0=E6=8D=AE=E5=AD=97=E6=AE=B5=E8=BD=AC=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/backend/deviceModel/request.ts | 7 +++- .../src/api/backend/logRecord/request.ts | 11 ++++++ .../src/api/backend/malfunction/request.ts | 11 ++++++ .../src/views/backend/auth/model/index.vue | 11 ++++++ .../src/views/backend/auth/model/type.ts | 2 + .../src/views/backend/logRecord/index.vue | 39 ++++++++++++++++--- .../src/views/backend/malfunction/index.vue | 39 ++++++++++++++++--- 7 files changed, 106 insertions(+), 14 deletions(-) diff --git a/ui/dasadmin/src/api/backend/deviceModel/request.ts b/ui/dasadmin/src/api/backend/deviceModel/request.ts index 04fdc47a..15acc000 100644 --- a/ui/dasadmin/src/api/backend/deviceModel/request.ts +++ b/ui/dasadmin/src/api/backend/deviceModel/request.ts @@ -48,7 +48,10 @@ export const delModelReq = (data: DelModelType) => { url: '/api/equipment/model/delete', method: 'post', data: data, - }) + }, + { + showErrorMessage: false + }) } export const getModelAttributeListReq = (data: GetModelAttributeType) => { @@ -156,7 +159,7 @@ export const getRealValueListReq = (data: { deviceId: string, attributes?: strin }) } -export const getRealValueRangeReq = (data: { startTime: number, endTime: number, devices: { deviceId: string, attributes?: string[] }[],interval?:string }) => { +export const getRealValueRangeReq = (data: { startTime: number, endTime: number, devices: { deviceId: string, attributes?: string[] }[], interval?: string }) => { return createAxios>({ url: '/api/data/history', method: 'post', diff --git a/ui/dasadmin/src/api/backend/logRecord/request.ts b/ui/dasadmin/src/api/backend/logRecord/request.ts index 10aec0c5..17959807 100644 --- a/ui/dasadmin/src/api/backend/logRecord/request.ts +++ b/ui/dasadmin/src/api/backend/logRecord/request.ts @@ -48,4 +48,15 @@ export const downloadFileReq = (data: { }, { reductDataFormat: false }) +} + +export const getFileKeyEnumsReq = (data: { + madeinfactory: string + model: string +}) => { + return createAxios>>({ + url: '/api/plc/queryPlcDesc', + method: 'post', + data + }) } \ No newline at end of file diff --git a/ui/dasadmin/src/api/backend/malfunction/request.ts b/ui/dasadmin/src/api/backend/malfunction/request.ts index 04ee1155..e0cb9e2e 100644 --- a/ui/dasadmin/src/api/backend/malfunction/request.ts +++ b/ui/dasadmin/src/api/backend/malfunction/request.ts @@ -49,4 +49,15 @@ export const downloadFileReq = (data: { }, { reductDataFormat: false }) +} + +export const getFileKeyEnumsReq = (data: { + madeinfactory: string + model: string +}) => { + return createAxios>>({ + url: '/api/fdr/queryFdrDesc', + method: 'post', + data + }) } \ No newline at end of file diff --git a/ui/dasadmin/src/views/backend/auth/model/index.vue b/ui/dasadmin/src/views/backend/auth/model/index.vue index 022a55d8..9a40f574 100644 --- a/ui/dasadmin/src/views/backend/auth/model/index.vue +++ b/ui/dasadmin/src/views/backend/auth/model/index.vue @@ -239,6 +239,11 @@ + + + + +
@@ -768,6 +773,11 @@ const attributeFormDataTypeOptions: { value: attributeTypeDataType }[] = [ { value: 'int' }, { value: 'bigint' }, ] +const attributeFormDataLevelOptions = [ + { value: 0, label: '提示' }, + { value: 1, label: '告警' }, + { value: 2, label: '故障' }, +] const originAttributeForm: AddModelAttributeType & UpdateModelAttributeType = { id: null, iotModelId: '', @@ -780,6 +790,7 @@ const originAttributeForm: AddModelAttributeType & UpdateModelAttributeType = { dataType: '', visible: true, unit: '', + level: undefined, revision: 1, createdBy: undefined, createdTime: undefined, diff --git a/ui/dasadmin/src/views/backend/auth/model/type.ts b/ui/dasadmin/src/views/backend/auth/model/type.ts index 41d66071..07bc9c4e 100644 --- a/ui/dasadmin/src/views/backend/auth/model/type.ts +++ b/ui/dasadmin/src/views/backend/auth/model/type.ts @@ -67,6 +67,7 @@ export enum ModelAttributeFieldsEnums { 'dataType' = '数据类型', 'visible' = '是否可见', 'unit' = '单位', + 'level' = '告警等级', 'revision' = '乐观锁', 'createdBy' = '创建人', 'createdTime' = '创建时间', @@ -111,6 +112,7 @@ export type AddModelAttributeType = { subSystem: string dataType: attributeTypeDataType | '' unit: string + level?: 0 | 1 | 2 visible: 0 | 1 | boolean revision: number createdBy?: string diff --git a/ui/dasadmin/src/views/backend/logRecord/index.vue b/ui/dasadmin/src/views/backend/logRecord/index.vue index 872c072a..49d957e6 100644 --- a/ui/dasadmin/src/views/backend/logRecord/index.vue +++ b/ui/dasadmin/src/views/backend/logRecord/index.vue @@ -136,7 +136,7 @@ import { ref, reactive, computed, onMounted, nextTick, onUnmounted } from 'vue' import { dayjs, ElMessage, FormInstance, TreeInstance } from 'element-plus' import { Search, Setting } from '@element-plus/icons-vue' -import { getLogRecordListReq, setConfigReq, previewFileReq, downloadFileReq } from '/@/api/backend/logRecord/request' +import { getLogRecordListReq, setConfigReq, previewFileReq, downloadFileReq, getFileKeyEnumsReq } from '/@/api/backend/logRecord/request' import { equipList } from '/@/api/backend/temperature/request' import * as echarts from 'echarts' import { tableItemData } from './type' @@ -189,15 +189,19 @@ const curTreeData = ref<{ id: string code: string options: any + model: string + madeinFactory: string children?: any[] }>({ label: '风机列表', id: '0', code: '0', + model: '', + madeinFactory: '', options: {}, }) -const handleNodeClick = (target: { label: string; id: string; code: string; options: any }) => { +const handleNodeClick = (target: { label: string; id: string; code: string; model: string; madeinFactory: string; options: any }) => { curTreeData.value = target if (target.id === '0') return getListForAirBlower() @@ -211,6 +215,8 @@ const getTreeDataList = () => { label: item.name, code: item.code, id: item.id, + model: item.model, + madeinFactory: item.madeinFactory, options: item.options ? JSON.parse(item.options).plcFormat : {}, } }) @@ -372,7 +378,9 @@ const setAirBlowerConfig = () => { const previewFileDialogVisible = ref(false) const readFile = (data: tableItemData) => { previewFileDialogVisible.value = true - getFileData(data.path) + getFileKeyEnum().finally(() => { + getFileData(data.path) + }) } const downloadFile = (data: tableItemData) => { downloadFileReq({ url: data.path }).then((res) => { @@ -415,6 +423,8 @@ const previewSearchTree = (val: string) => { const filterData = originPreviewTreeData.filter((item: any) => regex.test(item.label)) previewTreeData.value = filterData nextTick(() => { + // console.log('勾选-----',selectPreviewTree); + previewTreeRef.value?.setCheckedKeys(selectPreviewTree) }) } @@ -433,6 +443,7 @@ const handleCheckChange = (data: any, state: boolean) => { previewChartInstance && previewChartInstance.clear() if (state) { selectPreviewTree.push(data.key) + // console.log('添加-----',selectPreviewTree); } else { const index = selectPreviewTree.findIndex((item: string) => item === data.key) selectPreviewTree.splice(index, 1) @@ -491,7 +502,7 @@ const initPreviewChart = () => { grid: { top: 50, right: 23, - bottom: 10, + bottom: 50, left: 18, containLabel: true, }, @@ -517,7 +528,7 @@ const initPreviewChart = () => { color: '#4E5969', interval: 'auto', formatter: function (value: any) { - return value.slice(0, 10) + return value.slice(11) }, //rotate: 45 }, @@ -599,7 +610,7 @@ const getFileData = (url: string) => { }) } else { data.push({ - label: item, + label: fileKeyEnums?.[item] ?? item, key: item, isLeaf: true, }) @@ -612,6 +623,22 @@ const getFileData = (url: string) => { }) } +const fileKeyEnums: any = {} +const getFileKeyEnum = () => { + return new Promise((resolve) => { + getFileKeyEnumsReq({ + madeinfactory: curTreeData.value.madeinFactory, + model: curTreeData.value.model, + }).then((res) => { + if (res.success) { + res.data.forEach((item: any) => { + fileKeyEnums[item.variable] = item.description + }) + resolve(true) + } + }) + }) +} onMounted(() => { getTreeDataList().then((data: any) => { treeRef.value && treeRef.value.setCurrentKey(data.id, true) diff --git a/ui/dasadmin/src/views/backend/malfunction/index.vue b/ui/dasadmin/src/views/backend/malfunction/index.vue index cf76e8d6..69dbde95 100644 --- a/ui/dasadmin/src/views/backend/malfunction/index.vue +++ b/ui/dasadmin/src/views/backend/malfunction/index.vue @@ -139,7 +139,7 @@ import { ref, reactive, computed, onMounted, nextTick, onUnmounted } from 'vue' import { dayjs, ElMessage, FormInstance, TreeInstance } from 'element-plus' import { Search, Setting } from '@element-plus/icons-vue' -import { getMalFunctionListReq, setConfigReq, previewFileReq, downloadFileReq } from '/@/api/backend/malfunction/request' +import { getMalFunctionListReq, setConfigReq, previewFileReq, downloadFileReq, getFileKeyEnumsReq } from '/@/api/backend/malfunction/request' import { equipList } from '/@/api/backend/temperature/request' import * as echarts from 'echarts' import { tableItemData } from './type' @@ -191,16 +191,20 @@ const curTreeData = ref<{ label: string id: string code: string + model: string + madeinFactory: string options: any children?: any[] }>({ label: '风机列表', id: '0', code: '0', + model: '', + madeinFactory: '', options: {}, }) -const handleNodeClick = (target: { label: string; id: string; code: string; options: any }) => { +const handleNodeClick = (target: { label: string; id: string; code: string; model: string; madeinFactory: string; options: any }) => { curTreeData.value = target if (target.id === '0') return getListForAirBlower() @@ -214,6 +218,8 @@ const getTreeDataList = () => { label: item.name, code: item.code, id: item.id, + model: item.model, + madeinFactory: item.madeinFactory, options: item.options ? JSON.parse(item.options).fdrFormat : {}, } }) @@ -374,7 +380,9 @@ const setAirBlowerConfig = () => { const previewFileDialogVisible = ref(false) const readFile = (data: tableItemData) => { previewFileDialogVisible.value = true - getFileData(data.path) + getFileKeyEnum().finally(() => { + getFileData(data.path) + }) } const downloadFile = (data: tableItemData) => { downloadFileReq({ url: data.path }).then((res) => { @@ -499,7 +507,7 @@ const initPreviewChart = () => { grid: { top: 50, right: 23, - bottom: 10, + bottom: 50, left: 18, containLabel: true, }, @@ -525,7 +533,7 @@ const initPreviewChart = () => { color: '#4E5969', interval: 'auto', formatter: function (value: any) { - return value.slice(0, 10) + return value.slice(11) }, //rotate: 45 }, @@ -600,6 +608,8 @@ const getFileData = (url: string) => { previewChartData = res.data const attrName = Object.keys(res.data) const data: any = [] + console.log(fileKeyEnums); + attrName.forEach((item) => { if (item === 'TimeStamp') { previewChartData.TimeStamp = previewChartData.TimeStamp.map((item: any) => { @@ -607,7 +617,7 @@ const getFileData = (url: string) => { }) } else { data.push({ - label: item, + label: fileKeyEnums?.[item] ?? item, key: item, isLeaf: true, }) @@ -619,6 +629,23 @@ const getFileData = (url: string) => { }) } +const fileKeyEnums: any = {} +const getFileKeyEnum = () => { + return new Promise((resolve) => { + getFileKeyEnumsReq({ + madeinfactory: curTreeData.value.madeinFactory, + model: curTreeData.value.model, + }).then((res) => { + if (res.success) { + res.data.forEach((item: any) => { + fileKeyEnums[item.variable] = item.description + }) + resolve(true) + } + }) + }) +} + onMounted(() => { getTreeDataList().then((data: any) => { treeRef.value && treeRef.value.setCurrentKey(data.id, true) From 02ae80986ad16a9ce3116a755f0706fae252c662 Mon Sep 17 00:00:00 2001 From: geting <13585118195@163.com> Date: Tue, 19 Nov 2024 17:24:35 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E9=A3=8E=E6=9C=BA=E5=9E=8B=E5=8F=B7?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/theoreticalpowerCurve/request.ts | 70 +++ .../backend/theoreticalpowerCurve/index.vue | 427 +++++++++++++++--- 2 files changed, 427 insertions(+), 70 deletions(-) diff --git a/ui/dasadmin/src/api/backend/theoreticalpowerCurve/request.ts b/ui/dasadmin/src/api/backend/theoreticalpowerCurve/request.ts index 839d98e4..02fa797f 100644 --- a/ui/dasadmin/src/api/backend/theoreticalpowerCurve/request.ts +++ b/ui/dasadmin/src/api/backend/theoreticalpowerCurve/request.ts @@ -66,3 +66,73 @@ export function powerCurveQuery(madeinfactory: any, model: any) { method: 'GET', }) } + +export const importfdrData = (data: FormData, v: string) => { + const token = encrypt_aes(adminInfo.token, v) + return createAxios( + { + url: '/api/fdr/import', + method: 'POST', + data: data, + headers: { + 'Content-Type': 'multipart/form-data', + v, + token, + }, + }, + { customEncrypt: true } + ) +} + +// 导出 +export function exportfdrData(params: object = {}) { + return createAxios({ + url: '/api/fdr/export ', + method: 'POST', + data: params, + responseType: 'blob', + }) +} + +export const importplcData = (data: FormData, v: string) => { + const token = encrypt_aes(adminInfo.token, v) + return createAxios( + { + url: '/api/plc/import', + method: 'POST', + data: data, + headers: { + 'Content-Type': 'multipart/form-data', + v, + token, + }, + }, + { customEncrypt: true } + ) +} + +// 导出 +export function exportplcData(params: object = {}) { + return createAxios({ + url: '/api/plc/export ', + method: 'POST', + data: params, + responseType: 'blob', + }) +} + +export function queryFdrDesc(params: object = {}) { + return createAxios({ + url: '/api/fdr/queryFdrDesc', + method: 'POST', + data: params, + }) +} + +export function queryplcDesc(params: object = {}) { + return createAxios({ + url: '/api/plc/queryPlcDesc', + method: 'POST', + data: params, + }) +} diff --git a/ui/dasadmin/src/views/backend/theoreticalpowerCurve/index.vue b/ui/dasadmin/src/views/backend/theoreticalpowerCurve/index.vue index e1875d2a..e10fb44f 100644 --- a/ui/dasadmin/src/views/backend/theoreticalpowerCurve/index.vue +++ b/ui/dasadmin/src/views/backend/theoreticalpowerCurve/index.vue @@ -1,27 +1,21 @@