package com.sobey.cmop.mvc.web.resource; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.servlet.ServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.sobey.cmop.mvc.comm.BaseController; import com.sobey.cmop.mvc.constant.AuditConstant; import com.sobey.cmop.mvc.constant.ResourcesConstant; import com.sobey.cmop.mvc.entity.ComputeItem; import com.sobey.cmop.mvc.entity.CpItem; import com.sobey.cmop.mvc.entity.MdnItem; import com.sobey.cmop.mvc.entity.MonitorCompute; import com.sobey.cmop.mvc.entity.MonitorElb; import com.sobey.cmop.mvc.entity.NetworkDnsItem; import com.sobey.cmop.mvc.entity.NetworkEipItem; import com.sobey.cmop.mvc.entity.NetworkElbItem; import com.sobey.cmop.mvc.entity.Resources; import com.sobey.cmop.mvc.entity.ServiceTag; import com.sobey.cmop.mvc.entity.StorageItem; import com.sobey.framework.utils.Servlets; /** * ServiceTagController负责服务标签的管理和提交 * * @author liukai * */ @Controller @RequestMapping(value = "/serviceTag") public class ServiceTagController extends BaseController { private static final String REDIRECT_SUCCESS_URL = "redirect:/serviceTag/"; // =============== 服务标签 ================ /** * 显示资源Resources的List */ @RequestMapping(value = { "list", "" }) public String list(@RequestParam(value = "page", defaultValue = "1") int pageNumber, @RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize, Model model, ServletRequest request) { Map<String, Object> searchParams = Servlets.getParametersStartingWith(request, REQUEST_PREFIX); model.addAttribute("page", comm.serviceTagService.getServiceTagPageable(searchParams, pageNumber, pageSize)); // 将搜索条件编码成字符串,分页的URL model.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, REQUEST_PREFIX)); return "resource/serviceTag/serviceTagList"; } /** * 跳转到服务标签详情页面 */ @RequestMapping(value = "detail/{id}", method = RequestMethod.GET) public String detailForm(@PathVariable("id") Integer id, Model model) { List<Resources> resourcesList = comm.resourcesService.getResourcesListByServiceTagId(id); List<ComputeItem> computeItems = new ArrayList<ComputeItem>(); List<StorageItem> storageItems = new ArrayList<StorageItem>(); List<NetworkElbItem> elbItems = new ArrayList<NetworkElbItem>(); List<NetworkEipItem> eipItems = new ArrayList<NetworkEipItem>(); List<NetworkDnsItem> dnsItems = new ArrayList<NetworkDnsItem>(); List<MonitorCompute> monitorComputes = new ArrayList<MonitorCompute>(); List<MonitorElb> monitorElbs = new ArrayList<MonitorElb>(); List<MdnItem> mdnItems = new ArrayList<MdnItem>(); List<CpItem> cpItems = new ArrayList<CpItem>(); /* 封装各个资源对象 */ comm.resourcesService.wrapBasicUntilListByResources(resourcesList, computeItems, storageItems, elbItems, eipItems, dnsItems, monitorComputes, monitorElbs, mdnItems, cpItems); model.addAttribute("serviceTag", comm.serviceTagService.getServiceTag(id)); model.addAttribute("resourcesList", resourcesList); model.addAttribute("computeItems", computeItems); model.addAttribute("storageItems", storageItems); model.addAttribute("elbItems", elbItems); model.addAttribute("eipItems", eipItems); model.addAttribute("dnsItems", dnsItems); model.addAttribute("monitorComputes", monitorComputes); model.addAttribute("monitorElbs", monitorElbs); model.addAttribute("mdnItems", mdnItems); model.addAttribute("cpItems", cpItems); // 根据审批状态获得指定服务标签的审批记录(只取最新的,当前的审批记录.即audit的状态为0) model.addAttribute("audits", comm.auditService.getAuditListByServiceTagIdAndStatus(id, AuditConstant.AuditStatus.有效.toInteger())); return "resource/serviceTag/serviceTagDetail"; } /** * 跳转到新增服务标签页面 */ @RequestMapping(value = "/save", method = RequestMethod.GET) public String createForm(Model model) { return "resource/serviceTag/serviceTagForm"; } /** * 新增服务标签 */ @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(RedirectAttributes redirectAttributes, ServiceTag serviceTag) { comm.serviceTagService.saveServiceTag(serviceTag); redirectAttributes.addFlashAttribute("message", "创建服务标签 " + serviceTag.getName() + " 成功"); return REDIRECT_SUCCESS_URL; } /** * 跳转到修改页面 */ @RequestMapping(value = "/update/{id}", method = RequestMethod.GET) public String updateForm(@PathVariable("id") Integer id, Model model) { model.addAttribute("serviceTag", comm.serviceTagService.getServiceTag(id)); return "resource/serviceTag/serviceTagForm"; } /** * 修改 */ @RequestMapping(value = "/update", method = RequestMethod.POST) public String update(@RequestParam(value = "id") Integer id, @RequestParam(value = "name") String name, @RequestParam(value = "serviceStart") String serviceStart, @RequestParam(value = "serviceEnd") String serviceEnd, @RequestParam(value = "priority") Integer priority, @RequestParam(value = "description") String description, RedirectAttributes redirectAttributes) { ServiceTag serviceTag = comm.serviceTagService.getServiceTag(id); serviceTag.setName(name); serviceTag.setServiceStart(serviceStart); serviceTag.setServiceEnd(serviceEnd); serviceTag.setPriority(priority); serviceTag.setDescription(description); comm.serviceTagService.updateServiceTagAndOneCMDB(serviceTag); redirectAttributes.addFlashAttribute("message", "修改服务标签 " + serviceTag.getName() + " 成功"); return REDIRECT_SUCCESS_URL; } /** * 服务标签的回收 * * <pre> * 有两个步骤: * 1.将服务标签下所有的资源回收. * 2.将服务标签本身回收 * </pre> * * @param id * @param redirectAttributes * @return */ @RequestMapping(value = "delete/{id}") public String delete(@PathVariable("id") Integer id, RedirectAttributes redirectAttributes) { List<Resources> resourcesList = comm.resourcesService.getResourcesListByServiceTagId(id); boolean result = comm.resourcesService.recycleResources(resourcesList, id); if (result) { ServiceTag serviceTag = comm.serviceTagService.getServiceTag(id); serviceTag.setStatus(ResourcesConstant.Status.回收中.toInteger()); comm.serviceTagService.saveOrUpdate(serviceTag); redirectAttributes.addFlashAttribute("message", "资源回收中..."); } else { redirectAttributes.addFlashAttribute("message", "资源回收失败,请稍后重试"); } return REDIRECT_SUCCESS_URL; } // =============== 提交变更 ================ /** * 显示资源Resources的提交变更List */ @RequestMapping(value = "commitResources") public String commitList(@RequestParam(value = "page", defaultValue = "1") int pageNumber, @RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize, Model model, ServletRequest request) { Map<String, Object> searchParams = Servlets.getParametersStartingWith(request, REQUEST_PREFIX); model.addAttribute("page", comm.serviceTagService.getCommitServiceTagPageable(searchParams, pageNumber, pageSize)); // 将搜索条件编码成字符串,分页的URL model.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, REQUEST_PREFIX)); return "resource/serviceTag/serviceTagCommitList"; } /** * 跳转到提交变更详情页面 */ @RequestMapping(value = "commitResources/detail/{id}", method = RequestMethod.GET) public String commitDetailForm(@PathVariable("id") Integer id, Model model) { model.addAttribute("serviceTag", comm.serviceTagService.getServiceTag(id)); model.addAttribute("resourcesList", comm.resourcesService.getCommitingResourcesListByServiceTagId(id)); return "resource/serviceTag/serviceTagCommitDetail"; } /** * 服务标签ServiceTag 提交变更. */ @RequestMapping(value = "commitResources/commit/{id}", method = RequestMethod.GET) public String commit(@PathVariable("id") Integer id, RedirectAttributes redirectAttributes) { ServiceTag serviceTag = comm.serviceTagService.getServiceTag(id); String message = comm.serviceTagService.saveAuditByServiceTag(serviceTag); redirectAttributes.addFlashAttribute("message", message); return "redirect:/resources/"; } }