add 根据数据中心查询虚拟机
parent
3a252bfafb
commit
9208d0f8f7
|
@ -38,6 +38,19 @@ public class CloudServerController {
|
|||
return cloudServerService.list(pager, context);
|
||||
}
|
||||
|
||||
/**
|
||||
* 理想云主机列表查询
|
||||
*
|
||||
* @param pager
|
||||
* @param context
|
||||
* @return
|
||||
*/
|
||||
@Operation(tags = {"CMC", "CSC"}, summary = "查询云主机列表")
|
||||
@GetMapping("/vmsOfDataCenter")
|
||||
public GeneralResult<GridBean<CloudServer>> vmsOfDataCenter(Pager pager, @Value(Common.REQ_CONTEXT) RequestContext context) {
|
||||
return cloudServerService.vmsOfDataCenter(pager, context);
|
||||
}
|
||||
|
||||
/**
|
||||
* 云主机列表查询
|
||||
*
|
||||
|
|
|
@ -84,6 +84,15 @@ public class CloudVendorRepository extends BasicGenericDao<CloudVendor, Long> {
|
|||
}
|
||||
return list.get(0);
|
||||
}
|
||||
public List<CloudVendor> getByDcName(String dcName) {
|
||||
String sql = "select * from cloud_vendor where dc_name = :dcName and is_deleted = 0";
|
||||
Map<String, Object> params = MapTools.simpleMap("dcName", dcName);
|
||||
List<CloudVendor> list = this.list(CloudVendor.class, sql, params);
|
||||
if (list.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<CloudVendor> list(int page, int rows, List<Param> params, Map<String, String> sorter,
|
||||
List<Long> vendorIds) {
|
||||
|
|
|
@ -195,4 +195,5 @@ public interface CloudServerService {
|
|||
*/
|
||||
GeneralResult selectAllByVendorId(Long vendorId, RequestContext context);
|
||||
|
||||
GeneralResult<GridBean<CloudServer>> vmsOfDataCenter(Pager pager, RequestContext context);
|
||||
}
|
||||
|
|
|
@ -286,6 +286,176 @@ public class CloudServerServiceImpl implements CloudServerService {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneralResult<GridBean<CloudServer>> vmsOfDataCenter(Pager pager, RequestContext context) {
|
||||
GridBean<CloudServer> gridBean;
|
||||
try {
|
||||
List<Param> params = Optional.ofNullable(pager.getParams()).orElse(new ArrayList<>());
|
||||
Map<String, String> sorter = Optional.ofNullable(pager.getSorter()).orElse(Maps.newHashMap());
|
||||
Boolean simple = Optional.ofNullable(pager.getSimple()).orElse(false);
|
||||
sorter.put("gmtCreate", Common.ONE);
|
||||
sorter.put("id", Common.ONE);
|
||||
Integer page = Optional.ofNullable(pager.getPage()).orElse(1);
|
||||
Integer rows = Optional.ofNullable(pager.getRows()).orElse(10);
|
||||
Long clusterId = null;
|
||||
String labelContent = null;
|
||||
String dcName = null;
|
||||
for (Param param : params) {
|
||||
Map<String, Object> paramMap = param.getParam();
|
||||
if (paramMap.containsKey("clusterId")) {
|
||||
clusterId = Long.valueOf(paramMap.get("clusterId").toString());
|
||||
paramMap.remove("clusterId");
|
||||
}
|
||||
if (paramMap.containsKey("labelContent")) {
|
||||
labelContent = paramMap.get("labelContent").toString();
|
||||
paramMap.remove("labelContent");
|
||||
}
|
||||
if (paramMap.containsKey("dcName")) {
|
||||
dcName = paramMap.get("dcName").toString();
|
||||
paramMap.remove("dcName");
|
||||
// 查询相应云平台
|
||||
List<CloudVendor> cloudVendors = cloudVendorRepository.getByDcName(dcName);
|
||||
String ids = cloudVendors.stream().map(CloudVendor::getId).map(item -> String.valueOf(item)).collect(Collectors.joining(","));
|
||||
paramMap.put("vendorId", ids);
|
||||
param.setSign(Sign.IN);
|
||||
}
|
||||
}
|
||||
int total = 0;
|
||||
List<CloudServer> list = Lists.newArrayList();
|
||||
if (context.getCatalog().equals(Catalog.Tenant)) {
|
||||
if (simple) {
|
||||
rows = Integer.MAX_VALUE;
|
||||
}
|
||||
// 租户能看到 1.属于当前租户的资源 2.租户下所有项目的资源
|
||||
List<Project> tenantProjects = smsProjectService.listTenantProjects(context.getTenant());
|
||||
List<Long> projectIds = tenantProjects.stream().map(Project::getId).collect(Collectors.toList());
|
||||
total = this.cloudServerRepository.count(null, context.getTenant(), projectIds, params, labelContent);
|
||||
list = this.cloudServerRepository.list(page, rows, null, context.getTenant(), projectIds, params,
|
||||
sorter, labelContent);
|
||||
gridBean = new GridBean<>(page, rows, total, list);
|
||||
} else if (context.getCatalog().equals(Catalog.User)) {
|
||||
if (simple) {
|
||||
rows = Integer.MAX_VALUE;
|
||||
}
|
||||
// 用户能看到 1.自己申请的资源 2.自己所在的资源可见项目(资源对项目下所有成员可见)下创建的资源 3.自己管理的项目下的资源
|
||||
List<Project> userManagerProjects = smsProjectService.listUserManagerProjects(context.getTarget());
|
||||
List<Project> visibleProjects = smsProjectService.listUserVisibleProjects(context.getTarget());
|
||||
List<Long> projectIds = new ArrayList<>();
|
||||
List<Long> userManagerProjectsIds = userManagerProjects.stream().map(Project::getId)
|
||||
.collect(Collectors.toList());
|
||||
if (!userManagerProjectsIds.isEmpty()) {
|
||||
projectIds.addAll(userManagerProjectsIds);
|
||||
}
|
||||
List<Long> visibleProjectsIds = visibleProjects.stream().map(Project::getId)
|
||||
.collect(Collectors.toList());
|
||||
if (!visibleProjectsIds.isEmpty()) {
|
||||
projectIds.addAll(visibleProjectsIds);
|
||||
}
|
||||
total = this.cloudServerRepository.count(context.getTarget(), null, projectIds, params, labelContent);
|
||||
list = this.cloudServerRepository.list(page, rows, context.getTarget(), null, projectIds, params,
|
||||
sorter, labelContent);
|
||||
gridBean = new GridBean<>(page, rows, total, list);
|
||||
} else {
|
||||
// 管理端搜索
|
||||
if (null != clusterId) {
|
||||
total = this.cloudServerRepository.count(clusterId, params);
|
||||
list = this.cloudServerRepository.list(page, rows, clusterId, params, sorter);
|
||||
gridBean = new GridBean<>(page, rows, total, list);
|
||||
} else if (simple) {
|
||||
total = this.cloudServerRepository.count(params, 0L);
|
||||
List<SimpleBean> beans = this.cloudServerRepository.list(params, sorter);
|
||||
gridBean = new GridBean(1, 1, total, beans);
|
||||
} else {
|
||||
total = this.cloudServerRepository.vmCount(params, labelContent);
|
||||
list = this.cloudServerRepository.list(page, rows, params, sorter, labelContent);
|
||||
gridBean = new GridBean<>(page, rows, total, list);
|
||||
}
|
||||
}
|
||||
if (!simple) {
|
||||
List<Long> tenantIds = new ArrayList<>();
|
||||
List<Long> userIds = new ArrayList<>();
|
||||
List<Long> businessIds = new ArrayList<>();
|
||||
List<Long> projectIds = new ArrayList<>();
|
||||
for (CloudServer cloudServer : list) {
|
||||
if (cloudServer.getTenantId() != null) {
|
||||
tenantIds.add(cloudServer.getTenantId());
|
||||
}
|
||||
if (cloudServer.getBusinessId() != null) {
|
||||
businessIds.add(cloudServer.getBusinessId());
|
||||
}
|
||||
if (cloudServer.getProjectId() != null) {
|
||||
projectIds.add(cloudServer.getProjectId());
|
||||
}
|
||||
if (cloudServer.getCreatorId() != null) {
|
||||
userIds.add(cloudServer.getCreatorId());
|
||||
}
|
||||
if (cloudServer.getOwnerId() != null) {
|
||||
userIds.add(cloudServer.getOwnerId());
|
||||
}
|
||||
if (cloudServer.getMenderId() != null) {
|
||||
userIds.add(cloudServer.getMenderId());
|
||||
}
|
||||
}
|
||||
Map<Long, String> userMap = smsUserService.listUsersByIds(userIds).stream()
|
||||
.collect(Collectors.toMap(User::getId, User::getName));
|
||||
Map<Long, String> projectMap = smsProjectService.listProjectsByIds(projectIds).stream()
|
||||
.collect(Collectors.toMap(Project::getId, Project::getName));
|
||||
Map<Long, String> businessMap = smsBusinessService.listBusinesssByIds(businessIds).stream()
|
||||
.collect(Collectors.toMap(Business::getId, Business::getName));
|
||||
Map<Long, String> tenantMap = smsTenantService.listTenantsByIds(tenantIds).stream()
|
||||
.collect(Collectors.toMap(Tenant::getId, Tenant::getName));
|
||||
for (CloudServer server : list) {
|
||||
// 设置云主机归属信息
|
||||
if (server.getTenantId() != null) {
|
||||
server.setTenantName(tenantMap.get(server.getTenantId()));
|
||||
}
|
||||
if (server.getBusinessId() != null) {
|
||||
server.setBusinessName(businessMap.get(server.getBusinessId()));
|
||||
}
|
||||
if (server.getProjectId() != null) {
|
||||
server.setProjectName(projectMap.get(server.getProjectId()));
|
||||
}
|
||||
if (server.getCreatorId() != null) {
|
||||
server.setCreatorName(userMap.get(server.getCreatorId()));
|
||||
}
|
||||
if (server.getOwnerId() != null) {
|
||||
server.setOwnerName(userMap.get(server.getOwnerId()));
|
||||
}
|
||||
if (server.getMenderId() != null) {
|
||||
server.setMenderName(userMap.get(server.getMenderId()));
|
||||
}
|
||||
// 设置主机名称
|
||||
Server host = serverRepository.basic(server.getHostId());
|
||||
host = Optional.ofNullable(host).orElse(new Server());
|
||||
server.setHostName(host.getName());
|
||||
server.setClusterName(host.getClusterName());
|
||||
server.setVdcName(host.getVdcName());
|
||||
server.setDisk((null == server.getDisk() || 0 == server.getDisk()) ? server.getTotalDisks()
|
||||
: server.getDisk());
|
||||
if (!StringUtils.isEmpty(server.getResourceGroup())) {
|
||||
String resourceGroupName = dictionaryRepository.getNameByValue(server.getResourceGroup());
|
||||
server.setResourceGroupName(resourceGroupName);
|
||||
}
|
||||
if (server.getVendorType().equalsIgnoreCase("CTSTACK")) {
|
||||
FloatingIp floatingIp = floatingIpRepository.getByInstanceId(server.getInstanceId());
|
||||
if (null != floatingIp) {
|
||||
server.setFipId(floatingIp.getId());
|
||||
//server.setFloatingIp(floatingIp.getFloatingIpAddress());
|
||||
if (StringUtils.isEmpty(server.getPublicIps())) {
|
||||
server.setPublicIps(JSON.toJSONString(Collections.singletonList(floatingIp.getFloatingIpAddress())));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
gridBean.setRows(list);
|
||||
}
|
||||
return new GeneralResult<>(true, gridBean, "查询成功");
|
||||
} catch (Exception e) {
|
||||
log.error("Query vm list fail:{}", e.getMessage());
|
||||
return new GeneralResult<>(false, "查询失败");
|
||||
}
|
||||
}
|
||||
|
||||
public GeneralResult snapshotQuotasCallBack(RequestContext context, Action action) {
|
||||
try {
|
||||
if (null == context.getCatalog()) {
|
||||
|
|
Loading…
Reference in New Issue