//把map数据转化为json数据
JSONObject jsonObjectFromMap =JSONObject.fromObject(recordInfo);
dto.setAddress(jsonObjectFromMap.toString());
action层代码 /**
* 1. 构造HighChart的x轴用到的每月时间数据信息 (月份不足两位的没有补0,直接放在request中)
* 2. 返回值map中月份不足2位的,进行了补0,该map在构造每月订单数量统计时使用 * @throws ParseException */private Map extractHighChartXAxisInfo(ServletRequest request) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(\ Calendar curr = Calendar.getInstance(); Calendar curr2 = curr;
Date beginPayDate = curr.getTime(); // 传进来的当前时间 curr2.add(Calendar.YEAR, -1); curr2.add(Calendar.MONTH, 1);
Date endPayDate = curr2.getTime(); // 上一年的时间
GregorianCalendar[] ga=getDate(simpleDateFormat.format(endPayDate), simpleDateFormat.format(beginPayDate)); //循环数组
StringBuffer stringBuffer = new StringBuffer();
Map initMap = new LinkedHashMap(); stringBuffer.append(\ for(GregorianCalendar e:ga) {
stringBuffer.append(\ initMap.put(modifyTime(e), 0); }
//当ga数组中有数据时才删除末尾的 逗号 if(stringBuffer.length()>1){
stringBuffer.deleteCharAt(stringBuffer.length()-1); }
stringBuffer.append(\
log.info(\轴用到的每月时间数据信息 (月份不足两位的没有补0) \ request.setAttribute(\ return initMap; }
/**
*
* @param startTime * @param endTime
* @return 返回开始时间和结束时间之间的每一个月 * 如:2013.1 2013.2 2013.3 2013.4 2013.5 2013.6 2013.7 * @throws ParseException */
public static GregorianCalendar[] getDate(String startTime,String endTime) throws ParseException {
Vector
GregorianCalendar gc1=new GregorianCalendar(),gc2=new GregorianCalendar(); gc1.setTime(sdf.parse(startTime)); gc2.setTime(sdf.parse(endTime)); do{
GregorianCalendar gc3=(GregorianCalendar)gc1.clone(); v.add(gc3);
gc1.add(Calendar.MONTH, 1);
}while(!gc1.after(gc2));
return v.toArray(new GregorianCalendar[v.size()]); }
//按格式获取时间,月份不足两位的补0
public static String modifyTime(GregorianCalendar e){ String curdate = e.get(Calendar.YEAR)+\ if((e.get(Calendar.MONTH)+1)<10){
curdate = curdate+\ }else {
curdate = curdate+\ }
return curdate; }
//按格式获取时间,月份不足两位的没有补0
public static String modifyTimeAnthor(GregorianCalendar e){ String curdate = e.get(Calendar.YEAR)+\
curdate = curdate+\ return curdate; }
/**
* 1. 传递查询时间段的日期信息
* 2. 要求查询当月以及向前倒推11个月(总共12的月)的数据
* 3. 如当前日期是 2014.01,则构造开始时间2013.02,结束时间2014.02,都是由于oracle的between and * @param mulOrderDTO */
private void passDateInfo(TMulOrderCountDTO mulOrderDTO) { //传递月份信息
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(\ Calendar curr = Calendar.getInstance();
//注意这里把curr变量的引用赋值给了curr2,当curr的值变化时,会影响到curr2的值 Calendar curr2 = curr;
curr.add(Calendar.MONTH, 1);
Date beginPayDate = curr.getTime(); // 传进来的当前时间 curr2.add(Calendar.YEAR, -1);
Date endPayDate = curr2.getTime(); // 上一年的时间
mulOrderDTO.setBeginPayDate(simpleDateFormat.format(endPayDate)); mulOrderDTO.setEndPayDate(simpleDateFormat.format(beginPayDate)); }
/**
* 构造每个月 订单总量、合约机总量、裸机总量的字符串信息,用于填充highChart插件 * @param request * @param str */
@SuppressWarnings(\
private void extractHighChartRecordInfo(ServletRequest request, String str,Map initMap) {
//接受最初传进来的map,使用了LinkedHashMap的构造方法,参数为map //由于数据的显示问题,这里构造了初始化的LinkedHashMap(带顺序) Map originalTotalMap = new LinkedHashMap(initMap); Map originalTotalLJMap = new LinkedHashMap(initMap); Map originalTotalHYMap = new LinkedHashMap(initMap); //把json数据重新转换为Map数据
Map
Iterator
Map.Entry
String key = me.getKey();
String keyW = key.substring(key.indexOf(\ if(\
//拿到当前迭代对象的value,是List对象,取第一个元素拿到map List li = (List) me.getValue(); //拿到map
Map map = (Map) li.get(0); //覆盖一下初始化map的数据
originalTotalLJMap.putAll(map);
//拿到实际上保存数据的Map集合,如保存每月裸机订单数据的map
Iterator
log.info(\解析每月裸机数据..................................................\ while(iterator1.hasNext()){
Map.Entry
String keya = mea.getKey();
log.info(keya+\ \
// getValue()是获取当月的订单数量,保存到StringBuffer中,并处理//StringBuffer数据使得满足highchart插件的要求 stringBufferLJ.append(mea.getValue()+\ }
//当iterator1中有数据时才删除掉末尾的逗号 if(stringBufferLJ.length()>1){
stringBufferLJ.deleteCharAt(stringBufferLJ.length()-1); }
stringBufferLJ.append(\ log.info(\裸机订单数
量 :\
request.setAttribute(\ }
if(\
List li = (List) me.getValue(); //拿到map
Map map = (Map) li.get(0);
originalTotalHYMap.putAll(map);
Iterator
log.info(\解析每月合约机数据..................................................\ while(iterator1.hasNext()){
Map.Entry
stringBufferHY.append(mea.getValue()+\
log.info(keya+\ \ }
//当iterator1中有数据时才删除掉末尾的逗号 if(stringBufferHY.length()>1){
stringBufferHY.deleteCharAt(stringBufferHY.length()-1); }
stringBufferHY.append(\ log.info(\合约机订单数
量 :\ request.setAttribute(\ }
if(\
List li = (List) me.getValue(); //拿到map
Map map = (Map) li.get(0); originalTotalMap.putAll(map);
Iterator
log.info(\解析每月订单总量数据..................................................\ while(iterator1.hasNext()){
Map.Entry
stringBufferTotal.append(mea.getValue()+\
log.info(keya+\ \ }
//当iterator1中有数据时才删除掉末尾的逗号 if(stringBufferTotal.length()>1){
stringBufferTotal.deleteCharAt(stringBufferTotal.length()-1); }
stringBufferTotal.append(\
log.info(\总订单数
量 :\
request.setAttribute(\ } } }
highcharts效果图
附上jsp的代码
<%@ page language=\ import=\ pageEncoding=\%> <%
String path = request.getContextPath();
String basePath = request.getScheme()+\+request.getServerName()+\+request.getServerPort()+path+\; %>
| |