From 9b2eedb85d53ca32610c32c6e50b5230ab3b16cf Mon Sep 17 00:00:00 2001
From: sean.zhou <sean.zhou@dji.com>
Date: Fri, 22 Jul 2022 20:16:03 +0800
Subject: [PATCH] V1.1.0 for dock

---
 src/main/java/com/dji/sample/manage/service/impl/UserServiceImpl.java |   78 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/dji/sample/manage/service/impl/UserServiceImpl.java b/src/main/java/com/dji/sample/manage/service/impl/UserServiceImpl.java
index c3c9a1b..8f3df63 100644
--- a/src/main/java/com/dji/sample/manage/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/dji/sample/manage/service/impl/UserServiceImpl.java
@@ -1,15 +1,22 @@
 package com.dji.sample.manage.service.impl;
 
 import com.auth0.jwt.JWT;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dji.sample.common.model.CustomClaim;
+import com.dji.sample.common.model.Pagination;
+import com.dji.sample.common.model.PaginationData;
 import com.dji.sample.common.model.ResponseResult;
 import com.dji.sample.common.util.JwtUtil;
 import com.dji.sample.component.mqtt.config.MqttConfiguration;
 import com.dji.sample.manage.dao.IUserMapper;
 import com.dji.sample.manage.model.dto.UserDTO;
+import com.dji.sample.manage.model.dto.UserListDTO;
 import com.dji.sample.manage.model.dto.WorkspaceDTO;
 import com.dji.sample.manage.model.entity.UserEntity;
+import com.dji.sample.manage.model.enums.UserTypeEnum;
 import com.dji.sample.manage.service.IUserService;
 import com.dji.sample.manage.service.IWorkspaceService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +25,12 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
 @Transactional
@@ -51,7 +63,7 @@
     }
 
     @Override
-    public ResponseResult userLogin(String username, String password) {
+    public ResponseResult userLogin(String username, String password, Integer flag) {
         // check user
         UserEntity userEntity = this.getUserByUsername(username);
         if (userEntity == null) {
@@ -60,6 +72,9 @@
                     .message("invalid username")
                     .build();
         }
+        if (flag.intValue() != userEntity.getUserType().intValue()) {
+            return ResponseResult.error("The account type does not match.");
+        }
         if (!password.equals(userEntity.getPassword())) {
             return ResponseResult.builder()
                     .code(HttpStatus.UNAUTHORIZED.value())
@@ -67,7 +82,7 @@
                     .build();
         }
 
-        Optional<WorkspaceDTO> workspaceOpt = workspaceService.getWorkspaceById(userEntity.getWorkspaceId());
+        Optional<WorkspaceDTO> workspaceOpt = workspaceService.getWorkspaceByWorkspaceId(userEntity.getWorkspaceId());
         if (workspaceOpt.isEmpty()) {
             return ResponseResult.builder()
                     .code(HttpStatus.UNAUTHORIZED.value())
@@ -109,6 +124,60 @@
         return Optional.of(user);
     }
 
+    @Override
+    public PaginationData<UserListDTO> getUsersByWorkspaceId(long page, long pageSize, String workspaceId) {
+        Page<UserEntity> userEntityPage = mapper.selectPage(
+                new Page<>(page, pageSize),
+                new LambdaQueryWrapper<UserEntity>().eq(UserEntity::getWorkspaceId, workspaceId));
+
+        List<UserListDTO> usersList = userEntityPage.getRecords()
+                .stream()
+                .map(this::entity2UserListDTO)
+                .collect(Collectors.toList());
+        return new PaginationData<>(usersList, new Pagination(userEntityPage));
+    }
+
+    @Override
+    public Boolean updateUser(String workspaceId, String userId, UserListDTO user) {
+        UserEntity userEntity = mapper.selectOne(
+                new LambdaQueryWrapper<UserEntity>()
+                        .eq(UserEntity::getUserId, userId)
+                        .eq(UserEntity::getWorkspaceId, workspaceId));
+        if (userEntity == null) {
+            return false;
+        }
+        userEntity.setMqttUsername(user.getMqttUsername());
+        userEntity.setMqttPassword(user.getMqttPassword());
+        userEntity.setUpdateTime(System.currentTimeMillis());
+        int id = mapper.update(userEntity, new LambdaUpdateWrapper<UserEntity>()
+                .eq(UserEntity::getUserId, userId)
+                .eq(UserEntity::getWorkspaceId, workspaceId));
+
+        return id > 0;
+    }
+
+    /**
+     * Convert database entity objects into user data transfer object.
+     * @param entity
+     * @return
+     */
+    private UserListDTO entity2UserListDTO(UserEntity entity) {
+        UserListDTO.UserListDTOBuilder builder = UserListDTO.builder();
+        if (entity != null) {
+            builder.userId(entity.getUserId())
+                    .username(entity.getUsername())
+                    .mqttUsername(entity.getMqttUsername())
+                    .mqttPassword(entity.getMqttPassword())
+                    .userType(UserTypeEnum.find(entity.getUserType()).getDesc())
+                    .createTime(LocalDateTime.ofInstant(
+                            Instant.ofEpochMilli(entity.getCreateTime()), ZoneId.systemDefault()));
+            Optional<WorkspaceDTO> workspaceOpt = workspaceService.getWorkspaceByWorkspaceId(entity.getWorkspaceId());
+            workspaceOpt.ifPresent(workspace -> builder.workspaceName(workspace.getWorkspaceName()));
+        }
+
+        return builder.build();
+    }
+
     /**
      * Query a user by username.
      * @param username
@@ -119,6 +188,11 @@
                 .eq("username", username));
     }
 
+    /**
+     * Convert database entity objects into user data transfer object.
+     * @param entity
+     * @return
+     */
     private UserDTO entityConvertToDTO(UserEntity entity) {
         if (entity == null) {
             return new UserDTO();

--
Gitblit v1.9.3