package com.alimama.mdrill.ui.service;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import javax.servlet.jsp.JspWriter;
import com.alimama.mdrill.json.JSONArray;
import com.alimama.mdrill.json.JSONException;
import com.alimama.mdrill.json.JSONObject;
import com.alimama.mdrill.ui.service.utils.WebServiceParams;
import com.alimama.mdrill.ui.service.utils.WebServiceParams.StateField;
public class Pie {
public static ArrayList<String> parseGroup(String fl)
{
ArrayList<String> groupbyFields=new ArrayList<String>();
ArrayList<String> showFields = WebServiceParams.showFields(fl);
for (String showfield : showFields) {
StateField showfielda=WebServiceParams.parseStat(showfield);
if(!showfielda.isstat)
{
groupbyFields.add(showfield);
}
}
return groupbyFields;
}
public static String parseStatList(String projectName, String queryStr, String fl, String groupby,String dimvalue) throws JSONException, SQLException
{
JSONObject jsonObj = new JSONObject();
ArrayList<String> StatFields=new ArrayList<String>();
ArrayList<String> StatFieldsDisplay=new ArrayList<String>();
HashMap<String,ArrayList<String>> namelist=AdhocWebServiceParams.parseFieldToNames(fl, groupby, dimvalue, null);
ArrayList<String> namelistread=namelist.get("namelist");
ArrayList<String> showFields = namelist.get("field");
StatFields.add("count(*)");
StatFieldsDisplay.add("计数(*)");
for(int i=0;i<showFields.size()&&i<namelistread.size();i++){
String showfield=showFields.get(i);
String showfieldDisplay=namelistread.get(i);
StateField showfielda=WebServiceParams.parseStat(showfield);
if(showfielda.isstat)
{
StatFields.add(showfield);
StatFieldsDisplay.add(showfieldDisplay);
}
}
jsonObj.put("stats", StatFields);
jsonObj.put("statsShow", StatFieldsDisplay);
jsonObj.put("project", projectName);
return jsonObj.toString();
}
public static String parseGroupList(String projectName, String queryStr, String fl, String groupby,String dimvalue) throws JSONException, SQLException
{
JSONObject jsonObj = new JSONObject();
ArrayList<String> StatFields=new ArrayList<String>();
ArrayList<String> StatFieldsDisplay=new ArrayList<String>();
HashMap<String,ArrayList<String>> namelist=AdhocWebServiceParams.parseFieldToNames(fl, groupby, dimvalue, null);
ArrayList<String> namelistread=namelist.get("namelist");
ArrayList<String> showFields = namelist.get("field");
for(int i=0;i<showFields.size()&&i<namelistread.size();i++){
String showfield=showFields.get(i);
String showfieldDisplay=namelistread.get(i);
StateField showfielda=WebServiceParams.parseStat(showfield);
if(!showfielda.isstat)
{
StatFields.add(showfield);
StatFieldsDisplay.add(showfieldDisplay);
}
}
jsonObj.put("group", StatFields);
jsonObj.put("groupShow", StatFieldsDisplay);
jsonObj.put("project", projectName);
return jsonObj.toString();
}
public static String parseStat(String projectName, String queryStr, String fl, String groupby,String dimvalue) throws JSONException, SQLException
{
JSONObject jsonObj = new JSONObject();
ArrayList<String> groupbyFields=new ArrayList<String>();
ArrayList<String> showFields = WebServiceParams.showFields(fl);
jsonObj.put("pie_stat", "count(*)");
for (String showfield : showFields) {
StateField showfielda=WebServiceParams.parseStat(showfield);
if(showfielda.isstat)
{
jsonObj.put("pie_stat", showfield);
}else{
groupbyFields.add(showfield);
}
}
jsonObj.put("fieldToName", AdhocWebServiceParams.parseFieldToNames(fl, groupby, dimvalue, null));
jsonObj.put("pie_dimvalue", dimvalue);
jsonObj.put("pie_groupby",groupbyFields);
jsonObj.put("project", projectName);
jsonObj.put("q", queryStr);
jsonObj.put("sort", String.valueOf(jsonObj.getString("pie_stat")));
jsonObj.put("order", String.valueOf("desc"));
return jsonObj.toString();
}
public static String result(String projectName,
String startStr, String rowsStr, String queryStr,
String fl, String groupby, String sort, String order,JspWriter out)
throws Throwable
{
return result(projectName, startStr, rowsStr, queryStr, fl, groupby, sort, order, "Y", out);
}
public static String result(String projectName,
String startStr, String rowsStr, String queryStr,
String fl, String groupby, String sort, String order,String showOther,JspWriter out)
throws Throwable {
HeartBeat hb=new HeartBeat(out);
new Thread(hb).start();
String rtn= MdrillService.result(projectName, null, startStr,rowsStr, queryStr, null, fl, groupby, sort, order, null, null);
HashMap<String,Object> rtna=new HashMap<String, Object>();
JSONObject jsonObj = new JSONObject(rtn);
if(!jsonObj.getString("code").equals("1"))
{
rtna.put("code",0);
rtna.put("msg","服务器异常,请稍后再试");
hb.stop();
return new JSONObject(rtna).toString();
}
JSONArray list=jsonObj.getJSONObject("data").getJSONArray("docs");
ArrayList<Object> data=new ArrayList< Object>();
ArrayList<String> showFields = WebServiceParams.showFields(fl);
String flkey=groupby;
String flvalue="";
for (String showfield : showFields) {
StateField showfielda=WebServiceParams.parseStat(showfield);
if(showfielda.isstat)
{
flvalue=showfield;
}
}
JSONArray filterother=new JSONArray(WebServiceParams.query(queryStr));
JSONArray filterother2=new JSONArray();
for(int i=0;i<list.length();i++)
{
JSONObject item=list.getJSONObject(i);
JSONObject newitem=new JSONObject();
newitem.put("label", String.valueOf(item.get(flkey)));
newitem.put("data", Double.parseDouble(item.getString(flvalue)));
data.add(newitem);
JSONObject newitemfilter=new JSONObject();
newitemfilter.put("key", flkey);
newitemfilter.put("operate", "2");
newitemfilter.put("value", String.valueOf(item.get(flkey)));
filterother.put(newitemfilter);
filterother2.put(newitemfilter);
}
if("Y".equals(showOther))
{
String rtnother= MdrillService.result(projectName, null, startStr,rowsStr, filterother.toString(), null, flvalue, null, sort, order, null, null);
JSONObject jsonObjother = new JSONObject(rtnother);
if(jsonObjother.getString("code").equals("1"))
{
JSONArray listother=jsonObjother.getJSONObject("data").getJSONArray("docs");
for(int i=0;i<listother.length();i++)
{
JSONObject item=listother.getJSONObject(i);
Double d=Double.parseDouble(item.getString(flvalue));
if(d>0)
{
JSONObject newitem=new JSONObject();
newitem.put("label", "其他");
newitem.put("data",d );
data.add(newitem);
}
}
}
}
hb.stop();
rtna.put("code", 1);
rtna.put("其他", filterother2);
rtna.put("data", data);
String rtnstr= new JSONObject(rtna).toString();
out.write(rtnstr);
return rtnstr;
}
}