content: package com.sohu.cache.web.controller;
  
  import java.text.SimpleDateFormat;
  import java.util.Date;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  
  import javax.annotation.Resource;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.apache.commons.lang.math.NumberUtils;
  import org.apache.commons.lang.time.DateUtils;
  import org.springframework.stereotype.Controller;
  import org.springframework.ui.Model;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.servlet.ModelAndView;
  
  import com.sohu.cache.client.service.ClientReportExceptionService;
  import com.sohu.cache.client.service.ClientVersionService;
  import com.sohu.cache.entity.AppClientVersion;
  import com.sohu.cache.entity.AppDesc;
  import com.sohu.cache.entity.ClientInstanceException;
  import com.sohu.cache.web.enums.SuccessEnum;
  
  /**
   * 客户端管理
   * 
   * @author leifu
   * @Date 2016年2月18日
   * @Time 下午4:55:32
   */
  @Controller
  @RequestMapping("manage/client")
  public class ClientManageController extends BaseController {
  
      /**
       * 客户端异常服务
       */
      @Resource(name = "clientReportExceptionService")
      private ClientReportExceptionService clientReportExceptionService;
      
      /**
       * 客户端版本服务
       */
      @Resource(name = "clientVersionService")
      private ClientVersionService clientVersionService;
  
      /**
       * /manage/client/exception
       * @param request
       * @param response
       * @param model
       * @return
       */
      @RequestMapping(value = "/exception")
      public ModelAndView doClientExceptionStat(HttpServletRequest request, HttpServletResponse response, Model model) {
          String ip = request.getParameter("ip");
          model.addAttribute("ip", ip);
          //近一个月
          long collectTime = NumberUtils.toLong(new SimpleDateFormat("yyyyMMdd000000").format(DateUtils.addMonths(new Date(), -1)));
          
          // 一段时间内客户端异常
          List<ClientInstanceException> clientInstanceExceptionList = clientReportExceptionService.getInstanceExceptionStat(ip, collectTime);
          model.addAttribute("clientInstanceExceptionList", clientInstanceExceptionList);
          
          // 应用相关map
          fillAppInfoMap(model);
          
          model.addAttribute("clientExceptionActive", SuccessEnum.SUCCESS.value());
          return new ModelAndView("manage/client/exception/list");
      }
  
      private void fillAppInfoMap(Model model) {
          List<AppDesc> appDescList = appService.getAllAppDesc();
          
          // 所有应用id和负责人对应关系
          Map<Long, String> appIdOwnerMap = new HashMap<Long, String>();
          for (AppDesc appDesc : appDescList) {
              appIdOwnerMap.put(appDesc.getAppId(), appDesc.getOfficer());
          }
          model.addAttribute("appIdOwnerMap", appIdOwnerMap);
          
          // 所有应用id和应用名对应关系
          Map<Long, String> appIdNameMap = new HashMap<Long, String>();
          for (AppDesc appDesc : appDescList) {
              appIdNameMap.put(appDesc.getAppId(), appDesc.getName());
          }
          model.addAttribute("appIdNameMap", appIdNameMap);
      }
  
      /**
       * /manage/client/version
       * @param request
       * @param response
       * @param model
       * @return
       */
      @RequestMapping(value = "/version")
      public ModelAndView doVersionStat(HttpServletRequest request, HttpServletResponse response, Model model) {
          long appId = NumberUtils.toLong(request.getParameter("appId"),-1);
          List<AppClientVersion> appClientVersionList =  clientVersionService.getAll(appId);
          
          // 应用相关map
          fillAppInfoMap(model);
          
          model.addAttribute("appClientVersionList", appClientVersionList);
          model.addAttribute("clientVersionActive", SuccessEnum.SUCCESS.value());
          model.addAttribute("appId", request.getParameter("appId"));
          
          return new ModelAndView("manage/client/version/list");
      }
  }
  