change vs get strategy when batch get groups

This commit is contained in:
Mengyi Zhou 2015-12-08 18:28:25 +08:00
parent b9060a932f
commit 4d256af1c8
2 changed files with 26 additions and 1 deletions

View file

@ -17,6 +17,12 @@ public class AutoFiller {
public void autofill(Group group) throws Exception {
for (GroupVirtualServer gvs : group.getGroupVirtualServers()) {
gvs.setVirtualServer(virtualServerRepository.getById(gvs.getVirtualServer().getId()));
}
autofillEmptyFields(group);
}
public void autofillEmptyFields(Group group) {
for (GroupVirtualServer gvs : group.getGroupVirtualServers()) {
if (gvs.getPriority() == null) {
if (gvs.getPath().endsWith(RegexRootPath))
gvs.setPriority(Integer.MIN_VALUE);

View file

@ -7,9 +7,13 @@ import com.ctrip.zeus.service.model.handler.GroupSync;
import com.ctrip.zeus.service.model.handler.GroupValidator;
import com.ctrip.zeus.service.model.handler.VGroupValidator;
import com.ctrip.zeus.service.query.GroupCriteriaQuery;
import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery;
import com.ctrip.zeus.service.status.StatusService;
import com.google.common.base.Function;
import com.google.common.collect.Maps;
import org.springframework.stereotype.Repository;
import javax.annotation.Nullable;
import javax.annotation.Resource;
import java.util.*;
@ -33,12 +37,27 @@ public class GroupRepositoryImpl implements GroupRepository {
private VGroupValidator vGroupValidator;
@Resource
private StatusService statusService;
@Resource
private VirtualServerRepository virtualServerRepository;
@Resource
private VirtualServerCriteriaQuery virtualServerCriteriaQuery;
@Override
public List<Group> list(Long[] ids) throws Exception {
Set<Long> vsIds = virtualServerCriteriaQuery.queryByGroupIds(ids);
Map<Long, VirtualServer> dic = Maps.uniqueIndex(virtualServerRepository.listAll(vsIds.toArray(new Long[vsIds.size()])), new Function<VirtualServer, Long>() {
@Nullable
@Override
public Long apply(VirtualServer virtualServer) {
return virtualServer.getId();
}
});
List<Group> result = archiveService.getLatestGroups(ids);
for (Group group : result) {
autoFiller.autofill(group);
for (GroupVirtualServer groupVirtualServer : group.getGroupVirtualServers()) {
groupVirtualServer.setVirtualServer(dic.get(groupVirtualServer.getVirtualServer().getId()));
}
autoFiller.autofillEmptyFields(group);
hideVirtualValue(group);
}
return result;