package com.sobey.cmop.mvc.web.failure; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; 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.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.sobey.cmop.mvc.comm.BaseController; import com.sobey.cmop.mvc.entity.ComputeItem; import com.sobey.cmop.mvc.entity.CpItem; import com.sobey.cmop.mvc.entity.Failure; 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.StorageItem; import com.sobey.cmop.mvc.entity.User; import com.sobey.cmop.mvc.service.redmine.RedmineService; import com.sobey.framework.utils.Servlets; import com.taskadapter.redmineapi.bean.Issue; /** * FailureController负责故障申报的管理 * * @author liukai * */ @Controller @RequestMapping(value = "/failure") public class FailureController extends BaseController { private static final String REDIRECT_SUCCESS_URL = "redirect:/failure/"; /** * 显示所有的故障申报 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.failureService.getFailurePageable(searchParams, pageNumber, pageSize)); // 将搜索条件编码成字符串,分页的URL model.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, REQUEST_PREFIX)); return "failure/failureList"; } /** * 跳转到新增故障申报页面 */ @RequestMapping(value = "/save", method = RequestMethod.GET) public String createForm(Model model) { return "failure/failureForm"; } /** * 新增 故障申报 * * @param resourcesId * 故障相关资源的Id * @param fileNames * 附件名数组 * @param fileDescs * 附件说明数组 * @param failure * @param redirectAttributes * @return */ @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(@RequestParam(value = "resourcesId", required = false, defaultValue = "") String resourcesId, @RequestParam(value = "fileName", required = false) String fileNames, @RequestParam(value = "fileDesc", required = false) String fileDescs, Failure failure, RedirectAttributes redirectAttributes) { User user = comm.accountService.getCurrentUser(); failure.setRelatedId(resourcesId); failure.setCreateTime(new Date()); failure.setUser(user); failure.setTitle(comm.applyService.generateTitle(user.getLoginName(), "bug")); boolean result = comm.failureService.saveFailure(failure, fileNames, fileDescs); redirectAttributes.addFlashAttribute("message", result ? "故障申报成功" : "故障申报失败,请稍后重试"); return REDIRECT_SUCCESS_URL; } /** * 查看详情 * * @param id * 故障申报的ID * @param model * @return */ @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET) public String detail(@PathVariable("id") Integer id, Model model) { Failure failure = comm.failureService.getFailure(id); Integer issueId = failure.getRedmineIssue().getIssueId(); Issue issue = RedmineService.getIssue(issueId); // 查询Redmine中的Issue信息失败 if (issue == null) { model.addAttribute("message", "查询工单信息失败,请稍后重试!"); } List<Resources> resourcesList = new ArrayList<Resources>(); 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>(); if (StringUtils.isNotBlank(failure.getRelatedId())) { String[] resourcesIds = failure.getRelatedId().split(","); for (String resourcesId : resourcesIds) { Resources resources = comm.resourcesService.getResources(Integer.valueOf(resourcesId)); resourcesList.add(resources); } } /* 封装各个资源对象 */ comm.resourcesService.wrapBasicUntilListByResources(resourcesList, computeItems, storageItems, elbItems, eipItems, dnsItems, monitorComputes, monitorElbs, mdnItems, cpItems); model.addAttribute("issue", issue); model.addAttribute("failure", failure); 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); return "failure/failureDetail"; } /** * AJAX上传附件 * * @param request * @param file * @return */ @RequestMapping(value = "/upload/file", method = RequestMethod.POST) @ResponseBody public List<UploadedFile> upload(HttpServletRequest request, @RequestParam("file") MultipartFile file) { return comm.failureService.saveUploadByAjax(request, file); } /** * AJAX删除页面上已经上传的附件. * * @param request * @param fileName * @return */ @RequestMapping(value = "/upload/delete") @ResponseBody public StatusResponse delete(HttpServletRequest request, @RequestParam("fileName") String fileName) { boolean result = comm.failureService.deleteUploadByAjax(request, fileName); return new StatusResponse(result, result == true ? "删除成功" : "删除失败"); } }