/**
   * 查询会议访问统计,按会议进行汇总
   *
   * @param user
   * @param currentPage
   * @param pageSize
   * @return
   * @throws ServiceException
   */
  public Object[] findPager(
      MeetingAccessLog meetingAccessLog, Long selfOrgId, int currentPage, int pageSize)
      throws ServiceException {
    Map<String, Object> properties = new HashMap<String, Object>();

    String sql = "";
    if ("1".equals(meetingAccessLog.getIsDistinct())) { // 去掉重复用户
      sql =
          "select t.meeting_name, t.portal_type, count(t.user_id) cnt,t.meeting_id from (select l.meeting_id,m.meeting_name, l.portal_type, l.user_id";
    } else {
      sql = "select m.meeting_name, l.portal_type, count(l.id) cnt,l.meeting_id ";
    }

    sql += " from meeting_access_log l, meeting m where l.meeting_id = m.id";

    if (meetingAccessLog.getStartTime() != null) {
      sql += " and l.access_time > :startTime ";
      properties.put("startTime", meetingAccessLog.getStartTime()); // 开始时间
    }

    if (meetingAccessLog.getEndTime() != null) {
      sql += " and l.access_time < :endTime ";
      properties.put("endTime", meetingAccessLog.getEndTime()); // 结束时间
    }

    List<Long> mIdList = new ArrayList<Long>();
    // 如果查询页面输入了会议id,则以该会议id为准
    // 判断该会议id是否在管理员组织下,如果不在,返回null。
    if (meetingAccessLog.getMeeting() != null && meetingAccessLog.getMeeting().getId() != null) {
      List<Long> list = meetingDao.queryMeetingIdsByOrgId(selfOrgId);
      if (list.contains(meetingAccessLog.getMeeting().getId())) {
        mIdList.add(meetingAccessLog.getMeeting().getId());
      } else {
        return null;
      }
    } else {
      // 否则以treeId计算得出
      String treeId = meetingAccessLog.getTreeId();
      if (StringUtil.isEmpty(treeId)) {
        log.info("treeId 为空,return null!");
        return null;
      } else if (treeId.startsWith("o")) // treeId为组织id
      {
        Long orgId = Long.parseLong(treeId.substring(1));
        mIdList = meetingDao.queryMeetingIdsByOrgId(orgId);
      } else if (treeId.startsWith("u")) // treeId为用户id
      {
        Long userId = Long.parseLong(treeId.substring(1));
        mIdList = meetingDao.queryMeetingIdsByUserId(userId);
      }
    }

    Object[] result = new Object[2];
    if (mIdList.size() > 0) {
      sql += " and m.id in(:mIdList)";
      properties.put("mIdList", mIdList);
    } else { // 会议id列表为空,返回空。
      return null;
    }

    if ("1".equals(meetingAccessLog.getIsDistinct())) { // 去掉重复用户
      sql +=
          " group by l.meeting_id, l.portal_type, l.user_id ) as t group by t.meeting_id, t.portal_type";
    } else {
      sql += " group by l.meeting_id, l.portal_type";
    }

    try {
      Pager<MeetingAccessLog> pager =
          meetingAccessLogDao.findPagerBySql(sql, currentPage, pageSize, properties);
      result[0] = pager;
    } catch (Exception e) {
      final String errMsg = "Find meeting pager error! ";
      log.error(errMsg, e);
      throw new ServiceException(errMsg, e);
    }

    // 查询汇总
    sql = "select tt.portal_type, sum(tt.cnt) from (" + sql + ") as tt group by portal_type";

    result[1] = meetingAccessLogDao.querySum(sql, properties);
    return result;
  }
  /**
   * 查询会议访问统计明细
   *
   * @param user
   * @param currentPage
   * @param pageSize
   * @return
   * @throws ServiceException
   */
  public Pager<MeetingAccessLog> findDetailPager(
      MeetingAccessLog meetingAccessLog, Long selfOrgId, int currentPage, int pageSize)
      throws ServiceException {
    Map<String, Object> properties = new HashMap<String, Object>();

    String sql =
        "select m.meeting_name,u.mobile,u.name,l.portal_type,l.access_time,l.meeting_id from meeting_access_log l, meeting m, user u "
            + "where l.meeting_id = m.id and l.user_id = u.id";

    String mobile = "";
    if (meetingAccessLog != null
        && meetingAccessLog.getUser() != null
        && StringUtil.isNotEmpty(meetingAccessLog.getUser().getMobile())) {

      sql += " and u.mobile like concat('%',:mobile,'%') "; // 手机号码

      mobile = meetingAccessLog.getUser().getMobile();
      properties.put("mobile", mobile);
    }

    if (meetingAccessLog.getStartTime() != null) {
      sql += " and l.access_time > :startTime ";
      properties.put("startTime", meetingAccessLog.getStartTime()); // 开始时间
    }

    if (meetingAccessLog.getEndTime() != null) {
      sql += " and l.access_time < :endTime ";
      properties.put("endTime", meetingAccessLog.getEndTime()); // 结束时间
    }

    List<Long> mIdList = new ArrayList<Long>();
    // 如果查询页面输入了会议id,则以该会议id为准
    // 判断该会议id是否在管理员组织下,如果不在,返回null。
    if (meetingAccessLog.getMeeting() != null && meetingAccessLog.getMeeting().getId() != null) {
      List<Long> list = meetingDao.queryMeetingIdsByOrgId(selfOrgId);
      if (list.contains(meetingAccessLog.getMeeting().getId())) {
        mIdList.add(meetingAccessLog.getMeeting().getId());
      } else {
        return null;
      }
    } else {
      // 否则以treeId计算得出
      String treeId = meetingAccessLog.getTreeId();
      if (StringUtil.isEmpty(treeId)) {
        log.info("treeId 为空,return null!");
        return null;
      } else if (treeId.startsWith("o")) // treeId为组织id
      {
        Long orgId = Long.parseLong(treeId.substring(1));
        mIdList = meetingDao.queryMeetingIdsByOrgId(orgId);
      } else if (treeId.startsWith("u")) // treeId为用户id
      {
        Long userId = Long.parseLong(treeId.substring(1));
        mIdList = meetingDao.queryMeetingIdsByUserId(userId);
      }
    }

    if (mIdList.size() > 0) {
      sql += " and m.id in(:mIdList)";
      properties.put("mIdList", mIdList);
    } else { // 会议id列表为空,返回空。
      return null;
    }

    log.debug("sql--" + sql);

    try {
      return meetingAccessLogDao.findPagerBySql(sql, currentPage, pageSize, properties);
    } catch (Exception e) {
      final String errMsg = "Find meeting pager error! ";
      log.error(errMsg, e);
      throw new ServiceException(errMsg, e);
    }
  }