Commit fe41d5ac authored by huangcb's avatar huangcb

优化数据模型告警规则功能代码

parent 453a1f05
package com.esv.datacenter.iot.common.component; package com.esv.datacenter.iot.common.component;
import com.esv.datacenter.iot.module.datamodel.service.DataModelAlarmRuleService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
...@@ -22,8 +24,21 @@ public class ApplicationLoadRunner implements ApplicationRunner { ...@@ -22,8 +24,21 @@ public class ApplicationLoadRunner implements ApplicationRunner {
@Value("${spring.application.name}") @Value("${spring.application.name}")
private String applicationName; private String applicationName;
@Autowired
private DataModelAlarmRuleService dataModelAlarmRuleService;
@Override @Override
public void run(ApplicationArguments var) { public void run(ApplicationArguments var) {
log.info("-------------------- [{}]初始化完成 --------------------", applicationName); log.info("-------------------- [{}]初始化完成 --------------------", applicationName);
// 初始化缓存数据模型告警规则
try {
dataModelAlarmRuleService.cacheInitAlarmRule();
log.info("-------------------- 缓存数据模型告警规则初始化成功 --------------------");
} catch (Exception e) {
log.error("-------------------- 缓存数据模型告警规则初始化失败 --------------------");
log.error(e.getMessage(), e);
}
} }
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.esv.datacenter.iot.common.component; ...@@ -2,6 +2,7 @@ package com.esv.datacenter.iot.common.component;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -126,6 +127,24 @@ public class RedisComponent { ...@@ -126,6 +127,24 @@ public class RedisComponent {
} }
} }
/**
* @description 普通缓存放入(缓存时间不过期,慎用!!!)
* @param key:
* @param value:
* @return boolean
* @author huangChaobin@esvtek.com
* @createTime 2020/08/06 19:27
**/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}
/** /**
* 递增 * 递增
* *
......
...@@ -75,9 +75,24 @@ public class ReqUtils { ...@@ -75,9 +75,24 @@ public class ReqUtils {
* createTime 2020/05/25 13:55 * createTime 2020/05/25 13:55
**/ **/
public static Long getRequestTenantId() { public static Long getRequestTenantId() {
String userId = getRequestHeader(GatewayHeaders.TENANT_ID); String tenantId = getRequestHeader(GatewayHeaders.TENANT_ID);
if (StringUtils.isNotBlank(userId)) { if (StringUtils.isNotBlank(tenantId)) {
return Long.parseLong(userId); return Long.parseLong(tenantId);
} else {
return null;
}
}
/**
* @description 获取当前请求的部门ID
* @return java.lang.Long
* @author huangChaobin@esvtek.com
* @createTime 2020/08/06 15:56
**/
public static Long getRequestDepartmentId() {
String departmentId = getRequestHeader(GatewayHeaders.DEPARTMENT_ID);
if (StringUtils.isNotBlank(departmentId)) {
return Long.parseLong(departmentId);
} else { } else {
return null; return null;
} }
......
...@@ -26,7 +26,7 @@ public class DataPermHandler implements TenantHandler { ...@@ -26,7 +26,7 @@ public class DataPermHandler implements TenantHandler {
/** /**
* 不需要数据权限查询的表 * 不需要数据权限查询的表
**/ **/
private final List<String> filterTableNames = Arrays.asList(""); private final List<String> filterTableNames = Arrays.asList("data_model_alarm_rule");
@Override @Override
public Expression getTenantId(boolean where) { public Expression getTenantId(boolean where) {
......
...@@ -10,13 +10,10 @@ import com.esv.datacenter.iot.module.datamodel.service.DataModelAlarmRuleService ...@@ -10,13 +10,10 @@ import com.esv.datacenter.iot.module.datamodel.service.DataModelAlarmRuleService
import com.esv.datacenter.iot.module.datamodel.service.DataModelService; import com.esv.datacenter.iot.module.datamodel.service.DataModelService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** /**
* @description: * @description: 数据模型告警规则Controller
* @author: huangchaobin@esvtek.com * @author: huangchaobin@esvtek.com
* @createTime: 2020/08/05 16:27 * @createTime: 2020/08/05 16:27
* @version:1.0 * @version:1.0
...@@ -36,7 +33,7 @@ public class DataModelAlarmRuleController { ...@@ -36,7 +33,7 @@ public class DataModelAlarmRuleController {
} }
/** /**
* @description 保存告警规则 * @description 保存数据模型告警规则
* @param form: * @param form:
* @return com.esv.datacenter.iot.common.response.EResponse * @return com.esv.datacenter.iot.common.response.EResponse
* @author huangChaobin@esvtek.com * @author huangChaobin@esvtek.com
...@@ -71,4 +68,16 @@ public class DataModelAlarmRuleController { ...@@ -71,4 +68,16 @@ public class DataModelAlarmRuleController {
return EResponse.ok(dataModelAlarmRuleService.getAlarmRuleList(form.getModelId())); return EResponse.ok(dataModelAlarmRuleService.getAlarmRuleList(form.getModelId()));
} }
/**
* @description 缓存数据模型告警规则
* @return com.esv.datacenter.iot.common.response.EResponse
* @author huangChaobin@esvtek.com
* @createTime 2020/08/06 15:58
**/
@GetMapping("/updateCache")
public EResponse updateCache() throws EException {
dataModelAlarmRuleService.cacheInitAlarmRule();
return EResponse.ok();
}
} }
package com.esv.datacenter.iot.module.datamodel.dao; package com.esv.datacenter.iot.module.datamodel.dao;
import com.esv.datacenter.iot.module.datamodel.entity.DataModelAlarmRuleEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.esv.datacenter.iot.module.datamodel.dto.DataModelAlarmRuleDto;
import com.esv.datacenter.iot.module.datamodel.entity.DataModelAlarmRuleEntity;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* 数据模型告警规则表 * 数据模型告警规则表
* *
...@@ -13,5 +16,13 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -13,5 +16,13 @@ import org.apache.ibatis.annotations.Mapper;
*/ */
@Mapper @Mapper
public interface DataModelAlarmRuleDao extends BaseMapper<DataModelAlarmRuleEntity> { public interface DataModelAlarmRuleDao extends BaseMapper<DataModelAlarmRuleEntity> {
/**
* @description 查询所有数据模型告警规则
* @return java.util.List<com.esv.datacenter.iot.module.datamodel.dto.DataModelAlarmRuleDto>
* @author huangChaobin@esvtek.com
* @createTime 2020/08/06 15:48
**/
List<DataModelAlarmRuleDto> selectAll();
} }
package com.esv.datacenter.iot.module.datamodel.dto;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* @description:
* @author: huangchaobin@esvtek.com
* @createTime: 2020/08/06 14:47
* @version:1.0
*/
@Data
public class DataModelAlarmRuleDto {
/**
*
*/
private Long id;
/**
* 模型ID
*/
private Long modelId;
/**
* 模型属性ID
*/
private Long propertyId;
/**
* 判定规则代码(字典表)
*/
private Integer ruleExpression;
/**
* 告警等级(字典表)
*/
private Integer alarmLevel;
/**
* 阈值
*/
private String threshold;
/**
* 属性代码
*/
private String propertyCode;
/**
* 属性名称
*/
private String propertyName;
/**
* 属性类型(字典表)
*/
private Integer propertyType;
/**
* 属性默认值
*/
private String propertyDefaultValue;
/**
* 属性单位
*/
private String propertyUnit;
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
}
}
...@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.annotation.FieldFill; ...@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import lombok.Data;
/** /**
* 数据模型告警规则表 * 数据模型告警规则表
...@@ -79,4 +81,9 @@ public class DataModelAlarmRuleEntity implements Serializable { ...@@ -79,4 +81,9 @@ public class DataModelAlarmRuleEntity implements Serializable {
*/ */
private Date updateTime; private Date updateTime;
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
}
} }
package com.esv.datacenter.iot.module.datamodel.service; package com.esv.datacenter.iot.module.datamodel.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.esv.datacenter.iot.module.datamodel.dto.DataModelAlarmRuleDto;
import com.esv.datacenter.iot.module.datamodel.entity.DataModelAlarmRuleEntity; import com.esv.datacenter.iot.module.datamodel.entity.DataModelAlarmRuleEntity;
import com.esv.datacenter.iot.module.datamodel.form.AlarmRuleItemForm;
import com.esv.datacenter.iot.module.datamodel.form.DataModelAlarmRuleForm; import com.esv.datacenter.iot.module.datamodel.form.DataModelAlarmRuleForm;
import com.esv.datacenter.iot.module.datamodel.vo.AlarmRuleItemVO; import com.esv.datacenter.iot.module.datamodel.vo.AlarmRuleItemVO;
...@@ -34,5 +36,23 @@ public interface DataModelAlarmRuleService extends IService<DataModelAlarmRuleEn ...@@ -34,5 +36,23 @@ public interface DataModelAlarmRuleService extends IService<DataModelAlarmRuleEn
**/ **/
List<AlarmRuleItemVO> getAlarmRuleList(Long modelId); List<AlarmRuleItemVO> getAlarmRuleList(Long modelId);
/**
* @description 缓存数据模型告警规则
* @return void
* @author huangChaobin@esvtek.com
* @createTime 2020/08/06 14:49
**/
void cacheInitAlarmRule();
/**
* @description 设置缓存数据模型告警规则
* @param modelId:
* @param alarmRuleItemList:
* @return void
* @author huangChaobin@esvtek.com
* @createTime 2020/08/06 14:49
**/
void setCacheAlarmRule(Long modelId, List<DataModelAlarmRuleDto> alarmRuleItemList);
} }
package com.esv.datacenter.iot.module.datamodel.service.impl; package com.esv.datacenter.iot.module.datamodel.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.esv.datacenter.iot.common.component.RedisComponent;
import com.esv.datacenter.iot.common.util.ReqUtils; import com.esv.datacenter.iot.common.util.ReqUtils;
import com.esv.datacenter.iot.module.datamodel.dao.DataModelAlarmRuleDao; import com.esv.datacenter.iot.module.datamodel.dao.DataModelAlarmRuleDao;
import com.esv.datacenter.iot.module.datamodel.dto.DataModelAlarmRuleDto;
import com.esv.datacenter.iot.module.datamodel.entity.DataModelAlarmRuleEntity; import com.esv.datacenter.iot.module.datamodel.entity.DataModelAlarmRuleEntity;
import com.esv.datacenter.iot.module.datamodel.form.AlarmRuleItemForm; import com.esv.datacenter.iot.module.datamodel.form.AlarmRuleItemForm;
import com.esv.datacenter.iot.module.datamodel.form.DataModelAlarmRuleForm; import com.esv.datacenter.iot.module.datamodel.form.DataModelAlarmRuleForm;
import com.esv.datacenter.iot.module.datamodel.service.DataModelAlarmRuleService; import com.esv.datacenter.iot.module.datamodel.service.DataModelAlarmRuleService;
import com.esv.datacenter.iot.module.datamodel.vo.AlarmRuleItemVO; import com.esv.datacenter.iot.module.datamodel.vo.AlarmRuleItemVO;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.*;
import java.util.List;
@Service("dataModelAlarmRuleService") @Service("dataModelAlarmRuleService")
public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRuleDao, DataModelAlarmRuleEntity> implements DataModelAlarmRuleService { public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRuleDao, DataModelAlarmRuleEntity> implements DataModelAlarmRuleService {
@Value("${spring.application.name}")
private String applicationName;
@Autowired
private RedisComponent redisComponent;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveAlarmRule(DataModelAlarmRuleForm form) { public void saveAlarmRule(DataModelAlarmRuleForm form) {
...@@ -31,6 +42,7 @@ public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRul ...@@ -31,6 +42,7 @@ public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRul
// 新增模型告警规则 // 新增模型告警规则
String[] notBlandParams = new String[]{"propertyId", "ruleExpression", "alarmLevel", "threshold"}; String[] notBlandParams = new String[]{"propertyId", "ruleExpression", "alarmLevel", "threshold"};
List<AlarmRuleItemForm> alarmRuleItemList = form.getAlarmRuleItemList(); List<AlarmRuleItemForm> alarmRuleItemList = form.getAlarmRuleItemList();
List<DataModelAlarmRuleDto> alarmRuleDtoList = new ArrayList<>();
for (AlarmRuleItemForm ruleItemForm : alarmRuleItemList) { for (AlarmRuleItemForm ruleItemForm : alarmRuleItemList) {
// 告警规则必填校验 // 告警规则必填校验
ReqUtils.checkParamsNotBlank(JSON.parseObject(ruleItemForm.toString()), notBlandParams); ReqUtils.checkParamsNotBlank(JSON.parseObject(ruleItemForm.toString()), notBlandParams);
...@@ -38,6 +50,8 @@ public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRul ...@@ -38,6 +50,8 @@ public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRul
DataModelAlarmRuleEntity entity = new DataModelAlarmRuleEntity(); DataModelAlarmRuleEntity entity = new DataModelAlarmRuleEntity();
BeanUtils.copyProperties(ruleItemForm, entity); BeanUtils.copyProperties(ruleItemForm, entity);
entity.setModelId(form.getModelId()); entity.setModelId(form.getModelId());
entity.setTenantId(ReqUtils.getRequestTenantId());
entity.setDepartmentId(ReqUtils.getRequestDepartmentId());
this.getBaseMapper().insert(entity); this.getBaseMapper().insert(entity);
// 更新排序 // 更新排序
...@@ -45,7 +59,15 @@ public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRul ...@@ -45,7 +59,15 @@ public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRul
sortEntity.setId(entity.getId()); sortEntity.setId(entity.getId());
sortEntity.setSortNum(entity.getId()); sortEntity.setSortNum(entity.getId());
this.getBaseMapper().updateById(sortEntity); this.getBaseMapper().updateById(sortEntity);
// 设置缓存数据
DataModelAlarmRuleDto dto = new DataModelAlarmRuleDto();
BeanUtils.copyProperties(entity, dto);
alarmRuleDtoList.add(dto);
} }
// 缓存数据模型告警规则
this.setCacheAlarmRule(modelId, alarmRuleDtoList);
} }
@Override @Override
...@@ -63,4 +85,50 @@ public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRul ...@@ -63,4 +85,50 @@ public class DataModelAlarmRuleServiceImpl extends ServiceImpl<DataModelAlarmRul
return voList; return voList;
} }
@Override
public void cacheInitAlarmRule() {
List<DataModelAlarmRuleDto> dataModelAlarmRuleDtoList = this.getBaseMapper().selectAll();
if (Objects.isNull(dataModelAlarmRuleDtoList) || 0 == dataModelAlarmRuleDtoList.size()) {
return;
}
Long modelId = -99L;
List<DataModelAlarmRuleDto> alarmRuleDtoList = null;
Map<Long, Object> alarmRuleMap = new HashMap<>(32);
for (DataModelAlarmRuleDto entity : dataModelAlarmRuleDtoList) {
if (!entity.getModelId().equals(modelId)) {
if (null != alarmRuleDtoList && 0 < alarmRuleDtoList.size()) {
alarmRuleMap.put(modelId, alarmRuleDtoList);
}
alarmRuleDtoList = new ArrayList<>();
}
modelId = entity.getModelId();
DataModelAlarmRuleDto dto = new DataModelAlarmRuleDto();
BeanUtils.copyProperties(entity, dto);
alarmRuleDtoList.add(dto);
}
if (!alarmRuleMap.containsKey(modelId)) {
alarmRuleMap.put(modelId, alarmRuleDtoList);
}
// 初始化缓存数据模型告警规则
for(Map.Entry<Long, Object> entry : alarmRuleMap.entrySet()){
this.setCacheAlarmRule(entry.getKey(), (List<DataModelAlarmRuleDto>) entry.getValue());
}
}
@Override
public void setCacheAlarmRule(Long modelId, List<DataModelAlarmRuleDto> alarmRuleItemList) {
String cacheKey = applicationName + "::data_model::alarm_rule::" + modelId;
if (null == alarmRuleItemList || 0 == alarmRuleItemList.size()) {
redisComponent.del(cacheKey);
} else {
JSONArray jsonArray = new JSONArray();
alarmRuleItemList.forEach( dto -> {
jsonArray.add(JSONObject.parse(dto.toString()));
});
redisComponent.set(cacheKey, jsonArray.toString());
}
}
} }
\ No newline at end of file
...@@ -18,6 +18,7 @@ import com.esv.datacenter.iot.module.datamodel.service.DataModelPropertyService; ...@@ -18,6 +18,7 @@ import com.esv.datacenter.iot.module.datamodel.service.DataModelPropertyService;
import com.esv.datacenter.iot.module.datamodel.service.DataModelService; import com.esv.datacenter.iot.module.datamodel.service.DataModelService;
import com.esv.datacenter.iot.module.datamodel.vo.DataDataModelDetailVO; import com.esv.datacenter.iot.module.datamodel.vo.DataDataModelDetailVO;
import com.esv.datacenter.iot.module.datamodel.vo.DataModelVO; import com.esv.datacenter.iot.module.datamodel.vo.DataModelVO;
import com.esv.datacenter.iot.module.devicemodel.service.DeviceDataMapService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -34,6 +35,8 @@ public class DataModelServiceImpl extends ServiceImpl<DataModelDao, DataModelEnt ...@@ -34,6 +35,8 @@ public class DataModelServiceImpl extends ServiceImpl<DataModelDao, DataModelEnt
private TimescaleComponent timescaleComponent; private TimescaleComponent timescaleComponent;
@Autowired @Autowired
private DataModelPropertyService dataModelPropertyService; private DataModelPropertyService dataModelPropertyService;
@Autowired
private DeviceDataMapService deviceDataMapService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -122,6 +125,12 @@ public class DataModelServiceImpl extends ServiceImpl<DataModelDao, DataModelEnt ...@@ -122,6 +125,12 @@ public class DataModelServiceImpl extends ServiceImpl<DataModelDao, DataModelEnt
// 判断是否修改模型属性并校验 // 判断是否修改模型属性并校验
List<DataModelPropertyForm> propertyList = form.getPropertyList(); List<DataModelPropertyForm> propertyList = form.getPropertyList();
if (null != propertyList && 0 < propertyList.size()) { if (null != propertyList && 0 < propertyList.size()) {
// 如果有设备模型使用,不能更新
int count = deviceDataMapService.getCountByDataModelId(modelId);
if (0 < count) {
throw new EException(ECode.BIZ_PARAM_ERROR.code(), "改模型已被设备使用,不能修改属性");
}
// 保存模型属性 // 保存模型属性
this.dataModelPropertyService.saveModelProperty(modelId, propertyList); this.dataModelPropertyService.saveModelProperty(modelId, propertyList);
...@@ -136,6 +145,12 @@ public class DataModelServiceImpl extends ServiceImpl<DataModelDao, DataModelEnt ...@@ -136,6 +145,12 @@ public class DataModelServiceImpl extends ServiceImpl<DataModelDao, DataModelEnt
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteModel(Long modelId) { public void deleteModel(Long modelId) {
// 如果有设备模型使用,不能删除
int count = deviceDataMapService.getCountByDataModelId(modelId);
if (0 < count) {
throw new EException(ECode.BIZ_PARAM_ERROR.code(), "改模型已被设备使用,不能删除");
}
// 逻辑删除模型 // 逻辑删除模型
DataModelEntity modelEntity = new DataModelEntity(); DataModelEntity modelEntity = new DataModelEntity();
modelEntity.setId(modelId); modelEntity.setId(modelId);
......
package com.esv.datacenter.iot.module.datamodel.vo; package com.esv.datacenter.iot.module.datamodel.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data; import lombok.Data;
/** /**
...@@ -18,16 +14,7 @@ public class DataModelPropertyVO { ...@@ -18,16 +14,7 @@ public class DataModelPropertyVO {
/** /**
* *
*/ */
@TableId
private Long id; private Long id;
/**
* 租户ID
*/
private Long tenantId;
/**
* 部门ID
*/
private Long departmentId;
/** /**
* 模型ID * 模型ID
*/ */
...@@ -56,20 +43,13 @@ public class DataModelPropertyVO { ...@@ -56,20 +43,13 @@ public class DataModelPropertyVO {
* 排列序号 * 排列序号
*/ */
private Long sortNum; private Long sortNum;
/**
* 是否删除:0-未删除、1-已删除
*/
@TableLogic
private Boolean deleted;
/** /**
* 创建者 * 创建者
*/ */
@TableField(fill = FieldFill.INSERT)
private String createUser; private String createUser;
/** /**
* 修改者 * 修改者
*/ */
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateUser; private String updateUser;
/** /**
* 创建时间 * 创建时间
......
package com.esv.datacenter.iot.module.devicemodel.dao;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceDataMapEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 设备类型-数据模型映射表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
@Mapper
public interface DeviceDataMapDao extends BaseMapper<DeviceDataMapEntity> {
}
package com.esv.datacenter.iot.module.devicemodel.dao;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceInstanceEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 设备实例表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
@Mapper
public interface DeviceInstanceDao extends BaseMapper<DeviceInstanceEntity> {
}
package com.esv.datacenter.iot.module.devicemodel.dao;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceTypeEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 设备类型表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
@Mapper
public interface DeviceTypeDao extends BaseMapper<DeviceTypeEntity> {
}
package com.esv.datacenter.iot.module.devicemodel.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 设备类型-数据模型映射表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
@Data
@TableName("device_data_map")
public class DeviceDataMapEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Long id;
/**
* 租户ID
*/
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
/**
* 部门ID
*/
@TableField(fill = FieldFill.INSERT)
private Long departmentId;
/**
* 设备类型ID
*/
private Long deviceTypeId;
/**
* 数据模型ID
*/
private Long dataModelId;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private String createUser;
/**
* 修改者
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateUser;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
}
package com.esv.datacenter.iot.module.devicemodel.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 设备实例表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
@Data
@TableName("device_instance")
public class DeviceInstanceEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Long id;
/**
* 租户ID
*/
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
/**
* 部门ID
*/
@TableField(fill = FieldFill.INSERT)
private Long departmentId;
/**
* 设备类型ID
*/
private Long deviceTypeId;
/**
* 设备名称
*/
private String name;
/**
* 设备描述
*/
private String description;
/**
* 设备业务ID
*/
private String businessId;
/**
* 设备型号
*/
private String deviceModel;
/**
* 是否删除:0-未删除、1-已删除
*/
@TableLogic
private Boolean deleted;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private String createUser;
/**
* 修改者
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateUser;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
}
package com.esv.datacenter.iot.module.devicemodel.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 设备类型表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
@Data
@TableName("device_type")
public class DeviceTypeEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Long id;
/**
* 租户ID
*/
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
/**
* 部门ID
*/
@TableField(fill = FieldFill.INSERT)
private Long departmentId;
/**
* 名称
*/
private String name;
/**
* 描述
*/
private String description;
/**
* 是否删除:0-未删除、1-已删除
*/
@TableLogic
private Boolean deleted;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private String createUser;
/**
* 修改者
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateUser;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
}
package com.esv.datacenter.iot.module.devicemodel.from;
import com.esv.datacenter.iot.common.validator.groups.ValidatorInsert;
import com.esv.datacenter.iot.common.validator.groups.ValidatorList;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @description:
* @author: huangchaobin@esvtek.com
* @createTime: 2020/08/06 16:34
* @version:1.0
*/
@Data
public class DeviceTypeForm {
/**
*
*/
private Long id;
/**
* 名称
*/
@Length(max = 50, message = "[设备名称]长度不合法", groups = {ValidatorInsert.class})
@NotBlank(message = "[设备名称]不能为空", groups = {ValidatorInsert.class})
private String name;
/**
* 描述
*/
@Length(max = 200, message = "[设备描述]长度不合法", groups = {ValidatorInsert.class})
@NotBlank(message = "[设备描述]不能为空", groups = {ValidatorInsert.class})
private String description;
/**
* 页码
**/
@Range(min = 1, max = 65535, message = "无效的pageNum", groups = {ValidatorList.class})
@NotNull(message = "参数pageNum不能为空", groups = {ValidatorList.class})
private Integer pageNum;
/**
* 每页记录条数
**/
@Range(min = 1, max = 100, message = "pageSize", groups = {ValidatorList.class})
@NotNull(message = "参数pageSize不能为空", groups = {ValidatorList.class})
private Integer pageSize;
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
}
}
package com.esv.datacenter.iot.module.devicemodel.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceDataMapEntity;
/**
* 设备类型-数据模型映射Service
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
public interface DeviceDataMapService extends IService<DeviceDataMapEntity> {
/**
* @description 统计指定数据模型的使用数量
* @param dataModelId:
* @return int
* @author huangChaobin@esvtek.com
* @createTime 2020/08/06 16:25
**/
int getCountByDataModelId(Long dataModelId);
}
package com.esv.datacenter.iot.module.devicemodel.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceInstanceEntity;
/**
* 设备实例Service
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
public interface DeviceInstanceService extends IService<DeviceInstanceEntity> {
}
package com.esv.datacenter.iot.module.devicemodel.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceTypeEntity;
/**
* 设备类型Service
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-08-06 16:15:13
*/
public interface DeviceTypeService extends IService<DeviceTypeEntity> {
}
package com.esv.datacenter.iot.module.devicemodel.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.esv.datacenter.iot.module.devicemodel.dao.DeviceDataMapDao;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceDataMapEntity;
import com.esv.datacenter.iot.module.devicemodel.service.DeviceDataMapService;
import org.springframework.stereotype.Service;
@Service("deviceDataMapService")
public class DeviceDataMapServiceImpl extends ServiceImpl<DeviceDataMapDao, DeviceDataMapEntity> implements DeviceDataMapService {
@Override
public int getCountByDataModelId(Long dataModelId) {
return this.getBaseMapper().selectCount(new LambdaQueryWrapper<DeviceDataMapEntity>()
.eq(DeviceDataMapEntity::getDataModelId, dataModelId));
}
}
\ No newline at end of file
package com.esv.datacenter.iot.module.devicemodel.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.esv.datacenter.iot.module.devicemodel.dao.DeviceInstanceDao;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceInstanceEntity;
import com.esv.datacenter.iot.module.devicemodel.service.DeviceInstanceService;
import org.springframework.stereotype.Service;
@Service("deviceInstanceService")
public class DeviceInstanceServiceImpl extends ServiceImpl<DeviceInstanceDao, DeviceInstanceEntity> implements DeviceInstanceService {
}
\ No newline at end of file
package com.esv.datacenter.iot.module.devicemodel.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.esv.datacenter.iot.module.devicemodel.dao.DeviceTypeDao;
import com.esv.datacenter.iot.module.devicemodel.entity.DeviceTypeEntity;
import com.esv.datacenter.iot.module.devicemodel.service.DeviceTypeService;
import org.springframework.stereotype.Service;
@Service("deviceTypeService")
public class DeviceTypeServiceImpl extends ServiceImpl<DeviceTypeDao, DeviceTypeEntity> implements DeviceTypeService {
}
\ No newline at end of file
...@@ -20,5 +20,12 @@ ...@@ -20,5 +20,12 @@
<result property="updateTime" column="update_time"/> <result property="updateTime" column="update_time"/>
</resultMap> </resultMap>
<select id="selectAll" resultType="com.esv.datacenter.iot.module.datamodel.dto.DataModelAlarmRuleDto">
select a.id, a.model_id, a.property_id, a.rule_expression, a.alarm_level, a.threshold,
b.property_code, b.property_code, b.property_name, b.property_default_value, b.property_unit
from data_model_alarm_rule a, data_model_property b
where a.model_id = b.model_id and a.property_id = b.id
ORDER BY model_id ASC
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
<select id="select4Page" parameterType="com.esv.datacenter.iot.module.datamodel.form.DataModelForm" <select id="select4Page" parameterType="com.esv.datacenter.iot.module.datamodel.form.DataModelForm"
resultType="com.esv.datacenter.iot.module.datamodel.entity.DataModelEntity"> resultType="com.esv.datacenter.iot.module.datamodel.entity.DataModelEntity">
select * select *
from base_object_model from data_model
where deleted = false where deleted = false
<if test="queryObj.name != null"> <if test="queryObj.name != null">
and name like #{queryObj.name} and name like #{queryObj.name}
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
</select> </select>
<update id="logicDeleteModel" parameterType="com.esv.datacenter.iot.module.datamodel.entity.DataModelEntity"> <update id="logicDeleteModel" parameterType="com.esv.datacenter.iot.module.datamodel.entity.DataModelEntity">
update base_object_model update data_model
set deleted = #{deleted} set deleted = #{deleted}
where id = #{id} where id = #{id}
</update> </update>
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
</resultMap> </resultMap>
<update id="logicDeleteModelProperty" parameterType="com.esv.datacenter.iot.module.datamodel.entity.DataModelPropertyEntity"> <update id="logicDeleteModelProperty" parameterType="com.esv.datacenter.iot.module.datamodel.entity.DataModelPropertyEntity">
update base_object_model_property update data_model_property
set deleted = #{deleted} set deleted = #{deleted}
where model_id = #{modelId} where model_id = #{modelId}
</update> </update>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.esv.datacenter.iot.module.devicemodel.dao.DeviceDataMapDao">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.esv.datacenter.iot.module.devicemodel.entity.DeviceDataMapEntity" id="deviceDataMapMap">
<result property="id" column="id"/>
<result property="tenantId" column="tenant_id"/>
<result property="departmentId" column="department_id"/>
<result property="deviceTypeId" column="device_type_id"/>
<result property="dataModelId" column="data_model_id"/>
<result property="createUser" column="create_user"/>
<result property="updateUser" column="update_user"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.esv.datacenter.iot.module.devicemodel.dao.DeviceInstanceDao">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.esv.datacenter.iot.module.devicemodel.entity.DeviceInstanceEntity" id="deviceInstanceMap">
<result property="id" column="id"/>
<result property="tenantId" column="tenant_id"/>
<result property="departmentId" column="department_id"/>
<result property="deviceTypeId" column="device_type_id"/>
<result property="name" column="name"/>
<result property="description" column="description"/>
<result property="businessId" column="business_id"/>
<result property="deviceModel" column="device_model"/>
<result property="deleted" column="deleted"/>
<result property="createUser" column="create_user"/>
<result property="updateUser" column="update_user"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.esv.datacenter.iot.module.devicemodel.dao.DeviceTypeDao">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.esv.datacenter.iot.module.devicemodel.entity.DeviceTypeEntity" id="deviceTypeMap">
<result property="id" column="id"/>
<result property="tenantId" column="tenant_id"/>
<result property="departmentId" column="department_id"/>
<result property="name" column="name"/>
<result property="description" column="description"/>
<result property="deleted" column="deleted"/>
<result property="createUser" column="create_user"/>
<result property="updateUser" column="update_user"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment