Browse Source

Merge branch '84-integrate' into 'develop'

develop20230403



See merge request !61

linwenhua 2 years ago
parent
commit
317d560211

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

@@ -5,6 +5,7 @@ import com.alibaba.cola.dto.Response;
 import com.alibaba.cola.dto.SingleResponse;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -358,7 +359,7 @@ public class SmsbDepartmentServiceImpl extends ServiceImpl<SmsbDepartmentMapper
                 DeviceDepartmentDto deviceDepartmentDto = new DeviceDepartmentDto();
                 BeanUtils.copyProperties(child , deviceDepartmentDto);
                 deviceDepartmentDto.setDevices(deviceService.ListDeviceBind(child.getPath() , activate));
-                deviceDepartmentDto.setDevices(chaildRecurrenceHandle(child.getChildren() , activate));
+                deviceDepartmentDto.setChildren(chaildRecurrenceHandle(child.getChildren() , activate));
                 childrenList.add(deviceDepartmentDto);
             });
         }
@@ -381,4 +382,82 @@ public class SmsbDepartmentServiceImpl extends ServiceImpl<SmsbDepartmentMapper
         }
         return departmentCO;
     }
+
+    @Override
+    public List<String> listSuperiorDepartments(List<String> orgs, String tenant) {
+        List<String> departments = Lists.newArrayList();
+        List<SmsbDepartmentDO> allDepartments = super.list();
+        orgs.forEach(org->{
+            SmsbDepartmentDO department = super.getOne(Wrappers.<SmsbDepartmentDO>lambdaQuery().eq(SmsbDepartmentDO::getTenant , tenant)
+                .eq(SmsbDepartmentDO::getPath , org).last("limit 1"));
+            if(Objects.nonNull(department)){
+                departments.addAll(
+                    getParentNodes(allDepartments , department).stream().map(SmsbDepartmentDO::getPath)
+                        .distinct().collect(Collectors.toList()));
+            }
+        });
+        log.info("获取部门org:{} , 所有上级部门列表:{}" , orgs , departments);
+        return departments;
+    }
+
+    @Override
+    public Map<String, String> getDepartmentNameByOrg(List<String> orgList) {
+        if (CollectionUtils.isEmpty(orgList)) {
+            return Collections.emptyMap();
+        }
+
+        List<SmsbDepartmentDO> list = this.lambdaQuery()
+            .eq(SmsbDepartmentDO::getIsDel, 0)
+            .in(SmsbDepartmentDO::getPath, orgList).list();
+
+        Map<String, String> map = new HashMap<>();
+        for (SmsbDepartmentDO dep : list) {
+            if (dep.getParentId() == null) {
+                map.put(dep.getPath(), dep.getName());
+            } else {
+                StringBuilder sb = new StringBuilder(dep.getName());
+                while (true) {
+                    SmsbDepartmentDO parent = this.getById(dep.getParentId());
+                    if (parent != null) {
+                        sb.insert(0,parent.getName()+"/");
+                    }
+                    if (parent == null || parent.getParentId() == null) {
+                        break;
+                    }
+                }
+                map.put(dep.getPath(), sb.toString());
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 获取当前部门及上级部门
+     *
+     * @param allDepartments
+     * @param present 当前部门
+     * @return
+     */
+    private List<SmsbDepartmentDO> getParentNodes(List<SmsbDepartmentDO> allDepartments , SmsbDepartmentDO present){
+        List<SmsbDepartmentDO> parents = Lists.newArrayList();
+        parents.add(present);
+        if (present.getParentId() != null) {
+            SmsbDepartmentDO parent = getById(present.getParentId(), allDepartments);
+            if (parent != null) {
+                List<SmsbDepartmentDO> parentDepartments = getParentNodes(allDepartments , parent);
+                parents.addAll(parentDepartments);
+            }
+        }
+        return parents;
+    }
+
+    public SmsbDepartmentDO getById(Long id, List<SmsbDepartmentDO> departments) {
+        for (SmsbDepartmentDO department : departments) {
+            log.info("id的值为:{}",department.getId());
+            if (department.getId().equals(id)) {
+                return department;
+            }
+        }
+        return null;
+    }
 }

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

@@ -3,6 +3,7 @@ package com.inspur.customer.service.org;
 import com.alibaba.cola.dto.PageResponse;
 import com.alibaba.cola.dto.Response;
 import com.alibaba.cola.dto.SingleResponse;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -10,6 +11,7 @@ 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.google.common.collect.Lists;
+import com.inspur.customer.client.org.SmsbDepartmentService;
 import com.inspur.customer.client.org.SmsbDepartmentUserService;
 import com.inspur.customer.constant.Constant;
 import com.inspur.customer.infrastructure.convertor.SmsbDepartmentConvertor;
@@ -20,11 +22,14 @@ import com.inspur.customer.object.keycloak.SwitchDTO;
 import com.inspur.customer.object.org.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.cache.annotation.Cacheable;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.*;
 
@@ -37,6 +42,9 @@ import java.util.*;
 @DubboService(interfaceClass = SmsbDepartmentUserService.class)
 public class SmsbDepartmentUserServiceImpl extends ServiceImpl<SmsbDepartmentUserMapper, SmsbDepartmentUserDO> implements  SmsbDepartmentUserService{
 
+    @Lazy
+    @Resource
+    private SmsbDepartmentService departmentService;
     @Override
     public Boolean addUserDepartment(String userId, SmsbUserAdd smsbUserAdd) {
         return super.save(SmsbDepartmentConvertor.toDataObjectForCreate(userId , smsbUserAdd));
@@ -125,6 +133,8 @@ public class SmsbDepartmentUserServiceImpl extends ServiceImpl<SmsbDepartmentUse
     public boolean updateDeviceExceptionLevel(SmsbUserExceptionLevelUpdate levelUpdate) {
         return super.update(new LambdaUpdateWrapper<>(SmsbDepartmentUserDO.class)
             .set(SmsbDepartmentUserDO::getInformLevel, levelUpdate.getInformLevel())
+            .set(SmsbDepartmentUserDO::getInformType, CollectionUtils.isEmpty(levelUpdate.getInformType())
+                ? null: JSONObject.toJSONString(levelUpdate.getInformType()))
             .eq(SmsbDepartmentUserDO::getUserId, levelUpdate.getUserId()));
     }
 
@@ -182,25 +192,26 @@ public class SmsbDepartmentUserServiceImpl extends ServiceImpl<SmsbDepartmentUse
      * @return 指定部门下接收级别<= informLevel的用户
      */
     @Override
-    public List<SmsbSimpleUserCO> listUserByInformLevel(String tenant, List<String> org, int informLevel) {
+    public List<SmsbSimpleUserCO> listUserByInformLevel(String tenant, List<String> org, int informLevel ,int errorId) {
         LambdaQueryWrapper<SmsbDepartmentUserDO> queryWrapper = Wrappers.lambdaQuery();
-
+        List<String> paths = departmentService.listSuperiorDepartments(org, tenant);
         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)
+            .or(!CollectionUtils.isEmpty(paths), q -> q.ne(SmsbDepartmentUserDO::getInformLevel, -1)
+                .in(SmsbDepartmentUserDO::getPath, paths)
                 .eq(SmsbDepartmentUserDO::getEnabled, 1)
                 .eq(SmsbDepartmentUserDO::getTenant, tenant)
                 .between(SmsbDepartmentUserDO::getInformLevel, 0, informLevel))
             //部门为空代表设备在根部门
-            .or(CollectionUtils.isEmpty(org), q -> q.ne(SmsbDepartmentUserDO::getInformLevel, -1)
+            .or(CollectionUtils.isEmpty(paths), q -> q.ne(SmsbDepartmentUserDO::getInformLevel, -1)
                 .isNull(SmsbDepartmentUserDO::getPath)
                 .eq(SmsbDepartmentUserDO::getEnabled, 1)
                 .eq(SmsbDepartmentUserDO::getTenant, tenant)
                 .between(SmsbDepartmentUserDO::getInformLevel, 0, informLevel));
-
+        queryWrapper.or(i->i.eq(SmsbDepartmentUserDO::getInformLevel , 9999)
+            .like(SmsbDepartmentUserDO::getInformType , ","+errorId+","));
         List<SmsbDepartmentUserDO> list = this.list(queryWrapper);
 
         List<SmsbSimpleUserCO> smsbSimpleUserList = Lists.newArrayListWithCapacity(list.size());
@@ -233,4 +244,24 @@ public class SmsbDepartmentUserServiceImpl extends ServiceImpl<SmsbDepartmentUse
         this.list().forEach(user -> userMap.put(user.getUserId(),user.getUserName()));
         return userMap;
     }
+
+    @Override
+    public List<KeycloakUserCO> listUser(List<String> userIds) {
+        List<KeycloakUserCO> userList = Lists.newArrayListWithCapacity(userIds.size());
+        List<SmsbDepartmentUserDO> departmentUsers = super.list(Wrappers.<SmsbDepartmentUserDO>lambdaQuery()
+            .in(SmsbDepartmentUserDO::getUserId, userIds));
+        if(CollectionUtils.isNotEmpty(departmentUsers)){
+            departmentUsers.forEach(departmentUser->{
+                KeycloakUserCO keycloakUserCO = new KeycloakUserCO();
+                keycloakUserCO.setId(departmentUser.getUserId());
+                keycloakUserCO.setUsername(departmentUser.getUserName());
+                keycloakUserCO.setPhone(Collections.singletonList(departmentUser.getPhone()));
+                keycloakUserCO.setEmail(departmentUser.getEmail());
+                keycloakUserCO.setWechat(Collections.singletonList(departmentUser.getWechat()));
+                keycloakUserCO.setWechatAppletOpenId(departmentUser.getWechatApplet());
+                userList.add(keycloakUserCO);
+            });
+        }
+        return userList;
+    }
 }

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

@@ -39,7 +39,7 @@ public class UserInformServiceImpl implements UserInformService {
     private TenantExceptionInformStrategyService tenantExceptionInformStrategyService;
 
     @Override
-    public InformAddresseeCO getInformAddresseesByInformLevel(@Nullable String userId, String tenant, @Nullable List<String> org, InformLevelEnum informLevel) {
+    public InformAddresseeCO getInformAddresseesByInformLevel(@Nullable String userId, String tenant, @Nullable List<String> org, InformLevelEnum informLevel, int errorId) {
         // get base user
         List<KeycloakUserCO> users = new ArrayList<>();
         InformAddresseeCO informAddressee = new InformAddresseeCO();
@@ -76,7 +76,7 @@ public class UserInformServiceImpl implements UserInformService {
         }
 
         log.debug("users:{}", users);
-        List<SmsbSimpleUserCO> orgUserList = departmentUserService.listUserByInformLevel(tenant, org, informLevel.getId());
+        List<SmsbSimpleUserCO> orgUserList = departmentUserService.listUserByInformLevel(tenant, org, informLevel.getId() , errorId);
         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);
@@ -94,7 +94,8 @@ public class UserInformServiceImpl implements UserInformService {
 
     @Override
     public InformAddresseeCO getInformAddresseesByInformType(@Nullable String userId, String tenant, @Nullable List<String> orgs, InformTypeEnum informType) {
-        return getInformAddresseesByInformLevel(userId, tenant, orgs, informType.getLevel());
+        // todo errorId为用户自定义勾选预警,接收指定预警信息
+        return getInformAddresseesByInformLevel(userId, tenant, orgs, informType.getLevel() , -99);
     }
 
     @Override

+ 17 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/client/org/SmsbDepartmentService.java

@@ -5,6 +5,7 @@ import com.alibaba.cola.dto.Response;
 import com.inspur.customer.object.org.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author wangbo13
@@ -119,4 +120,20 @@ public interface SmsbDepartmentService {
      * @return
      */
     DeviceDepartmentDto listDepartmentDevice(DeviceDepartmentCmd departmentCmd);
+
+    /**
+     * 冒泡获取上级部门列表
+     *
+     * @param orgs
+     * @param tenant
+     * @return
+     */
+    List<String> listSuperiorDepartments(List<String> orgs , String tenant);
+
+    /**
+     * 根据path获取机构名称
+     * @param paths
+     * @return
+     */
+    Map<String, String> getDepartmentNameByOrg(List<String> paths);
 }

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

@@ -99,12 +99,13 @@ public interface SmsbDepartmentUserService {
 
     /**
      * 获取指定org下接收级别<=informLevel的用户
+     * errorId为用户自定义勾选接收指定预警信息
      *
      * @param org         指定org
      * @param informLevel 指定informLevel
      * @return 指定部门下接收级别<= informLevel的用户
      */
-    List<SmsbSimpleUserCO> listUserByInformLevel(String tenant, List<String> org, int informLevel);
+    List<SmsbSimpleUserCO> listUserByInformLevel(String tenant, List<String> org, int informLevel ,int errorId);
 
     /**
      * 更新用户属性
@@ -119,4 +120,12 @@ public interface SmsbDepartmentUserService {
      * 以map形式获取
      */
     Map<String, String> getUserMap();
+
+    /**
+     * 通过用户ids获取用户列表
+     *
+     * @param userIds
+     * @return 部门用户列表
+     */
+    List<KeycloakUserCO> listUser(List<String> userIds);
 }

+ 1 - 1
smsb-customer-manager-client/src/main/java/com/inspur/customer/client/tenant/UserInformService.java

@@ -14,7 +14,7 @@ import java.util.List;
  **/
 public interface UserInformService {
 
-    InformAddresseeCO getInformAddresseesByInformLevel(@Nullable String userId, String tenant, List<String> departments, InformLevelEnum informLevel);
+    InformAddresseeCO getInformAddresseesByInformLevel(@Nullable String userId, String tenant, List<String> departments, InformLevelEnum informLevel , int errorId);
 
     InformAddresseeCO getInformAddresseesByInformType(@Nullable String userId, String tenant, @Nullable List<String> departments, InformTypeEnum informType);
 

+ 1 - 1
smsb-customer-manager-client/src/main/java/com/inspur/customer/object/keycloak/KeycloakUserCO.java

@@ -40,7 +40,7 @@ public class KeycloakUserCO implements Serializable {
     public void setWechat(@Nullable List<String> wechats) {
         if (wechats != null && !wechats.isEmpty()) {
             String temp = wechats.get(0);
-            if (!temp.contains("{\"")) {
+            if (StringUtils.isNotEmpty(temp) && !temp.contains("{\"")) {
                 wechat = temp;
             }
         }

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

@@ -4,6 +4,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @author zengweijie
@@ -23,6 +24,10 @@ public class SmsbUserExceptionLevelUpdate extends OperationAuthority {
     @NotNull(message = "通知级别不能为空")
     private Integer informLevel;
 
+    /**
+     * 设备故障原因枚举id集合
+     */
+    private List<Integer> informType;
     /**
      * 账号
      */

+ 1 - 4
smsb-customer-manager-client/src/main/java/com/inspur/customer/object/tenant/InformAddresseeCO.java

@@ -41,10 +41,7 @@ public class InformAddresseeCO implements Serializable {
     }
 
     public List<String> getUserIds() {
-        if (Boolean.TRUE.equals(informStrategy.getWechatApplet())) {
-            return users.stream().map(KeycloakUserCO::getId).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());
-        }
-        return Collections.emptyList();
+        return users.stream().map(KeycloakUserCO::getId).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());
     }
 
     public List<String> getWeChatAppletAddressees() {

+ 6 - 0
smsb-customer-manager-infrastructure/src/main/java/com/inspur/customer/infrastructure/object/org/SmsbDepartmentUserDO.java

@@ -98,4 +98,10 @@ public class SmsbDepartmentUserDO implements Serializable {
      * 邮箱
      */
     private String email;
+
+    /**
+     * 设备故障原因枚举id集合
+     */
+    @TableField("inform_type")
+    private String informType;
 }