예제 #1
0
  /**
   * @param params
   * @param request
   * @return Map<String, String>
   */
  private static Map<String, String> collectRequestParams(
      Collection<ReportParam> params, HttpServletRequest request) {
    Map<String, String> rs = Maps.newHashMap();
    request
        .getParameterMap()
        .forEach(
            (k, v) -> {
              rs.put(k, v[0]);
            });
    // cookie中如果包含参数值,覆盖url中参数
    if (request.getCookies() != null) {
      for (Cookie cookie : request.getCookies()) {
        rs.put(cookie.getName(), cookie.getValue());
      }
    }

    // 如果当前线程中包含参数值,则覆盖cookie中参数值
    rs.putAll(ContextManager.getParams());
    // 容错,处理其他可能的参数
    rs.remove(Constants.RANDOMCODEKEY);
    rs.remove(Constants.TOKEN);
    rs.remove(Constants.BIPLATFORM_PRODUCTLINE);

    return rs;
  }
예제 #2
0
  /**
   * 修正报表区域模型参数
   *
   * @param request
   * @param model
   */
  public static Map<String, Object> resetContextParam(
      final HttpServletRequest request, ReportDesignModel model) {
    Map<String, Object> rs = Maps.newHashMap();
    Collection<ReportParam> params = DeepcopyUtils.deepCopy(model.getParams()).values();
    // modify by jiangyichao at 2015-05-19
    Collection<PlaneTableCondition> planeTableConditions =
        DeepcopyUtils.deepCopy(model.getPlaneTableConditions()).values();
    if (params.size() == 0 && planeTableConditions.size() == 0) {
      return rs;
    }
    LOG.info("context params ============== " + ContextManager.getParams());
    // 当前请求参数
    Map<String, String> requestParams = collectRequestParams(params, request);
    rs.putAll(requestParams);
    LOG.info("current request params ============== " + requestParams);

    // TODO 先处理P功能对应的参数
    if (params.size() != 0) {
      params.forEach(
          param -> {
            LOG.info("current param define ============== " + param.toString());
            if (param.isNeeded() && StringUtils.isEmpty(requestParams.get(param.getName()))) {
              if (StringUtils.isEmpty(param.getDefaultValue())) {
                throw new RuntimeException("必要参数未赋值");
              }
              rs.put(param.getElementId(), param.getDefaultValue());
              rs.put(param.getName(), param.getDefaultValue());
            } else if (!StringUtils.isEmpty(requestParams.get(param.getName()))) {
              rs.put(param.getElementId(), requestParams.get(param.getName()));
            } else if (!StringUtils.isEmpty(param.getDefaultValue())) {
              rs.put(param.getElementId(), param.getDefaultValue());
              rs.put(param.getName(), param.getDefaultValue());
            }
          });
    }

    // 处理平面表对应的条件
    if (planeTableConditions.size() != 0) {
      planeTableConditions.forEach(
          condition -> {
            LOG.info("current planeTable condition define ============== " + condition.toString());
            // 如果请求参数中没有条件对应的参数,则使用默认值对应的参数值
            if (StringUtils.isEmpty(requestParams.get(condition.getName()))) {
              rs.put(condition.getElementId(), condition.getDefaultValue());
              rs.put(condition.getName(), condition.getDefaultValue());
            } else if (!StringUtils.isEmpty(requestParams.get(condition.getName()))) {
              // 如果请求参数中有条件对应的参数,则取请求参数中的参数值
              // TODO 对时间条件和层级条件做特殊处理
              String requestParam = requestParams.get(condition.getName());
              // 处理时间条件
              //                    requestParam =
              // PlaneTableUtils.handleTimeCondition(requestParam);
              // 处理层级条件
              //                    requestParam =
              // PlaneTableUtils.handleLayerCondition(requestParam);
              rs.put(condition.getElementId(), requestParam);
            }
          });
    }

    LOG.info("after reset params is : " + rs);
    return rs;
  }