diff --git a/src/main/java/com/zsc/edu/gateway/exception/ApiExceptionHandler.java b/src/main/java/com/zsc/edu/gateway/exception/ApiExceptionHandler.java index bc6f36d..7cd4acd 100644 --- a/src/main/java/com/zsc/edu/gateway/exception/ApiExceptionHandler.java +++ b/src/main/java/com/zsc/edu/gateway/exception/ApiExceptionHandler.java @@ -65,6 +65,7 @@ public class ApiExceptionHandler { return new ResponseEntity<>(objectMapper.writeValueAsString(Map.of("msg", ex.getMessage())), HttpStatus.INTERNAL_SERVER_ERROR); } + //TODO 冲突 @ExceptionHandler(value = {Exception.class}) public ResponseEntity handleException(Exception ex) throws JsonProcessingException { log.error("Exception: {}", objectMapper.writeValueAsString(Map.of("msg", ex.getMessage()))); diff --git a/src/main/java/com/zsc/edu/gateway/framework/json/JsonConfig.java b/src/main/java/com/zsc/edu/gateway/framework/json/JsonConfig.java index 805b799..44176ff 100644 --- a/src/main/java/com/zsc/edu/gateway/framework/json/JsonConfig.java +++ b/src/main/java/com/zsc/edu/gateway/framework/json/JsonConfig.java @@ -5,6 +5,9 @@ import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilde import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +/** + * @author veryao + */ @Configuration public class JsonConfig { diff --git a/src/main/java/com/zsc/edu/gateway/framework/json/MapJsonTypeHandler.java b/src/main/java/com/zsc/edu/gateway/framework/json/MapJsonTypeHandler.java new file mode 100644 index 0000000..32ee136 --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/framework/json/MapJsonTypeHandler.java @@ -0,0 +1,61 @@ +package com.zsc.edu.gateway.framework.json; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.stereotype.Component; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +/** + * @author zhuang + */ +@Component +public class MapJsonTypeHandler extends BaseTypeHandler> { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, Map parameter, JdbcType jdbcType) throws SQLException { + try { + ps.setString(i, objectMapper.writeValueAsString(parameter)); + } catch (JsonProcessingException e) { + throw new SQLException("Error converting map to JSON", e); + } + } + + @Override + public Map getNullableResult(ResultSet rs, String columnName) throws SQLException { + String json = rs.getString(columnName); + return parseJson(json); + } + + @Override + public Map getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String json = rs.getString(columnIndex); + return parseJson(json); + } + + @Override + public Map getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + String json = cs.getString(columnIndex); + return parseJson(json); + } + + private Map parseJson(String json) { + if (json == null) { + return null; + } + try { + return objectMapper.readValue(json, HashMap.class); + } catch (Exception e) { + throw new RuntimeException("Error parsing JSON to map", e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/gateway/framework/mybatisplus/MybatisPlusConfig.java b/src/main/java/com/zsc/edu/gateway/framework/mybatisplus/MybatisPlusConfig.java index fe0ecf1..42fc7db 100644 --- a/src/main/java/com/zsc/edu/gateway/framework/mybatisplus/MybatisPlusConfig.java +++ b/src/main/java/com/zsc/edu/gateway/framework/mybatisplus/MybatisPlusConfig.java @@ -23,9 +23,8 @@ public class MybatisPlusConfig { // // 添加自定义的数据权限处理器 // dataPermissionInterceptor.setDataPermissionHandler(new MyDataPermissionHandler()); // interceptor.addInnerInterceptor(dataPermissionInterceptor); - - return interceptor; } + } diff --git a/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java b/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java index 3bbf5ad..5e84d1a 100644 --- a/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java +++ b/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java @@ -11,6 +11,7 @@ import org.springframework.security.authentication.dao.DaoAuthenticationProvider import org.springframework.security.authorization.AuthorizationDecision; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.session.SessionRegistry; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -32,6 +33,7 @@ import javax.sql.DataSource; @AllArgsConstructor @EnableMethodSecurity @Configuration +@EnableWebSecurity public class SpringSecurityConfig { private final UserDetailsService userDetailsService; 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 622e9a2..fb979cf 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 @@ -1,12 +1,11 @@ package com.zsc.edu.gateway.modules.iot.device.controller; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zsc.edu.gateway.modules.iot.device.dto.BatchDeviceDto; import com.zsc.edu.gateway.modules.iot.device.dto.DeviceDto; import com.zsc.edu.gateway.modules.iot.device.dto.DeviceServeDto; import com.zsc.edu.gateway.modules.iot.device.entity.Device; -import com.zsc.edu.gateway.modules.iot.device.entity.DeviceSelect; +import com.zsc.edu.gateway.modules.iot.device.entity.DeviceDiff; import com.zsc.edu.gateway.modules.iot.device.query.DeviceQuery; import com.zsc.edu.gateway.modules.iot.device.service.DeviceService; import com.zsc.edu.gateway.modules.iot.device.vo.DeviceVo; @@ -108,7 +107,7 @@ public class DeviceController { * 根据名称模糊查询 */ @GetMapping("/query") - public List query(String name) { + public List query(String name) { return service.queryByName(name); } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java index 0c7d80d..95dfec3 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java @@ -8,6 +8,8 @@ import lombok.NoArgsConstructor; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.util.Map; + /** * @author yao */ @@ -31,11 +33,11 @@ public class BatchDeviceDto { /** * 扩展属性 */ - private String extendParams; + private Map extendParams; /** * 设备物模型属性 */ - private String properties; + private Map properties; /** * 固件版本 */ @@ -47,6 +49,11 @@ public class BatchDeviceDto { /** * 所属产品 */ + @NotBlank(message = "所属产品不为空") private Long productId; + /** + * 备注 + */ + private String remark; } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java index c5e14f7..184ba49 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java @@ -7,6 +7,8 @@ import lombok.NoArgsConstructor; import jakarta.validation.constraints.NotBlank; +import java.util.Map; + /** * @author 15864 */ @@ -34,17 +36,21 @@ public class DeviceDto { /** * 扩展属性 */ - - private String extendParams; + private Map extendParams; /** * 设备物模型属性 */ - private String properties; + private Map properties; /** * 所属产品 */ private Long productId; + /** + * 备注 + */ + private String remark; + } 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 857389a..b50b1de 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 @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.zsc.edu.gateway.common.enums.IState; +import com.zsc.edu.gateway.framework.json.MapJsonTypeHandler; import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.system.entity.BaseEntity; import lombok.AllArgsConstructor; @@ -11,7 +12,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import java.util.Objects; +import java.util.Map; /** * @author 15864 @@ -60,16 +61,17 @@ public class Device extends BaseEntity { */ private String clientId; - /** * 扩展配置 */ - private String extendParams = ""; + @TableField(typeHandler = MapJsonTypeHandler.class) + private Map extendParams; /** * 设备属性 */ - private String properties = ""; + @TableField(typeHandler = MapJsonTypeHandler.class) + private Map properties; /** * 所属产品ID diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/DeviceSelect.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/DeviceDiff.java similarity index 92% rename from src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/DeviceSelect.java rename to src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/DeviceDiff.java index be27aef..7fa7fea 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/DeviceSelect.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/DeviceDiff.java @@ -12,7 +12,7 @@ import lombok.Setter; @Getter @NoArgsConstructor @AllArgsConstructor -public class DeviceSelect { +public class DeviceDiff { /** * 设备ID */ diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/repo/DeviceRepository.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/repo/DeviceRepository.java index c9874cd..f00098d 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/repo/DeviceRepository.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/repo/DeviceRepository.java @@ -1,12 +1,8 @@ package com.zsc.edu.gateway.modules.iot.device.repo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zsc.edu.gateway.modules.iot.device.entity.Device; -import com.zsc.edu.gateway.modules.iot.device.query.DeviceQuery; import com.zsc.edu.gateway.modules.iot.device.vo.DeviceVo; -import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -18,11 +14,9 @@ public interface DeviceRepository extends BaseMapper { @Select("select * from iot_device where name=#{name}") Device findByName(@Param("name") String name); - IPage query(Page page, @Param("query") DeviceQuery query); - DeviceVo findById(@Param("id") Long id); - @Select("select * from iot_device where client_id=#{clientId} and status=#{status} and online=#{online}") + @Select("select * from iot_device where client_id=#{clientId} and state=#{status} and online=#{online}") Device findByClientIdAndStateAndOnline(@Param("clientId") String clientId, @Param("status") Device.Status status, @Param("online") Boolean online); 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 0f4564d..8e60ed5 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 @@ -7,7 +7,7 @@ import com.zsc.edu.gateway.modules.iot.device.dto.BatchDeviceDto; import com.zsc.edu.gateway.modules.iot.device.dto.DeviceDto; import com.zsc.edu.gateway.modules.iot.device.dto.DeviceServeDto; import com.zsc.edu.gateway.modules.iot.device.entity.Device; -import com.zsc.edu.gateway.modules.iot.device.entity.DeviceSelect; +import com.zsc.edu.gateway.modules.iot.device.entity.DeviceDiff; import com.zsc.edu.gateway.modules.iot.device.query.DeviceQuery; import com.zsc.edu.gateway.modules.iot.device.vo.DeviceVo; @@ -23,11 +23,9 @@ public interface DeviceService extends IService { Device update(DeviceDto dto, Long id); - IPage query(Page page, DeviceQuery query); - DeviceVo detail(Long id); Boolean serve(DeviceServeDto dto); - List queryByName(String name); + List queryByName(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 eedda2c..0e133b0 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 @@ -11,7 +11,7 @@ import com.zsc.edu.gateway.modules.iot.device.dto.BatchDeviceDto; import com.zsc.edu.gateway.modules.iot.device.dto.DeviceDto; import com.zsc.edu.gateway.modules.iot.device.dto.DeviceServeDto; import com.zsc.edu.gateway.modules.iot.device.entity.Device; -import com.zsc.edu.gateway.modules.iot.device.entity.DeviceSelect; +import com.zsc.edu.gateway.modules.iot.device.entity.DeviceDiff; import com.zsc.edu.gateway.modules.iot.device.mapper.DeviceMapper; import com.zsc.edu.gateway.modules.iot.device.query.DeviceQuery; import com.zsc.edu.gateway.modules.iot.device.repo.DeviceRepository; @@ -61,26 +61,27 @@ public class DeviceServiceImpl extends ServiceImpl imp */ @Override public List batchCreate(BatchDeviceDto dto) { - List devices = new ArrayList<>(); + if (dto.getNum() == null || dto.getNum() <= 0) { + throw new ConstraintException("设备数量必须大于0!"); + } + if (dto.getPrefix() == null) { + throw new ConstraintException("前缀不能为空!"); + } + if (dto.getProductId() == null) { + throw new ConstraintException("产品ID不能为空!"); + } + // 获取产品信息 Product product = productRepo.selectById(dto.getProductId()); if (product == null) { throw new ConstraintException("该产品不存在!"); } + // 生成设备名称列表 List names = new ArrayList<>(); for (int i = 0; i < dto.getNum(); i++) { String name = String.format("%s%05d", dto.getPrefix(), i + 1); names.add(name); - DeviceDto deviceDto = new DeviceDto(); - deviceDto.setName(name); - deviceDto.setProductId(product.getId()); - deviceDto.setExtendParams(dto.getExtendParams()); - deviceDto.setProperties(dto.getProperties()); - deviceDto.setFirmwareVersion(dto.getFirmwareVersion()); - Device device = mapper.toEntity(deviceDto); - Integer typeCode = Integer.valueOf(product.getProductType()); - device.setClientId(String.format("%s%02d%02d%05d", "001", typeCode, 3, i + 1)); - devices.add(device); } + // 检查设备名称是否已存在 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(Device::getName, names); List existingDevices = baseMapper.selectList(queryWrapper); @@ -90,35 +91,43 @@ public class DeviceServiceImpl extends ServiceImpl imp .collect(Collectors.toList()); throw new ConstraintException("设备已存在!已存在的设备名称: " + String.join(", ", existingNames)); } + // 创建设备列表 + List devices = new ArrayList<>(); + for (int i = 0; i < dto.getNum(); i++) { + String name = String.format("%s%05d", dto.getPrefix(), i + 1); + DeviceDto deviceDto = new DeviceDto(); + deviceDto.setName(name); + deviceDto.setProductId(product.getId()); + deviceDto.setExtendParams(dto.getExtendParams()); + deviceDto.setProperties(dto.getProperties()); + deviceDto.setFirmwareVersion(dto.getFirmwareVersion()); + deviceDto.setHardwareVersion(dto.getHardwareVersion()); + Device device = mapper.toEntity(deviceDto); + String productType = product.getProductType(); + int typeCode = Math.abs(productType.hashCode()) % 100; + device.setClientId(String.format("%s%02d%02d%05d", "001", typeCode, 3, i + 1)); + devices.add(device); + } + // 批量插入设备 baseMapper.insert(devices); return devices; } + /** * 更新设备 */ @Override public Device update(DeviceDto dto, Long id) { Device device = baseMapper.selectById(id); - if (device.getName().equals(dto.getName())) { - throw new ConstraintException("deviceName", dto.getName(), "设备名称已存在"); + if (Objects.equals(device.getName(), dto.getName())) { + throw new ConstraintException("名称为" + dto.getName() + "的设备已存在"); } mapper.convert(dto, device); updateById(device); return device; } - /** - * 分页查询设备 - * - * @param query 查询表单 - * @param page 分页参数 - */ - @Override - public IPage query(Page page, DeviceQuery query) { - return baseMapper.query(page, query); - } - /** * 通过Id查找设备详情 * @@ -149,10 +158,10 @@ public class DeviceServiceImpl extends ServiceImpl imp } @Override - public List queryByName(String name) { + public List queryByName(String name) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.like(StringUtils.hasText(name), Device::getName, name); List devices = baseMapper.selectList(query); - return devices.stream().map(device -> new DeviceSelect(device.getId(), device.getName())).collect(Collectors.toList()); + return devices.stream().map(device -> new DeviceDiff(device.getId(), device.getName())).collect(Collectors.toList()); } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java index 9b824fe..ff4cccf 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java @@ -8,6 +8,7 @@ import com.zsc.edu.gateway.modules.iot.tsl.entity.Param; import lombok.Data; import java.time.LocalDateTime; +import java.util.Map; import java.util.Set; /** @@ -60,12 +61,12 @@ public class DeviceVo { /** * 扩展配置 */ - private String extendParams = ""; + private Map extendParams; /** * 设备属性 */ - private String properties = ""; + private Map properties; /** * 备注说明 diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java index dfa083f..f66b205 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java @@ -70,7 +70,7 @@ public class ProductController { * @return 部门列表 */ @GetMapping("fuzzy") - @PreAuthorize("hasAnyAuthority('DEVICE_CREATE', 'DEVICE_UPDATE')") +// @PreAuthorize("hasAnyAuthority('DEVICE_CREATE', 'DEVICE_UPDATE')") public Page fuzzyQuery(Page page, ProductQuery query) { return service.page(page, query.wrapper()); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/query/ProductQuery.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/query/ProductQuery.java index 4574632..a292f5a 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/query/ProductQuery.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/query/ProductQuery.java @@ -26,7 +26,7 @@ public class ProductQuery { /** * 接入方式 */ - public List links; + public List links; public LambdaQueryWrapper wrapper() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java index 0d049d8..de6b33a 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java @@ -1,26 +1,17 @@ package com.zsc.edu.gateway.modules.iot.product.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zsc.edu.gateway.exception.ConstraintException; import com.zsc.edu.gateway.modules.iot.product.dto.ProductDto; import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.iot.product.mapper.ProductMapper; -import com.zsc.edu.gateway.modules.iot.product.query.ProductQuery; import com.zsc.edu.gateway.modules.iot.product.repo.ProductRepository; import com.zsc.edu.gateway.modules.iot.product.service.ProductService; -import com.zsc.edu.gateway.modules.iot.tsl.dto.ParamDto; import com.zsc.edu.gateway.modules.iot.tsl.entity.Param; -import com.zsc.edu.gateway.modules.iot.tsl.mapper.ParamMapper; -import com.zsc.edu.gateway.modules.iot.tsl.repo.ParamRepository; import com.zsc.edu.gateway.modules.iot.tsl.service.ParamService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.stream.Collectors; - /** * @author zhaung @@ -43,6 +34,7 @@ public class ProductServiceImpl extends ServiceImpl throw new ConstraintException("设备名称不能为空!"); } Product product = mapper.toEntity(dto); + product.setId(null); save(product); if (dto.getParams() != null) { paramService.create(dto.getParams(), product.getId(), Param.ForeignType.PRODUCT); @@ -66,7 +58,11 @@ public class ProductServiceImpl extends ServiceImpl @Override public Product detail(Long id) { - return baseMapper.selectById(id); + Product product = baseMapper.selectById(id); + if (product == null) { + throw new RuntimeException("产品不存在!请检查产品ID是否正确"); + } + return product; } /** diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java index 6a11410..b277684 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java @@ -1,9 +1,12 @@ package com.zsc.edu.gateway.modules.iot.record.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zsc.edu.gateway.framework.json.MapJsonTypeHandler; import lombok.*; -import java.util.Date; +import java.time.LocalDateTime; import java.util.Map; /** @@ -13,6 +16,7 @@ import java.util.Map; @Getter @NoArgsConstructor @AllArgsConstructor +@TableName("iot_record_data") public class RecordData { @TableId private String id; @@ -21,7 +25,8 @@ public class RecordData { private String attachmentId; + @TableField(typeHandler = MapJsonTypeHandler.class) private Map content; - private Date recordTime; + private LocalDateTime recordTime; } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/repo/RecordDataRepository.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/repo/RecordDataRepository.java index 967a8f5..417f035 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/repo/RecordDataRepository.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/repo/RecordDataRepository.java @@ -2,6 +2,7 @@ package com.zsc.edu.gateway.modules.iot.record.repo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zsc.edu.gateway.modules.iot.record.entity.RecordData; +import org.apache.ibatis.annotations.Select; import java.time.LocalDateTime; import java.util.List; @@ -10,8 +11,7 @@ import java.util.List; * @author zhuang */ public interface RecordDataRepository extends BaseMapper { - List findAllByClientIdAndRecordTimeAfter(String clientId, LocalDateTime recordTime); - + @Select("select * from iot_record_data where record_time_str = #{recordTimeStr}") List findByRecordTimeStr(String recordTimeStr); diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/RecordDataService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/RecordDataService.java index e03308a..6338f20 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/RecordDataService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/RecordDataService.java @@ -15,4 +15,4 @@ public interface RecordDataService extends IService { List page(IPage page, String clientId); List recordPhoto(String clientId); -} +} \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataDataServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java similarity index 84% rename from src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataDataServiceImpl.java rename to src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java index d17f33b..4d06e2b 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataDataServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java @@ -20,7 +20,7 @@ import java.util.Optional; */ @AllArgsConstructor @Service -public class RecordDataDataServiceImpl extends ServiceImpl implements RecordDataService { +public class RecordDataServiceImpl extends ServiceImpl implements RecordDataService { RedisUtils redisUtils; @Override public RecordData create(RecordData record) { @@ -37,10 +37,12 @@ public class RecordDataDataServiceImpl extends ServiceImpl recordPhoto(String clientId) { LocalDateTime recordTime = LocalDateTime.parse(redisUtils.get("serve:sendTime:photograph:" + clientId)); - List records = baseMapper.findAllByClientIdAndRecordTimeAfter(clientId, recordTime); + List records = baseMapper.selectList(new LambdaQueryWrapper() + .eq(RecordData::getClientId, clientId).le(RecordData::getRecordTime, recordTime)); Optional first = records.stream().max(Comparator.comparing(RecordData::getRecordTime)); if (first.isPresent()) { String recordTimeStr = (String) first.get().getContent().get("recordTimeStr"); @@ -48,6 +50,5 @@ public class RecordDataDataServiceImpl extends ServiceImpl outputs; 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 bd6d4bf..71f1ce0 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 @@ -18,6 +18,8 @@ public class ParamDto { public String identifier; + public String remark; + public DataType dataType; public Param.Type type; diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/PropertyDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/PropertyDto.java index 9c7cba1..5810520 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/PropertyDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/PropertyDto.java @@ -20,6 +20,8 @@ public class PropertyDto { public String identifier; + public String remark; + public DataType dataType; public Property.IoType ioType; diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/ServeDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/ServeDto.java index 1da1bea..d9917cc 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/ServeDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/dto/ServeDto.java @@ -21,6 +21,8 @@ public class ServeDto { public String identifier; + public String remark; + private List inputs; private List outputs; } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/BaseParam.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/BaseParam.java index c98f693..10d7c4d 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/BaseParam.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/BaseParam.java @@ -1,5 +1,7 @@ package com.zsc.edu.gateway.modules.iot.tsl.entity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Getter; @@ -20,6 +22,7 @@ public class BaseParam implements Serializable { /** * 序列化主键(有数据库提供,非自增) */ + @TableId(type = IdType.AUTO) private Long id; /** diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/PropertyRepository.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/PropertyRepository.java index 8c185f2..b6e94e3 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/PropertyRepository.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/PropertyRepository.java @@ -8,6 +8,7 @@ import com.zsc.edu.gateway.modules.iot.tsl.entity.Event; import com.zsc.edu.gateway.modules.iot.tsl.entity.Property; import com.zsc.edu.gateway.modules.iot.tsl.query.PropertyQuery; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -16,8 +17,6 @@ import java.util.List; */ public interface PropertyRepository extends BaseMapper { - -// IPage page(Page page, @Param("query") PropertyQuery query); - - Property selectById(@Param("id") Long id); + @Select("select * from iot_property where name=#{name}") + Property findByName(@Param("name") String name); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/PropertyService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/PropertyService.java index 14ad5db..0676d04 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/PropertyService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/PropertyService.java @@ -16,4 +16,5 @@ public interface PropertyService extends IService { Property update(PropertyDto dto, Long id); + Property detail(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 10a2a7a..064f039 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 @@ -59,7 +59,11 @@ public class EventServiceImpl extends ServiceImpl implem */ @Override public Event detail(Long id) { - return baseMapper.selectById(id); + Event event = baseMapper.selectById(id); + if (event == null) { + throw new ConstraintException("该事件不存在!请检查输入ID是否正确!"); + } + return event; } /** diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/PropertyServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/PropertyServiceImpl.java index 3b633c2..0454538 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/PropertyServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/PropertyServiceImpl.java @@ -24,6 +24,9 @@ public class PropertyServiceImpl extends ServiceImpl implem */ @Override public Serve detail(Long id) { - return baseMapper.selectById(id); + Serve serve = baseMapper.selectById(id); + if (serve == null) { + throw new ConstraintException("该服务不存在!请检查输入ID是否正确!"); + } + return serve; } /** diff --git a/src/main/java/com/zsc/edu/gateway/modules/notice/controller/BulletinController.java b/src/main/java/com/zsc/edu/gateway/modules/notice/controller/BulletinController.java index 512f063..aea7184 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/notice/controller/BulletinController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/notice/controller/BulletinController.java @@ -57,7 +57,7 @@ public class BulletinController { * @return 公告 */ @GetMapping("/{id}") - @PreAuthorize("hasAuthority('BULLETIN_QUERY')") +// @PreAuthorize("hasAuthority('BULLETIN_QUERY')") public BulletinVo detail(@AuthenticationPrincipal UserDetailsImpl userDetails, @PathVariable("id") Long id) { return service.detail(userDetails,id, null); } @@ -69,7 +69,7 @@ public class BulletinController { * @return 分页数据 */ @GetMapping() - @PreAuthorize("hasAuthority('BULLETIN_QUERY')") +// @PreAuthorize("hasAuthority('BULLETIN_QUERY')") public Page query(Page page, BulletinQuery query) { return service.page(page, query.wrapper()); } @@ -82,7 +82,7 @@ public class BulletinController { * @return 公告 */ @PostMapping - @PreAuthorize("hasAuthority('BULLETIN_CREATE')") +// @PreAuthorize("hasAuthority('BULLETIN_CREATE')") public Bulletin create(@AuthenticationPrincipal UserDetailsImpl userDetails, @RequestBody BulletinDto dto) { return service.create(userDetails, dto); } @@ -96,7 +96,7 @@ public class BulletinController { * @return 公告 */ @PatchMapping("/{id}") - @PreAuthorize("hasAuthority('BULLETIN_UPDATE')") +// @PreAuthorize("hasAuthority('BULLETIN_UPDATE')") public Boolean update(@AuthenticationPrincipal UserDetailsImpl userDetails, @RequestBody BulletinDto dto, @PathVariable("id") Long id) { return service.update(userDetails, dto, id); } @@ -108,7 +108,7 @@ public class BulletinController { * @return 公告 */ @PatchMapping("/{id}/toggle-top") - @PreAuthorize("hasAuthority('BULLETIN_UPDATE')") +// @PreAuthorize("hasAuthority('BULLETIN_UPDATE')") public Boolean toggleTop(@PathVariable("id") Long id) { return service.toggleTop(id); } @@ -121,7 +121,7 @@ public class BulletinController { * @return 公告 */ @PatchMapping("/publish") - @PreAuthorize("hasAuthority('BULLETIN_PUBLISH')") +// @PreAuthorize("hasAuthority('BULLETIN_PUBLISH')") public Boolean publish(@AuthenticationPrincipal UserDetailsImpl userDetails, @RequestBody List ids) { return service.publish(userDetails, ids); } @@ -134,7 +134,7 @@ public class BulletinController { * @return 公告 */ @PatchMapping("/{id}/toggleClose") - @PreAuthorize("hasAuthority('BULLETIN_CLOSE')") +// @PreAuthorize("hasAuthority('BULLETIN_CLOSE')") public Boolean toggleClose(@AuthenticationPrincipal UserDetailsImpl userDetails, @PathVariable("id") Long id) { return service.close(userDetails, id); } @@ -146,7 +146,7 @@ public class BulletinController { * @return 公 */ @DeleteMapping("/{id}") - @PreAuthorize("hasAuthority('BULLETIN_DELETE')") +// @PreAuthorize("hasAuthority('BULLETIN_DELETE')") public Boolean delete(@PathVariable("id") Long id) { return service.delete(id); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/notice/controller/UserMessageController.java b/src/main/java/com/zsc/edu/gateway/modules/notice/controller/UserMessageController.java index aed17f3..bcb6da7 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/notice/controller/UserMessageController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/notice/controller/UserMessageController.java @@ -77,6 +77,17 @@ public class UserMessageController { return service.markAsRead(userDetails, messageIds); } + /** + * 普通用户确认消息已读,如果提交的已读消息ID集合为空,则将所有未读消息设为已读 + * + * @param userDetails 操作用户 + * @return 确认已读数量 + */ + @PatchMapping("/readAll") + public Boolean readAll(@AuthenticationPrincipal UserDetailsImpl userDetails) { + return service.markAllAsRead(userDetails); + } + /** * 管理查询消息详情 * @@ -84,9 +95,9 @@ public class UserMessageController { * @return 用户消息详情 */ @GetMapping("/{userId}/{messageId}") - @PreAuthorize("hasAuthority('MESSAGE_QUERY')") +// @PreAuthorize("hasAuthority('MESSAGE_QUERY')") public UserMessageVo detail(@PathVariable("userId") Long userId, @PathVariable("messageId") Long messageId) { - return service.detail(userId, messageId); + return service.detail(messageId, userId); } /** @@ -96,7 +107,7 @@ public class UserMessageController { * @return 分页数据 */ @GetMapping - @PreAuthorize("hasAuthority('MESSAGE_QUERY')") +// @PreAuthorize("hasAuthority('MESSAGE_QUERY')") public IPage page(Page page, AdminMessageQuery query) { return service.getAdminMessagePage(page, query); } @@ -108,7 +119,7 @@ public class UserMessageController { * @return 消息列表 */ @PostMapping - @PreAuthorize("hasAuthority('MESSAGE_CREATE')") +// @PreAuthorize("hasAuthority('MESSAGE_CREATE')") public Boolean create(@RequestBody UserMessageDto dto) { return service.createByAdmin(dto); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/notice/service/impl/UserMessageServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/notice/service/impl/UserMessageServiceImpl.java index 09b4ce7..0e1ad02 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/notice/service/impl/UserMessageServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/notice/service/impl/UserMessageServiceImpl.java @@ -121,7 +121,7 @@ public class UserMessageServiceImpl extends ServiceImpl implement return removeById(id); } - @Override - public Boolean updateRole(RoleDto dto, Long id) { - Role role =mapper.toEntity(dto); - role.setId(id); - if (dto.getAuthorities() != null && !dto.getAuthorities().isEmpty()) { - roleAuthService.remove(new LambdaQueryWrapper().eq(RoleAuthority::getRoleId, id)); - Set authorities = new HashSet<>(dto.getAuthorities()); - // roleAuthService.saveBatch(authorities.stream().map(authority -> new RoleAuthority(id, authority.getId())).collect(Collectors.toList())); - - } - return updateById(role); - - } - @Override public Boolean edit(RoleDto dto, Long id) { - boolean existsByName = count(new LambdaQueryWrapper().ne(Role::getId, id).eq(Role::getName, dto.getName())) > 0; - if (existsByName) { - throw new ConstraintException("name", dto.name, "同名角色已存在"); + Role existingRole = getById(id); + if (existingRole == null) { + throw new ConstraintException("id", id.toString(), "角色不存在"); } + if (!Objects.equals(existingRole.getName(), dto.getName()) && + count(new LambdaQueryWrapper().eq(Role::getName, dto.getName())) > 0) { + throw new ConstraintException("name", dto.getName(), "同名角色已存在"); + } + mapper.convert(dto, existingRole); roleAuthService.remove(new LambdaQueryWrapper().eq(RoleAuthority::getRoleId, id)); -// saveRoleAuths(id, dto.getAuthorities()); - return update(dto.updateWrapper(id)); + saveRoleAuths(id, dto.getAuthorities()); + return updateById(existingRole); } + @Override public RoleVo detail(Long id) { // Role role = getById(id); @@ -110,7 +103,10 @@ public class RoleServiceImpl extends ServiceImpl implement @Override public Boolean saveRoleAuths(Long roleId, Set authorities) { // 保存角色关联权限 - List roleAuthorities = authorities.stream().map(authority -> new RoleAuthority(roleId, authorityRepository.getAuthorityIdByName(authority.getName()))).collect(Collectors.toList()); + List roleAuthorities = authorities.stream() + .map(authority -> + new RoleAuthority(roleId, authorityRepository.getAuthorityIdByName(authority.getName()))) + .collect(Collectors.toList()); return roleAuthService.saveBatch(roleAuthorities); } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/UserServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/UserServiceImpl.java index 51e05db..61206f3 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/UserServiceImpl.java @@ -62,7 +62,7 @@ public class UserServiceImpl extends ServiceImpl implement public Boolean updatePassword(String password, Long id) { User user = getById(id); user.setPassword(passwordEncoder.encode(password)); - return save(user); + return updateById(user); } @Override diff --git a/src/main/resources/db/gateway.sql b/src/main/resources/db/gateway.sql index 18a0120..e20b778 100644 --- a/src/main/resources/db/gateway.sql +++ b/src/main/resources/db/gateway.sql @@ -544,7 +544,7 @@ VALUES (1, 1, 1, 'prop1', 'Property 1', 'This is property 1'), (9, 1, 1, 'prop9', 'Property 9', 'This is property 9'), (10, 2, 2, 'prop10', 'Property 10', 'This is property 10'); -INSERT INTO iot_serve (product_id, identifier, name, remark) +INSERT INTO iot_serve (id, product_id, identifier, name, remark) VALUES (1, 'serve1', 'Service 1', 'This is service 1'), (2, 'serve2', 'Service 2', 'This is service 2'), (3, 'serve3', 'Service 3', 'This is service 3'), @@ -640,4 +640,77 @@ VALUES (1, TRUE, TRUE, FALSE, TRUE, '测试消息1', '这是第一条测试消 9), (2, FALSE, FALSE, FALSE, TRUE, '测试消息10', '这是第十条测试消息的内容。', '备注10', NOW(), 'user5', NOW(), 'user5', 10); +-- V2__Alter_sys_user_id_to_bigserial.sql +-- 备份现有数据 +CREATE TABLE sys_user_backup AS +SELECT * +FROM sys_user; +-- 删除现有表 +DROP TABLE IF EXISTS sys_user; + +-- 重新创建表 +CREATE TABLE sys_user +( + id bigserial not null + constraint _copy_3 + primary key, + dept_id bigint, + role_id bigint, + username varchar(20) not null, + password varchar not null, + phone varchar(11), + email varchar(40), + name varchar(255), + avatar varchar(255), + address varchar(255), + create_by varchar(255), + update_by varchar(255), + create_time timestamp(6), + update_time timestamp(6), + remark varchar(255), + enable_state varchar(5) +); + +comment on column sys_user.dept_id is '部门id'; +comment on column sys_user.role_id is '角色id'; +comment on column sys_user.username is '用户名'; +comment on column sys_user.password is '密码'; +comment on column sys_user.phone is '手机号码'; +comment on column sys_user.email is '电子邮箱'; +comment on column sys_user.name is '昵称'; +comment on column sys_user.avatar is '头像'; +comment on column sys_user.address is '地址'; +comment on column sys_user.create_by is '创建者'; +comment on column sys_user.update_by is '更新者'; +comment on column sys_user.enable_state is '状态'; + +alter table sys_user + owner to gitea; + +-- 插入备份的数据 +INSERT INTO sys_user (dept_id, role_id, username, password, phone, email, name, avatar, address, create_by, update_by, + create_time, update_time, remark, enable_state) +SELECT dept_id, + role_id, + username, + password, + phone, + email, + name, + avatar, + address, + create_by, + update_by, + create_time, + update_time, + remark, + enable_state +FROM sys_user_backup; + +-- 删除备份表 +DROP TABLE sys_user_backup; + + +ALTER TABLE iot_property + ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY; \ No newline at end of file diff --git a/src/main/resources/db/gateway/public/iot_device.sql b/src/main/resources/db/gateway/public/iot_device.sql index 5338122..c61d396 100644 --- a/src/main/resources/db/gateway/public/iot_device.sql +++ b/src/main/resources/db/gateway/public/iot_device.sql @@ -1,6 +1,6 @@ create table iot_device ( - id serial not null + id bigserial not null constraint 表_name_pk primary key, name varchar, diff --git a/src/main/resources/db/gateway/public/iot_event.sql b/src/main/resources/db/gateway/public/iot_event.sql index 33b1b59..bd6331f 100644 --- a/src/main/resources/db/gateway/public/iot_event.sql +++ b/src/main/resources/db/gateway/public/iot_event.sql @@ -7,7 +7,8 @@ create table iot_event type integer, identifier varchar, name varchar, - remark varchar + remark varchar, + dept_id bigint ); comment on table iot_event is '物模型服务'; @@ -24,6 +25,8 @@ comment on column iot_event.name is '名称'; comment on column iot_event.remark is '备注'; +comment on column iot_event.dept_id is '部门权限id'; + alter table iot_event owner to gitea; diff --git a/src/main/resources/db/gateway/public/iot_product.sql b/src/main/resources/db/gateway/public/iot_product.sql index 2b6bc16..1882a59 100644 --- a/src/main/resources/db/gateway/public/iot_product.sql +++ b/src/main/resources/db/gateway/public/iot_product.sql @@ -1,18 +1,18 @@ create table iot_product ( - id bigserial not null + id bigserial not null constraint iot_product_pk primary key, - name varchar, - type_string varchar, - model varchar, - link integer, - create_by varchar, - create_time timestamp, - update_by varchar, - update_time timestamp, - remark varchar, - dept_id bigint + name varchar, + product_type varchar, + model varchar, + link integer, + create_by varchar, + create_time timestamp, + update_by varchar, + update_time timestamp, + remark varchar, + dept_id bigint ); comment on table iot_product is '产品表'; @@ -21,7 +21,7 @@ comment on column iot_product.id is '主键'; comment on column iot_product.name is '产品名称'; -comment on column iot_product.type_string is '产品类型'; +comment on column iot_product.product_type is '产品类型'; comment on column iot_product.model is '产品型号'; diff --git a/src/main/resources/db/gateway/public/iot_property.sql b/src/main/resources/db/gateway/public/iot_property.sql index 660af8b..4b6b756 100644 --- a/src/main/resources/db/gateway/public/iot_property.sql +++ b/src/main/resources/db/gateway/public/iot_property.sql @@ -1,6 +1,6 @@ create table iot_property ( - id bigserial not null + id bigint not null constraint iot_property_pk primary key, product_id bigint, diff --git a/src/main/resources/db/gateway/public/iot_record_data.sql b/src/main/resources/db/gateway/public/iot_record_data.sql new file mode 100644 index 0000000..2a86f9c --- /dev/null +++ b/src/main/resources/db/gateway/public/iot_record_data.sql @@ -0,0 +1,26 @@ +create table iot_record_data +( + id serial not null + constraint iot_record_data_pk + primary key, + client_id varchar, + attachment_id varchar, + content varchar, + record_time timestamp +); + +comment on table iot_record_data is '上报数据表'; + +comment on column iot_record_data.id is '主键'; + +comment on column iot_record_data.client_id is '委托人ID'; + +comment on column iot_record_data.attachment_id is '附件ID '; + +comment on column iot_record_data.content is '内容'; + +comment on column iot_record_data.record_time is '记录时间'; + +alter table iot_record_data + owner to gitea; + diff --git a/src/main/resources/db/gateway/public/iot_serve.sql b/src/main/resources/db/gateway/public/iot_serve.sql index 7308e52..39c3a5d 100644 --- a/src/main/resources/db/gateway/public/iot_serve.sql +++ b/src/main/resources/db/gateway/public/iot_serve.sql @@ -6,7 +6,8 @@ create table iot_serve product_id bigint, identifier varchar, name varchar, - remark varchar + remark varchar, + dept_id bigint ); comment on table iot_serve is '物模型服务'; @@ -21,6 +22,8 @@ comment on column iot_serve.name is '名称'; comment on column iot_serve.remark is '备注'; +comment on column iot_serve.dept_id is '部门权限id'; + alter table iot_serve owner to gitea; diff --git a/src/main/resources/db/gateway/public/sys_message.sql b/src/main/resources/db/gateway/public/sys_message.sql index 375e8f1..a247368 100644 --- a/src/main/resources/db/gateway/public/sys_message.sql +++ b/src/main/resources/db/gateway/public/sys_message.sql @@ -1,11 +1,12 @@ create table sys_message ( - id serial primary key, + id bigserial not null + primary key, type integer not null, system boolean not null, - email boolean not null, - sms boolean not null, - html boolean not null, + email boolean, + sms boolean, + html boolean, title varchar, content varchar, remark varchar, diff --git a/src/main/resources/db/gateway/public/sys_user.sql b/src/main/resources/db/gateway/public/sys_user.sql new file mode 100644 index 0000000..78550f3 --- /dev/null +++ b/src/main/resources/db/gateway/public/sys_user.sql @@ -0,0 +1,68 @@ +create table sys_user +( + dept_id bigint, + role_id bigint, + username varchar(20) not null, + password varchar not null, + phone varchar(11), + email varchar(40), + name varchar(255), + avatar varchar(255), + address varchar(255), + create_by varchar(255), + update_by varchar(255), + create_time timestamp(6), + update_time timestamp(6), + remark varchar(255), + enable_state varchar(5), + id bigint not null + primary key +); + +comment +on column sys_user.dept_id is '部门id'; + +comment +on column sys_user.role_id is '角色id'; + +comment +on column sys_user.username is '用户名'; + +comment +on column sys_user.password is '密码'; + +comment +on column sys_user.phone is '手机号码'; + +comment +on column sys_user.email is '电子邮箱'; + +comment +on column sys_user.name is '昵称'; + +comment +on column sys_user.avatar is '头像'; + +comment +on column sys_user.address is '地址'; + +comment +on column sys_user.create_by is '创建者'; + +comment +on column sys_user.update_by is '更新者'; + +comment +on column sys_user.enable_state is '状态'; + +alter table sys_user + owner to gitea; + +_user +. +enable_state +is '状态'; + +alter table sys_user + owner to gitea; + diff --git a/src/main/resources/mappers/iot/DeviceMapper.xml b/src/main/resources/mappers/iot/DeviceMapper.xml index d96a8fb..0e4663c 100644 --- a/src/main/resources/mappers/iot/DeviceMapper.xml +++ b/src/main/resources/mappers/iot/DeviceMapper.xml @@ -13,8 +13,10 @@ - - + + @@ -53,8 +55,7 @@ ip.remark as param_remark from iot_device d left join iot_product p on d.product_id = p.id - left join iot_product_param pp on pp.product_id = p.id - left join iot_param ip on pp.param_id = ip.id + left join iot_param ip on p.id = ip.foreign_id and ip.foreign_type = 3 where d.id = #{id} diff --git a/src/main/resources/mappers/iot/ProductMapper.xml b/src/main/resources/mappers/iot/ProductMapper.xml index 70ce24a..592fc9f 100644 --- a/src/main/resources/mappers/iot/ProductMapper.xml +++ b/src/main/resources/mappers/iot/ProductMapper.xml @@ -7,7 +7,7 @@ - + diff --git a/src/main/resources/mappers/notice/UserMessageMapper.xml b/src/main/resources/mappers/notice/UserMessageMapper.xml index b52ea3b..faf7f4d 100644 --- a/src/main/resources/mappers/notice/UserMessageMapper.xml +++ b/src/main/resources/mappers/notice/UserMessageMapper.xml @@ -42,8 +42,8 @@ left join sys_user su on sum.user_id = su.id left join sys_message sm on sm.id = sum.message_id - sm.id=#{messageId} - and su.id=#{userId} + sum.message_id=#{messageId} + and sum.user_id=#{userId}