/** 用户导出 */
  @RequestMapping("/user/export")
  public void userListExport(
      HttpServletRequest request, HttpServletResponse response, @ModelAttribute User user) {
    try {
      // 指定文件生成路径
      String dir = request.getSession().getServletContext().getRealPath("/excelfile/user");
      // 文件名
      String expName = "学员信息_" + DateUtils.getStringDateShort();
      // 表头信息
      String[] headName = {"ID", "昵称", "真实姓名", "学员邮箱", "学员手机", "注册时间", "状态"};

      // 拆分为一万条数据每Excel,防止内存使用太大
      PageEntity page = new PageEntity();
      page.setPageSize(10000);
      userService.getUserListByCondition(user, page);
      int num = page.getTotalPageSize(); // 总页数
      List<File> srcfile = new ArrayList<File>(); // 生成的excel的文件的list
      for (int i = 1; i <= num; i++) { // 循环生成num个xls文件
        page.setCurrentPage(i);
        List<User> userList = userService.getUserListByCondition(user, page);
        List<List<String>> list = userJoint(userList);
        File file = FileExportImportUtil.createExcel(headName, list, expName + "_" + i, dir);
        srcfile.add(file);
      }
      FileExportImportUtil.createRar(response, dir, srcfile, expName); // 生成的多excel的压缩包
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  /**
   * 禁用学员账号(冻结)
   *
   * @param user
   * @return
   */
  @RequestMapping("/user/updateIsavalible")
  @ResponseBody
  public Map<String, Object> updateIsavalible(
      HttpServletRequest request, @ModelAttribute User user) {
    try {
      userService.updateUserForIsavalibleById(user);
      this.setJson(true, "success", null);

      // 记录系统用户操作
      Map<String, Object> descMap = new HashMap<String, Object>();
      descMap.put("optuser", "操作id_" + SingletonLoginUtils.getSysUserId(request));
      descMap.put("optType", user.getIsavalible() == 1 ? "禁用" : "正常");
      descMap.put("userId", "用户id_" + user.getId());
      userService.addUserOptRecord(
          user.getId(),
          user.getIsavalible() == 1
              ? UserOptType.DISABLE.toString()
              : UserOptType.ACTIVE.toString(),
          SingletonLoginUtils.getSysUserId(request),
          this.getSysLoginLoginName(request),
          user.getId(),
          gson.toJson(descMap));
    } catch (Exception e) {
      logger.error("AdminUserController.updateIsavalible", e);
    }
    return json;
  }
 /**
  * 短信邮件发送 查询用户列表集合
  *
  * @param user
  * @param page
  * @return
  */
 @RequestMapping("/user/select_userlist/{type}")
 public ModelAndView selectUserList(
     @ModelAttribute User user,
     @ModelAttribute("page") PageEntity page,
     @PathVariable("type") int type) {
   ModelAndView modelandView = new ModelAndView();
   // 设置返回页面
   modelandView.setViewName(toSelectUserList);
   try {
     if (type == 3) {
       page.setPageSize(5);
     }
     // 设置分页 ,默认每页10
     this.setPage(page);
     // 查询学员列表
     List<User> list = userService.getUserListAndCourse(user, this.getPage());
     // 把参数放到modelAndView中
     modelandView.addObject("list", list);
     modelandView.addObject("page", this.getPage());
     modelandView.addObject("type", type); // 1 短信  2邮箱  3系统消息
   } catch (Exception e) {
     logger.error("AdminUserController.userList", e);
   }
   return modelandView;
 }
 /**
  * 获取用户信息 ById
  *
  * @return
  */
 @RequestMapping("/user/getUserInfo/{id}")
 public String getUserInfo(Model model, @PathVariable("id") Long id) {
   try {
     User user = userService.getUserById(id);
     model.addAttribute("user", user);
   } catch (Exception e) {
     logger.error("getUserInfo:" + e);
   }
   return "路径";
 }
 /**
  * 跳转到修改密码
  *
  * @return
  */
 @RequestMapping("/user/toupdatepwd/{id}")
 public ModelAndView toUpdatePwd(@PathVariable("id") Long id) {
   ModelAndView modelAndView = new ModelAndView();
   modelAndView.setViewName(toUpdatePwd);
   try {
     User user = userService.getUserById(id);
     modelAndView.addObject("user", user);
   } catch (Exception e) {
     logger.error("AdminUserController.toUpdatePwd", e);
   }
   return modelAndView;
 }
  /**
   * 修改密码
   *
   * @return
   */
  @RequestMapping("/user/updatepwd")
  @ResponseBody
  public Map<String, Object> updatePwd(HttpServletRequest request, @ModelAttribute User user) {
    try {
      userService.updatePwdById(user, null);
      this.setJson(true, "success", null);

      // 记录系统用户操作
      Map<String, Object> descMap = new HashMap<String, Object>();
      descMap.put("optuser", "操作id_" + SingletonLoginUtils.getSysUserId(request));
      descMap.put("optType", "操作_修改用户密码");
      descMap.put("userId", "用户id_" + user.getId());
      userService.addUserOptRecord(
          user.getId(),
          UserOptType.CHANGEPWD.toString(),
          SingletonLoginUtils.getSysUserId(request),
          this.getSysLoginLoginName(request),
          user.getId(),
          gson.toJson(descMap));
    } catch (Exception e) {
      logger.error("AdminUserController.updatePwd", e);
    }
    return json;
  }
  /**
   * 修改用户信息
   *
   * @param user
   * @return
   */
  @RequestMapping("/user/updateUserInfo")
  @ResponseBody
  public Map<String, Object> updateUserInfo(@ModelAttribute("user") User user) {
    try {
      // 修改用户信息
      if (ObjectUtils.isNull(user)) {
        this.setJson(false, "信息错误", null);
        return json;
      }

      userService.updateUser(user);
      this.setJson(true, "修改成功", null);
    } catch (Exception e) {
      logger.error("updateUserInfo:" + e);
    }
    return json;
  }
 /**
  * 用户列表集合
  *
  * @param user
  * @param page
  * @return
  */
 @RequestMapping("/user/list")
 public ModelAndView userList(@ModelAttribute User user, @ModelAttribute("page") PageEntity page) {
   ModelAndView modelandView = new ModelAndView();
   // 设置返回页面
   modelandView.setViewName(toUserList);
   try {
     // 设置分页 ,默认每页10
     this.setPage(page);
     // 查询学员列表
     List<User> list = userService.getUserListByCondition(user, this.getPage());
     // 把参数放到modelAndView中
     modelandView.addObject("list", list);
     modelandView.addObject("page", this.getPage());
   } catch (Exception e) {
     logger.error("AdminUserController.userList", e);
   }
   return modelandView;
 }
  /**
   * 批量发送 系统消息
   *
   * @param request
   * @param content
   * @param cusId
   * @return
   */
  @RequestMapping(value = "/letter/sendSystemInfoByCusIds")
  @ResponseBody
  public Map<String, Object> sendSystemInfoByCusIds(
      @ModelAttribute User user,
      HttpServletRequest request,
      @ModelAttribute("page") PageEntity page) {
    Map<String, Object> map = new HashMap<String, Object>();
    try {
      page.setPageSize(10000);
      // 查询学员列表
      List<User> list = userService.getUserListAndCourse(user, page);

      String content = request.getParameter("messsageContent"); // 发送系统消息的内容
      if (list == null || list.size() == 0) {
        map.put("message", "没有符合条件的会员");
      } else {
        List<MsgReceive> msgrcList = new ArrayList<MsgReceive>();
        for (int i = 0; i < list.size(); i++) {
          MsgReceive msgReceive1 = new MsgReceive();
          msgReceive1.setContent(content);
          msgReceive1.setAddTime(new Date());
          msgReceive1.setReceivingCusId(list.get(i).getId());
          msgReceive1.setStatus(LetterConstans.LETTER_STATUS_READ);
          msgReceive1.setType(LetterConstans.LETTER_TYPE_SYSTEMINFORM);
          msgReceive1.setUpdateTime(new Date());
          msgReceive1.setShowname("");
          msgReceive1.setCusId(0L);
          msgrcList.add(msgReceive1);
        }
        // 发送
        msgReceiveService.addMsgReceiveBatch(msgrcList);
        map.put("message", "success");
      }

    } catch (Exception e) {
      logger.error("AdminLetterAction.sendSystemInfoByCusIds", e);
      setExceptionRequest(request, e);
    }
    return map;
  }