Browse Source

Merge branch '84-integrate' into 'develop'

develop-2023.03.24



See merge request !58

linwenhua 2 years ago
parent
commit
03ab02ab09

+ 16 - 1
smsb-customer-manager-adapter/src/main/java/com/inspur/customer/web/controller/keyclaok/KeycloakDepartmentController.java

@@ -4,11 +4,13 @@ import com.alibaba.cola.dto.Response;
 import com.alibaba.cola.dto.SingleResponse;
 import com.inspur.customer.client.keycloak.KeycloakService;
 import com.inspur.customer.client.org.SmsbDepartmentService;
+import com.inspur.customer.object.org.DeviceDepartmentCmd;
 import com.inspur.customer.object.org.OperationAuthority;
 import com.inspur.customer.object.org.SmsbDepartmentAdd;
 import com.inspur.customer.object.org.SmsbDepartmentUpdate;
 import com.inspur.logging.annotation.SmsbMethodLog;
 import com.inspur.logging.annotation.SmsbSysLog;
+import com.inspur.logging.annotation.SysLogIgnore;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -94,6 +96,19 @@ public class KeycloakDepartmentController {
     public Response queryDepartmentList(@RequestHeader String userId , @Valid @RequestBody OperationAuthority operationAuthority){
         Response checkResponse = departmentService.checkOperationAuthority(userId, operationAuthority.getTenant());
         if(!checkResponse.isSuccess()){return checkResponse;}
-        return departmentService.queryDepartmentList(operationAuthority.getTenant());
+        return SingleResponse.of(departmentService.queryDepartmentList(operationAuthority.getTenant()  , null));
+    }
+
+    /**
+     * 部门携带设备信息列表展示
+     *
+     * @param departmentCmd
+     * @return 部门设备列表
+     */
+    @SysLogIgnore
+    @GetMapping("/admin/department/device/list")
+    public Response listDepartmentDevice(DeviceDepartmentCmd departmentCmd){
+        if(departmentCmd.getActivate() == null){departmentCmd.setActivate(true);}
+        return SingleResponse.of(departmentService.listDepartmentDevice(departmentCmd));
     }
 }

+ 66 - 8
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.SmsbDeviceService;
 import com.inspur.device.client.core.manage.SmsbUsersDeviceAttentionService;
 import com.inspur.device.client.core.relation.DeviceAllocateService;
 import lombok.extern.slf4j.Slf4j;
@@ -51,6 +52,8 @@ public class SmsbDepartmentServiceImpl extends ServiceImpl<SmsbDepartmentMapper
     private DeviceAllocateService deviceAllocateService;
     @DubboReference
     private SmsbUsersDeviceAttentionService attentionService;
+    @DubboReference
+    private SmsbDeviceService deviceService;
 
     @Override
     public Response addDepartment(String userId , SmsbDepartmentAdd smsbDepartmentAdd) {
@@ -134,20 +137,21 @@ public class SmsbDepartmentServiceImpl extends ServiceImpl<SmsbDepartmentMapper
     }
 
     @Override
-    public Response queryDepartmentList(String tenant) {
-        List<SmsbDepartmentDO> departmentList = super.list(new LambdaQueryWrapper<>(SmsbDepartmentDO.class)
-            .eq(SmsbDepartmentDO::getIsDel , 0)
-            .eq(SmsbDepartmentDO::getTenant, tenant)
-            .isNull(SmsbDepartmentDO::getParentId));
+    public List<SmsbDepartmentCO> queryDepartmentList(String tenant , String org) {
+        LambdaQueryWrapper<SmsbDepartmentDO> queryWrapper = new LambdaQueryWrapper<>(SmsbDepartmentDO.class)
+            .eq(SmsbDepartmentDO::getIsDel, 0)
+            .eq(SmsbDepartmentDO::getTenant, tenant);
+        queryWrapper = StringUtils.isNotEmpty(org) ? queryWrapper.eq(SmsbDepartmentDO::getPath , org)
+            : queryWrapper.isNull(SmsbDepartmentDO::getParentId);
         List<SmsbDepartmentCO> departmentTree = Lists.newArrayList();
-        departmentList.forEach(department -> {
+        super.list(queryWrapper).forEach(department -> {
             SmsbDepartmentCO smsbDepartmentCO = new SmsbDepartmentCO();
             BeanUtils.copyProperties(department, smsbDepartmentCO);
             smsbDepartmentCO.setChildren(this.getChilde(department.getId()));
             departmentTree.add(smsbDepartmentCO);
         });
         log.info("tree num is :{}", departmentTree.size());
-        return SingleResponse.of(departmentTree);
+        return departmentTree;
     }
 
     @Override
@@ -312,7 +316,7 @@ public class SmsbDepartmentServiceImpl extends ServiceImpl<SmsbDepartmentMapper
         SmsbSimpleUserCO simpleUser = userService.getOneByUserId(userId);
         if(Objects.isNull(simpleUser)){return SingleResponse.of(new SmsbDepartmentCO());}
         if(Objects.isNull(simpleUser.getDepartmentId()) && Objects.isNull(simpleUser.getPath())){
-            return this.queryDepartmentList(simpleUser.getTenant());
+            return SingleResponse.of(this.queryDepartmentList(simpleUser.getTenant() ,null));
         }
         log.info("部门id:{}",simpleUser.getDepartmentId());
         SmsbDepartmentDO department = super.getById(simpleUser.getDepartmentId());
@@ -323,4 +327,58 @@ public class SmsbDepartmentServiceImpl extends ServiceImpl<SmsbDepartmentMapper
         }
         return SingleResponse.of(smsbDepartmentCO);
     }
+
+
+    @Override
+    public DeviceDepartmentDto listDepartmentDevice(DeviceDepartmentCmd departmentCmd) {
+        // 1. 获取对应部门树
+        SmsbDepartmentCO department = this.queryDepartment(departmentCmd.getTenant() , departmentCmd.getOrg());
+        DeviceDepartmentDto deviceDepartmentDto = new DeviceDepartmentDto();
+        // 2. 获取部门-List<设备id> map
+        if(Objects.nonNull(department)){
+            BeanUtils.copyProperties(department , deviceDepartmentDto);
+            if(StringUtils.isEmpty(departmentCmd.getOrg()) && department.getId() == null){
+                // 根节点为租户,该租户下未被分配的设备
+                deviceDepartmentDto.setDevices(deviceService.ListDeviceUnbound(departmentCmd.getTenant() , departmentCmd.getActivate()));
+            }else {
+                // 根节点为部门
+                deviceDepartmentDto.setDevices(deviceService.ListDeviceBind(department.getPath() , departmentCmd.getActivate()));
+            }
+            // todo 递归子项
+            deviceDepartmentDto.setChildren(chaildRecurrenceHandle(department.getChildren() , departmentCmd.getActivate()));
+        }
+        // 3. 组装设备信息并返回
+        return deviceDepartmentDto;
+    }
+
+    private List<DeviceDepartmentDto> chaildRecurrenceHandle(List<SmsbDepartmentCO> children , Boolean activate){
+        List<DeviceDepartmentDto> childrenList = Lists.newArrayList();
+        if(!CollectionUtils.isEmpty(children)){
+            children.forEach(child->{
+                DeviceDepartmentDto deviceDepartmentDto = new DeviceDepartmentDto();
+                BeanUtils.copyProperties(child , deviceDepartmentDto);
+                deviceDepartmentDto.setDevices(deviceService.ListDeviceBind(child.getPath() , activate));
+                deviceDepartmentDto.setDevices(chaildRecurrenceHandle(child.getChildren() , activate));
+                childrenList.add(deviceDepartmentDto);
+            });
+        }
+        return childrenList;
+    }
+
+    private SmsbDepartmentCO queryDepartment(String tenant , String org){
+        SmsbDepartmentCO departmentCO = new SmsbDepartmentCO();
+        departmentCO.setTenant(tenant);
+        if(StringUtils.isEmpty(org)){
+            departmentCO.setChildren(queryDepartmentList(tenant , null));
+        }else{
+            SmsbDepartmentDO smsbDepartmentDO = super.getOne(new LambdaQueryWrapper<>(SmsbDepartmentDO.class)
+                .eq(SmsbDepartmentDO::getIsDel, 0)
+                .eq(SmsbDepartmentDO::getTenant, tenant)
+                .eq(SmsbDepartmentDO::getPath, org)
+                .last("LIMIT 1"));
+            if(Objects.nonNull(smsbDepartmentDO)){BeanUtils.copyProperties(smsbDepartmentDO , departmentCO);}
+            departmentCO.setChildren(this.getChilde(smsbDepartmentDO.getId()));
+        }
+        return departmentCO;
+    }
 }

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

@@ -59,7 +59,8 @@ public class TenantCommonAttributeServiceImpl extends ServiceImpl<TenantCommonAt
     @Cacheable(value = "msr:customer:tenantCommonAttribute")
     public TenantAttributeCO queryTenantAttribute(TenantAttributeCO attributeCO) {
         TenantAttributeCO co = new TenantAttributeCO();
-        BeanUtils.copyProperties(queryOne(attributeCO.getTenant() ,attributeCO.getAttributeKey()),co);
+        TenantCommonAttributeDO tenantCommonAttributeDO = queryOne(attributeCO.getTenant(), attributeCO.getAttributeKey());
+        if(Objects.nonNull(tenantCommonAttributeDO)){BeanUtils.copyProperties(tenantCommonAttributeDO,co);}
         return co;
     }
 

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

@@ -48,7 +48,7 @@ public interface SmsbDepartmentService {
      * @param tenant
      * @return
      */
-    Response queryDepartmentList(String tenant);
+    List<SmsbDepartmentCO> queryDepartmentList(String tenant , String org);
 
     /**
      * 获取所有部门,无层次结构
@@ -111,4 +111,12 @@ public interface SmsbDepartmentService {
      * @return
      */
     Response queryOneselfDepartTree(String userId);
+
+    /**
+     * 获取携带设备信息部门列表
+     *
+     * @param departmentCmd
+     * @return
+     */
+    DeviceDepartmentDto listDepartmentDevice(DeviceDepartmentCmd departmentCmd);
 }

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

@@ -0,0 +1,26 @@
+package com.inspur.customer.object.org;
+
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+
+/**
+ * @Author wangbo13
+ * @Date 2023/3/20 14:31
+ * @Version 1.0
+ */
+@Data
+public class DeviceDepartmentCmd extends OperationAuthority {
+    private static final long serialVersionUID = 677401891213725878L;
+
+    /**
+     * 部门
+     */
+    private String org;
+
+    /**
+     * 设备是否激活
+     */
+    private Boolean activate;
+}

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

@@ -0,0 +1,77 @@
+package com.inspur.customer.object.org;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author wangbo13
+ * @Date 2023/3/20 16:25
+ * @Version 1.0
+ */
+@Data
+public class DeviceDepartmentDto implements Serializable {
+    private static final long serialVersionUID = -5239662670498601014L;
+
+    private Object devices;
+
+    private Long id;
+    /**
+     * 父节点id
+     */
+    private Long parentId;
+    /**
+     * 部门中文名称
+     */
+    private String name;
+    /**
+     * 部门唯一标识
+     */
+    private String mark;
+
+    /**
+     * 路径
+     */
+    private String path;
+    /**
+     * 序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 租户
+     */
+    private String tenant;
+
+    /**
+     * 删除标识
+     */
+    private Integer isDel;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 修改人
+     */
+    private String updateBy;
+
+    /**
+     * 修改时间
+     */
+    private LocalDateTime updateTime;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private List<DeviceDepartmentDto> children = new ArrayList<>();
+}

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

@@ -28,32 +28,35 @@ public class InformAddresseeCO implements Serializable {
 
     public List<String> getEmailAddressees() {
         if (Boolean.TRUE.equals(informStrategy.getEmail())) {
-            return users.stream().map(KeycloakUserCO::getEmail).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+            return users.stream().map(KeycloakUserCO::getEmail).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());
         }
         return Collections.emptyList();
     }
 
     public List<String> getWeChatAddressees() {
         if (Boolean.TRUE.equals(informStrategy.getWechat())) {
-            return users.stream().map(KeycloakUserCO::getWechat).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+            return users.stream().map(KeycloakUserCO::getWechat).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());
         }
         return Collections.emptyList();
     }
 
     public List<String> getUserIds() {
-        return users.stream().map(KeycloakUserCO::getId).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+        if (Boolean.TRUE.equals(informStrategy.getWechatApplet())) {
+            return users.stream().map(KeycloakUserCO::getId).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());
+        }
+        return Collections.emptyList();
     }
 
     public List<String> getWeChatAppletAddressees() {
         if (Boolean.TRUE.equals(informStrategy.getWechatApplet())) {
-            return users.stream().map(KeycloakUserCO::getWechatAppletOpenId).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+            return users.stream().map(KeycloakUserCO::getWechatAppletOpenId).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());
         }
         return Collections.emptyList();
     }
 
     public List<String> getPhoneAddressees() {
         if (Boolean.TRUE.equals(informStrategy.getNote())) {
-            return users.stream().map(KeycloakUserCO::getPhone).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+            return users.stream().map(KeycloakUserCO::getPhone).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());
         }
         return Collections.emptyList();
     }