feat:【IoT 物联网】初始化告警配置
This commit is contained in:
@@ -0,0 +1,82 @@
|
|||||||
|
package cn.iocoder.yudao.module.iot.controller.admin.alert;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
import jakarta.validation.*;
|
||||||
|
import jakarta.servlet.http.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||||
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO;
|
||||||
|
import cn.iocoder.yudao.module.iot.service.alert.IotAlertConfigService;
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - IoT 告警配置")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/iot/alert-config")
|
||||||
|
@Validated
|
||||||
|
public class IotAlertConfigController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IotAlertConfigService alertConfigService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建告警配置")
|
||||||
|
@PreAuthorize("@ss.hasPermission('iot:alert-config:create')")
|
||||||
|
public CommonResult<Long> createAlertConfig(@Valid @RequestBody IotAlertConfigSaveReqVO createReqVO) {
|
||||||
|
return success(alertConfigService.createAlertConfig(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新告警配置")
|
||||||
|
@PreAuthorize("@ss.hasPermission('iot:alert-config:update')")
|
||||||
|
public CommonResult<Boolean> updateAlertConfig(@Valid @RequestBody IotAlertConfigSaveReqVO updateReqVO) {
|
||||||
|
alertConfigService.updateAlertConfig(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除告警配置")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('iot:alert-config:delete')")
|
||||||
|
public CommonResult<Boolean> deleteAlertConfig(@RequestParam("id") Long id) {
|
||||||
|
alertConfigService.deleteAlertConfig(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得告警配置")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('iot:alert-config:query')")
|
||||||
|
public CommonResult<IotAlertConfigRespVO> getAlertConfig(@RequestParam("id") Long id) {
|
||||||
|
IotAlertConfigDO alertConfig = alertConfigService.getAlertConfig(id);
|
||||||
|
return success(BeanUtils.toBean(alertConfig, IotAlertConfigRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得告警配置分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('iot:alert-config:query')")
|
||||||
|
public CommonResult<PageResult<IotAlertConfigRespVO>> getAlertConfigPage(@Valid IotAlertConfigPageReqVO pageReqVO) {
|
||||||
|
PageResult<IotAlertConfigDO> pageResult = alertConfigService.getAlertConfigPage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, IotAlertConfigRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.iot.controller.admin.alert.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - IoT 告警配置分页 Request VO")
|
||||||
|
@Data
|
||||||
|
public class IotAlertConfigPageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "配置名称", example = "赵六")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Schema(description = "配置状态", example = "1")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package cn.iocoder.yudao.module.iot.controller.admin.alert.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - IoT 告警配置 Response VO")
|
||||||
|
@Data
|
||||||
|
public class IotAlertConfigRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "配置编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3566")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "配置名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Schema(description = "配置描述", example = "你猜")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Schema(description = "告警级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
private Integer level;
|
||||||
|
|
||||||
|
@Schema(description = "配置状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "关联的场景联动规则编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
|
||||||
|
private List<Long> sceneRuleIds;
|
||||||
|
|
||||||
|
@Schema(description = "接收的用户编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "100,200")
|
||||||
|
private List<Long> receiveUserIds;
|
||||||
|
|
||||||
|
@Schema(description = "接收的类型数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
|
||||||
|
private List<Integer> receiveTypes;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package cn.iocoder.yudao.module.iot.controller.admin.alert.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
|
import cn.iocoder.yudao.framework.common.validation.InEnum;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - IoT 告警配置新增/修改 Request VO")
|
||||||
|
@Data
|
||||||
|
public class IotAlertConfigSaveReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "配置编号", example = "3566")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "配置名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
|
||||||
|
@NotEmpty(message = "配置名称不能为空")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Schema(description = "配置描述", example = "你猜")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Schema(description = "告警级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
@NotNull(message = "告警级别不能为空")
|
||||||
|
private Integer level;
|
||||||
|
|
||||||
|
@Schema(description = "配置状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
@NotNull(message = "配置状态不能为空")
|
||||||
|
@InEnum(CommonStatusEnum.class)
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "关联的场景联动规则编号数组")
|
||||||
|
@NotEmpty(message = "关联的场景联动规则编号数组不能为空")
|
||||||
|
private List<Long> sceneRuleIds;
|
||||||
|
|
||||||
|
@Schema(description = "接收的用户编号数组")
|
||||||
|
@NotEmpty(message = "接收的用户编号数组不能为空")
|
||||||
|
private List<Long> receiveUserIds;
|
||||||
|
|
||||||
|
@Schema(description = "接收的类型数组")
|
||||||
|
@NotEmpty(message = "接收的类型数组不能为空")
|
||||||
|
private List<Integer> receiveTypes;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.iot.dal.mysql.alert;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.IotAlertConfigPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IoT 告警配置 Mapper
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface IotAlertConfigMapper extends BaseMapperX<IotAlertConfigDO> {
|
||||||
|
|
||||||
|
default PageResult<IotAlertConfigDO> selectPage(IotAlertConfigPageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<IotAlertConfigDO>()
|
||||||
|
.likeIfPresent(IotAlertConfigDO::getName, reqVO.getName())
|
||||||
|
.eqIfPresent(IotAlertConfigDO::getStatus, reqVO.getStatus())
|
||||||
|
.betweenIfPresent(IotAlertConfigDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(IotAlertConfigDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -64,4 +64,7 @@ public interface ErrorCodeConstants {
|
|||||||
// ========== IoT 场景联动 1-050-012-000 ==========
|
// ========== IoT 场景联动 1-050-012-000 ==========
|
||||||
ErrorCode RULE_SCENE_NOT_EXISTS = new ErrorCode(1_050_012_000, "场景联动不存在");
|
ErrorCode RULE_SCENE_NOT_EXISTS = new ErrorCode(1_050_012_000, "场景联动不存在");
|
||||||
|
|
||||||
|
// ========== IoT 告警配置 1-050-013-000 ==========
|
||||||
|
ErrorCode ALERT_CONFIG_NOT_EXISTS = new ErrorCode(1_050_013_000, "IoT 告警配置不存在");
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package cn.iocoder.yudao.module.iot.service.alert;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.IotAlertConfigPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.IotAlertConfigSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IoT 告警配置 Service 接口
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
public interface IotAlertConfigService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建告警配置
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createAlertConfig(@Valid IotAlertConfigSaveReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新告警配置
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateAlertConfig(@Valid IotAlertConfigSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除告警配置
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteAlertConfig(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得告警配置
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 告警配置
|
||||||
|
*/
|
||||||
|
IotAlertConfigDO getAlertConfig(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得告警配置分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 告警配置分页
|
||||||
|
*/
|
||||||
|
PageResult<IotAlertConfigDO> getAlertConfigPage(IotAlertConfigPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package cn.iocoder.yudao.module.iot.service.alert;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.IotAlertConfigPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.IotAlertConfigSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO;
|
||||||
|
import cn.iocoder.yudao.module.iot.dal.mysql.alert.IotAlertConfigMapper;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.ALERT_CONFIG_NOT_EXISTS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IoT 告警配置 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class IotAlertConfigServiceImpl implements IotAlertConfigService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IotAlertConfigMapper alertConfigMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createAlertConfig(IotAlertConfigSaveReqVO createReqVO) {
|
||||||
|
IotAlertConfigDO alertConfig = BeanUtils.toBean(createReqVO, IotAlertConfigDO.class);
|
||||||
|
alertConfigMapper.insert(alertConfig);
|
||||||
|
return alertConfig.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateAlertConfig(IotAlertConfigSaveReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validateAlertConfigExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
IotAlertConfigDO updateObj = BeanUtils.toBean(updateReqVO, IotAlertConfigDO.class);
|
||||||
|
alertConfigMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteAlertConfig(Long id) {
|
||||||
|
// 校验存在
|
||||||
|
validateAlertConfigExists(id);
|
||||||
|
// 删除
|
||||||
|
alertConfigMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateAlertConfigExists(Long id) {
|
||||||
|
if (alertConfigMapper.selectById(id) == null) {
|
||||||
|
throw exception(ALERT_CONFIG_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IotAlertConfigDO getAlertConfig(Long id) {
|
||||||
|
return alertConfigMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<IotAlertConfigDO> getAlertConfigPage(IotAlertConfigPageReqVO pageReqVO) {
|
||||||
|
return alertConfigMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user