From 476c886eae7123d71785459194be2e05ba71b817 Mon Sep 17 00:00:00 2001
From: s1lentdragon <22919zpw@gmail.com>
Date: Sun, 3 Dec 2023 14:46:40 +0800
Subject: [PATCH] =?UTF-8?q?[Feature#]=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=99=AE?=
 =?UTF-8?q?=E9=80=9A=E6=88=90=E5=91=98=E5=8F=AF=E4=BB=A5=E7=9C=8B=E5=88=B0?=
 =?UTF-8?q?=E8=81=8C=E5=8A=A1=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E7=BB=99?=
 =?UTF-8?q?=E6=96=B0=E5=BB=BA=E7=94=A8=E6=88=B7=E5=A2=9E=E5=8A=A0=E4=BA=86?=
 =?UTF-8?q?=E8=BF=94=E5=9B=9Eid=EF=BC=8C=E7=BB=99=E6=8F=92=E5=85=A5?=
 =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=BA=8B=E7=89=A9?=
 =?UTF-8?q?=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../com/sipc/stellar/biz/IUserInfoBiz.java    |  3 +-
 .../com/sipc/stellar/biz/impl/AdminBiz.java   | 11 +++---
 .../sipc/stellar/biz/impl/UserInfoBiz.java    | 36 +++++++++++--------
 .../controller/UserInfoController.java        |  3 +-
 .../model/result/InsertUserInfoResult.java    |  8 +++++
 .../com/sipc/stellar/service/UserService.java |  1 +
 .../stellar/service/impl/UserServiceImpl.java | 19 ++++++++--
 7 files changed, 54 insertions(+), 27 deletions(-)
 create mode 100644 src/main/java/com/sipc/stellar/pojo/model/result/InsertUserInfoResult.java

diff --git a/src/main/java/com/sipc/stellar/biz/IUserInfoBiz.java b/src/main/java/com/sipc/stellar/biz/IUserInfoBiz.java
index e5d3339..fddca1a 100644
--- a/src/main/java/com/sipc/stellar/biz/IUserInfoBiz.java
+++ b/src/main/java/com/sipc/stellar/biz/IUserInfoBiz.java
@@ -6,6 +6,7 @@ import com.sipc.stellar.pojo.model.dto.UserInfoDto;
 import com.sipc.stellar.pojo.model.pageData.PageData;
 import com.sipc.stellar.pojo.model.request.InsertUserRequest;
 import com.sipc.stellar.pojo.model.request.UpdateUserInfoRequest;
+import com.sipc.stellar.pojo.model.result.InsertUserInfoResult;
 import com.sipc.stellar.pojo.model.result.SimpleUserInfoResult;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
@@ -27,5 +28,5 @@ public interface IUserInfoBiz {
 
     SipcResponse<List<AcademyMajorMerge>> getAllMajor();
 
-    SipcResponse<String> insertUserInfo(InsertUserRequest request);
+    SipcResponse<InsertUserInfoResult> insertUserInfo(InsertUserRequest request);
 }
diff --git a/src/main/java/com/sipc/stellar/biz/impl/AdminBiz.java b/src/main/java/com/sipc/stellar/biz/impl/AdminBiz.java
index 8f29ed4..e611b35 100644
--- a/src/main/java/com/sipc/stellar/biz/impl/AdminBiz.java
+++ b/src/main/java/com/sipc/stellar/biz/impl/AdminBiz.java
@@ -113,17 +113,14 @@ public class AdminBiz implements IAdminBiz {
         user.setPassword(MD5Utils.encrypt(password)); //密码进行单md5加密存入
         user.setPermission(1); //默认权限为成员
         user.setCreateBy(username);
-        userService.insertUser(user);
 
         UserInfo userInfo = new UserInfo();
-        userInfo.setId(user.getId());
         userInfo.setName("未设置");
-        userInfo.setMobile(mobile);
+        userInfo.setMobile(user.getPhone());
         userInfo.setPosition("干事");
-        userInfo.setCreateBy(username);
-        userInfo.setUpdateBy(username);
-        userService.insertUserInfo(userInfo);
-        //todo:这里需要加锁,保证id一致
+        userInfo.setCreateBy(user.getCreateBy());
+        userInfo.setUpdateBy(user.getCreateBy());
+        userService.insertUserAndUserInfoByDefault(user,userInfo);
 
         TokenModel tokenModel = new TokenModel();
         tokenModel.setId(user.getId());
diff --git a/src/main/java/com/sipc/stellar/biz/impl/UserInfoBiz.java b/src/main/java/com/sipc/stellar/biz/impl/UserInfoBiz.java
index 942ce32..7073a11 100644
--- a/src/main/java/com/sipc/stellar/biz/impl/UserInfoBiz.java
+++ b/src/main/java/com/sipc/stellar/biz/impl/UserInfoBiz.java
@@ -12,6 +12,7 @@ import com.sipc.stellar.exception.SipcBaseException;
 import com.sipc.stellar.pojo.model.pageData.PageData;
 import com.sipc.stellar.pojo.model.request.InsertUserRequest;
 import com.sipc.stellar.pojo.model.request.UpdateUserInfoRequest;
+import com.sipc.stellar.pojo.model.result.InsertUserInfoResult;
 import com.sipc.stellar.pojo.model.result.SimpleUserInfoResult;
 import com.sipc.stellar.pojo.model.resultEnum.ResultCode;
 import com.sipc.stellar.service.MajorService;
@@ -56,15 +57,15 @@ public class UserInfoBiz implements IUserInfoBiz {
         userInfoDto.setResearchId(userInfo.getResearchId());
         userInfoDto.setPosition(userInfo.getPosition());
         userInfoDto.setBirthday(userInfo.getBirthday());
-        userInfoDto.setEmail(userInfo.getEmail());
+        userInfoDto.setWechat(userInfo.getWechat());
         userInfoDto.setFeishu(userInfo.getFeishu());
-        userInfoDto.setMobile(userInfo.getMobile());
         userInfoDto.setBlogUrl(userInfo.getBlogUrl());
         userInfoDto.setPhotoUrl(userInfo.getPhotoUrl());
         userInfoDto.setDescription(userInfo.getDescription());
         userInfoDto.setSuggestion(userInfo.getSuggestion());
         if (TokenHandler.getTokenModelThreadLocal().getId().equals(id) || TokenHandler.getTokenModelThreadLocal().getPermission() == 3) {
-            userInfoDto.setWechat(userInfo.getWechat());
+            userInfoDto.setEmail(userInfo.getEmail());
+            userInfoDto.setMobile(userInfo.getMobile());
         }
         return SipcResponse.success(userInfoDto);
     }
@@ -83,10 +84,11 @@ public class UserInfoBiz implements IUserInfoBiz {
                         q.getGrade(), q.getSex(),
                         q.getMajorId(), q.getResearchId(),
                         q.getPosition(),
-                        q.getBirthday(), q.getEmail(),
-                        q.getFeishu(), q.getMobile(),
-                        //微信不向其他成员展示
-                        tokenModel.getId().equals(q.getId()) || tokenModel.getPermission().equals(3) ? q.getWechat() : null,
+                        q.getBirthday(),
+                        tokenModel.getId().equals(q.getId()) || tokenModel.getPermission().equals(3) ? q.getEmail() : null,
+                        q.getFeishu(),
+                        tokenModel.getId().equals(q.getId()) || tokenModel.getPermission().equals(3) ? q.getMobile() : null,
+                        q.getWechat(),
                         q.getBlogUrl(),
                         q.getPhotoUrl(), q.getDescription(),
                         q.getSuggestion())).toList());
@@ -145,7 +147,7 @@ public class UserInfoBiz implements IUserInfoBiz {
         userInfo.setEmail(updateUserInfoRequest.getEmail());
         userInfo.setFeishu(updateUserInfoRequest.getFeishu());
         userInfo.setMobile(updateUserInfoRequest.getMobile());
-        if(updateUserInfoRequest.getMobile() != null){
+        if (updateUserInfoRequest.getMobile() != null) {
             User user = new User();
             user.setId(updateUserInfoRequest.getId());
             user.setPhone(updateUserInfoRequest.getMobile());
@@ -219,20 +221,23 @@ public class UserInfoBiz implements IUserInfoBiz {
     }
 
     @Override
-    public SipcResponse<String> insertUserInfo(InsertUserRequest request) {
+    public SipcResponse<InsertUserInfoResult> insertUserInfo(InsertUserRequest request) {
         TokenModel tokenModel = TokenHandler.getTokenModelThreadLocal();
-        if(!tokenModel.getPermission().equals(3)){
+        if (!tokenModel.getPermission().equals(3)) {
             return SipcResponse.failure(ResultCode.PERMISSION_WRONG, "Insufficient permissions");
         }
+        if(userService.getUserByMobileOrUsername(request.getMobile(),request.getUsername()) != null){
+            return SipcResponse.failure(ResultCode.INVALID_PARAM, "username or phone is already exist");
+        }
         User user = new User();
         user.setUsername(request.getUsername());
         //默认密码sipc115
         user.setPassword(MD5Utils.encrypt("sipc115"));
         user.setPhone(request.getMobile());
         user.setCreateBy(tokenModel.getUsername());
-        userService.insertUser(user);
+        user.setPermission(1);
+
         UserInfo userInfo = new UserInfo();
-        userInfo.setId(user.getId());
         userInfo.setName(request.getName());
         userInfo.setSex(request.getSex());
         userInfo.setGrade(request.getGrade());
@@ -250,8 +255,9 @@ public class UserInfoBiz implements IUserInfoBiz {
         userInfo.setSuggestion(request.getSuggestion());
         userInfo.setCreateBy(tokenModel.getUsername());
         userInfo.setUpdateBy(tokenModel.getUsername());
-        userService.insertUserInfo(userInfo);
-        //todo:需要加事物保证原子性
-        return SipcResponse.success("insert success!");
+        Integer id = userService.insertUserAndUserInfoByDefault(user, userInfo);
+        InsertUserInfoResult result = new InsertUserInfoResult();
+        result.setId(id);
+        return SipcResponse.success(result);
     }
 }
diff --git a/src/main/java/com/sipc/stellar/controller/UserInfoController.java b/src/main/java/com/sipc/stellar/controller/UserInfoController.java
index 711beca..6e785ba 100644
--- a/src/main/java/com/sipc/stellar/controller/UserInfoController.java
+++ b/src/main/java/com/sipc/stellar/controller/UserInfoController.java
@@ -7,6 +7,7 @@ import com.sipc.stellar.pojo.model.dto.UserInfoDto;
 import com.sipc.stellar.pojo.model.pageData.PageData;
 import com.sipc.stellar.pojo.model.request.InsertUserRequest;
 import com.sipc.stellar.pojo.model.request.UpdateUserInfoRequest;
+import com.sipc.stellar.pojo.model.result.InsertUserInfoResult;
 import com.sipc.stellar.pojo.model.result.SimpleUserInfoResult;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
@@ -59,7 +60,7 @@ public class UserInfoController {
     }
 
     @PutMapping("/archive/user")
-    public SipcResponse<String> insertUserInfo(@RequestBody @Valid InsertUserRequest request){
+    public SipcResponse<InsertUserInfoResult> insertUserInfo(@RequestBody @Valid InsertUserRequest request){
         return userInfoBiz.insertUserInfo(request);
     }
 
diff --git a/src/main/java/com/sipc/stellar/pojo/model/result/InsertUserInfoResult.java b/src/main/java/com/sipc/stellar/pojo/model/result/InsertUserInfoResult.java
new file mode 100644
index 0000000..be9a992
--- /dev/null
+++ b/src/main/java/com/sipc/stellar/pojo/model/result/InsertUserInfoResult.java
@@ -0,0 +1,8 @@
+package com.sipc.stellar.pojo.model.result;
+
+import lombok.Data;
+
+@Data
+public class InsertUserInfoResult {
+    private Integer id;
+}
diff --git a/src/main/java/com/sipc/stellar/service/UserService.java b/src/main/java/com/sipc/stellar/service/UserService.java
index b23b437..2ac9cc0 100644
--- a/src/main/java/com/sipc/stellar/service/UserService.java
+++ b/src/main/java/com/sipc/stellar/service/UserService.java
@@ -11,6 +11,7 @@ public interface UserService {
     User getUserByMobileOrUsername(String phone,String username);
     User getUserById(Integer id);
     void insertUser(User user);
+    Integer insertUserAndUserInfoByDefault(User user,UserInfo userInfo);
     void updateUser(User user);
     UserInfo getUserInfoById(int id);
     void insertUserInfo(UserInfo userInfo);
diff --git a/src/main/java/com/sipc/stellar/service/impl/UserServiceImpl.java b/src/main/java/com/sipc/stellar/service/impl/UserServiceImpl.java
index 231fa52..5e99b15 100644
--- a/src/main/java/com/sipc/stellar/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/sipc/stellar/service/impl/UserServiceImpl.java
@@ -17,6 +17,7 @@ import com.sipc.stellar.service.UserService;
 import com.sipc.stellar.util.StringUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -30,8 +31,7 @@ public class UserServiceImpl implements UserService {
 
     @Override
     public User getUserByMobileOrUsername(String phone, String username) {
-        User user = userMapper.getUserByMobileOrUsername(phone,username);
-        return user;
+        return userMapper.getUserByMobileOrUsername(phone,username);
     }
 
     @Override
@@ -46,6 +46,19 @@ public class UserServiceImpl implements UserService {
         }
     }
 
+    @Override
+    @Transactional
+    public Integer insertUserAndUserInfoByDefault(User user,UserInfo userInfo) {
+        if (userMapper.insert(user) == 0) {
+            throw new SipcBaseException(ResultCode.DATABASE_ERROR, "insert error!");
+        }
+        userInfo.setId(user.getId());
+        if(userInfoMapper.insert(userInfo) == 0){
+            throw new SipcBaseException(ResultCode.DATABASE_ERROR, "insert error!");
+        }
+        return user.getId();
+    }
+
     @Override
     public void updateUser(User user) {
         if (userMapper.updateById(user) == 0) {
@@ -77,12 +90,12 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
+    @Transactional
     public void deleteUserInfo(Integer id, String updateBy) {
         UserInfo userInfo = userInfoMapper.selectById(id);
         if (userInfo == null) {
             throw new SipcBaseException(ResultCode.INVALID_PARAM, "user_info waiting to be deleted is not existed !");
         }
-        //todo:需要加事物,保证一致性
         userInfo.setUpdateBy(updateBy);
         if (userInfoMapper.updateById(userInfo) == 0) {
             throw new SipcBaseException(ResultCode.DATABASE_ERROR, "update user_info error !");
-- 
GitLab