lyhzzz 4 ماه پیش
والد
کامیت
c7d816abd6

+ 1 - 0
src/main/java/com/fdkankan/ucenter/common/constants/ResultCode.java

@@ -14,6 +14,7 @@ public enum ResultCode {
     NOT_PER(500006, "权限不足"),
     COO_ERROR(500007, "协作失败,请先解除协作"),
     COO_LIMIT_ERROR(500007, "协作失败,协作数量超过限制"),
+    COO_LIMIT_ERROR2(500008, "协作失败,重复协作"),
 
     USER_NOT_LOGIN(3004, "用户未登录"),
     PARAM_MISS(3001, "参数缺失"),

+ 26 - 3
src/main/java/com/fdkankan/ucenter/service/impl/SceneCooperationServiceImpl.java

@@ -299,10 +299,23 @@ public class SceneCooperationServiceImpl extends ServiceImpl<ISceneCooperationMa
         User loginUser = userService.getByUserName(loginUserName);
         if(numList.size() >1){
             HashMap<String, List<User>> byNumList = this.getByNumList(numList, param.getSceneType());
+            Boolean flag = true;
             for (String num : byNumList.keySet()) {
                 if(byNumList.get(num).size() + param.getUserNameList().size() >5){
                     throw new BusinessException(ResultCode.COO_LIMIT_ERROR);
                 }
+                List<User> users = byNumList.get(num);
+                List<String> collect = users.stream().map(User::getUserName).collect(Collectors.toList());
+                Boolean inFlag = true;
+                for (String userName : param.getUserNameList()) {
+                    if(!collect.contains(userName)){
+                        inFlag = false;
+                    }
+                }
+                flag = !inFlag;
+            }
+            if(flag){
+                throw new BusinessException(ResultCode.COO_LIMIT_ERROR2);
             }
         }
 
@@ -433,15 +446,25 @@ public class SceneCooperationServiceImpl extends ServiceImpl<ISceneCooperationMa
             Integer freeCount = freeMap.get(num) == null ? 1 :freeMap.get(num);
 
             List<User> dbUserList = map.get(num);
+
             if(dbUserList != null && !dbUserList.isEmpty()){
+                List<Long> dbUserIds = dbUserList.stream().map(User::getId).collect(Collectors.toList());
+                HashMap<Long,User> userHashMap = new HashMap<>();
+                for (User user : users) {
+                    if(dbUserIds.contains(user.getId())){
+                        userHashMap.put(user.getId(),user);
+                    }
+                }
+                Integer totalSize = dbUserList.size() - userHashMap.size();
+
                 if(numList.size() >1){
-                    freeCount = (dbUserList.size() > freeCount ? dbUserList.size() :  (freeCount - dbUserList.size()));
+                    freeCount = (totalSize > freeCount ? totalSize :  (freeCount - totalSize));
                 }else {
-                    freeCount = (dbUserList.size() > freeCount ? dbUserList.size() : freeCount) ;
+                    freeCount = (totalSize > freeCount ? totalSize : freeCount) ;
                 }
             }
 
-            for (int i = 0 ; i< users.size() -freeCount;i++){
+            for (int i = 0 ; i< users.size() - freeCount;i++){
                 needNumList.put(users.get(i).getId()+","+num,num);
             }