Jelajahi Sumber

Merge branch 'dev-V0.4.5' of https://gitee.com/iotkit-open-source/iotkit-parent into dev-V0.4.5

xiwa 2 tahun lalu
induk
melakukan
4822a8ee50
24 mengubah file dengan 541 tambahan dan 24 penghapusan
  1. 10 0
      iot-common/iot-common-core/src/main/java/cc/iotkit/common/constant/Constants.java
  2. 14 0
      iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/ota/DeviceOta.java
  3. 32 0
      iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/ota/OtaDevice.java
  4. 35 0
      iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/ota/OtaPackage.java
  5. 12 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IOtaDeviceData.java
  6. 17 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IOtaPackageData.java
  7. 12 0
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/dao/IOtaDeviceRepository.java
  8. 16 0
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/dao/IOtaPackageRepository.java
  9. 31 0
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbOtaDevice.java
  10. 35 0
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbOtaPackage.java
  11. 91 0
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/IOtaDeviceDataImpl.java
  12. 91 0
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/IOtaPackageDataImpl.java
  13. 20 3
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysDictDataImpl.java
  14. 5 10
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysDictTypeDataImpl.java
  15. 1 1
      iot-components/iot-component-oss/pom.xml
  16. 6 0
      iot-module/iot-manager/pom.xml
  17. 18 4
      iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/OtaController.java
  18. 6 0
      iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/DeviceService.java
  19. 53 0
      iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/OtaService.java
  20. 1 0
      iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysDictDataController.java
  21. 14 6
      iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysDictTypeController.java
  22. 7 0
      iot-starter/src/main/resources/application-dev.yml
  23. 7 0
      iot-starter/src/main/resources/application-mysql.yml
  24. 7 0
      iot-starter/src/main/resources/application.yml

+ 10 - 0
iot-common/iot-common-core/src/main/java/cc/iotkit/common/constant/Constants.java

@@ -227,6 +227,16 @@ public interface Constants {
          */
         String INVOKE_SERVICE_PROPERTY_GET = "/{deviceId}/service/property/get";
 
+        /**
+         * OTA升级
+         */
+        String OTA_UPGRADE_PACKAGE = "{deviceId}/ota/upgrade/package/";
+
+        /**
+         * OTA升级进度上报
+         */
+        String OTA_UPGRADE_INFORM = "{deviceId}/ota/upgrade/inform/";
+
     }
 
     interface API_SPACE {

+ 14 - 0
iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/ota/DeviceOta.java

@@ -0,0 +1,14 @@
+package cc.iotkit.model.ota;
+
+import lombok.Data;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/6/10 14:36
+ * @Description:
+ */
+@Data
+public class DeviceOta {
+    private String currentVersion;
+    private String deviceId;
+}

+ 32 - 0
iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/ota/OtaDevice.java

@@ -0,0 +1,32 @@
+package cc.iotkit.model.ota;
+
+import cc.iotkit.model.Id;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/6/10 14:36
+ * @Description:
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OtaDevice implements Id<String> {
+
+    private String id;
+
+    private String deviceName;
+
+    private String deviceId;
+
+    private String version;
+
+    private Integer status;
+
+    private Long createAt;
+}
+

+ 35 - 0
iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/ota/OtaPackage.java

@@ -0,0 +1,35 @@
+package cc.iotkit.model.ota;
+
+import cc.iotkit.model.Id;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/6/10 14:35
+ * @Description:
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OtaPackage implements Id<String> {
+
+    private String id;
+
+    private Long size;
+
+    private String sign;
+
+    private String name;
+
+    private String desc;
+
+    private String version;
+
+    private String url;
+
+    private Long createAt;
+}

+ 12 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IOtaDeviceData.java

@@ -0,0 +1,12 @@
+package cc.iotkit.data.manager;
+
+import cc.iotkit.data.ICommonData;
+import cc.iotkit.model.ota.OtaDevice;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/5/25 23:40
+ * @Description:
+ */
+public interface IOtaDeviceData  extends ICommonData<OtaDevice, String> {
+}

+ 17 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IOtaPackageData.java

@@ -0,0 +1,17 @@
+package cc.iotkit.data.manager;
+
+import cc.iotkit.data.ICommonData;
+import cc.iotkit.model.ota.OtaPackage;
+
+import java.util.List;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/5/19 21:46
+ * @Description:
+ */
+public interface IOtaPackageData extends ICommonData<OtaPackage, String> {
+
+    List<OtaPackage> findByVersionGreaterThan(String version);
+
+}

+ 12 - 0
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/dao/IOtaDeviceRepository.java

@@ -0,0 +1,12 @@
+package cc.iotkit.data.dao;
+
+import cc.iotkit.data.model.TbOtaDevice;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/5/25 23:43
+ * @Description:
+ */
+public interface IOtaDeviceRepository extends JpaRepository<TbOtaDevice, String> {
+}

+ 16 - 0
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/dao/IOtaPackageRepository.java

@@ -0,0 +1,16 @@
+package cc.iotkit.data.dao;
+
+import cc.iotkit.data.model.TbOtaPackage;
+import cc.iotkit.model.ota.OtaPackage;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/5/19 21:54
+ * @Description:
+ */
+public interface IOtaPackageRepository extends JpaRepository<TbOtaPackage, String> {
+    List<OtaPackage> findByVersionGreaterThan(String version);
+}

+ 31 - 0
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbOtaDevice.java

@@ -0,0 +1,31 @@
+package cc.iotkit.data.model;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/5/25 23:26
+ * @Description:
+ */
+@Data
+@Entity
+@Table(name = "ota_device")
+public class TbOtaDevice {
+
+    @Id
+    private String id;
+
+    private String deviceName;
+
+    private String deviceId;
+
+    private String version;
+
+    private Integer status;
+
+    private Long createAt;
+}

+ 35 - 0
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbOtaPackage.java

@@ -0,0 +1,35 @@
+package cc.iotkit.data.model;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/5/19 21:25
+ * @Description:
+ */
+@Data
+@Entity
+@Table(name = "ota_package")
+public class TbOtaPackage {
+
+    @Id
+    private String id;
+
+    private Long size;
+
+    private String sign;
+
+    private String name;
+
+    private String desc;
+
+    private String version;
+
+    private String url;
+
+    private Long createAt;
+}

+ 91 - 0
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/IOtaDeviceDataImpl.java

@@ -0,0 +1,91 @@
+package cc.iotkit.data.service;
+
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.utils.MapstructUtils;
+import cc.iotkit.data.dao.IJPACommData;
+import cc.iotkit.data.dao.IOtaDeviceRepository;
+import cc.iotkit.data.manager.IOtaDeviceData;
+import cc.iotkit.data.model.TbOtaDevice;
+import cc.iotkit.model.ota.OtaDevice;
+import cc.iotkit.model.space.Home;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/5/25 23:41
+ * @Description:
+ */
+@Primary
+@Service
+public class IOtaDeviceDataImpl implements IOtaDeviceData, IJPACommData<OtaDevice, String> {
+
+    @Resource
+    private IOtaDeviceRepository iOtaDeviceRepository;
+
+    @Override
+    public JpaRepository getBaseRepository() {
+        return iOtaDeviceRepository;
+    }
+
+    @Override
+    public Class getJpaRepositoryClass() {
+        return TbOtaDevice.class;
+    }
+
+    @Override
+    public Class getTClass() {
+        return OtaDevice.class;
+    }
+
+    @Override
+    public OtaDevice save(OtaDevice data) {
+        if (StringUtils.isBlank(data.getId())) {
+            data.setId(UUID.randomUUID().toString());
+        }
+        iOtaDeviceRepository.save(MapstructUtils.convert(data, TbOtaDevice.class));
+        return data;
+    }
+
+    @Override
+    public OtaDevice findById(String id) {
+        return MapstructUtils.convert(iOtaDeviceRepository.findById(id).orElse(null), OtaDevice.class);
+    }
+
+    @Override
+    public void deleteById(String id) {
+        iOtaDeviceRepository.deleteById(id);
+    }
+
+    @Override
+    public long count() {
+        return iOtaDeviceRepository.count();
+    }
+
+    @Override
+    public List<OtaDevice> findAll() {
+        return iOtaDeviceRepository.findAll().stream().map(e -> MapstructUtils.convert(e, OtaDevice.class))
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public Paging<OtaDevice> findAll(PageRequest<OtaDevice> pageRequest) {
+        Page<TbOtaDevice> tbOtaPackages = iOtaDeviceRepository.findAll(Pageable.ofSize(pageRequest.getPageSize()).withPage(pageRequest.getPageNum() - 1));
+        return new Paging<>(
+                tbOtaPackages.getTotalElements(),
+                tbOtaPackages.getContent()
+                        .stream().map(e -> MapstructUtils.convert(e, OtaDevice.class))
+                        .collect(Collectors.toList())
+        );
+    }
+}

+ 91 - 0
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/IOtaPackageDataImpl.java

@@ -0,0 +1,91 @@
+package cc.iotkit.data.service;
+
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.utils.MapstructUtils;
+import cc.iotkit.data.dao.IJPACommData;
+import cc.iotkit.data.dao.IOtaPackageRepository;
+import cc.iotkit.data.manager.IOtaPackageData;
+import cc.iotkit.data.model.TbOtaDevice;
+import cc.iotkit.data.model.TbOtaPackage;
+import cc.iotkit.model.ota.OtaDevice;
+import cc.iotkit.model.ota.OtaPackage;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+/**
+ * @Author: 石恒
+ * @Date: 2023/5/19 21:53
+ * @Description:
+ */
+@Primary
+@Service
+public class IOtaPackageDataImpl implements IOtaPackageData, IJPACommData<OtaPackage, String> {
+
+    @Resource
+    private IOtaPackageRepository iOtaPackageRepository;
+
+    @Override
+    public List<OtaPackage> findByVersionGreaterThan(String version) {
+        return null;
+    }
+
+    @Override
+    public JpaRepository getBaseRepository() {
+        return iOtaPackageRepository;
+    }
+
+    @Override
+    public Class getJpaRepositoryClass() {
+        return TbOtaPackage.class;
+    }
+
+    @Override
+    public Class getTClass() {
+        return OtaPackage.class;
+    }
+
+    @Override
+    public OtaPackage save(OtaPackage data) {
+        if (StringUtils.isBlank(data.getId())) {
+            data.setId(UUID.randomUUID().toString());
+        }
+        iOtaPackageRepository.save(MapstructUtils.convert(data, TbOtaPackage.class));
+        return data;
+    }
+
+    @Override
+    public OtaPackage findById(String id) {
+        return MapstructUtils.convert(iOtaPackageRepository.findById(id).orElse(null), OtaPackage.class);
+    }
+
+    @Override
+    public void deleteById(String id) {
+        iOtaPackageRepository.deleteById(id);
+    }
+
+    @Override
+    public long count() {
+        return iOtaPackageRepository.count();
+    }
+
+    @Override
+    public List<OtaPackage> findAll() {
+        return iOtaPackageRepository.findAll().stream().map(e -> MapstructUtils.convert(e, OtaPackage.class)).collect(Collectors.toList());
+    }
+
+    @Override
+    public Paging<OtaPackage> findAll(PageRequest<OtaPackage> pageRequest) {
+        Page<TbOtaPackage> tbOtaPackages = iOtaPackageRepository.findAll(Pageable.ofSize(pageRequest.getPageSize()).withPage(pageRequest.getPageNum() - 1));
+        return new Paging<>(tbOtaPackages.getTotalElements(), tbOtaPackages.getContent().stream().map(e -> MapstructUtils.convert(e, OtaPackage.class)).collect(Collectors.toList()));
+    }
+}

+ 20 - 3
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysDictDataImpl.java

@@ -1,14 +1,17 @@
 package cc.iotkit.data.service;
 
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
 import cc.iotkit.common.constant.UserConstants;
 import cc.iotkit.common.utils.MapstructUtils;
+import cc.iotkit.common.utils.StringUtils;
 import cc.iotkit.data.dao.IJPACommData;
 import cc.iotkit.data.dao.SysDictDataRepository;
 import cc.iotkit.data.model.TbSysDictData;
 import cc.iotkit.data.system.ISysDictData;
+import cc.iotkit.data.util.PageBuilder;
 import cc.iotkit.data.util.PredicateBuilder;
 import cc.iotkit.model.system.SysDictData;
-import cc.iotkit.model.system.SysDictType;
 import com.querydsl.core.types.Predicate;
 import com.querydsl.jpa.impl.JPAQueryFactory;
 import lombok.RequiredArgsConstructor;
@@ -54,10 +57,16 @@ public class SysDictDataImpl implements ISysDictData, IJPACommData<SysDictData,
 
     @Override
     public List<SysDictData> findByConditions(SysDictData query) {
-        return findAllByCondition(query);
+        List<TbSysDictData> rets=jpaQueryFactory.select(tbSysDictData).from(tbSysDictData)
+                .where(buildQueryCondition(query)).orderBy(tbSysDictData.dictSort.asc())
+                .fetch();
+        return MapstructUtils.convert(rets,SysDictData.class);
     }
 
-
+    @Override
+    public Paging<SysDictData> findAll(PageRequest<SysDictData> pageRequest) {
+        return PageBuilder.toPaging(baseRepository.findAll(buildQueryCondition(pageRequest.getData()), PageBuilder.toPageable(pageRequest))).to(SysDictData.class);
+    }
 
     @Override
     public SysDictData findByDictTypeAndDictValue(String dictType, String dictValue) {
@@ -79,4 +88,12 @@ public class SysDictDataImpl implements ISysDictData, IJPACommData<SysDictData,
     public long countByDicType(String dictType) {
         return 0;
     }
+
+    private Predicate buildQueryCondition(SysDictData dictData) {
+        return PredicateBuilder.instance()
+                .and(dictData.getDictSort() != null, () -> tbSysDictData.dictSort.eq(dictData.getDictSort()))
+                .and(StringUtils.isNotEmpty(dictData.getDictLabel()), () -> tbSysDictData.dictLabel.like(dictData.getDictLabel()))
+                .and(StringUtils.isNotEmpty(dictData.getDictType()), () -> tbSysDictData.dictType.eq(dictData.getDictType()))
+                .and(StringUtils.isNotEmpty(dictData.getStatus()), () -> tbSysDictData.status.eq(dictData.getStatus())).build();
+    }
 }

+ 5 - 10
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysDictTypeDataImpl.java

@@ -2,22 +2,15 @@ package cc.iotkit.data.service;
 
 import cc.iotkit.common.api.PageRequest;
 import cc.iotkit.common.api.Paging;
-import cc.iotkit.common.constant.UserConstants;
-import cc.iotkit.common.utils.StreamUtils;
+import cc.iotkit.common.utils.MapstructUtils;
 import cc.iotkit.common.utils.StringUtils;
 import cc.iotkit.data.dao.IJPACommData;
-import cc.iotkit.data.dao.SysDeptRepository;
 import cc.iotkit.data.dao.SysDictTypeRepository;
 import cc.iotkit.data.model.TbSysDictType;
-import cc.iotkit.data.model.TbSysUser;
 import cc.iotkit.data.system.ISysDictTypeData;
 import cc.iotkit.data.util.PageBuilder;
 import cc.iotkit.data.util.PredicateBuilder;
-import cc.iotkit.model.system.SysDept;
 import cc.iotkit.model.system.SysDictType;
-import cc.iotkit.model.system.SysDictType;
-import cc.iotkit.model.system.SysUser;
-import cn.hutool.core.util.ObjectUtil;
 import com.querydsl.core.types.Predicate;
 import com.querydsl.jpa.impl.JPAQueryFactory;
 import lombok.RequiredArgsConstructor;
@@ -30,7 +23,6 @@ import java.util.List;
 import java.util.Objects;
 
 import static cc.iotkit.data.model.QTbSysDictType.tbSysDictType;
-import static cc.iotkit.data.model.QTbSysUser.tbSysUser;
 
 /**
  * @Author:tfd
@@ -70,7 +62,10 @@ public class SysDictTypeDataImpl implements ISysDictTypeData, IJPACommData<SysDi
 
     @Override
     public List<SysDictType> findByConditions(SysDictType query) {
-        return null;
+        List<TbSysDictType> rets=jpaQueryFactory.select(tbSysDictType).from(tbSysDictType)
+                .where(buildQueryCondition(query))
+                .fetch();
+        return MapstructUtils.convert(rets, SysDictType.class);
     }
 
     @Override

+ 1 - 1
iot-components/iot-component-oss/pom.xml

@@ -10,7 +10,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <properties>
-        <hutool.version>5.8.15</hutool.version>
+        <hutool.version>5.8.18</hutool.version>
     </properties>
 
     <artifactId>iot-component-oss</artifactId>

+ 6 - 0
iot-module/iot-manager/pom.xml

@@ -59,6 +59,12 @@
             <artifactId>iot-rule-engine</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-component-oss</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-component-server</artifactId>

+ 18 - 4
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/OtaController.java

@@ -1,12 +1,26 @@
 package cc.iotkit.manager.controller;
 
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.api.Request;
 import cc.iotkit.manager.service.OtaService;
+import cc.iotkit.model.alert.AlertConfig;
+import cc.iotkit.model.ota.DeviceOta;
+import cc.iotkit.model.ota.OtaPackage;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.io.InputStream;
 
 /**
  * @Author: 石恒
@@ -22,7 +36,7 @@ public class OtaController {
     @Resource
     private OtaService otaService;
 
-    /*@ApiOperation("升级包上传")
+    @ApiOperation("升级包上传")
     @PostMapping("/package/upload")
     public String packageUpload(MultipartFile file) throws Exception {
         if (!file.isEmpty()) {
@@ -48,8 +62,8 @@ public class OtaController {
 
     @ApiOperation("升级包列表")
     @PostMapping("/package/getList")
-    public Paging<OtaPackage> packageList(@RequestBody @Valid PageRequest<Void> request) {
-        return otaService.getOtaPackagePageList(request.getPageNo(), request.getPageSize());
+    public Paging<OtaPackage> packageList(@RequestBody @Validated PageRequest<OtaPackage> request) {
+        return otaService.getOtaPackagePageList(request);
     }
 
     @ApiOperation("设备获取升级包")
@@ -57,5 +71,5 @@ public class OtaController {
     public void deviceUpgrade(@RequestBody Request<DeviceOta> deviceOtaRequest) {
         DeviceOta deviceOta = deviceOtaRequest.getData();
         otaService.findByVersionGreaterThan(deviceOta.getCurrentVersion(), deviceOta.getDeviceId());
-    }*/
+    }
 }

+ 6 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/DeviceService.java

@@ -13,6 +13,7 @@ import cc.iotkit.common.exception.BizException;
 import cc.iotkit.common.thing.ThingService;
 import cc.iotkit.common.utils.JsonUtils;
 import cc.iotkit.common.utils.UniqueIdUtil;
+import cc.iotkit.comps.ApiTool;
 import cc.iotkit.comps.DeviceComponentManager;
 import cc.iotkit.data.manager.IDeviceConfigData;
 import cc.iotkit.data.manager.IDeviceInfoData;
@@ -21,6 +22,7 @@ import cc.iotkit.model.device.DeviceInfo;
 import cc.iotkit.model.device.message.ThingModelMessage;
 import cc.iotkit.temporal.IThingModelMessageData;
 import cc.iotkit.virtualdevice.VirtualManager;
+import io.vertx.core.http.HttpMethod;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -71,6 +73,10 @@ public class DeviceService {
                 args, ThingModelMessage.TYPE_SERVICE, service);
     }
 
+    public String otaUpgrade(String token, boolean checkOwner) {
+        return null;
+    }
+
     /**
      * 设备属性获取
      */

+ 53 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/OtaService.java

@@ -1,9 +1,20 @@
 package cc.iotkit.manager.service;
 
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.comps.ApiTool;
+import cc.iotkit.data.manager.IOtaDeviceData;
+import cc.iotkit.data.manager.IOtaPackageData;
+import cc.iotkit.model.alert.AlertConfig;
+import cc.iotkit.model.ota.OtaPackage;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.io.InputStream;
+import java.util.UUID;
+
 /**
  * @Author: 石恒
  * @Date: 2023/5/19 20:49
@@ -14,5 +25,47 @@ import org.springframework.stereotype.Service;
 @RequiredArgsConstructor
 public class OtaService {
 
+    private final IOtaPackageData iOtaPackageData;
+    private final IOtaDeviceData iOtaDeviceData;
+    private final DeviceService deviceService;
+
+
+    @Value("${oss.region}")
+    private String region;
+    @Value("${oss.buckName}")
+    private String buckName;
+
+    public String uploadFile(InputStream inputStream, String suffix) throws Exception {
+        String objectName = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
+        return "https://" + region + "/" + objectName;
+    }
+
+    public OtaPackage addOtaPackage(OtaPackage otaPackage) {
+        return iOtaPackageData.save(otaPackage);
+    }
+
+    public Boolean delOtaPackageById(String id) {
+        iOtaPackageData.deleteById(id);
+        return Boolean.TRUE;
+    }
+
+    public void findByVersionGreaterThan(String version, String deviceId) {
+        iOtaPackageData.findByVersionGreaterThan(version);
+    }
+
+    public Paging<OtaPackage> getOtaPackagePageList(PageRequest<OtaPackage> request) {
+        return iOtaPackageData.findAll(request);
+    }
+
+    public void batchOta() {
+    }
+
+    /**
+     * 开始升级
+     */
+    public void startUpgrade() {
+        //构建升级包
+        deviceService.otaUpgrade("", true);
+    }
 
 }

+ 1 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysDictDataController.java

@@ -88,6 +88,7 @@ public class SysDictDataController {
     /**
      * 新增字典类型
      */
+    @ApiOperation(value = "新增字典类型", notes = "新增字典类型")
     @SaCheckPermission("system:dict:add")
     @Log(title = "字典数据", businessType = BusinessType.INSERT)
     @PostMapping("/add")

+ 14 - 6
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysDictTypeController.java

@@ -6,16 +6,20 @@ import cc.iotkit.common.api.Request;
 import cc.iotkit.common.excel.utils.ExcelUtil;
 import cc.iotkit.common.log.annotation.Log;
 import cc.iotkit.common.log.enums.BusinessType;
+import cc.iotkit.common.validate.EditGroup;
 import cc.iotkit.common.validate.QueryGroup;
 import cc.iotkit.common.web.core.BaseController;
 import cc.iotkit.system.dto.bo.SysDictTypeBo;
 import cc.iotkit.system.dto.vo.SysDictTypeVo;
-import cn.dev33.satoken.annotation.SaCheckPermission;
 import cc.iotkit.system.service.ISysDictTypeService;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.Collection;
@@ -65,7 +69,7 @@ public class SysDictTypeController extends BaseController {
     @ApiOperation(value = "查询字典类型详细", notes = "查询字典类型详细")
     @SaCheckPermission("system:dict:query")
     @PostMapping(value = "/getById")
-    public SysDictTypeVo getInfo(@Validated @RequestBody Request<SysDictTypeBo> bo) {
+    public SysDictTypeVo getInfo(@Validated(QueryGroup.class) @RequestBody Request<SysDictTypeBo> bo) {
         Long dictTypeId = bo.getData().getId();
         return dictTypeService.selectDictTypeById(dictTypeId);
     }
@@ -77,7 +81,7 @@ public class SysDictTypeController extends BaseController {
     @SaCheckPermission("system:dict:add")
     @Log(title = "字典类型", businessType = BusinessType.INSERT)
     @PostMapping("/add")
-    public void add(@Validated @RequestBody Request<SysDictTypeBo> dict) {
+    public void add(@Validated(EditGroup.class) @RequestBody Request<SysDictTypeBo> dict) {
         if (!dictTypeService.checkDictTypeUnique(dict.getData())) {
             fail("新增字典'" + dict.getData().getDictName() + "'失败,字典类型已存在");
         }
@@ -87,10 +91,11 @@ public class SysDictTypeController extends BaseController {
     /**
      * 修改字典类型
      */
+    @ApiOperation(value = "修改字典类型", notes = "修改字典类型")
     @SaCheckPermission("system:dict:edit")
     @Log(title = "字典类型", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
-    public void edit(@Validated @RequestBody Request<SysDictTypeBo> dict) {
+    public void edit(@Validated(EditGroup.class) @RequestBody Request<SysDictTypeBo> dict) {
         if (!dictTypeService.checkDictTypeUnique(dict.getData())) {
             fail("修改字典'" + dict.getData().getDictName() + "'失败,字典类型已存在");
         }
@@ -102,16 +107,18 @@ public class SysDictTypeController extends BaseController {
      *
      * @param dictIds 字典ID串
      */
+    @ApiOperation(value = "删除字典类型", notes = "删除字典类型")
     @SaCheckPermission("system:dict:remove")
     @Log(title = "字典类型", businessType = BusinessType.DELETE)
     @PostMapping("/delete")
-    public void remove(@PathVariable Collection<Long> dictIds) {
+    public void remove(@RequestBody @Validated Collection<Long> dictIds) {
         dictTypeService.deleteDictTypeByIds(dictIds);
     }
 
     /**
      * 刷新字典缓存
      */
+    @ApiOperation(value = "刷新字典缓存", notes = "刷新字典缓存")
     @SaCheckPermission("system:dict:remove")
     @Log(title = "字典类型", businessType = BusinessType.CLEAN)
     @PostMapping("/refreshCache")
@@ -122,6 +129,7 @@ public class SysDictTypeController extends BaseController {
     /**
      * 获取字典选择框列表
      */
+    @ApiOperation(value = "获取字典选择框列表", notes = "获取字典选择框列表")
     @PostMapping("/optionselect")
     public List<SysDictTypeVo> optionselect() {
         return dictTypeService.selectDictTypeAll();

+ 7 - 0
iot-starter/src/main/resources/application-dev.yml

@@ -117,3 +117,10 @@ sa-token:
 #认证中心地址
 oauth2:
   auth-server-url: http://127.0.0.1:8086
+
+oss:
+  region: xxxxx
+  endpoint: xxxxx
+  accessKey: xxxxx
+  secretKey: xxxxx
+  buckName: xxxx

+ 7 - 0
iot-starter/src/main/resources/application-mysql.yml

@@ -91,3 +91,10 @@ sa-token:
 #认证中心地址
 oauth2:
   auth-server-url: http://127.0.0.1:8086
+
+oss:
+  region: xxxxx
+  endpoint: xxxxx
+  accessKey: xxxxx
+  secretKey: xxxxx
+  buckName: xxxx

+ 7 - 0
iot-starter/src/main/resources/application.yml

@@ -153,3 +153,10 @@ user:
     maxRetryCount: 5
     # 密码锁定时间(默认10分钟)
     lockTime: 10
+
+oss:
+  region: xxxxx
+  endpoint: xxxxx
+  accessKey: xxxxx
+  secretKey: xxxxx
+  buckName: xxxx