diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java index 40eee1b..b2e39c0 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java @@ -84,6 +84,16 @@ public class DeviceController { return service.query(page, query); } + /** + * 根据名字模糊查询 + */ + @DataPermission + @GetMapping("/list") + @PreAuthorize("hasAuthority('iot:device:query')") + public List findByName(String name) { + return service.findByName(name); + } + /** * 删除设备 */ diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/Device.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/Device.java index a5aa5e4..b1226d4 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/Device.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/Device.java @@ -35,7 +35,7 @@ public class Device extends BaseEntity { /** * 设备是否在线,默认在线 */ - private Boolean online = false; + private Boolean online = true; /** * 设备状态 diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java index 0843332..b9ccace 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java @@ -34,4 +34,6 @@ public interface DeviceService extends IService { DeviceStatusVo status(); String send(Long deviceId, Integer qos, JSONObject paras) throws JSONException; + + List findByName(String name); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java index 7cb0a49..2b62acb 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java @@ -222,4 +222,13 @@ public class DeviceServiceImpl extends ServiceImpl imp return payload; } + /** + * 根据名称获取设备列表 + */ + @Override + public List findByName(String name) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(Device::getName, name); + return baseMapper.selectList(queryWrapper); + } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/dto/ProductDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/dto/ProductDto.java index 8a16f50..287857a 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/dto/ProductDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/dto/ProductDto.java @@ -1,5 +1,7 @@ package com.zsc.edu.gateway.modules.iot.product.dto; +import com.baomidou.mybatisplus.annotation.TableField; +import com.zsc.edu.gateway.modules.attachment.entity.Attachment; import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.iot.tsl.dto.ParamDto; import lombok.AllArgsConstructor; @@ -51,4 +53,15 @@ public class ProductDto { * 说明 */ public String remark; + + /** + * 产品图标附件ID + */ + public String iconId; + + /** + * 产品预览图附件ID + */ + public String previewId; + } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/entity/Product.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/entity/Product.java index cfbfd4e..4fa1084 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/entity/Product.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/entity/Product.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonInclude; import com.zsc.edu.gateway.common.enums.IState; +import com.zsc.edu.gateway.modules.attachment.entity.Attachment; import com.zsc.edu.gateway.modules.iot.tsl.entity.Param; import com.zsc.edu.gateway.modules.system.entity.BaseEntity; import lombok.AllArgsConstructor; @@ -61,6 +62,28 @@ public class Product extends BaseEntity { */ private Boolean enabled = true; + /** + * 产品图标附件ID + */ + public String iconId; + + /** + * 产品图标附件 + */ + @TableField(exist = false) + public Attachment icon; + + /** + * 产品预览图附件ID + */ + public String previewId; + + /** + * 产品预览图附件 + */ + @TableField(exist = false) + public Attachment preview; + /** * 接入方式 */ diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java index bb093b5..f84bab7 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java @@ -11,6 +11,7 @@ import com.zsc.edu.gateway.modules.iot.record.entity.RecordData; import com.zsc.edu.gateway.modules.iot.record.entity.RecordDataStatusVo; import com.zsc.edu.gateway.modules.iot.record.repo.RecordDataRepository; import com.zsc.edu.gateway.modules.iot.record.service.RecordDataService; +import com.zsc.edu.gateway.modules.iot.tsl.entity.DataType; import com.zsc.edu.gateway.modules.iot.tsl.entity.Event; import com.zsc.edu.gateway.modules.iot.tsl.entity.EventLog; import com.zsc.edu.gateway.modules.iot.tsl.entity.CompareParam; @@ -24,11 +25,9 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.List; -import java.util.function.Consumer; -import java.util.function.Predicate; /** - *上报数据 + * 上报数据 * * @author zhuang */ @@ -80,7 +79,6 @@ public class RecordDataServiceImpl extends ServiceImpl events = eventRepository.selectByProductId(device.getProductId(),true); + List events = eventRepository.selectByProductId(device.getProductId(), true); if (events.isEmpty()) { return; // 如果没有事件,直接返回 } @@ -125,34 +123,51 @@ public class RecordDataServiceImpl extends ServiceImpl comparison = switch (compareType) { - case GT -> v -> v > defaultValue; - case LT -> v -> v < defaultValue; - case EQ -> v -> v == defaultValue; - case GE -> v -> v >= defaultValue; - case LE -> v -> v <= defaultValue; - }; + /** + * 转换数值 + */ + private Object convertValue(String value, DataType dataType) { + return switch (dataType) { + case INT -> Integer.parseInt(value); + case FLOAT -> Float.parseFloat(value); + case DOUBLE -> Double.parseDouble(value); + case BOOLEAN -> Boolean.parseBoolean(value); + default -> throw new IllegalArgumentException("Unsupported data type: " + dataType); + }; + } - // 定义插入日志的 Consumer - Consumer logInsertion = v -> { - if (comparison.test(v)) { - eventLogRepository.insert(new EventLog(null, event.getName(), recordData.getId(), recordData, LocalDateTime.now(), null, null)); - } - }; - - // 执行比较和日志插入 - logInsertion.accept(value); + /** + * 判断数值进行监控 + */ + private void processComparison(RecordData recordData, CompareParam param, Event event, Number defaultValue, Number value) { + CompareParam.CompareType compareType = param.getCompareType(); + boolean result = switch (compareType) { + case GT -> value.doubleValue() > defaultValue.doubleValue(); + case LT -> value.doubleValue() < defaultValue.doubleValue(); + case EQ -> value.doubleValue() == defaultValue.doubleValue(); + case GE -> value.doubleValue() >= defaultValue.doubleValue(); + case LE -> value.doubleValue() <= defaultValue.doubleValue(); + }; + if (result) { + eventLogRepository.insert(new EventLog(null, event.getName(), recordData.getId(), recordData, LocalDateTime.now(), null, null)); } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/ParamDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/ParamDto.java index 84616a0..e36e385 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/ParamDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/ParamDto.java @@ -29,6 +29,6 @@ public class ParamDto { private CompareParam.CompareType compareType; - private Double defaultValue; + private String defaultValue; } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/CompareParam.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/CompareParam.java index 2f91fa0..04914d6 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/CompareParam.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/CompareParam.java @@ -69,5 +69,4 @@ public class CompareParam extends Param { return this.description; } } - } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/Event.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/Event.java index 79ba494..051db1d 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/Event.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/Event.java @@ -34,7 +34,7 @@ public class Event extends BaseParam { /** * 是否启用服务 */ - private Boolean enabled; + private Boolean enabled = true; /** * 服务输出的参数 diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/mapper/CompareParamMapper.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/mapper/CompareParamMapper.java new file mode 100644 index 0000000..56ecefc --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/mapper/CompareParamMapper.java @@ -0,0 +1,14 @@ +package com.zsc.edu.gateway.modules.iot.tsl.mapper; + +import com.zsc.edu.gateway.common.mapstruct.BaseMapper; +import com.zsc.edu.gateway.modules.iot.tsl.dto.ParamDto; +import com.zsc.edu.gateway.modules.iot.tsl.entity.CompareParam; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +/** + * @author zhuang + */ +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface CompareParamMapper extends BaseMapper { +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/CompareParamRepository.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/CompareParamRepository.java new file mode 100644 index 0000000..1b9ce7e --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/CompareParamRepository.java @@ -0,0 +1,7 @@ +package com.zsc.edu.gateway.modules.iot.tsl.repo; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zsc.edu.gateway.modules.iot.tsl.entity.CompareParam; + +public interface CompareParamRepository extends BaseMapper { +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/ParamRepository.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/ParamRepository.java index 55f1675..285df2b 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/ParamRepository.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/ParamRepository.java @@ -1,6 +1,7 @@ package com.zsc.edu.gateway.modules.iot.tsl.repo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zsc.edu.gateway.modules.iot.tsl.entity.CompareParam; import com.zsc.edu.gateway.modules.iot.tsl.entity.Param; /** diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/ParamService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/ParamService.java index 6a4a0a7..78cd5a7 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/ParamService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/ParamService.java @@ -3,6 +3,7 @@ package com.zsc.edu.gateway.modules.iot.tsl.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zsc.edu.gateway.modules.iot.tsl.dto.ParamDto; import com.zsc.edu.gateway.modules.iot.tsl.entity.Param; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -13,6 +14,8 @@ public interface ParamService extends IService { Boolean create(List params, Long id, Param.ForeignType foreignType); + Boolean createCompareParam(List params, Long id, Param.ForeignType foreignType); + Boolean update(List paramDto, Long id); Boolean delete(Long id); diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/EventServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/EventServiceImpl.java index 6bca633..d3c2995 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/EventServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/EventServiceImpl.java @@ -36,7 +36,7 @@ public class EventServiceImpl extends ServiceImpl implem } Event event = mapper.toEntity(dto); save(event); - paramService.create(dto.getOutputs(), event.getId(), Param.ForeignType.EVENT); + paramService.createCompareParam(dto.getOutputs(), event.getId(), Param.ForeignType.EVENT); return event; } /** diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/ParamServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/ParamServiceImpl.java index 6b32aed..0f049d6 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/ParamServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/ParamServiceImpl.java @@ -3,8 +3,11 @@ package com.zsc.edu.gateway.modules.iot.tsl.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zsc.edu.gateway.modules.iot.tsl.dto.ParamDto; +import com.zsc.edu.gateway.modules.iot.tsl.entity.CompareParam; import com.zsc.edu.gateway.modules.iot.tsl.entity.Param; +import com.zsc.edu.gateway.modules.iot.tsl.mapper.CompareParamMapper; import com.zsc.edu.gateway.modules.iot.tsl.mapper.ParamMapper; +import com.zsc.edu.gateway.modules.iot.tsl.repo.CompareParamRepository; import com.zsc.edu.gateway.modules.iot.tsl.repo.ParamRepository; import com.zsc.edu.gateway.modules.iot.tsl.service.ParamService; import lombok.AllArgsConstructor; @@ -24,6 +27,8 @@ import java.util.stream.IntStream; public class ParamServiceImpl extends ServiceImpl implements ParamService { private final ParamMapper mapper; private final ParamMapper paramMapper; + private final CompareParamMapper compareParamMapper; + private final CompareParamRepository compareParamRepository; @Override @Transactional public Boolean create(List params, Long id, Param.ForeignType foreignType) { @@ -39,6 +44,21 @@ public class ParamServiceImpl extends ServiceImpl implem return true; } + @Override + @Transactional + public Boolean createCompareParam(List params, Long id, Param.ForeignType foreignType) { + List paramsToInsert = params.stream() + .map(dto -> { + CompareParam param = compareParamMapper.toEntity(dto); + param.setForeignId(id); + param.setForeignType(foreignType); + return param; + }) + .collect(Collectors.toList()); + compareParamRepository.insert(paramsToInsert); + return true; + } + @Override @Transactional public Boolean update(List paramDto, Long id) { diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 4653eb7..894d0cc 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -59,7 +59,7 @@ jwt: expiration: 3600 gatherer: - version: 123 + version: 987 mqtt: username: you_mqtt_username diff --git a/src/main/resources/db/gateway/public/iot_event.sql b/src/main/resources/db/gateway/public/iot_event.sql index 5ea0aa4..38b1bc3 100644 --- a/src/main/resources/db/gateway/public/iot_event.sql +++ b/src/main/resources/db/gateway/public/iot_event.sql @@ -1,14 +1,16 @@ create table iot_event ( - id bigint not null + id bigint generated by default as identity constraint iot_event_pk primary key, product_id bigint, - type integer, + type varchar, identifier varchar, name varchar, - remark varchar, - dept_id bigint + remark varchar, + dept_id bigint, + create_id bigint, + enabled boolean ); comment on table iot_event is '物模型服务'; @@ -27,6 +29,10 @@ comment on column iot_event.remark is '备注'; comment on column iot_event.dept_id is '部门权限id'; +comment on column iot_event.create_id is '创建人id'; + +comment on column iot_event.enabled is '是否启用'; + alter table iot_event owner to gitea; diff --git a/src/main/resources/mappers/iot/ProductMapper.xml b/src/main/resources/mappers/iot/ProductMapper.xml index dc48b00..7c59ab1 100644 --- a/src/main/resources/mappers/iot/ProductMapper.xml +++ b/src/main/resources/mappers/iot/ProductMapper.xml @@ -17,6 +17,20 @@ + + + + + + + + + + @@ -39,10 +53,15 @@ ip.type as param_type, ip.identifier as param_identifier, ip.name as param_name, - ip.remark as param_remark + ip.remark as param_remark, + ai.id as icon_id, + ai.file_name as icon_file_name, + ap.file_name as preview_file_name, + ap.id as preview_id from iot_product p - left join iot_param ip on p.id = ip.foreign_id - and ip.foreign_type = 3 + left join iot_param ip on p.id = ip.foreign_id and ip.foreign_type = 3 + left join attachment ai on p.icon_id = ai.id + left join attachment ap on p.preview_id = ap.id where p.id = #{id} \ No newline at end of file diff --git a/storage/attachment/a9b4a76691b4c4190e93739c70e6bebdb73c6420 b/storage/attachment/a9b4a76691b4c4190e93739c70e6bebdb73c6420 new file mode 100644 index 0000000..1242baa Binary files /dev/null and b/storage/attachment/a9b4a76691b4c4190e93739c70e6bebdb73c6420 differ diff --git a/storage/attachment/c76b244523168f6e295ba0e54aeac745624a3123 b/storage/attachment/c76b244523168f6e295ba0e54aeac745624a3123 new file mode 100644 index 0000000..783c9ac Binary files /dev/null and b/storage/attachment/c76b244523168f6e295ba0e54aeac745624a3123 differ diff --git a/storage/temp/1057467817600 b/storage/temp/1057467817600 new file mode 100644 index 0000000..783c9ac Binary files /dev/null and b/storage/temp/1057467817600 differ diff --git a/storage/temp/1880201683900 b/storage/temp/1880201683900 new file mode 100644 index 0000000..783c9ac Binary files /dev/null and b/storage/temp/1880201683900 differ diff --git a/storage/temp/1918234931000 b/storage/temp/1918234931000 new file mode 100644 index 0000000..783c9ac Binary files /dev/null and b/storage/temp/1918234931000 differ diff --git a/storage/temp/4249475669499 b/storage/temp/4249475669499 new file mode 100644 index 0000000..783c9ac Binary files /dev/null and b/storage/temp/4249475669499 differ diff --git a/storage/temp/966226913100 b/storage/temp/966226913100 new file mode 100644 index 0000000..783c9ac Binary files /dev/null and b/storage/temp/966226913100 differ