diff --git a/das/src/main/java/com/das/common/log/MdcExecutor.java b/das/src/main/java/com/das/common/log/MdcExecutor.java deleted file mode 100644 index 9faa956c..00000000 --- a/das/src/main/java/com/das/common/log/MdcExecutor.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.das.common.log; - -import lombok.extern.slf4j.Slf4j; -import org.slf4j.MDC; - -import java.util.concurrent.Executor; - -/** - * @author chenhaojie - * - */ -@Slf4j -public class MdcExecutor implements Executor { - - private final Executor executor; - - public MdcExecutor(Executor executor) { - this.executor = executor; - } - - @Override - public void execute(Runnable command) { - final String requestId = MDC.get("REQUEST_ID"); - executor.execute(() -> { - MDC.put("REQUEST_ID", requestId); - try { - command.run(); - } finally { - MDC.remove("REQUEST_ID"); - } - }); - } -} diff --git a/das/src/main/java/com/das/common/log/RequestIdUtils.java b/das/src/main/java/com/das/common/log/RequestIdUtils.java deleted file mode 100644 index 5aaba3a8..00000000 --- a/das/src/main/java/com/das/common/log/RequestIdUtils.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.das.common.log; - -import java.util.UUID; - -/** - * @author chenhaojie - * - */ -public class RequestIdUtils { - - private static final ThreadLocal requestIdHolder = new ThreadLocal<>(); - - private RequestIdUtils() { - } - - public static void generateRequestId() { - requestIdHolder.set(UUID.randomUUID()); - } - - public static void generateRequestId(UUID uuid) { - requestIdHolder.set(uuid); - } - - public static UUID getRequestId() { - return requestIdHolder.get(); - } - - public static void removeRequestId() { - requestIdHolder.remove(); - } - -} diff --git a/das/src/main/java/com/das/common/log/RequestLogInterceptor.java b/das/src/main/java/com/das/common/log/RequestLogInterceptor.java deleted file mode 100644 index 0ed962cc..00000000 --- a/das/src/main/java/com/das/common/log/RequestLogInterceptor.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.das.common.log; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.slf4j.MDC; -import org.springframework.util.StringUtils; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; - -import java.util.UUID; - -/** - * @author chenhaojie - * - */ -@Slf4j -public class RequestLogInterceptor implements HandlerInterceptor { - - - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { - - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { - String servletPath = request.getServletPath(); - - log.info("preHandle 后置处理----------"); - log.info("servletPath:{}", servletPath); - RequestIdUtils.removeRequestId(); - MDC.clear(); - } - - /** - * 获取RequestId - * 优先从header头获取,如果没有则自己生成 - * @return RequestId - */ - private String getRequestId(){ - // 因为如果有网关,则一般会从网关传递过来,所以优先从header头获取 - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if(attributes != null && StringUtils.hasText(attributes.getRequest().getHeader("x-request-id"))) { - HttpServletRequest request = attributes.getRequest(); - String requestId = request.getHeader("x-request-id"); - UUID uuid = UUID.fromString(requestId); - RequestIdUtils.generateRequestId(uuid); - return requestId; - } - UUID existUUID = RequestIdUtils.getRequestId(); - if(existUUID != null){ - return existUUID.toString(); - } - RequestIdUtils.generateRequestId(); - return RequestIdUtils.getRequestId().toString(); - } - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - String servletPath = request.getServletPath(); - // 生成RequestId - String requestId = this.getRequestId(); - // 配置日志文件打印 REQUEST_ID - MDC.put("REQUEST_ID", requestId); - - log.info("servletPath:{}", servletPath); - log.info("preHandle 前置处理----------"); - return true; - } -} diff --git a/das/src/main/java/com/das/modules/cache/service/impl/IotModelCacheImpl.java b/das/src/main/java/com/das/modules/cache/service/impl/IotModelCacheImpl.java index d548237e..fa302467 100644 --- a/das/src/main/java/com/das/modules/cache/service/impl/IotModelCacheImpl.java +++ b/das/src/main/java/com/das/modules/cache/service/impl/IotModelCacheImpl.java @@ -45,7 +45,8 @@ public class IotModelCacheImpl implements IotModelCache { @PreDestroy public void destroy(){ - + iotFieldsMap.clear(); + iotModelInfoIdMap.clear(); } @Override diff --git a/das/src/main/java/com/das/modules/calc/domain/entity/CalcModule.java b/das/src/main/java/com/das/modules/calc/domain/entity/CalcModule.java index fa4e9bdd..afa2be98 100644 --- a/das/src/main/java/com/das/modules/calc/domain/entity/CalcModule.java +++ b/das/src/main/java/com/das/modules/calc/domain/entity/CalcModule.java @@ -26,7 +26,7 @@ public class CalcModule { private Date updateTime; private String cron; - public static final CalcModule of(String content){ + public static CalcModule of(String content){ CalcModule calcModule = new CalcModule(); calcModule.setScript(content); try(BufferedReader reader = new BufferedReader(new StringReader(content))){ diff --git a/das/src/main/java/com/das/modules/calc/functions/FunctionWindSpeedFactor.java b/das/src/main/java/com/das/modules/calc/functions/FunctionWindSpeedFactor.java index ed108544..c7f98040 100644 --- a/das/src/main/java/com/das/modules/calc/functions/FunctionWindSpeedFactor.java +++ b/das/src/main/java/com/das/modules/calc/functions/FunctionWindSpeedFactor.java @@ -23,12 +23,10 @@ import java.util.Map; @Slf4j public class FunctionWindSpeedFactor extends AbstractFunction { - private DataService dataService = null; private CacheService cacheService = null; - public FunctionWindSpeedFactor(DataService dataService, CacheService cacheService) { - this.dataService = dataService; + public FunctionWindSpeedFactor(CacheService cacheService) { this.cacheService = cacheService; } diff --git a/das/src/main/java/com/das/modules/calc/service/CalcService.java b/das/src/main/java/com/das/modules/calc/service/CalcService.java index 3b1ed193..01994800 100644 --- a/das/src/main/java/com/das/modules/calc/service/CalcService.java +++ b/das/src/main/java/com/das/modules/calc/service/CalcService.java @@ -136,7 +136,7 @@ public class CalcService { FunctionOffsetDate offsetDate = new FunctionOffsetDate(); aviator.addFunction(offsetDate); - FunctionWindSpeedFactor windSpeedFactor = new FunctionWindSpeedFactor(dataService,cacheService); + FunctionWindSpeedFactor windSpeedFactor = new FunctionWindSpeedFactor(cacheService); aviator.addFunction(windSpeedFactor); FunctionIsOnline isOnline = new FunctionIsOnline(adminRedisTemplate, cacheService); diff --git a/das/src/main/java/com/das/modules/data/controller/DataController.java b/das/src/main/java/com/das/modules/data/controller/DataController.java index 76808959..7b24ded7 100644 --- a/das/src/main/java/com/das/modules/data/controller/DataController.java +++ b/das/src/main/java/com/das/modules/data/controller/DataController.java @@ -37,7 +37,8 @@ public class DataController { @PostMapping("/snapshot") public R>> querySnapshotValues(@RequestBody @Valid List param) { if (log.isDebugEnabled()){ - log.debug("/api/rtdbsvr/snapshot is calling"); + log.debug("/api/data/snapshot is calling"); + log.debug("request params: {}", param); } return R.success(dataService.querySnapshotValues(param)); } @@ -50,7 +51,8 @@ public class DataController { @PostMapping("/history") public R>>> queryTimeSeriesValues(@RequestBody @Valid TSValueQueryParam param) { if (log.isDebugEnabled()){ - log.debug("/api/rtdbsvr/timeseries is calling"); + log.debug("/api/data/history is calling"); + log.debug("request params: {}", param); } return R.success(dataService.queryTimeSeriesValues(param)); } @@ -63,7 +65,8 @@ public class DataController { @PostMapping("/windows") public R>>> queryWindowsValues(@RequestBody @Valid WindowValueQueryParam param) { if (log.isDebugEnabled()){ - log.debug("/api/rtdbsvr/timeseries is calling"); + log.debug("/api/data/windows is calling"); + log.debug("request params: {}", param); } return R.success(dataService.queryWindowsValues(param)); } diff --git a/das/src/main/java/com/das/modules/data/service/TDEngineService.java b/das/src/main/java/com/das/modules/data/service/TDEngineService.java index 172a5075..b8c09675 100644 --- a/das/src/main/java/com/das/modules/data/service/TDEngineService.java +++ b/das/src/main/java/com/das/modules/data/service/TDEngineService.java @@ -92,7 +92,7 @@ public class TDEngineService { log.info(sb.toString()); pstmt.executeUpdate(sb.toString()); } catch (Exception e) { - log.error("创建超级表失败,失败原因{}", e); + log.error("创建超级表失败", e); } } } catch (Exception ignored) { @@ -114,7 +114,7 @@ public class TDEngineService { log.info(sb.toString()); pstmt.executeUpdate(sb.toString()); } catch (Exception e) { - log.error("创建超级表失败,失败原因{}", e); + log.error("创建[计算量]超级表失败", e); } } catch (Exception ignored) { @@ -141,7 +141,7 @@ public class TDEngineService { try { pstmt.executeUpdate(sb.toString()); } catch (Exception e) { - log.error("新增超级表列失败:{},失败原因{}", sb, e); + log.error(String.format("新增超级表列失败:%s", sb.toString()), e); } } @@ -167,7 +167,7 @@ public class TDEngineService { try { pstmt.executeUpdate(sb.toString()); } catch (Exception e) { - log.error("删除超级表列失败:{},失败原因{}", sb, e); + log.error(String.format("删除超级表列失败:%s", sb.toString()), e); } } catch (Exception ignored) { @@ -189,7 +189,7 @@ public class TDEngineService { try { pstmt.executeUpdate(sb.toString()); } catch (Exception e) { - log.error("删除超级表失败:{},失败原因{}", sb, e); + log.error(String.format("删除超级表失败:%s", sb.toString()), e); } } catch (Exception ignored) { @@ -963,7 +963,7 @@ public class TDEngineService { Statement pstmt = conn.createStatement()) { pstmt.executeUpdate(sb.toString()); } catch (Exception e) { - log.error("新增超级表列失败:{},失败原因{}", sb, e); + log.error(String.format("新增超级表列失败:%s", sb.toString()), e); } } diff --git a/das/src/main/java/com/das/modules/data/service/impl/DataServiceImpl.java b/das/src/main/java/com/das/modules/data/service/impl/DataServiceImpl.java index 58ed550a..8bb1b9e2 100644 --- a/das/src/main/java/com/das/modules/data/service/impl/DataServiceImpl.java +++ b/das/src/main/java/com/das/modules/data/service/impl/DataServiceImpl.java @@ -123,7 +123,7 @@ public class DataServiceImpl implements DataService { } }); long end = System.currentTimeMillis(); - log.debug("读取快照{}个,耗时: {}秒", paramList.size(), (end - start) / 1000.0); + log.debug("querySnapshotValues {}个,耗时: {}秒", paramList.size(), (end - start) / 1000.0); return result; } @@ -149,7 +149,7 @@ public class DataServiceImpl implements DataService { result.putAll(values); } Long end = System.currentTimeMillis(); - log.debug("读取快照{}个,耗时: {}秒", param.getDevices().size(), (end-start)/ 1000.0); + log.debug("queryTimeSeriesValues {}个,耗时: {}秒", param.getDevices().size(), (end-start)/ 1000.0); return result; } @@ -178,7 +178,7 @@ public class DataServiceImpl implements DataService { result.putAll(values); } Long end = System.currentTimeMillis(); - log.debug("读取快照{}个,耗时: {}秒", param.getDevices().size(), (end-start)/ 1000.0); + log.debug("queryTimeSeriesValues {}个,耗时: {}秒", param.getDevices().size(), (end-start)/ 1000.0); return result; } diff --git a/das/src/main/java/com/das/modules/equipment/controller/EquipmentController.java b/das/src/main/java/com/das/modules/equipment/controller/EquipmentController.java index 4373ec1a..7fa6a9f7 100644 --- a/das/src/main/java/com/das/modules/equipment/controller/EquipmentController.java +++ b/das/src/main/java/com/das/modules/equipment/controller/EquipmentController.java @@ -7,8 +7,11 @@ import com.das.common.exceptions.ServiceException; import com.das.common.result.R; import com.das.common.utils.PageDataInfo; import com.das.modules.equipment.domain.dto.SysEquipmentDto; +import com.das.modules.equipment.domain.dto.SysGenExtPropsDto; import com.das.modules.equipment.domain.vo.EquipmentTypeVo; import com.das.modules.equipment.domain.vo.SysEquipmentVo; +import com.das.modules.equipment.entity.SysEquipmentDocs; +import com.das.modules.equipment.entity.SysGenExtProps; import com.das.modules.equipment.service.SysEquipmentService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -138,4 +141,63 @@ public class EquipmentController { sysEquipmentService.importSysEquipment(id, file); return R.success("导入成功"); } + + /** + * 新增设备附属属性 + * @return 所有附属属性 + */ + @PostMapping("/extProps/add") + public R addSysEquipmentExtProps(@RequestBody SysGenExtPropsDto sysGenExtPropsDto) { + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR.toString()); + if(!hasPermission){ + return R.fail("没有设备管理权限"); + } + return R.success(sysEquipmentService.creatSysEquipmentExtProps(sysGenExtPropsDto)); + } + + /** + * 更新设备附属属性 + * @return 所有附属属性 + */ + @PostMapping("/extProps/update") + public R updateSysEquipmentExtProps(@RequestBody SysGenExtPropsDto sysGenExtPropsDto) { + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR.toString()); + if(!hasPermission){ + return R.fail("没有设备管理权限"); + } + return R.success(sysEquipmentService.updateSysEquipmentExtProps(sysGenExtPropsDto)); + } + + /** + * 更新设备附属属性 + * @return 所有附属属性 + */ + @PostMapping("/extProps/query") + public R querySysEquipmentExtProps(@RequestBody SysGenExtPropsDto sysGenExtPropsDto) { + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR.toString()); + if(!hasPermission){ + return R.fail("没有设备管理权限"); + } + return R.success(sysEquipmentService.querySysEquipmentExtProps(sysGenExtPropsDto.getId())); + } + + @PostMapping("/extProps/delete") + public R deleteSysEquipmentExtProps(@RequestBody SysGenExtPropsDto sysGenExtPropsDto) { + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR.toString()); + if(!hasPermission){ + return R.fail("没有设备管理权限"); + } + sysEquipmentService.deleteSysEquipmentExtProps(sysGenExtPropsDto.getId()); + return R.success(); + } + + @RequestMapping(value = "/file/upload", method = RequestMethod.POST) + public R addFile(Long deviceId, String folderName, MultipartFile file) { + SysEquipmentDocs upload = sysEquipmentService.upload(deviceId, folderName, file); + return R.success(upload); + } } diff --git a/das/src/main/java/com/das/modules/equipment/domain/dto/SysGenExtPropsDto.java b/das/src/main/java/com/das/modules/equipment/domain/dto/SysGenExtPropsDto.java new file mode 100644 index 00000000..6f4201c1 --- /dev/null +++ b/das/src/main/java/com/das/modules/equipment/domain/dto/SysGenExtPropsDto.java @@ -0,0 +1,106 @@ +package com.das.modules.equipment.domain.dto; + +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 com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysGenExtPropsDto { + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + private String fanName; + + private String fanNumber; + + private String fanType; + + private String fanTypeDetails; + + private String pitchSystemModel; + + private String pitchSystemManufacturer; + + private String pitchSystemDetails; + + private String blade1Model; + + private String blade1Manufacturer; + + private String blade1Details; + + private String blade1BearingModel; + + private String blade1BearingManufacturer; + + private String blade1BearingDetails; + + private String blade2Model; + + private String blade2Manufacturer; + + private String blade2Details; + + private String blade2BearingModel; + + private String blade2BearingManufacturer; + + private String blade2BearingDetails; + + private String blade3Model; + + private String blade3Manufacturer; + + private String blade3Details; + + private String blade3BearingModel; + + private String blade3BearingManufacturer; + + private String blade3BearingDetails; + + private String mainBearingModel; + + private String mainBearingManufacturer; + + private String mainBearingDetails; + + private String gearboxModel; + + private String gearboxManufacturer; + + private String gearboxDetails; + + private String generatorModel; + + private String generatorManufacturer; + + private String generatorDetails; + + private String converterModel; + + private String converterManufacturer; + + private String converterDetails; + + private String mainControlSystemModel; + + private String mainControlSystemManufacturer; + + private String mainControlSystemSoftwareVersion; + + private String mainControlSystemSoftwareVersionDetails; + + private String towerBaseCabinetDetails; + + private String nacelleCabinetDetails; +} diff --git a/das/src/main/java/com/das/modules/equipment/entity/SysEquipmentDocs.java b/das/src/main/java/com/das/modules/equipment/entity/SysEquipmentDocs.java new file mode 100644 index 00000000..e4f3096f --- /dev/null +++ b/das/src/main/java/com/das/modules/equipment/entity/SysEquipmentDocs.java @@ -0,0 +1,36 @@ +package com.das.modules.equipment.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@TableName("sys_equipment_docs") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysEquipmentDocs { + + @TableId(value = "deviceid") + private Long deviceId; + + @TableField(value = "name") + private String name; + + @TableField(value = "url") + private String url; + /** + * 更新时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("update_time") + private Date updateTime; + +} diff --git a/das/src/main/java/com/das/modules/equipment/entity/SysGenExtProps.java b/das/src/main/java/com/das/modules/equipment/entity/SysGenExtProps.java new file mode 100644 index 00000000..5fa833fc --- /dev/null +++ b/das/src/main/java/com/das/modules/equipment/entity/SysGenExtProps.java @@ -0,0 +1,162 @@ +package com.das.modules.equipment.entity; + +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 com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@TableName("sys_gen_extprops") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysGenExtProps { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @TableField(value = "fan_name") + private String fanName; + + @TableField(value = "fan_Number") + private String fanNumber; + + @TableField(value = "fan_type") + private String fanType; + + @TableField(value = "fan_type_details") + private String fanTypeDetails; + + // Pitch System + @TableField(value = "pitch_system_model") + private String pitchSystemModel; + + @TableField(value = "pitch_system_manufacturer") + private String pitchSystemManufacturer; + + @TableField(value = "pitch_system_details") + private String pitchSystemDetails; + + // Blade 1 + @TableField(value = "blade1_model") + private String blade1Model; + + @TableField(value = "blade1_manufacturer") + private String blade1Manufacturer; + + @TableField(value = "blade1_details") + private String blade1Details; + + @TableField(value = "blade1_bearing_model") + private String blade1BearingModel; + + @TableField(value = "blade1_bearing_manufacturer") + private String blade1BearingManufacturer; + + @TableField(value = "blade1_bearing_details") + private String blade1BearingDetails; + + // Blade 2 + @TableField(value = "blade2_model") + private String blade2Model; + + @TableField(value = "blade2_manufacturer") + private String blade2Manufacturer; + + @TableField(value = "blade2_details") + private String blade2Details; + + @TableField(value = "blade2_bearing_model") + private String blade2BearingModel; + + @TableField(value = "blade2_bearing_manufacturer") + private String blade2BearingManufacturer; + + @TableField(value = "blade2_bearing_details") + private String blade2BearingDetails; + + // Blade 3 + @TableField(value = "blade3_model") + private String blade3Model; + + @TableField(value = "blade3_manufacturer") + private String blade3Manufacturer; + + @TableField(value = "blade3_details") + private String blade3Details; + + @TableField(value = "blade3_bearing_model") + private String blade3BearingModel; + + @TableField(value = "blade3_bearing_manufacturer") + private String blade3BearingManufacturer; + + @TableField(value = "blade3_bearing_details") + private String blade3BearingDetails; + + // Main Bearing + @TableField(value = "main_bearing_model") + private String mainBearingModel; + + @TableField(value = "main_bearing_manufacturer") + private String mainBearingManufacturer; + + @TableField(value = "main_bearing_details") + private String mainBearingDetails; + + // Gearbox + @TableField(value = "gearbox_model") + private String gearboxModel; + + @TableField(value = "gearbox_manufacturer") + private String gearboxManufacturer; + + @TableField(value = "gearbox_details") + private String gearboxDetails; + + // Generator + @TableField(value = "generator_model") + private String generatorModel; + + @TableField(value = "generator_manufacturer") + private String generatorManufacturer; + + @TableField(value = "generator_details") + private String generatorDetails; + + // Converter + @TableField(value = "converter_model") + private String converterModel; + + @TableField(value = "converter_manufacturer") + private String converterManufacturer; + + @TableField(value = "converter_details") + private String converterDetails; + + // Main Control System + @TableField(value = "main_control_system_model") + private String mainControlSystemModel; + + @TableField(value = "main_control_system_manufacturer") + private String mainControlSystemManufacturer; + + @TableField(value = "main_control_system_software_version") + private String mainControlSystemSoftwareVersion; + + @TableField(value = "main_control_system_software_version_details") + private String mainControlSystemSoftwareVersionDetails; + + // Cabinet Details + + @TableField(value = "tower_base_cabinet_details") + private String towerBaseCabinetDetails; + + @TableField(value = "nacelle_cabinet_details") + private String nacelleCabinetDetails; +} diff --git a/das/src/main/java/com/das/modules/equipment/mapper/SysEquipmentDocsMapper.java b/das/src/main/java/com/das/modules/equipment/mapper/SysEquipmentDocsMapper.java new file mode 100644 index 00000000..9ec6ce93 --- /dev/null +++ b/das/src/main/java/com/das/modules/equipment/mapper/SysEquipmentDocsMapper.java @@ -0,0 +1,10 @@ +package com.das.modules.equipment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.equipment.entity.SysEquipmentDocs; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysEquipmentDocsMapper extends BaseMapper { + +} diff --git a/das/src/main/java/com/das/modules/equipment/mapper/SysGenExtPropsMapper.java b/das/src/main/java/com/das/modules/equipment/mapper/SysGenExtPropsMapper.java new file mode 100644 index 00000000..9ea8a705 --- /dev/null +++ b/das/src/main/java/com/das/modules/equipment/mapper/SysGenExtPropsMapper.java @@ -0,0 +1,10 @@ +package com.das.modules.equipment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.equipment.entity.SysGenExtProps; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysGenExtPropsMapper extends BaseMapper { + +} diff --git a/das/src/main/java/com/das/modules/equipment/service/SysEquipmentService.java b/das/src/main/java/com/das/modules/equipment/service/SysEquipmentService.java index 13543df9..b85657e9 100644 --- a/das/src/main/java/com/das/modules/equipment/service/SysEquipmentService.java +++ b/das/src/main/java/com/das/modules/equipment/service/SysEquipmentService.java @@ -2,7 +2,10 @@ package com.das.modules.equipment.service; import com.das.common.utils.PageDataInfo; import com.das.modules.equipment.domain.dto.SysEquipmentDto; +import com.das.modules.equipment.domain.dto.SysGenExtPropsDto; import com.das.modules.equipment.domain.vo.SysEquipmentVo; +import com.das.modules.equipment.entity.SysEquipmentDocs; +import com.das.modules.equipment.entity.SysGenExtProps; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; @@ -28,4 +31,13 @@ public interface SysEquipmentService { void importSysEquipment(String parentEquipmentId,MultipartFile file) throws IOException, ParseException; + SysGenExtProps creatSysEquipmentExtProps(SysGenExtPropsDto sysGenExtPropsDto); + + SysGenExtProps updateSysEquipmentExtProps(SysGenExtPropsDto sysGenExtPropsDto); + + void deleteSysEquipmentExtProps(Long id); + + SysGenExtProps querySysEquipmentExtProps(Long id); + + SysEquipmentDocs upload(Long deviceId, String folderName, MultipartFile file); } diff --git a/das/src/main/java/com/das/modules/equipment/service/impl/SysEquipmentServiceImpl.java b/das/src/main/java/com/das/modules/equipment/service/impl/SysEquipmentServiceImpl.java index 80b14e14..2474085f 100644 --- a/das/src/main/java/com/das/modules/equipment/service/impl/SysEquipmentServiceImpl.java +++ b/das/src/main/java/com/das/modules/equipment/service/impl/SysEquipmentServiceImpl.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.common.config.SessionUtil; import com.das.common.constant.EquipmentTypeIds; +import com.das.common.constant.FileConstants; import com.das.common.exceptions.ServiceException; import com.das.common.utils.BeanCopyUtils; import com.das.common.utils.PageDataInfo; @@ -17,16 +18,26 @@ import com.das.common.utils.PageQuery; import com.das.common.utils.SequenceUtils; import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.auth.mapper.SysOrgMapper; +import com.das.modules.cache.domain.DeviceInfoCache; import com.das.modules.cache.service.CacheService; +import com.das.modules.cache.service.EquipmentCache; import com.das.modules.data.service.TDEngineService; import com.das.modules.data.service.impl.DataServiceImpl; import com.das.modules.equipment.domain.dto.SysEquipmentDto; +import com.das.modules.equipment.domain.dto.SysGenExtPropsDto; import com.das.modules.equipment.domain.excel.SysEquipmentExcel; import com.das.modules.equipment.domain.vo.SysEquipmentVo; import com.das.modules.equipment.entity.SysEquipment; +import com.das.modules.equipment.entity.SysEquipmentDocs; +import com.das.modules.equipment.entity.SysGenExtProps; +import com.das.modules.equipment.mapper.SysEquipmentDocsMapper; import com.das.modules.equipment.mapper.SysEquipmentMapper; +import com.das.modules.equipment.mapper.SysGenExtPropsMapper; import com.das.modules.equipment.mapper.SysIotModelMapper; import com.das.modules.equipment.service.SysEquipmentService; +import com.das.modules.fdr.config.MinioProperties; +import com.das.modules.fdr.service.MinioViewsServcie; +import jakarta.annotation.Resource; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -73,6 +84,21 @@ public class SysEquipmentServiceImpl implements SysEquipmentService { @Autowired private TDEngineService tdEngineService; + @Autowired + private SysGenExtPropsMapper sysGenExtPropsMapper; + + @Autowired + private MinioViewsServcie minioViewsServcie; + + @Resource + private MinioProperties minioAutoProperties; + + @Autowired + private EquipmentCache equipmentCache; + + @Autowired + private SysEquipmentDocsMapper sysEquipmentDocsMapper; + @Override public SysEquipmentVo creatSysEquipment(SysEquipmentDto sysEquipmentDto) { //去除空格 @@ -358,4 +384,56 @@ public class SysEquipmentServiceImpl implements SysEquipmentService { } } + + @Override + public SysGenExtProps creatSysEquipmentExtProps(SysGenExtPropsDto sysGenExtPropsDto) { + if (sysGenExtPropsDto.getId() == null){ + throw new ServiceException("设备id不能为空"); + } + SysGenExtProps sysEquipmentExtProps = new SysGenExtProps(); + BeanCopyUtils.copy(sysGenExtPropsDto, sysEquipmentExtProps); + sysGenExtPropsMapper.insert(sysEquipmentExtProps); + return sysEquipmentExtProps; + } + + @Override + public SysGenExtProps updateSysEquipmentExtProps(SysGenExtPropsDto sysGenExtPropsDto) { + if (sysGenExtPropsDto.getId() == null){ + throw new ServiceException("设备id不能为空"); + } + SysGenExtProps sysEquipmentExtProps = new SysGenExtProps(); + BeanCopyUtils.copy(sysGenExtPropsDto, sysEquipmentExtProps); + sysGenExtPropsMapper.updateById(sysEquipmentExtProps); + return sysEquipmentExtProps; + } + + @Override + public void deleteSysEquipmentExtProps(Long id) { + sysGenExtPropsMapper.deleteById(id); + } + + @Override + public SysGenExtProps querySysEquipmentExtProps(Long id) { + return sysGenExtPropsMapper.selectById(id); + } + + @Override + public SysEquipmentDocs upload(Long deviceId, String folderName, MultipartFile file) { + DeviceInfoCache deviceInfoCache = equipmentCache.getDeviceInfoCacheById(deviceId); + String parent = FileConstants.FILE_SEPARATOR +"风机图片"+ FileConstants.FILE_SEPARATOR + deviceInfoCache.getDeviceCode(); + String url = minioViewsServcie.upload(minioAutoProperties.getPublicBucket(), parent, folderName, file); + String fileName = url.substring(url.lastIndexOf("/")); + SysEquipmentDocs sysEquipmentDocs = new SysEquipmentDocs(); + sysEquipmentDocs.setDeviceId(deviceId); + sysEquipmentDocs.setName(fileName); + sysEquipmentDocs.setUrl(url); + sysEquipmentDocs.setUpdateTime(new Date()); + SysEquipmentDocs sysEquipmentDocsInfo = sysEquipmentDocsMapper.selectById(deviceId); + if (sysEquipmentDocsInfo == null){ + sysEquipmentDocsMapper.insert(sysEquipmentDocs); + }else { + sysEquipmentDocsMapper.updateById(sysEquipmentDocs); + } + return sysEquipmentDocs; + } } 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 40c56d9a..7e0a3b6c 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 @@ -150,9 +150,7 @@ public class SysIotModelServiceImpl implements SysIotModelService { PageQuery pageQuery = new PageQuery(); pageQuery.setPageNum(sysIotModelFieldDto.getPageNum()); pageQuery.setPageSize(sysIotModelFieldDto.getPageSize()); - log.info("查询物模型属性参数:{}",sysIotModelFieldDto); IPage iPage = sysIotModelFieldMapper.querySysIotModelFieldList(pageQuery.build(), sysIotModelFieldDto); - log.info("查询物模型属性返回总数{},:{}",iPage.getTotal(),iPage.getRecords()); return PageDataInfo.build(iPage.getRecords(), iPage.getTotal()); } diff --git a/das/src/main/java/com/das/modules/fdr/config/MinioConfig.java b/das/src/main/java/com/das/modules/fdr/config/MinioConfig.java index 92941ef5..4b93d1da 100644 --- a/das/src/main/java/com/das/modules/fdr/config/MinioConfig.java +++ b/das/src/main/java/com/das/modules/fdr/config/MinioConfig.java @@ -42,6 +42,14 @@ public class MinioConfig { createBucket(bucketName, minioClient); } } + String publicBucket = minioAutoProperties.getPublicBucket(); + if (!checkBucket(publicBucket, minioClient)) { + log.info("文件public桶[{}]不存在, 开始检查是否可以新建桶", publicBucket); + if (minioAutoProperties.isCreateBucket()) { + log.info("createBucket为{},开始新建public文件桶", minioAutoProperties.isCreateBucket()); + createBucket(publicBucket, minioClient); + } + } log.info("文件桶[{}]已存在, minio客户端连接成功!", bucketName); } else { throw new RuntimeException("桶不存在, 请检查桶名称是否正确或者将checkBucket属性改为false"); diff --git a/das/src/main/java/com/das/modules/fdr/config/MinioProperties.java b/das/src/main/java/com/das/modules/fdr/config/MinioProperties.java index 3ce7cfed..ea13bc90 100644 --- a/das/src/main/java/com/das/modules/fdr/config/MinioProperties.java +++ b/das/src/main/java/com/das/modules/fdr/config/MinioProperties.java @@ -40,6 +40,9 @@ public class MinioProperties { @Value("${minio.bucket}") private String bucket; + @Value("${minio.publicBucket}") + private String publicBucket; + /** * 桶不在的时候是否新建桶 */ diff --git a/das/src/main/java/com/das/modules/fdr/service/MinioViewsServcie.java b/das/src/main/java/com/das/modules/fdr/service/MinioViewsServcie.java index 0a81db32..ac85e1b8 100644 --- a/das/src/main/java/com/das/modules/fdr/service/MinioViewsServcie.java +++ b/das/src/main/java/com/das/modules/fdr/service/MinioViewsServcie.java @@ -78,7 +78,7 @@ public class MinioViewsServcie { } - public String upload(String path, String folderName,MultipartFile file) { + public String upload(String bucketName, String path, String folderName,MultipartFile file) { String targetFile = null; try { // 上传一个空对象来模拟文件夹 @@ -87,14 +87,14 @@ public class MinioViewsServcie { ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]); minioClient.putObject( PutObjectArgs.builder() - .bucket(minioProperties.getBucket()) + .bucket(bucketName) .object(targetFile) .stream(bais, 0, -1) .build()); } else { targetFile= path +"/" + file.getOriginalFilename(); - uploadFile(minioProperties.getBucket(), file, targetFile, "application/octet-stream"); + uploadFile(bucketName, file, targetFile, "application/octet-stream"); } } catch (Exception e) { throw new RuntimeException(e); @@ -123,7 +123,7 @@ public class MinioViewsServcie { .stream(inputStream, inputStream.available(), -1) .build()); }catch (Exception e){ - log.error("minio文件上传失败{}", e); + log.error("minio文件上传失败", e); } } 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 a283bfe2..56421928 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 @@ -14,6 +14,7 @@ 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.SysFaultCodeDict; import com.das.modules.fdr.domain.SysFaultRecordingDesc; @@ -26,6 +27,7 @@ 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.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -52,6 +54,9 @@ public class FaultRecorderServiceImpl implements FaultRecorderService { @Autowired MinioClient minioClient; + @Resource + private MinioProperties minioAutoProperties; + @Autowired private SysEquipmentMapper sysEquipmentMapper; @@ -82,7 +87,7 @@ public class FaultRecorderServiceImpl implements FaultRecorderService { @Override public String upload(String parent, String folderName, MultipartFile file) { - return minioViewsServcie.upload(parent, folderName, file); + return minioViewsServcie.upload(minioAutoProperties.getBucket(), parent, folderName, file); } @Override @@ -194,7 +199,7 @@ public class FaultRecorderServiceImpl implements FaultRecorderService { resultMap = parseFile(fileStream, fdrFormatVo.getTimeFormat(), fdrFormatVo.getDelimiter(), fdrFormatVo.getValidStartLine()); } catch (Exception e) { - log.error("文件解析异常:{}",e); + log.error("文件解析异常",e); throw new ServiceException("文件解析异常,请检查配置"); } return resultMap; @@ -238,7 +243,7 @@ public class FaultRecorderServiceImpl implements FaultRecorderService { } stringListMap = parseDataCurve(result, timeFormat); } catch (Exception e) { - log.error("文件解析失败{}", e); + log.error("文件解析失败", e); throw new ServiceException("文件解析失败"); } return stringListMap; diff --git a/das/src/main/java/com/das/modules/node/service/impl/NodeMessageServiceImpl.java b/das/src/main/java/com/das/modules/node/service/impl/NodeMessageServiceImpl.java index e64b4fe7..f8c5e684 100644 --- a/das/src/main/java/com/das/modules/node/service/impl/NodeMessageServiceImpl.java +++ b/das/src/main/java/com/das/modules/node/service/impl/NodeMessageServiceImpl.java @@ -407,7 +407,7 @@ public class NodeMessageServiceImpl extends TextWebSocketHandler implements Node try { tdEngineService.updateDeviceEventValues(valueList); } catch (Exception e) { - log.error("事件信息存入Td失败,失败原因{}", e); + log.error("事件信息存入Td失败,失败原因", e); } } diff --git a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java index f5031917..090bf0c2 100644 --- a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java +++ b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java @@ -551,7 +551,7 @@ public class SysNodeServiceImpl implements SysNodeService { }) .anyMatch(order -> !orderSet.add(order)); }catch (Exception e){ - log.error("校验order不重复失败:{}",e); + log.error("校验order不重复失败",e); } return orderRepeated; } 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 843a7f67..8b1721fd 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 @@ -86,7 +86,7 @@ public class PlcLogsServiceImpl implements PlcLogService { resultMap = parseFile(fileStream, fdrFormatVo.getTimeFormat(), fdrFormatVo.getDelimiter(), fdrFormatVo.getValidStartLine()); } catch (Exception e) { - log.error("文件解析异常:{}",e); + log.error("文件解析异常",e); throw new ServiceException("文件解析异常,请检查配置"); } return resultMap; @@ -162,7 +162,7 @@ public class PlcLogsServiceImpl implements PlcLogService { } stringListMap = parseDataCurve(result, timeFormat); } catch (Exception e) { - log.error("文件解析失败{}", e); + log.error("文件解析失败", e); throw new ServiceException("文件解析失败"); } return stringListMap; diff --git a/das/src/main/resources/application.yml b/das/src/main/resources/application.yml index 8c8f6e94..ed5945e9 100644 --- a/das/src/main/resources/application.yml +++ b/das/src/main/resources/application.yml @@ -109,5 +109,6 @@ tdengine: minio: url: http://192.168.109.187:9000 bucket: das + publicBucket: das-public accessKey: das secretKey: zaq12WSX \ No newline at end of file diff --git a/ui/dasadmin/src/lang/common/zh-cn/alarm.ts b/ui/dasadmin/src/lang/common/zh-cn/alarm.ts index dcca6c6f..f892d876 100644 --- a/ui/dasadmin/src/lang/common/zh-cn/alarm.ts +++ b/ui/dasadmin/src/lang/common/zh-cn/alarm.ts @@ -1,6 +1,7 @@ export default { select: '请选择', selectDate: '选择日期时间', + firstTriggeredCode: '首触故障码', type: '类别', alarmTime: '告警时间', } diff --git a/ui/dasadmin/src/stores/faults.ts b/ui/dasadmin/src/stores/faults.ts new file mode 100644 index 00000000..35a36073 --- /dev/null +++ b/ui/dasadmin/src/stores/faults.ts @@ -0,0 +1,18 @@ +import { defineStore } from 'pinia' + +import type { Faults } from '/@/stores/interface' +export const useFaultsStore = defineStore('faults', { + state: (): Faults => ({ + data: {}, + keys: [] + }), + actions: { + setData(data: Faults['data']) { + this.data = data + }, + setKeys(keys: string[]) { + this.keys = keys + } + }, + persist: true +}) diff --git a/ui/dasadmin/src/stores/interface/index.ts b/ui/dasadmin/src/stores/interface/index.ts index 41d4e7d9..e3c81b23 100644 --- a/ui/dasadmin/src/stores/interface/index.ts +++ b/ui/dasadmin/src/stores/interface/index.ts @@ -135,3 +135,9 @@ export interface Enums { } keys: string[] } +export interface Faults { + data: { + [key: string]: { [k: string]: string } + } + keys: string[] +} diff --git a/ui/dasadmin/src/views/backend/alarms/index.vue b/ui/dasadmin/src/views/backend/alarms/index.vue index d3025b19..12865d49 100644 --- a/ui/dasadmin/src/views/backend/alarms/index.vue +++ b/ui/dasadmin/src/views/backend/alarms/index.vue @@ -22,10 +22,22 @@ :placeholder="t('alarm.select') + t('airBlower.airBlowerNumber')" class="alarmSelect" clearable + @change="handleairBlowerChange" >
+
{{ t('alarm.firstTriggeredCode') }}
+ + + +
{{ t('alarm.type') }}
@@ -156,7 +168,7 @@ const getFormattedDate = (offset: number) => { // 风机编号 const airBlowerNumberValue = ref('') -const airBlowerList = ref([{ label: '', value: '' }]) +const airBlowerList = ref([{ label: '', value: '', model: '', madeinFactory: '' }]) // 类别 const alarmTypeValue = ref(2) const alarmTypes = ref([ @@ -164,6 +176,8 @@ const alarmTypes = ref([ { label: '告警', value: 1 }, { label: '提示', value: 0 }, ]) +const firstTriggeredCode = ref('') +const firstTriggeredCodes: any = ref([]) const isLoading = ref(false) const searchOperate = () => { isLoading.value = true @@ -189,6 +203,7 @@ const searchalarms = (): GetAlarmsTableParam => { deviceCode: deviceCode, pageNum: paginationOptions.current, pageSize: paginationOptions.pageSize, + firstTriggeredCode: firstTriggeredCode.value, } } @@ -207,28 +222,27 @@ const getcurrentPage = () => { const getalarmsList = async () => { const transparams = searchalarms() - console.log('🚀 ~ getalarmsList ~ transparams:', transparams) - getAlarmListReq(transparams).then((res: any) => { - isLoading.value = false - if (res.code == 200) { - paginationOptions.total = res.total - alarmsTableData.value = res.rows.map((item: any) => { - console.log('🚀 ~ alarmsTableData.value=res.rows.map ~ item:', item) - const descriptions = descriptionMap.value[`${item.madeinFactory}_${item.model}`] || {} - return { - ...item, - eventTimeFormate: timestampToTime(item.eventTime), - codeDescriptions: descriptions[item.firstTriggeredCode] || item.firstTriggeredCode, - } - }) - } else { - ElMessage.error(res.msg ?? '查询失败') - } - }) - // .catch((err) => { - // isLoading.value = false - // ElMessage.error(err ?? '查询失败') - // }) + getAlarmListReq(transparams) + .then((res: any) => { + isLoading.value = false + if (res.code == 200) { + paginationOptions.total = res.total + alarmsTableData.value = res.rows.map((item: any) => { + const descriptions = descriptionMap.value[`${item.madeinFactory}_${item.model}`] || {} + return { + ...item, + eventTimeFormate: timestampToTime(item.eventTime), + codeDescriptions: descriptions[item.firstTriggeredCode] || item.firstTriggeredCode, + } + }) + } else { + ElMessage.error(res.msg ?? '查询失败') + } + }) + .catch((err) => { + isLoading.value = false + ElMessage.error(err ?? '查询失败') + }) } const descriptionMap = computed(() => { @@ -239,8 +253,6 @@ const descriptionMap = computed(() => { return acc }, {}) }) - console.log('🚀 ~ map[item.key]=item.value.reduce ~ map:', map) - return map }) @@ -322,54 +334,64 @@ const getDateRange = (type: 'week' | 'month') => { } } +const handleairBlowerChange = (value: any) => { + if (value) { + const selectObj: any = airBlowerList.value.find((item) => { + return item.value == value + }) + firstTriggeredCode.value = '' + firstTriggeredCodes.value = faultCodeMap[`${selectObj.madeinFactory}_${selectObj.model}`] + } else { + firstTriggeredCode.value = '' + firstTriggeredCodes.value = faultCodeMap[`${airBlowerList.value[0].madeinFactory}_${airBlowerList.value[0].model}`] + } +} + const faultCodeMap: any = {} -onMounted(() => { - equipList({ - // orgId: adminInfo.orgid, - objectType: 10002, - }).then((res) => { + +onMounted(async () => { + try { + const res = await equipList({ + objectType: 10002, + }) if (res.code == 200) { airBlowerList.value = res.data.map((item: any) => { return { label: item.name, value: item.code, + madeinFactory: item.madeinFactory, + model: item.model, } }) - getalarmsList() - } - }) - theoreticalpowerCurveList() - .then((res: any) => { - if (res.code == 200) { - paginationOptions.total = res.total - res.rows.forEach((item: any, index: number) => { - getfaultCodeDict(item) - }) + const theoreticalRes = await theoreticalpowerCurveList() + if (theoreticalRes.code == 200) { + await getfaultCodeDict(theoreticalRes.rows) + firstTriggeredCodes.value = faultCodeMap[`${airBlowerList.value[0].madeinFactory}_${airBlowerList.value[0].model}`] + console.log(firstTriggeredCodes.value) } else { - ElMessage.error(res.msg ?? '查询失败') + ElMessage.error(theoreticalRes.msg ?? '查询失败') } - }) - .catch((err) => { - ElMessage.error(err?.response?.data?.msg ?? '查询失败') - }) + } + } catch (err) { + ElMessage.error(err ?? '查询失败') + } }) -const getfaultCodeDict = (data: any) => { - queryfaultCodeDict({ madeinfactory: data.madeinfactory, model: data.model }).then((res: any) => { +const getfaultCodeDict = async (data: any) => { + const promises = data.map(async (item: any) => { + const res = await queryfaultCodeDict({ madeinfactory: item.madeinfactory, model: item.model }) if (res.code == 200) { - const deflautList: any = [] - res.data.forEach((item: any) => { - deflautList.push({ - code: item.code, - description: item.description, - }) - }) - faultCodeMap[`${data.madeinfactory}_${data.model}`] = deflautList + const deflautList = res.data.map((faultItem: any) => ({ + code: faultItem.code, + description: faultItem.description, + })) + faultCodeMap[`${item.madeinfactory}_${item.model}`] = deflautList } else { ElMessage.warning('查询失败') } }) + await Promise.all(promises) } const openDefalt = (row: any) => { @@ -414,11 +436,14 @@ $paginationHeight: 32px; align-items: center; // width: 320px; .alarmSelect { - width: 200px; + width: 150px; :deep(.el-select__wrapper) { height: 40px; } } + .firstTriggeredCodeSelect { + width: 220px; + } } } .mainMain { diff --git a/ui/dasadmin/src/views/backend/alarms/type.ts b/ui/dasadmin/src/views/backend/alarms/type.ts index 0978d111..20f262d3 100644 --- a/ui/dasadmin/src/views/backend/alarms/type.ts +++ b/ui/dasadmin/src/views/backend/alarms/type.ts @@ -26,6 +26,7 @@ export type GetAlarmsTableParam = { eventLevel?: string | number | null pageNum?: Number pageSize?: Number + firstTriggeredCode: string | number | null } export enum AlarmsFieldsEnums { diff --git a/ui/dasadmin/src/views/backend/home/home.vue b/ui/dasadmin/src/views/backend/home/home.vue index 4364a6fe..1c9f11ff 100644 --- a/ui/dasadmin/src/views/backend/home/home.vue +++ b/ui/dasadmin/src/views/backend/home/home.vue @@ -58,16 +58,18 @@ import { useRoute } from 'vue-router' import { getParamList } from '/@/api/backend/SystemParam/request' import { queryfaultCodeDict } from '/@/api/backend/theoreticalpowerCurve/request' import { useEnumStore } from '/@/stores/enums' +import { useFaultsStore } from '/@/stores/faults' import {equipList} from "/@/api/backend/realData/request"; const route = useRoute() const enumStore = useEnumStore() +const faultCodeDict = useFaultsStore() const d = new Date() const { t } = useI18n() let timer: any = null let myTable = ref() -const windList=ref([]) + const overviewSlotData= ref('') @@ -235,13 +237,17 @@ const StatusListData = () => { let color:any='' const state = getRealTimeState(item.attributeMap) let firsttriggeredcode=item.attributeMap.firsttriggeredcode + const key = `${item.madeinFactory}-${item.model}`; if (enumStore.keys.includes('FirstTriggeredCode')) { firsttriggeredcode = enumStore.data['FirstTriggeredCode'][firsttriggeredcode] } - /*if (malFunctionKeys.includes('FirstTriggeredCode')) { - firsttriggeredcode = malFunctionEnums?.[firsttriggeredcode] ?? firsttriggeredcode + if (faultCodeDict.keys.includes(key)) { + if (firsttriggeredcode == 0) { + firsttriggeredcode = ''; + } else { + firsttriggeredcode = faultCodeDict.data[key][firsttriggeredcode] ?? ''; + } } -*/ paramColorData.value.forEach((item, index) => { if (item.state == state) { color = item.color @@ -345,7 +351,6 @@ const StatusListData = () => { locked: item.attributeMap.locked, irotorspeed: item.attributeMap.irotorspeed, firsttriggeredcode:firsttriggeredcode, - //firsttriggeredcode:item.attributeMap.firsttriggeredcode, }, } }) @@ -358,36 +363,34 @@ const StatusListData = () => { } }) } -let malFunctionEnums: any = {} +// 添加响应式属性以存储故障代码字典 +/*const malFunctionEnums = ref<{ [key: string]: { [code: string]: string } }>({}); -/*const requestedParams = new Set(); +const requestedParams = new Set(); +const failedRequests = new Set(); const fetchData = async (item: any) => { - // 创建一个唯一的键来标识参数组合 const key = `${item.madeinFactory}-${item.model}`; - // 检查这个键是否已经在 Set 中 if (requestedParams.has(key)) { - console.log('Duplicate request detected, skipping...'); return; } - // 将键添加到 Set 中 requestedParams.add(key); try { - console.log({ madeinfactory: item.madeinFactory, model: item.model }) const response = await queryfaultCodeDict({ madeinfactory: item.madeinFactory, model: item.model }); if (response.code === 200) { const data: any = {}; response.data.forEach((item: any) => { data[item.code] = item.description; }); - malFunctionEnums = data; + malFunctionEnums.value[key] = data; } else { console.warn('查询故障代码字典失败:', response.message); + failedRequests.add(key); } } catch (error) { - console.error('请求出错:', error); + failedRequests.add(key); } };*/ @@ -428,14 +431,6 @@ onMounted(() => { res.data.map((item: any) => { deviceCode.value.push(item.code) }) - windList.value=res.data.map((item: any) => { - //fetchData(item) - return { - madeinfactory:item.madeinFactory, - model: item.model ?? '-', - } - }) - //getMalfunctionEnums() }) overviewList() diff --git a/ui/dasadmin/src/views/backend/home/windMatrixpage.vue b/ui/dasadmin/src/views/backend/home/windMatrixpage.vue index e2434b8e..700c92b4 100644 --- a/ui/dasadmin/src/views/backend/home/windMatrixpage.vue +++ b/ui/dasadmin/src/views/backend/home/windMatrixpage.vue @@ -11,7 +11,6 @@ '': item.standard==0, 'wind-offline': item.attributeMap.processedoperationmode == 33 }"> -
@@ -69,12 +68,12 @@
- - {{ getFaultDescription(item) }} + {{ item.attributeMap.firsttriggeredcode }} + 已锁定
@@ -412,13 +411,7 @@ const getSafeImagePath = (item, type) => { }; -const getFaultDescription=(item)=>{ - /*fetchData(item) - let firsttriggeredcode=item.attributeMap.firsttriggeredcode - if (malFunctionKeys.includes('FirstTriggeredCode')) { - firsttriggeredcode = malFunctionEnums?.[firsttriggeredcode] ?? firsttriggeredcode - } - return firsttriggeredcode*/ +/*const getFaultDescription=(item)=>{ const key = `${item.madeinFactory}-${item.model}`; if (failedRequests.has(key)) { return ''; @@ -459,17 +452,15 @@ const fetchData = async (item: any) => { response.data.forEach((item: any) => { data[item.code] = item.description; }); - //malFunctionEnums = data; malFunctionEnums[key] = data; } else { console.warn('查询故障代码字典失败:', response.message); failedRequests.add(key); } } catch (error) { - //console.error('查询故障代码字典失败', error); failedRequests.add(key); } -}; +};*/ diff --git a/ui/dasadmin/src/views/backend/login.vue b/ui/dasadmin/src/views/backend/login.vue index 0c5cef4e..fa70e881 100644 --- a/ui/dasadmin/src/views/backend/login.vue +++ b/ui/dasadmin/src/views/backend/login.vue @@ -92,6 +92,7 @@ import { editDefaultLang } from '/@/lang/index' import { useConfig } from '/@/stores/config' import { useAdminInfo } from '/@/stores/adminInfo' import { useEnumStore } from '/@/stores/enums' +import {useFaultsStore} from "/@/stores/faults" import { login } from '/@/api/backend' import { buildValidatorData } from '/@/utils/validate' import router from '/@/router' @@ -100,11 +101,15 @@ import toggleDark from '/@/utils/useDark' import { fullUrl } from '/@/utils/common' import { adminBaseRoutePath } from '/@/router/static/adminBase' import { getAllEnumData } from '/@/api/backend/Enumeration/request' +import {equipList} from "/@/api/backend/realData/request"; +import { queryfaultCodeDict } from '/@/api/backend/theoreticalpowerCurve/request' + let timer: number const config = useConfig() const adminInfo = useAdminInfo() const enumsStore = useEnumStore() +const FaultsStore = useFaultsStore() const isSmall = ref(window.screen.width < 620 ? true : false) @@ -192,7 +197,6 @@ const load = () => { state.captcha = 'data:image\/png;base64,' + res.data.img }) } - const getEnumsData = () => { getAllEnumData().then((res) => { if (res.success) { @@ -213,6 +217,49 @@ const getEnumsData = () => { } }) } +equipList({ objectType: 10002 }).then((res) => { + res.data.map((item: any) => { + fetchData(item) + return { + madeinfactory:item.madeinFactory, + model: item.model ?? '-', + } + }) +}) +const malFunctionEnums = ref<{ [key: string]: { [code: string]: string } }>({}); + +const requestedParams = new Set(); +const failedRequests = new Set(); +const fetchData = async (item: any) => { + const key = `${item.madeinFactory}-${item.model}`; + if (requestedParams.has(key)) { + return; + } + requestedParams.add(key); + const keys = requestedParams; + const response = await queryfaultCodeDict({ madeinfactory: item.madeinFactory, model: item.model }); + if (response.code === 200) { + const data: any = {}; + response.data.forEach((item: any) => { + data[item.code] = item.description; + }); + malFunctionEnums.value[key] = data; + const datas=malFunctionEnums.value + sessionStorage.setItem( + 'faultCodeDict', + JSON.stringify({ + datas, + keys:Array.from(requestedParams), + }) + ) + FaultsStore.setKeys(Array.from(requestedParams)) + FaultsStore.setData(datas) + } else { + console.warn('查询故障代码字典失败:', response.message); + failedRequests.add(key); + } + +}; const onSubmit = () => { state.submitLoading = true diff --git a/ui/dasadmin/src/views/backend/report/SingleReport.vue b/ui/dasadmin/src/views/backend/report/SingleReport.vue index 982d1f92..8c141e59 100644 --- a/ui/dasadmin/src/views/backend/report/SingleReport.vue +++ b/ui/dasadmin/src/views/backend/report/SingleReport.vue @@ -8,7 +8,7 @@ v-model="windBlowerValue" @change="selectWindBlower" :placeholder="'请选择' + t('statAnalysis.deviceId')" - class="windBlowerSelect commonSelect" + class="commonSelect" >
@@ -29,11 +29,16 @@ +
+
{{ t('statAnalysis.calFunction') }}
+ + +
模板
- +