소스 검색

Merge branch '84-integrate' into 'develop'

develop-20230221

develop-20230221

See merge request !33

linwenhua 2 년 전
부모
커밋
716cb0b37b
15개의 변경된 파일318개의 추가작업 그리고 30개의 파일을 삭제
  1. 50 0
      smsb-customer-manager-adapter/src/main/java/com/inspur/customer/web/controller/tenant/TenantCommonAttributeController.java
  2. 1 1
      smsb-customer-manager-app/src/main/java/com/inspur/customer/service/keycloak/KeycloakServiceImpl.java
  3. 7 2
      smsb-customer-manager-app/src/main/java/com/inspur/customer/service/org/SmsbDepartmentServiceImpl.java
  4. 21 13
      smsb-customer-manager-app/src/main/java/com/inspur/customer/service/org/SmsbDepartmentUserServiceImpl.java
  5. 70 0
      smsb-customer-manager-app/src/main/java/com/inspur/customer/service/tenant/TenantCommonAttributeServiceImpl.java
  6. 10 13
      smsb-customer-manager-app/src/main/java/com/inspur/customer/service/tenant/UserInformServiceImpl.java
  7. 1 1
      smsb-customer-manager-client/src/main/java/com/inspur/customer/client/org/SmsbDepartmentUserService.java
  8. 38 0
      smsb-customer-manager-client/src/main/java/com/inspur/customer/client/tenant/TenantCommonAttributeService.java
  9. 24 0
      smsb-customer-manager-client/src/main/java/com/inspur/customer/constant/Constant.java
  10. 6 0
      smsb-customer-manager-client/src/main/java/com/inspur/customer/context/inform/InformLevelEnum.java
  11. 2 0
      smsb-customer-manager-client/src/main/java/com/inspur/customer/object/org/SmsbSimpleUserCO.java
  12. 31 0
      smsb-customer-manager-client/src/main/java/com/inspur/customer/object/tenant/TenantAttributeCO.java
  13. 14 0
      smsb-customer-manager-infrastructure/src/main/java/com/inspur/customer/infrastructure/mapper/tenant/TenantCommonAttributeMapper.java
  14. 38 0
      smsb-customer-manager-infrastructure/src/main/java/com/inspur/customer/infrastructure/object/tenant/TenantCommonAttributeDO.java
  15. 5 0
      smsb-customer-manager-infrastructure/src/main/resources/mapper/tenant/TenantCommonAttributeMapper.xml

+ 50 - 0
smsb-customer-manager-adapter/src/main/java/com/inspur/customer/web/controller/tenant/TenantCommonAttributeController.java

@@ -0,0 +1,50 @@
+package com.inspur.customer.web.controller.tenant;
+
+import com.alibaba.cola.dto.Response;
+import com.alibaba.cola.dto.SingleResponse;
+import com.inspur.customer.client.tenant.TenantCommonAttributeService;
+import com.inspur.customer.object.tenant.TenantAttributeCO;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Objects;
+
+/**
+ * @Author wangbo13
+ * @Date 2023/2/14 11:18
+ * @Version 1.0
+ */
+@RestController
+public class TenantCommonAttributeController {
+
+    @DubboReference
+    private TenantCommonAttributeService commonAttributeService;
+
+    @PostMapping("/tenant/attribute/save")
+    public Response saveOrUpdateAttribute(@Validated @RequestBody TenantAttributeCO attribute){
+        Response checkResponse = checkParameters(attribute);
+        if(!checkResponse.isSuccess()){
+            return checkResponse;
+        }
+        return commonAttributeService.saveOrUpdate(attribute);
+    }
+
+    @GetMapping("/tenant/attribute/query")
+    public Response queryTenantAttribute(TenantAttributeCO attribute){
+        Response checkResponse = checkParameters(attribute);
+        if(!checkResponse.isSuccess()){
+            return checkResponse;
+        }
+        return commonAttributeService.queryTenantAttribute(attribute);
+    }
+
+    private Response checkParameters(TenantAttributeCO attribute){
+        if(Objects.isNull(attribute.getTenant()) || attribute.getTenant().equals(""))
+            return Response.buildFailure("400","参数出错: tenant不能为空");
+        if(Objects.isNull(attribute.getAttributeKey()) || attribute.getAttributeKey().equals(""))
+            return Response.buildFailure("400","参数出错: attributeKey不能为空");
+        return Response.buildSuccess();
+    }
+
+}

+ 1 - 1
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/keycloak/KeycloakServiceImpl.java

@@ -54,7 +54,7 @@ public class KeycloakServiceImpl implements KeycloakService {
         log.info("users map cache clear:{}",LocalDateTime.now() );
     }
 
-    @Scheduled(cron = "* * 0/10 * * ?")
+    @Scheduled(cron = "* 0/10 * * * ?")
     public void expiredCache(){
         // 每隔10小时,清除缓存数据初始化一次
         this.clearUserMapCache();

+ 7 - 2
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/org/SmsbDepartmentServiceImpl.java

@@ -16,6 +16,7 @@ import com.inspur.customer.infrastructure.convertor.SmsbDepartmentConvertor;
 import com.inspur.customer.infrastructure.mapper.org.SmsbDepartmentMapper;
 import com.inspur.customer.infrastructure.object.org.SmsbDepartmentDO;
 import com.inspur.customer.object.org.*;
+import com.inspur.device.client.core.manage.SmsbUsersDeviceAttentionService;
 import com.inspur.device.client.core.relation.DeviceAllocateService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -47,6 +48,8 @@ public class SmsbDepartmentServiceImpl extends ServiceImpl<SmsbDepartmentMapper
     private SmsbDepartmentUserService userService;
     @DubboReference
     private DeviceAllocateService deviceAllocateService;
+    @DubboReference
+    private SmsbUsersDeviceAttentionService attentionService;
 
     @Override
     public Response addDepartment(String userId , SmsbDepartmentAdd smsbDepartmentAdd) {
@@ -290,8 +293,10 @@ public class SmsbDepartmentServiceImpl extends ServiceImpl<SmsbDepartmentMapper
             path = smsbRegrouping.getTenant();
             result = departmentUserService.updateRelation(smsbRegrouping.getUserId(), null ,null);
         }
-        // 2、更新attribute
-        if(result){
+        // 2、关注设备权限判断
+        Response attentionResul = attentionService.userRegroupHandle(smsbRegrouping.getUserId(), path);
+        // 3、更新attribute
+        if(result && attentionResul.isSuccess()){
             service.addAttributesByUserId(smsbRegrouping.getUserId() , "org" ,
                 Collections.singletonList(path));
             return Response.buildSuccess();

+ 21 - 13
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/org/SmsbDepartmentUserServiceImpl.java

@@ -174,27 +174,35 @@ public class SmsbDepartmentUserServiceImpl extends ServiceImpl<SmsbDepartmentUse
 
     /**
      * 获取指定org下接收级别<=informLevel的用户
+     * level 告警级别,不接收为-1
+     * 第一步部门内推送,属于部门内 且 level >= inform >= 0
+     * 第二步租户内推送,level + 1000 >= inform>= 1000
      *
      * @param org         指定org
      * @param informLevel 指定informLevel
      * @return 指定部门下接收级别<= informLevel的用户
      */
     @Override
-    public List<SmsbSimpleUserCO> listUserByOrgAndInformLevel(String tenant, List<String> org, int informLevel) {
-        List<SmsbDepartmentUserDO> list = new ArrayList<>(this.list(Wrappers.lambdaQuery(SmsbDepartmentUserDO.class)
-            .eq(SmsbDepartmentUserDO::getTenant, tenant)
-            .eq(SmsbDepartmentUserDO::getEnabled, 1)
-            .eq(SmsbDepartmentUserDO::getInformLevel, 9999)));
-        if (!CollectionUtils.isEmpty(org)) {
-
-            LambdaQueryWrapper<SmsbDepartmentUserDO> queryWrapper = Wrappers.lambdaQuery();
+    public List<SmsbSimpleUserCO> listUserByInformLevel(String tenant, List<String> org, int informLevel) {
+        LambdaQueryWrapper<SmsbDepartmentUserDO> queryWrapper = Wrappers.lambdaQuery();
 
-            queryWrapper.in(SmsbDepartmentUserDO::getPath, org);
-            queryWrapper.eq(SmsbDepartmentUserDO::getEnabled, 1);
-            queryWrapper.le(SmsbDepartmentUserDO::getInformLevel, informLevel);
+        queryWrapper.eq(SmsbDepartmentUserDO::getTenant, tenant)
+            .ne(SmsbDepartmentUserDO::getInformLevel, -1)
+            .eq(SmsbDepartmentUserDO::getEnabled, 1)
+            .between(SmsbDepartmentUserDO::getInformLevel, 1000, 1000 + informLevel)
+            .or(!CollectionUtils.isEmpty(org), q -> q.ne(SmsbDepartmentUserDO::getInformLevel, -1)
+                .in(SmsbDepartmentUserDO::getPath, org)
+                .eq(SmsbDepartmentUserDO::getEnabled, 1)
+                .eq(SmsbDepartmentUserDO::getTenant, tenant)
+                .between(SmsbDepartmentUserDO::getInformLevel, 0, informLevel))
+            //部门为空代表设备在根部门
+            .or(CollectionUtils.isEmpty(org), q -> q.ne(SmsbDepartmentUserDO::getInformLevel, -1)
+                .isNull(SmsbDepartmentUserDO::getPath)
+                .eq(SmsbDepartmentUserDO::getEnabled, 1)
+                .eq(SmsbDepartmentUserDO::getTenant, tenant)
+                .between(SmsbDepartmentUserDO::getInformLevel, 0, informLevel));
 
-            list.addAll(this.list(queryWrapper));
-        }
+        List<SmsbDepartmentUserDO> list = this.list(queryWrapper);
 
         List<SmsbSimpleUserCO> smsbSimpleUserList = Lists.newArrayListWithCapacity(list.size());
         list.forEach(user -> {

+ 70 - 0
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/tenant/TenantCommonAttributeServiceImpl.java

@@ -0,0 +1,70 @@
+package com.inspur.customer.service.tenant;
+
+import com.alibaba.cola.dto.Response;
+import com.alibaba.cola.dto.SingleResponse;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.inspur.customer.client.tenant.TenantCommonAttributeService;
+import com.inspur.customer.constant.Constant;
+import com.inspur.customer.infrastructure.mapper.tenant.TenantCommonAttributeMapper;
+import com.inspur.customer.infrastructure.object.tenant.TenantCommonAttributeDO;
+import com.inspur.customer.object.tenant.TenantAttributeCO;
+import com.inspur.device.client.core.manage.SmsbDeviceService;
+import com.inspur.device.object.core.manage.SmsbDeviceDto;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.BeanUtils;
+
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Objects;
+
+/**
+ * @Author wangbo13
+ * @Date 2023/2/14 11:15
+ * @Version 1.0
+ */
+@Slf4j
+@DubboService(interfaceClass = TenantCommonAttributeService.class)
+public class TenantCommonAttributeServiceImpl extends ServiceImpl<TenantCommonAttributeMapper, TenantCommonAttributeDO> implements TenantCommonAttributeService {
+    @DubboReference
+    private SmsbDeviceService deviceService;
+    @DubboReference
+    private SmsbDeviceService smsbDeviceService;
+
+    @Override
+    public Response saveOrUpdate(TenantAttributeCO attributeCO) {
+        TenantCommonAttributeDO tenantAttribute = queryOne(attributeCO.getTenant() ,attributeCO.getAttributeKey());
+        if(Objects.nonNull(tenantAttribute)){
+            tenantAttribute.setAttributeValue(attributeCO.getAttributeValue());
+            super.updateById(tenantAttribute);
+        }else {
+            tenantAttribute = new TenantCommonAttributeDO();
+            BeanUtils.copyProperties(attributeCO ,tenantAttribute);
+            super.save(tenantAttribute);
+        }
+        // send massage
+        smsbDeviceService.publishDeviceAttribute(attributeCO.getTenant());
+        return Response.buildSuccess();
+    }
+
+    private TenantCommonAttributeDO queryOne(String tenant,String key){
+        return super.getOne(new LambdaQueryWrapper<>(TenantCommonAttributeDO.class)
+            .eq(TenantCommonAttributeDO::getTenant, tenant)
+            .eq(TenantCommonAttributeDO::getAttributeKey, key)
+            .last("limit 1"));
+    }
+
+    @Override
+    public Response queryTenantAttribute(TenantAttributeCO attributeCO) {
+        TenantCommonAttributeDO tenantAttribute = queryOne(attributeCO.getTenant() ,attributeCO.getAttributeKey());
+        return SingleResponse.of(tenantAttribute);
+    }
+
+    @Override
+    public String queryAutorestartValue(String tenant) {
+        TenantCommonAttributeDO tenantAttribute = queryOne(tenant ,Constant.TenantAttribute.DEVICE_RESTART.key());
+        return Objects.nonNull(tenantAttribute) ? tenantAttribute.getAttributeValue() : null;
+    }
+}

+ 10 - 13
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/tenant/UserInformServiceImpl.java

@@ -75,19 +75,16 @@ public class UserInformServiceImpl implements UserInformService {
             }
         }
 
-        //关联的org需要对该org下的用户进行预警,并且需要用户的接收级别<=异常级别,这里我们用informLevel的id表示级别的递增
-        if (!CollectionUtils.isEmpty(org)) {
-            log.debug("users:{}", users);
-            List<SmsbSimpleUserCO> orgUserList = departmentUserService.listUserByOrgAndInformLevel(tenant, org, informLevel.getId());
-            List<String> existedUserIdList = users.stream().map(KeycloakUserCO::getId).collect(Collectors.toList());
-            List<String> orgUserIdList = orgUserList.stream().map(SmsbSimpleUserCO::getUserId).distinct().collect(Collectors.toList());
-            orgUserIdList.removeAll(existedUserIdList);
-            log.debug("orgUserIdList:{}", orgUserIdList);
-            if (!CollectionUtils.isEmpty(orgUserIdList)) {
-                List<KeycloakUserCO> orgKeyCloakUserList = keycloakService.getUsersByIds(orgUserIdList);
-                log.debug("orgKeyCloakUserList:{}", orgKeyCloakUserList);
-                users.addAll(orgKeyCloakUserList);
-            }
+        log.debug("users:{}", users);
+        List<SmsbSimpleUserCO> orgUserList = departmentUserService.listUserByInformLevel(tenant, org, informLevel.getId());
+        List<String> existedUserIdList = users.stream().map(KeycloakUserCO::getId).collect(Collectors.toList());
+        List<String> orgUserIdList = orgUserList.stream().map(SmsbSimpleUserCO::getUserId).distinct().collect(Collectors.toList());
+        orgUserIdList.removeAll(existedUserIdList);
+        log.debug("orgUserIdList:{}", orgUserIdList);
+        if (!CollectionUtils.isEmpty(orgUserIdList)) {
+            List<KeycloakUserCO> orgKeyCloakUserList = keycloakService.getUsersByIds(orgUserIdList);
+            log.debug("orgKeyCloakUserList:{}", orgKeyCloakUserList);
+            users.addAll(orgKeyCloakUserList);
         }
 
 

+ 1 - 1
smsb-customer-manager-client/src/main/java/com/inspur/customer/client/org/SmsbDepartmentUserService.java

@@ -102,5 +102,5 @@ public interface SmsbDepartmentUserService {
      * @param informLevel 指定informLevel
      * @return 指定部门下接收级别<= informLevel的用户
      */
-    List<SmsbSimpleUserCO> listUserByOrgAndInformLevel(String tenant, List<String> org, int informLevel);
+    List<SmsbSimpleUserCO> listUserByInformLevel(String tenant, List<String> org, int informLevel);
 }

+ 38 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/client/tenant/TenantCommonAttributeService.java

@@ -0,0 +1,38 @@
+package com.inspur.customer.client.tenant;
+
+import com.alibaba.cola.dto.Response;
+import com.inspur.customer.object.tenant.TenantAttributeCO;
+
+import java.time.LocalTime;
+
+/**
+ * @Author wangbo13
+ * @Date 2023/2/14 11:16
+ * @Version 1.0
+ */
+public interface TenantCommonAttributeService {
+
+    /**
+     * 存在相同key-更新,不存在则保存
+     *
+     * @param attributeCO
+     * @return Response
+     */
+    Response saveOrUpdate(TenantAttributeCO attributeCO);
+
+    /**
+     * 获取租户下某个属性值
+     *
+     * @param attributeCO
+     * @return 属性值
+     */
+    Response queryTenantAttribute(TenantAttributeCO attributeCO);
+
+    /**
+     * 获取设备重启时间
+     *
+     * @param tenant
+     * @return LocalTime
+     */
+    String queryAutorestartValue(String tenant);
+}

+ 24 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/constant/Constant.java

@@ -71,4 +71,28 @@ public final class Constant {
         }
 
     }
+
+    /**
+     * 租户公共属性
+     */
+    public enum TenantAttribute {
+        DEVICE_RESTART("autorestart", "设备定时重时间");
+
+        private final String key;
+        private final String describe;
+
+        TenantAttribute(String key, String describe) {
+            this.key = key;
+            this.describe = describe;
+        }
+
+        public String key() {
+            return this.key;
+        }
+
+        public String getDescribe() {
+            return this.describe;
+        }
+
+    }
 }

+ 6 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/context/inform/InformLevelEnum.java

@@ -3,9 +3,15 @@ package com.inspur.customer.context.inform;
 import lombok.Getter;
 
 import java.util.Arrays;
+import java.util.List;
 
 /**
+ * id不要大于1000,否则租户及部门消息推送规则会被毁掉
+ * com.inspur.device.constants.device.WarningLevelEnum
+ * com.inspur.customer.service.tenant.UserInformServiceImpl#getInformAddresseesByInformLevel(String, String, List, InformLevelEnum)
+ * com.inspur.customer.service.org.SmsbDepartmentUserServiceImpl#listUserByInformLevel(String, List, int)
  * inform level enum
+ *
  * @author linwenhua
  */
 public enum InformLevelEnum {

+ 2 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/object/org/SmsbSimpleUserCO.java

@@ -54,4 +54,6 @@ public class SmsbSimpleUserCO implements Serializable {
     private List<Long> deptIdChain;
 
     private List<String> deptNameChain;
+
+    private Integer informLevel;
 }

+ 31 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/object/tenant/TenantAttributeCO.java

@@ -0,0 +1,31 @@
+package com.inspur.customer.object.tenant;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Author wangbo13
+ * @Date 2023/2/14 11:34
+ * @Version 1.0
+ */
+@Data
+public class TenantAttributeCO implements Serializable {
+    private static final long serialVersionUID = -6306767042786033321L;
+    /**
+     * 租户
+     */
+    @NotNull(message = "tenant不能为空")
+    private String tenant;
+    /**
+     * 属性key
+     */
+    @NotNull(message = "attributeKey不能为空")
+    private String attributeKey;
+
+    /**
+     * 属性值
+     */
+    private String attributeValue;
+}

+ 14 - 0
smsb-customer-manager-infrastructure/src/main/java/com/inspur/customer/infrastructure/mapper/tenant/TenantCommonAttributeMapper.java

@@ -0,0 +1,14 @@
+package com.inspur.customer.infrastructure.mapper.tenant;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.inspur.customer.infrastructure.object.tenant.TenantCommonAttributeDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author wangbo13
+ * @Date 2023/2/14 11:12
+ * @Version 1.0
+ */
+@Mapper
+public interface TenantCommonAttributeMapper extends BaseMapper<TenantCommonAttributeDO> {
+}

+ 38 - 0
smsb-customer-manager-infrastructure/src/main/java/com/inspur/customer/infrastructure/object/tenant/TenantCommonAttributeDO.java

@@ -0,0 +1,38 @@
+package com.inspur.customer.infrastructure.object.tenant;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author wangbo13
+ * @Date 2023/2/14 11:09
+ * @Version 1.0
+ */
+@Data
+@TableName("tenant_common_attribute")
+public class TenantCommonAttributeDO implements Serializable {
+    private static final long serialVersionUID = -8752574182819977894L;
+    /**
+     * 主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * 租户标识
+     */
+    private String tenant;
+    /**
+     * 属性key
+     */
+    @TableField("attribute_key")
+    private String attributeKey;
+    /**
+     * 属性value
+     */
+    @TableField("attribute_value")
+    private String attributeValue;
+}

+ 5 - 0
smsb-customer-manager-infrastructure/src/main/resources/mapper/tenant/TenantCommonAttributeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.inspur.customer.infrastructure.mapper.tenant.TenantCommonAttributeMapper">
+
+</mapper>