Commit 5769d9b3 authored by xuxin's avatar xuxin

修改vps分配以及vps删除相关功能

parent 51b2248f
...@@ -14,4 +14,6 @@ public interface AccountRepositoryCustom { ...@@ -14,4 +14,6 @@ public interface AccountRepositoryCustom {
Long convertToDistributor(String id, boolean tag); Long convertToDistributor(String id, boolean tag);
List<String> findIdsByParentId(String Id);
} }
...@@ -10,12 +10,15 @@ import org.springframework.data.mongodb.core.aggregation.AggregationResults; ...@@ -10,12 +10,15 @@ import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.MatchOperation; import org.springframework.data.mongodb.core.aggregation.MatchOperation;
import org.springframework.data.mongodb.core.aggregation.ProjectionOperation; import org.springframework.data.mongodb.core.aggregation.ProjectionOperation;
import org.springframework.data.mongodb.core.query.BasicQuery; import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update; import org.springframework.data.mongodb.core.query.Update;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern;
import static org.springframework.data.mongodb.core.query.Criteria.where; import static org.springframework.data.mongodb.core.query.Criteria.where;
...@@ -78,4 +81,11 @@ public class AccountRepositoryCustomImpl implements AccountRepositoryCustom { ...@@ -78,4 +81,11 @@ public class AccountRepositoryCustomImpl implements AccountRepositoryCustom {
return upsert.getModifiedCount(); return upsert.getModifiedCount();
} }
@Override
public List<String> findIdsByParentId(String id) {
Query query = new Query(Criteria.where("_id").regex(Pattern.compile("^" + id + ".*$")));
query.fields().include("_id");
return mongoTemplate.find(query, String.class, "accounts");
}
} }
...@@ -10,7 +10,7 @@ import java.util.List; ...@@ -10,7 +10,7 @@ import java.util.List;
* @date 2020/8/15 17:35 * @date 2020/8/15 17:35
* @description * @description
*/ */
public interface UserVpsRepository extends MongoRepository<UserVpsDto, String> { public interface UserVpsRepository extends MongoRepository<UserVpsDto, String>, UserVpsRepositoryCustom {
List<UserVpsDto> findByUserIdLikeAndVpsIdListIn(String id, String vpsId); List<UserVpsDto> findByUserIdLikeAndVpsIdListIn(String id, String vpsId);
......
package com.edgec.browserbackend.browser.repository;
/**
* @author xuxin
* @date 2020/8/24 14:07
* @description
*/
public interface UserVpsRepositoryCustom {
boolean deleteVpsIdOfUserVpsList(String id, String vpsId);
}
package com.edgec.browserbackend.browser.repository;
import com.edgec.browserbackend.browser.dto.UserVpsDto;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Update;
import static org.springframework.data.mongodb.core.query.Criteria.where;
/**
* @author xuxin
* @date 2020/8/24 14:08
* @description
*/
public class UserVpsRepositoryCustomImpl implements UserVpsRepositoryCustom {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public boolean deleteVpsIdOfUserVpsList(String id, String vpsId) {
Document doc = new Document();
BasicQuery basicQuery = new BasicQuery(doc);
basicQuery.addCriteria(where("_id").is(id));
Update update = new Update();
update.pull("vpsIdList", "vpsId");
UpdateResult result = mongoTemplate.updateFirst(basicQuery, update, UserVpsDto.class);
return result.getModifiedCount() >= 1;
}
}
...@@ -20,6 +20,7 @@ import org.springframework.util.StringUtils; ...@@ -20,6 +20,7 @@ import org.springframework.util.StringUtils;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -107,12 +108,22 @@ public class VpsServiceImpl implements VpsService { ...@@ -107,12 +108,22 @@ public class VpsServiceImpl implements VpsService {
} }
@Override @Override
public void deleteVps(String userId, String id) { public void deleteVps(String userId, String vpsId) {
Vps vps = vpsRepository.findById(id).orElseThrow(() -> new ClientRequestException(VpsErrorCode.VPS_NOT_EXIST)); Vps vps = vpsRepository.findById(vpsId).orElseThrow(() -> new ClientRequestException(VpsErrorCode.VPS_NOT_EXIST));
if (userId.equals(vps.getOwner1()) || userId.equals(vps.getOwner2())) { if (userId.equals(vps.getOwner1()) || userId.equals(vps.getOwner2())) {
vpsRepository.deleteById(id); vpsRepository.deleteById(vpsId);
} }
// 删除与当前 vps 相关的 分配信息
List<String> userIds = accountRepository.findIdsByParentId(userId);
// 移除账户列表中的 vps 的创建者 与 父用户
userIds.remove(vps.getOwner1());
userIds.remove(vps.getOwner2());
userIds.forEach(
// 删除 UserVpsDto 中 UserVpsList 分配的 vpsId
userId1 -> userVpsRepository.deleteVpsIdOfUserVpsList(userId1, vpsId)
);
} }
@Override @Override
...@@ -142,12 +153,12 @@ public class VpsServiceImpl implements VpsService { ...@@ -142,12 +153,12 @@ public class VpsServiceImpl implements VpsService {
Page<Vps> page = vpsRepository.findByIdInOrderByCreateTimeDesc(ids, pageable); Page<Vps> page = vpsRepository.findByIdInOrderByCreateTimeDesc(ids, pageable);
// 由于在删除vps的时候,没有在分配的账户中删除对应的 vps。所以需要在这里进行惰性删除 /*// 由于在删除vps的时候,没有在分配的账户中删除对应的 vps。所以需要在这里进行惰性删除
List<String> list = page.getContent().stream().map(Vps::getId).collect(Collectors.toList()); List<String> list = page.getContent().stream().map(Vps::getId).collect(Collectors.toList());
if (userVpsDto != null) { if (userVpsDto != null) {
userVpsDto.getVpsIdList().removeAll(list); userVpsDto.getVpsIdList().removeAll(list);
userVpsRepository.save(userVpsDto); userVpsRepository.save(userVpsDto);
} }*/
return page; return page;
} }
...@@ -162,18 +173,35 @@ public class VpsServiceImpl implements VpsService { ...@@ -162,18 +173,35 @@ public class VpsServiceImpl implements VpsService {
throw new ClientRequestException(VpsErrorCode.VPS_NOT_ACCESS); throw new ClientRequestException(VpsErrorCode.VPS_NOT_ACCESS);
} }
// 分配前,先删除之前的分配信息
// 1. 获取当前用户的所有关联账户(自身+子账户)
List<String> ids = accountRepository.findIdsByParentId(userId);
Iterable<Vps> vpsIter = vpsRepository.findAllById(assignVpsDto.getVpsIds());
Iterator<Vps> iterator = vpsIter.iterator();
while (iterator.hasNext()) {
List<String> currentIds = new ArrayList<>();
currentIds.addAll(ids);
Vps next = iterator.next();
// 移除账户列表中的 vps 的创建者 与 父用户
currentIds.remove(next.getOwner1());
currentIds.remove(next.getOwner2());
currentIds.forEach(
// 删除 UserVpsDto 中 UserVpsList 分配的 vpsId
userId1 -> userVpsRepository.deleteVpsIdOfUserVpsList(userId1, next.getId())
);
}
List<UserVpsDto> list = new ArrayList<>(); List<UserVpsDto> list = new ArrayList<>();
for (String id : assignVpsDto.getUserIds()) { for (String id : assignVpsDto.getUserIds()) {
UserVpsDto uv = new UserVpsDto(id, assignVpsDto.getVpsIds()); UserVpsDto uv = new UserVpsDto(id, assignVpsDto.getVpsIds());
list.add(uv); list.add(uv);
} }
userVpsRepository.saveAll(list); userVpsRepository.saveAll(list);
} }
@Override @Override
public List<String> queryAssignUserList(String user, String vpsId) { public List<String> queryAssignUserList(String user, String vpsId) {
Vps vps = vpsRepository.findByIdAndOwner1AndOwner2(vpsId, user, null).orElseThrow(() -> new ClientRequestException(VpsErrorCode.VPS_NOT_EXIST)); Vps vps = vpsRepository.findByIdAndOwner1AndOwner2(vpsId, user, null).orElseThrow(() -> new ClientRequestException(VpsErrorCode.VPS_NOT_EXIST));
return userVpsRepository.findByUserIdLikeAndVpsIdListIn(user, vps.getId()).stream().map(u -> u.getUserId()).collect(Collectors.toList()); return userVpsRepository.findByUserIdLikeAndVpsIdListIn(user, vps.getId()).stream().map(UserVpsDto::getUserId).collect(Collectors.toList());
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment