/** * @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; }
/** * 修正报表区域模型参数 * * @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; }