lishuangjiang@potevio.com 1 年間 前
コミット
02b7127abf

+ 1 - 1
iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserDataImpl.java

@@ -202,7 +202,7 @@ public class SysUserDataImpl implements ISysUserData, IJPACommData<SysUser, Long
                         .and(tbSysUser.userName.eq(username))
                         .build()).fetchOne();
         SysUser convert = MapstructUtils.convert(ret, SysUser.class);
-        Long deptId = ret.getDeptId();
+        Long deptId = Objects.isNull(ret)?null:ret.getDeptId();
         if (Objects.nonNull(deptId)) {
             // 获取部门信息
             SysDept sysDept = sysDeptData.findById(deptId);

+ 3 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/ProductController.java

@@ -15,6 +15,7 @@ import cc.iotkit.common.api.Request;
 import cc.iotkit.common.log.annotation.Log;
 import cc.iotkit.common.log.enums.BusinessType;
 import cc.iotkit.common.satoken.utils.LoginHelper;
+import cc.iotkit.common.tenant.helper.TenantHelper;
 import cc.iotkit.common.validate.AddGroup;
 import cc.iotkit.common.validate.EditGroup;
 import cc.iotkit.manager.dto.bo.category.CategoryBo;
@@ -64,6 +65,7 @@ public class ProductController {
     @PostMapping(value = "/add")
     @Log(title = "产品", businessType = BusinessType.INSERT)
     public ProductVo create(@Validated(AddGroup.class) @RequestBody Request<ProductBo> request) {
+        request.getData().setTenantId(TenantHelper.getTenantId());
         return productService.addEntity(request.getData());
     }
 
@@ -72,6 +74,7 @@ public class ProductController {
     @PostMapping("/edit")
     @Log(title = "产品", businessType = BusinessType.UPDATE)
     public boolean edit(@Validated(EditGroup.class) @RequestBody Request<ProductBo> request) {
+        request.getData().setTenantId(TenantHelper.getTenantId());
         return productService.updateEntity(request.getData());
     }
 

+ 0 - 1
iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/impl/ProductServiceImpl.java

@@ -92,7 +92,6 @@ public class ProductServiceImpl implements IProductService {
         if(oldProduct != null){
             throw new BizException(ErrCode.PRODUCT_KEY_EXIST);
         }
-        product.setTenantId(TenantHelper.getTenantId());
         productData.save(product);
         return MapstructUtils.convert(product, ProductVo.class);
     }

+ 3 - 0
iot-module/iot-openapi/src/main/java/cc/iotkit/openapi/dto/bo/device/OpenapiDeviceBo.java

@@ -20,4 +20,7 @@ public class OpenapiDeviceBo {
     @NotBlank(message = "productKey不能为空")
     @ApiModelProperty(value = "产品key")
     private String productKey;
+
+    @ApiModelProperty(value = "部门名称")
+    private String deptName;
 }

+ 5 - 3
iot-module/iot-openapi/src/main/java/cc/iotkit/openapi/service/impl/OpenBaseServiceImpl.java

@@ -60,12 +60,14 @@ public class OpenBaseServiceImpl implements OpenBaseService {
         if (sysUser == null){
             //用户不存在是否新建?
         }
+
         LoginUser loginUser = buildLoginUser(sysUser);
         // 生成token
         LoginHelper.loginByDevice(loginUser, DeviceType.PC);
-
-        recordLoginInfo(loginUser.getTenantId(), bo.getAppid(), Constants.LOGIN_SUCCESS, MessageUtils.message("openapi.login.success"));
-        recordLoginInfo(sysUser.getId());
+        if(!sysUser.getTenantId().equals("-1")){
+            recordLoginInfo(loginUser.getTenantId(), bo.getAppid(), Constants.LOGIN_SUCCESS, MessageUtils.message("openapi.login.success"));
+            recordLoginInfo(sysUser.getId());
+        }
         return StpUtil.getTokenValue();
     }
 

+ 20 - 1
iot-module/iot-openapi/src/main/java/cc/iotkit/openapi/service/impl/OpenDeviceServiceImpl.java

@@ -1,7 +1,9 @@
 package cc.iotkit.openapi.service.impl;
 
+import cc.iotkit.common.constant.GlobalConstants;
 import cc.iotkit.common.enums.ErrCode;
 import cc.iotkit.common.exception.BizException;
+import cc.iotkit.common.redis.utils.RedisUtils;
 import cc.iotkit.common.utils.DeviceUtil;
 import cc.iotkit.common.utils.JsonUtils;
 import cc.iotkit.common.utils.MapstructUtils;
@@ -12,6 +14,7 @@ import cc.iotkit.manager.service.DeviceCtrlService;
 import cc.iotkit.model.device.DeviceInfo;
 import cc.iotkit.model.product.Product;
 import cc.iotkit.model.product.ThingModel;
+import cc.iotkit.model.system.SysDept;
 import cc.iotkit.openapi.dto.bo.device.OpenapiDeviceBo;
 import cc.iotkit.openapi.dto.vo.OpenDeviceInfoVo;
 import cc.iotkit.openapi.dto.vo.OpenDevicePropertyVo;
@@ -26,6 +29,7 @@ import org.springframework.stereotype.Service;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 
 @Service
@@ -46,6 +50,8 @@ public class OpenDeviceServiceImpl implements OpenDeviceService {
     @Autowired
     private DeviceCtrlService deviceCtrlService;
 
+
+
     @Override
     public DeviceInfo getDetail(OpenapiDeviceBo data) {
         DeviceInfo deviceInfo = deviceInfoData.findByDeviceName(data.getDeviceName());
@@ -63,11 +69,13 @@ public class OpenDeviceServiceImpl implements OpenDeviceService {
         if (product == null) {
             throw new BizException(ErrCode.PRODUCT_NOT_FOUND);
         }
+        String tenantId =  product.getTenantId();
         //同产品不可重复设备名
         DeviceInfo deviceRepetition = deviceInfoData.findByDeviceName(deviceName);
         if (deviceRepetition != null) {
             throw new BizException(ErrCode.MODEL_DEVICE_ALREADY);
         }
+
         //生成设备密钥
         String chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678";
         int maxPos = chars.length();
@@ -75,7 +83,16 @@ public class OpenDeviceServiceImpl implements OpenDeviceService {
         for (var i = 0; i < 16; i++) {
             secret.append(chars.charAt((int) Math.floor(Math.random() * maxPos)));
         }
-
+        //获取部门信息
+        Long deptId = null;
+        if(StringUtils.isNotEmpty(bo.getDeptName())){
+            String deptInfoKey = GlobalConstants.DEPT_INFO_PREFIX + tenantId + ":" + bo.getDeptName();
+            String deptInfo = RedisUtils.getCacheObject(deptInfoKey);
+            if(StringUtils.isNotEmpty(deptInfo)){
+                SysDept sysDept = JsonUtils.parseObject(deptInfo, SysDept.class);
+                deptId = Objects.isNull(sysDept)?null:sysDept.getId();
+            }
+        }
         DeviceInfo device = new DeviceInfo();
         device.setId(DeviceUtil.newDeviceId(deviceName));
         device.setUid(product.getUid());
@@ -83,6 +100,8 @@ public class OpenDeviceServiceImpl implements OpenDeviceService {
         device.setProductKey(productKey);
         device.setDeviceName(deviceName);
         device.setSecret(secret.toString());
+        device.setTenantId(product.getTenantId());
+        device.setCreateDept(deptId);
         device.setState(new DeviceInfo.State(false, null, null));
 //        device.setLocate(new DeviceInfo.Locate(deviceInfo.getLongitude(),deviceInfo.getLatitude()));
         device.setCreateAt(System.currentTimeMillis());

+ 4 - 0
iot-module/iot-plugin/iot-plugin-core/src/main/java/cc/iotkit/plugin/core/thing/actions/AbstractAction.java

@@ -22,6 +22,10 @@ public abstract class AbstractAction implements IDeviceAction {
 
     protected Long time;
 
+    protected String deptName;
+
+    protected String tenantId;
+
     public AbstractAction() {
     }
 

+ 16 - 1
iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/ThingServiceImpl.java

@@ -1,8 +1,10 @@
 package cc.iotkit.plugin.main;
 
 import cc.iotkit.common.constant.Constants;
+import cc.iotkit.common.constant.GlobalConstants;
 import cc.iotkit.common.enums.ErrCode;
 import cc.iotkit.common.exception.BizException;
+import cc.iotkit.common.redis.utils.RedisUtils;
 import cc.iotkit.common.thing.ThingModelMessage;
 import cc.iotkit.common.utils.DeviceUtil;
 import cc.iotkit.common.utils.JsonUtils;
@@ -13,6 +15,7 @@ import cc.iotkit.data.manager.IProductData;
 import cc.iotkit.model.device.DeviceInfo;
 import cc.iotkit.model.device.message.DevicePropertyCache;
 import cc.iotkit.model.product.Product;
+import cc.iotkit.model.system.SysDept;
 import cc.iotkit.mq.MqProducer;
 import cc.iotkit.plugin.core.thing.IThingService;
 import cc.iotkit.plugin.core.thing.actions.*;
@@ -178,9 +181,11 @@ public class ThingServiceImpl implements IThingService {
 
     private void registerDevice(DeviceInfo device, DeviceRegister register) {
         String productKey = register.getProductKey();
+        String deptName = register.getDeptName();
         //指定了pk需验证
+        Product product = null;
         if (StringUtils.isNotBlank(productKey)) {
-            Product product = getProduct(productKey);
+            product = getProduct(productKey);
             if (product == null) {
                 throw new BizException(ErrCode.PRODUCT_NOT_FOUND);
             }
@@ -208,6 +213,16 @@ public class ThingServiceImpl implements IThingService {
                 device.setState(new DeviceInfo.State(false, null, null));
             }
             device.setCreateAt(System.currentTimeMillis());
+            // 机构部门信息
+            if(StringUtils.isNotEmpty(deptName)){
+                String deptInfoKey = GlobalConstants.DEPT_INFO_PREFIX + product.getTenantId() + ":" + deptName;
+                String deptInfo = RedisUtils.getCacheObject(deptInfoKey);
+                if(org.apache.commons.lang3.StringUtils.isNotEmpty(deptInfo)){
+                    SysDept sysDept = JsonUtils.parseObject(deptInfo, SysDept.class);
+                    device.setCreateDept(Objects.isNull(sysDept)?null:sysDept.getId());
+                }
+
+            }
             deviceInfoData.save(device);
 
             log.info("device registered:{}", JsonUtils.toJsonString(device));

+ 4 - 4
iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysDeptServiceImpl.java

@@ -6,10 +6,7 @@ import cc.iotkit.common.enums.ErrCode;
 import cc.iotkit.common.exception.BizException;
 import cc.iotkit.common.redis.utils.RedisUtils;
 import cc.iotkit.common.satoken.utils.LoginHelper;
-import cc.iotkit.common.utils.MapstructUtils;
-import cc.iotkit.common.utils.SpringUtils;
-import cc.iotkit.common.utils.StringUtils;
-import cc.iotkit.common.utils.TreeBuildUtils;
+import cc.iotkit.common.utils.*;
 import cc.iotkit.data.system.ISysDeptData;
 import cc.iotkit.data.system.ISysRoleData;
 import cc.iotkit.data.system.ISysUserData;
@@ -326,10 +323,13 @@ public class SysDeptServiceImpl implements ISysDeptService {
 //        }
         Map<String,List<String>> deptChildMap = new HashMap<>();
         if(CollectionUtil.isNotEmpty(sysDepts)){
+
             String key = null;
             String ancestors = null;
             String[] splits = null;
             for (SysDept sysDept:sysDepts){
+                String deptInfoKey = GlobalConstants.DEPT_INFO_PREFIX + sysDept.getTenantId() + ":" + sysDept.getDeptName();
+                RedisUtils.setCacheObject(deptInfoKey, JsonUtils.toJsonString(sysDept));
                 ancestors= sysDept.getAncestors();
                 splits= ancestors.split(",");
                 for(String split:splits ){

+ 4 - 0
iot-starter/src/main/java/cc/iotkit/config/DeptStartupRunner.java

@@ -2,10 +2,12 @@ package cc.iotkit.config;
 
 import cc.iotkit.common.constant.GlobalConstants;
 import cc.iotkit.common.redis.utils.RedisUtils;
+import cc.iotkit.common.utils.JsonUtils;
 import cc.iotkit.model.system.SysDept;
 import cc.iotkit.system.dto.vo.SysDeptVo;
 import cc.iotkit.system.service.ISysDeptService;
 import cn.hutool.core.collection.CollectionUtil;
+import com.oracle.truffle.js.builtins.JSONBuiltins;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
@@ -31,6 +33,8 @@ public class DeptStartupRunner implements CommandLineRunner{
             String ancestors = null;
             String[] splits = null;
             for (SysDept sysDept:sysDeptVos){
+                String deptInfoKey = GlobalConstants.DEPT_INFO_PREFIX + sysDept.getTenantId() + ":" + sysDept.getDeptName();
+                RedisUtils.setCacheObject(deptInfoKey, JsonUtils.toJsonString(sysDept));
                 ancestors= sysDept.getAncestors();
                 splits= ancestors.split(",");
                 for(String split:splits ){