Parcourir la source

iot-production模块
行业管理
产品管理
设备管理
其他接口

home il y a 2 ans
Parent
commit
8872f4d179

+ 11 - 4
hx-common/hx-tool/src/main/java/com/fjhx/base/BaseService.java

@@ -1,5 +1,6 @@
 package com.fjhx.base;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -8,10 +9,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.core.secure.utils.AuthUtil;
 
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 public interface BaseService<T> extends IService<T> {
@@ -65,6 +64,14 @@ public interface BaseService<T> extends IService<T> {
     }
 
     /**
+     * 获取添加过的某个字段的去重列表
+     */
+    default List<?> getDistinctList(SFunction<T, ?> column) {
+        return list(Wrappers.<T>lambdaQuery().select(column))
+                .stream().map(column).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+    }
+
+    /**
      * 条件查询
      */
     default List<T> list(SFunction<T, ?> column, Object val) {

+ 10 - 2
hx-service-api/iot-production-api/src/main/java/com/fjhx/params/tda/TdaDeviceEx.java

@@ -5,8 +5,6 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 /**
- * 
- *
  * @author ${author}
  * @since 2022-07-21
  */
@@ -14,4 +12,14 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 public class TdaDeviceEx extends TdaDevice {
 
+    /**
+     * 资源空间名称
+     */
+    private String applicationName;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
 }

+ 1 - 1
hx-service/iot-production/src/main/java/com/fjhx/config/MybatisConfig.java

@@ -15,7 +15,7 @@ import org.springframework.context.annotation.Configuration;
 public class MybatisConfig {
 
     /**
-     * 分页插件
+     * 租户插件
      */
     @Bean
     public MybatisPlusInterceptor mybatisPlusInterceptorPage() {

+ 19 - 6
hx-service/iot-production/src/main/java/com/fjhx/controller/tda/TdaApplicationController.java

@@ -1,21 +1,21 @@
 package com.fjhx.controller.tda;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.springblade.core.tool.api.R;
-import com.fjhx.entity.tda.TdaApplication;
 import com.fjhx.params.tda.TdaApplicationVo;
 import com.fjhx.service.tda.TdaApplicationService;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 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 java.util.List;
 import java.util.Map;
 
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author ${author}
@@ -29,22 +29,35 @@ public class TdaApplicationController {
     private TdaApplicationService tdaApplicationService;
 
     @PostMapping("/page")
-    public R page(@RequestBody Map<String, String> condition){
+    public R page(@RequestBody Map<String, String> condition) {
         Page<Map<String, Object>> result = tdaApplicationService.getPage(condition);
         return R.success(result);
     }
 
     @PostMapping("/add")
-    public R add(@RequestBody TdaApplicationVo tdaApplicationVo){
+    public R add(@RequestBody TdaApplicationVo tdaApplicationVo) {
         tdaApplicationService.add(tdaApplicationVo);
         return R.success();
     }
 
     @PostMapping("/delete")
-    public R delete(@RequestBody TdaApplicationVo tdaApplicationVo){
+    public R delete(@RequestBody TdaApplicationVo tdaApplicationVo) {
         tdaApplicationService.delete(tdaApplicationVo);
         return R.success();
     }
 
+    @PostMapping("/list")
+    public R list() {
+        List<Map<String, Object>> list = tdaApplicationService.getList();
+        return R.success(list);
+    }
+
+    @PostMapping("details")
+    public R details(@RequestBody TdaApplicationVo tdaApplicationVo) {
+        Map<String, Object> result = tdaApplicationService.details(tdaApplicationVo);
+        return R.success(result);
+    }
+
+
 }
 

+ 12 - 6
hx-service/iot-production/src/main/java/com/fjhx/controller/tda/TdaDeviceController.java

@@ -2,21 +2,21 @@ package com.fjhx.controller.tda;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.params.tda.TdaDeviceEx;
-import org.springblade.core.tool.api.R;
-import com.fjhx.entity.tda.TdaDevice;
 import com.fjhx.params.tda.TdaDeviceVo;
 import com.fjhx.service.tda.TdaDeviceService;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 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 java.util.List;
 import java.util.Map;
 
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author ${author}
@@ -30,22 +30,28 @@ public class TdaDeviceController {
     private TdaDeviceService tdaDeviceService;
 
     @PostMapping("/page")
-    public R page(@RequestBody Map<String, String> condition){
+    public R page(@RequestBody Map<String, String> condition) {
         Page<TdaDeviceEx> result = tdaDeviceService.getPage(condition);
         return R.success(result);
     }
 
     @PostMapping("/add")
-    public R add(@RequestBody TdaDeviceVo tdaDeviceVo){
+    public R add(@RequestBody TdaDeviceVo tdaDeviceVo) {
         tdaDeviceService.add(tdaDeviceVo);
         return R.success();
     }
 
     @PostMapping("/delete")
-    public R delete(@RequestBody TdaDeviceVo tdaDeviceVo){
+    public R delete(@RequestBody TdaDeviceVo tdaDeviceVo) {
         tdaDeviceService.delete(tdaDeviceVo);
         return R.success();
     }
 
+    @PostMapping("/list")
+    public R list(@RequestBody Map<String, Long> condition) {
+        List<Map<String, Object>> list = tdaDeviceService.getList(condition);
+        return R.success(list);
+    }
+
 }
 

+ 26 - 0
hx-service/iot-production/src/main/java/com/fjhx/controller/tda/TdaProductController.java

@@ -1,6 +1,7 @@
 package com.fjhx.controller.tda;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.tda.TdaProduct;
 import com.fjhx.params.tda.TdaProductEx;
 import com.fjhx.params.tda.TdaProductVo;
 import com.fjhx.service.tda.TdaProductService;
@@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -46,5 +48,29 @@ public class TdaProductController {
         return R.success();
     }
 
+    @PostMapping("/list")
+    public R list(@RequestBody Map<String, Long> condition) {
+        List<Map<String, Object>> result = tdaProductService.getList(condition);
+        return R.success(result);
+    }
+
+    /**
+     * 获取添加过的厂商名称列表
+     */
+    @PostMapping("/manufacturerNameList")
+    public R manufacturerNameList() {
+        List<?> result = tdaProductService.getDistinctList(TdaProduct::getManufacturerName);
+        return R.success(result);
+    }
+
+    /**
+     * 获取添加过的设备类型列表
+     */
+    @PostMapping("/deviceTypeList")
+    public R deviceTypeList() {
+        List<?> result = tdaProductService.getDistinctList(TdaProduct::getDeviceType);
+        return R.success(result);
+    }
+
 }
 

+ 5 - 0
hx-service/iot-production/src/main/java/com/fjhx/mapper/tda/TdaApplicationMapper.java

@@ -2,6 +2,9 @@ package com.fjhx.mapper.tda;
 
 import com.fjhx.entity.tda.TdaApplication;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
 
 /**
  * <p>
@@ -13,4 +16,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TdaApplicationMapper extends BaseMapper<TdaApplication> {
 
+    Map<String, Object> getDetails(@Param("id") Long id);
+
 }

+ 8 - 0
hx-service/iot-production/src/main/java/com/fjhx/mapper/tda/TdaApplicationMapper.xml

@@ -2,4 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.mapper.tda.TdaApplicationMapper">
 
+    <select id="getDetails" resultType="java.util.Map">
+        select (select count(0) from tda_product tp where tp.tda_application_id = #{id}) productCount,
+               (select count(0)
+                from tda_product tp
+                         inner join tda_device td on td.tda_product_id = tp.id
+                where tp.tda_application_id = #{id})                                     deviceCount
+    </select>
+
 </mapper>

+ 5 - 0
hx-service/iot-production/src/main/java/com/fjhx/service/tda/TdaApplicationService.java

@@ -5,6 +5,7 @@ import com.fjhx.entity.tda.TdaApplication;
 import com.fjhx.params.tda.TdaApplicationVo;
 import com.fjhx.base.BaseService;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -23,4 +24,8 @@ public interface TdaApplicationService extends BaseService<TdaApplication> {
 
     void delete(TdaApplicationVo tdaApplicationVo);
 
+    List<Map<String, Object>> getList();
+
+    Map<String, Object> details(TdaApplicationVo tdaApplicationVo);
+
 }

+ 3 - 0
hx-service/iot-production/src/main/java/com/fjhx/service/tda/TdaDeviceService.java

@@ -6,6 +6,7 @@ import com.fjhx.params.tda.TdaDeviceEx;
 import com.fjhx.params.tda.TdaDeviceVo;
 import com.fjhx.base.BaseService;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -24,4 +25,6 @@ public interface TdaDeviceService extends BaseService<TdaDevice> {
 
     void delete(TdaDeviceVo tdaDeviceVo);
 
+    List<Map<String, Object>> getList(Map<String, Long> condition);
+
 }

+ 3 - 0
hx-service/iot-production/src/main/java/com/fjhx/service/tda/TdaProductService.java

@@ -6,6 +6,7 @@ import com.fjhx.params.tda.TdaProductEx;
 import com.fjhx.params.tda.TdaProductVo;
 import com.fjhx.base.BaseService;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -24,4 +25,6 @@ public interface TdaProductService extends BaseService<TdaProduct> {
 
     void delete(TdaProductVo tdaProductVo);
 
+    List<Map<String, Object>> getList(Map<String, Long> condition);
+
 }

+ 31 - 1
hx-service/iot-production/src/main/java/com/fjhx/service/tda/impl/TdaApplicationServiceImpl.java

@@ -5,13 +5,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.BaseEntity;
 import com.fjhx.entity.tda.TdaApplication;
+import com.fjhx.entity.tda.TdaProduct;
 import com.fjhx.mapper.tda.TdaApplicationMapper;
 import com.fjhx.params.tda.TdaApplicationVo;
 import com.fjhx.service.tda.TdaApplicationService;
+import com.fjhx.service.tda.TdaProductService;
+import com.fjhx.utils.Assert;
 import com.fjhx.utils.IoTDAUtil;
 import com.fjhx.utils.UserClientUtil;
 import com.fjhx.utils.WrapperUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -28,6 +33,9 @@ import java.util.Map;
 @Service
 public class TdaApplicationServiceImpl extends ServiceImpl<TdaApplicationMapper, TdaApplication> implements TdaApplicationService {
 
+    @Autowired
+    private TdaProductService tdaProductService;
+
     @Override
     public Page<Map<String, Object>> getPage(Map<String, String> condition) {
 
@@ -49,7 +57,11 @@ public class TdaApplicationServiceImpl extends ServiceImpl<TdaApplicationMapper,
 
     @Override
     public void add(TdaApplicationVo tdaApplicationVo) {
-        String appId = IoTDAUtil.addApplication(tdaApplicationVo.getAppName());
+        String appName = tdaApplicationVo.getAppName();
+        Assert.notEmpty(appName, "行业名称不能为空");
+
+        // 华为ioDta添加资源空间
+        String appId = IoTDAUtil.addApplication(appName);
         tdaApplicationVo.setAppId(appId);
         save(tdaApplicationVo);
     }
@@ -57,9 +69,27 @@ public class TdaApplicationServiceImpl extends ServiceImpl<TdaApplicationMapper,
     @Override
     public void delete(TdaApplicationVo tdaApplicationVo) {
         Long id = tdaApplicationVo.getId();
+        Assert.notEmpty(id, "行业表id不能为空");
+
+        // 查询行业是否已添加产品,已添加产品则不可删除
+        Integer count = tdaProductService.count(TdaProduct::getTdaApplicationId, id);
+        Assert.eqZero(count, "行业已添加产品,无法删除");
+
+        // 华为ioDta删除资源空间
         TdaApplication tdaApplication = getById(id);
         IoTDAUtil.deleteApplication(tdaApplication.getAppName());
+
         removeById(id);
     }
 
+    @Override
+    public List<Map<String, Object>> getList() {
+        return listMaps(Wrappers.<TdaApplication>lambdaQuery().select(BaseEntity::getId, TdaApplication::getAppName));
+    }
+
+    @Override
+    public Map<String, Object> details(TdaApplicationVo tdaApplicationVo) {
+        return baseMapper.getDetails(tdaApplicationVo.getId());
+    }
+
 }

+ 20 - 2
hx-service/iot-production/src/main/java/com/fjhx/service/tda/impl/TdaDeviceServiceImpl.java

@@ -1,9 +1,11 @@
 package com.fjhx.service.tda.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.BaseEntity;
 import com.fjhx.entity.tda.TdaDevice;
 import com.fjhx.entity.tda.TdaProduct;
 import com.fjhx.mapper.tda.TdaDeviceMapper;
@@ -17,6 +19,7 @@ import com.fjhx.utils.WrapperUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -39,8 +42,10 @@ public class TdaDeviceServiceImpl extends ServiceImpl<TdaDeviceMapper, TdaDevice
         QueryWrapper<TdaDevice> wrapper = Wrappers.query();
 
         WrapperUtil.init(condition, wrapper)
-                .keyword("tp.name", "tp.product_id")
-                .createTimeDesc("tp");
+                .keyword("td.node_id", "td.device_name")
+                .eq("td.tda_product_id", "tdaProductId")
+                .eq("tp.tda_application_id", "tdaApplicationId")
+                .createTimeDesc("td");
 
         return baseMapper.getPage(createPage(condition), wrapper);
     }
@@ -60,6 +65,7 @@ public class TdaDeviceServiceImpl extends ServiceImpl<TdaDeviceMapper, TdaDevice
         TdaProduct tdaProduct = tdaProductService.getById(tdaProductId);
         String productId = tdaProduct.getProductId();
 
+        // 华为ioDta添加设备
         IoTDAUtil.DeviceKey deviceKey = IoTDAUtil.addDevice(nodeId, deviceName, tdaProduct.getAppId(), productId);
 
         tdaDeviceVo.setProductId(productId);
@@ -72,11 +78,23 @@ public class TdaDeviceServiceImpl extends ServiceImpl<TdaDeviceMapper, TdaDevice
     @Override
     public void delete(TdaDeviceVo tdaDeviceVo) {
         Long id = tdaDeviceVo.getId();
+        Assert.notEmpty(id, "设备表id不能为空");
+
         TdaDevice tdaDevice = getById(id);
 
+        // 华为ioDta删除设备
         IoTDAUtil.deleteDevice(tdaDevice.getDeviceId());
 
         removeById(id);
     }
 
+    @Override
+    public List<Map<String, Object>> getList(Map<String, Long> condition) {
+        Long tdaProductId = condition.get("tdaProductId");
+        return listMaps(Wrappers.<TdaDevice>lambdaQuery()
+                .select(BaseEntity::getId, TdaDevice::getTdaProductId, TdaDevice::getDeviceName)
+                .eq(ObjectUtil.isNotEmpty(tdaProductId), TdaDevice::getTdaProductId, tdaProductId)
+        );
+    }
+
 }

+ 29 - 1
hx-service/iot-production/src/main/java/com/fjhx/service/tda/impl/TdaProductServiceImpl.java

@@ -4,19 +4,24 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.BaseEntity;
 import com.fjhx.entity.tda.TdaApplication;
+import com.fjhx.entity.tda.TdaDevice;
 import com.fjhx.entity.tda.TdaProduct;
 import com.fjhx.mapper.tda.TdaProductMapper;
 import com.fjhx.params.tda.TdaProductEx;
 import com.fjhx.params.tda.TdaProductVo;
 import com.fjhx.service.tda.TdaApplicationService;
+import com.fjhx.service.tda.TdaDeviceService;
 import com.fjhx.service.tda.TdaProductService;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.IoTDAUtil;
 import com.fjhx.utils.WrapperUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -33,6 +38,9 @@ public class TdaProductServiceImpl extends ServiceImpl<TdaProductMapper, TdaProd
     @Autowired
     private TdaApplicationService tdaApplicationService;
 
+    @Autowired
+    private TdaDeviceService tdaDeviceService;
+
     @Override
     public Page<TdaProductEx> getPage(Map<String, String> condition) {
 
@@ -40,7 +48,10 @@ public class TdaProductServiceImpl extends ServiceImpl<TdaProductMapper, TdaProd
 
         WrapperUtil.init(condition, wrapper)
                 .keyword("tp.name", "tp.product_id")
-                .createTimeDesc();
+                .eq("tp.tda_application_id", "tdaApplicationId")
+                .eq("tp.device_type", "deviceType")
+                .eq("tp.manufacturer_name", "manufacturerName")
+                .createTimeDesc("tp");
 
         return baseMapper.getPage(createPage(condition), wrapper);
     }
@@ -62,6 +73,7 @@ public class TdaProductServiceImpl extends ServiceImpl<TdaProductMapper, TdaProd
         TdaApplication tdaApplication = tdaApplicationService.getById(tdaApplicationId);
         String appId = tdaApplication.getAppId();
 
+        // 华为ioDta添加产品
         String productId = IoTDAUtil.createProduct(appId, name, deviceType, manufacturerName);
 
         tdaProductVo.setAppId(appId);
@@ -74,10 +86,26 @@ public class TdaProductServiceImpl extends ServiceImpl<TdaProductMapper, TdaProd
         Long id = tdaProductVo.getId();
         Assert.notEmpty(id, "产品表id不能为空");
 
+        // 查询产品是否已添加设备,已添加设备则不可删除
+        Integer count = tdaDeviceService.count(TdaDevice::getTdaProductId, id);
+        Assert.eqZero(count, "产品已添加设备,无法删除");
+
+        // 华为ioDta删除产品
         TdaProduct tdaProduct = getById(id);
         IoTDAUtil.deleteProduct(tdaProduct.getAppId(), tdaProduct.getProductId());
 
         removeById(tdaProductVo.getId());
     }
 
+    @Override
+    public List<Map<String, Object>> getList(Map<String, Long> condition) {
+
+        Long tdaApplicationId = condition.get("tdaApplicationId");
+
+        return listMaps(Wrappers.<TdaProduct>lambdaQuery()
+                .select(BaseEntity::getId, TdaProduct::getTdaApplicationId, TdaProduct::getName)
+                .eq(ObjectUtil.isNotEmpty(tdaApplicationId), TdaProduct::getTdaApplicationId, tdaApplicationId)
+        );
+    }
+
 }