Skip to content

Instantly share code, notes, and snippets.

@zpzgzerg
Created January 30, 2012 05:45
Show Gist options
  • Save zpzgzerg/1702783 to your computer and use it in GitHub Desktop.
Save zpzgzerg/1702783 to your computer and use it in GitHub Desktop.
비젠웹로그 일부분
package com.vizensoft.access;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.vizensoft.config.SiteProperty;
import com.vizensoft.env.search.EnvSearchDao;
import com.vizensoft.env.search.EnvSearchParam;
import com.vizensoft.env.search.EnvSearchVO;
import com.vizensoft.env.section.EnvSectionDao;
import com.vizensoft.env.section.EnvSectionParam;
import com.vizensoft.env.section.EnvSectionVO;
import com.vizensoft.env.user.UserDao;
import com.vizensoft.env.user.UserDetailVO;
import com.vizensoft.env.user.UserVO;
import com.vizensoft.json.Categories;
import com.vizensoft.json.Category;
import com.vizensoft.json.Chart;
import com.vizensoft.json.Data;
import com.vizensoft.json.Dataset;
import com.vizensoft.json.Json;
import com.vizensoft.main.LoginInfo;
import com.vizensoft.main.ReIntervalType;
import com.vizensoft.main.SearchAdType;
import com.vizensoft.main.SearchAverageType;
import com.vizensoft.main.SearchPageRowsType;
import com.vizensoft.main.SearchSiteType;
import com.vizensoft.util.Function;
import com.vizensoft.util.Parameter;
@Controller
@RequestMapping("/access/")
public class AccessController {
@Autowired
private AccessDao accessDao;
@Autowired
private UserDao userDao;
@Autowired
private EnvSectionDao envSectionDao;
@Autowired
private EnvSearchDao envSearchDao;
@Inject
private Provider<LoginInfo> loginInfoProvider;
@ModelAttribute("currentUser")
public UserVO currentUser() {
return loginInfoProvider.get().currentUser();
}
@ModelAttribute("currentUserDetail")
public UserDetailVO currentUserDetail() {
return loginInfoProvider.get().currentUserDetail();
}
@ModelAttribute("servicedata")
public List<UserDetailVO> getServiceData() {
return userDao.getUserGroupByDetailList(loginInfoProvider.get().currentUser().getNo());
}
// -------------------------------- 검색 관련 ------------------------------------- //
// 검색모듈 페이지로우수
@ModelAttribute("searchPageRows")
public SearchPageRowsType[] getSearchPageRows() {
return SearchPageRowsType.values();
}
// 검색모듈 사이트 유형
@ModelAttribute("searchSiteType")
public SearchSiteType[] getSearchSiteType() {
return SearchSiteType.values();
}
// 검색모듈 검색광고
@ModelAttribute("searchAdType")
public SearchAdType[] getSearchAdType() {
return SearchAdType.values();
}
// 평균 값
@ModelAttribute("searchAverageType")
public SearchAverageType[] getSearchAverageType() {
return SearchAverageType.values();
}
// 검색모듈 섹션
@ModelAttribute("searchSectionType")
public List<EnvSectionVO> getSearchSectionType() {
EnvSectionParam param = new EnvSectionParam();
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
param.setPageRows(SiteProperty.MAX_ROWS);
param.setOrderby("no asc");
return envSectionDao.selectSection(param);
}
// 검색모듈 검색엔진
@RequestMapping("/{dir}/searchEngine.vs")
@ResponseBody
public String getSearchEngine(@RequestParam("s_sitetype") int s_sitetype, @RequestParam("s_engine") String s_engine ) {
StringBuffer returnValue = new StringBuffer();
EnvSearchParam param = new EnvSearchParam();
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
param.setPageRows(SiteProperty.MAX_ROWS);
param.setOrderby("no asc");
param.setS_type(s_sitetype);
returnValue.append("<select id='s_engine' name='s_engine'>");
returnValue.append(" <option value='0'>전체</option>");
String selected = "";
for(EnvSearchVO vo : envSearchDao.searchEngine(param)) {
selected = "";
if(vo.getUrl2().equals(s_engine)) {
selected = "selected";
}
returnValue.append(" <option value='"+vo.getUrl2()+"' "+selected+">"+vo.getName()+"</option>");
}
returnValue.append("</select>");
return returnValue.toString();
}
// -------------------------------- 검색 관련 끝 ------------------------------------- //
// 방문수 페이지뷰
@RequestMapping("/visitcount/index.vs")
public String visitcountSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
modelmap.addAttribute("list", accessDao.visitcountSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
int totalAverage = 0; // 1주,1개월,3개월 평균(방문수)
double totalPc = 0.00; // 증감율(방문수)
int totalPage = 0; // 페이지뷰
int totalAverage2 = 0; // 1주,1개월,3개월 평균(페이지)
double totalPc2 = 0.00; // 증감율(페이지)
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS2));
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("seriesname2", getSeriesname(param.getS_pcday2()));
result.put("groupby", SiteProperty.GNOBY_HOUR);
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("seriesname2", getSeriesname(param.getS_pcday2()));
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_DAY);
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("seriesname2", getSeriesname(param.getS_pcday2()));
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_WEEK);
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("seriesname2", getSeriesname(param.getS_pcday2()));
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_MONTH);
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("seriesname2", getSeriesname(param.getS_pcday2()));
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
result.put("groupby", SiteProperty.GNOBY_YOIL);
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
//totalAverage += Integer.parseInt(String.valueOf(result.get("average")));
totalPage += Integer.parseInt(String.valueOf(result.get("pagecnt")));
//totalAverage2 += Integer.parseInt(String.valueOf(result.get("average2")));
remind_list.add(result);
}
// 합계 비율 구하기(방문수)
if(totalAverage == 0) {
totalPc = totalCnt * 100;
} else {
totalPc = (((double)totalCnt-totalAverage)/totalAverage) * 100;
}
// 합계 비율 구하기(페이지)
if(totalAverage2 == 0) {
totalPc2 = totalPage * 100;
} else {
totalPc2 = (((double)totalPage-totalAverage2)/totalAverage2) * 100;
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalAverage", totalAverage);
modelmap.addAttribute("totalPc", totalPc);
modelmap.addAttribute("totalPage", totalPage);
modelmap.addAttribute("totalAverage2", totalAverage2);
modelmap.addAttribute("totalPc2", totalPc2);
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitcount/index";
}
// 방문수 페이지뷰 퓨전차트 JSON 형태 (그래프)
@RequestMapping("/visitcount/json.vs")
@ResponseBody
public Json visitcountJson(HttpServletRequest request) {
List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData");
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
List<Data> data_list2 = new ArrayList<Data>();
List<Data> data_list3 = new ArrayList<Data>();
List<Data> data_list4 = new ArrayList<Data>();
String seriesname = "";
String seriesname2 = "";
String groupby = "";
for(int i=0; i<list.size(); i++) {
seriesname = String.valueOf(list.get(i).get("seriesname"));
seriesname2 = String.valueOf(list.get(i).get("seriesname2"));
groupby = String.valueOf(list.get(i).get("groupby"));
Category category = new Category();
Data data = new Data();
Data data2 = new Data();
Data data3 = new Data();
Data data4 = new Data();
category.setLabel(String.valueOf(list.get(i).get("label")));
// 보여줄지 안보여줄지 체크
if(i%Double.parseDouble((String.valueOf(list.get(i).get("graphCount")))) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
// 방문수
data.setTooltext(category.getLabel() + " 방문수 : " + IntegerFormat.format(list.get(i).get("cnt")));
data.setValue(String.valueOf(list.get(i).get("cnt")));
data_list.add(data);
// 페이지수
data2.setTooltext(category.getLabel() + " 페이지수 : " + IntegerFormat.format(list.get(i).get("pagecnt")));
data2.setValue(String.valueOf(list.get(i).get("pagecnt")));
data_list2.add(data2);
// 평균 방문수
data3.setTooltext(seriesname + " 방문수 : " + IntegerFormat.format(list.get(i).get("average")));
data3.setValue(String.valueOf(list.get(i).get("average")));
data_list3.add(data3);
// 평균 페이지수
data4.setTooltext(seriesname2 + " 페이지수 : " + IntegerFormat.format(list.get(i).get("average2")));
data4.setValue(String.valueOf(list.get(i).get("average2")));
data_list4.add(data4);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname("방문수");
dataset.setData(data_list);
dataset_list.add(dataset);
Dataset dataset2 = new Dataset();
dataset2.setSeriesname("페이지수");
dataset2.setData(data_list2);
dataset_list.add(dataset2);
// 요일별은 평균 못구함
if(!SiteProperty.GNOBY_YOIL.equals(groupby)) {
Dataset dataset3 = new Dataset();
dataset3.setSeriesname(seriesname);
dataset3.setRenderas("Line");
dataset3.setData(data_list3);
dataset_list.add(dataset3);
Dataset dataset4 = new Dataset();
dataset4.setSeriesname(seriesname2);
dataset4.setRenderas("Line");
dataset4.setData(data_list4);
dataset_list.add(dataset4);
}
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData");
return json;
}
// 방문당 페이지뷰
@RequestMapping("/visitper/index.vs")
public String visitperSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
modelmap.addAttribute("list", accessDao.visitperSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
int totalPage = 0; // 페이지뷰
double totalPer = 0; // 방문당 페이지뷰
double totalAverage = 0; // 1주,1개월,3개월 평균(방문당 페이지뷰)
double totalPc = 0.00; // 증감율(방문당 페이지뷰)
int cnt = 0;
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS2));
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("groupby", SiteProperty.GNOBY_HOUR);
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_DAY);
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_WEEK);
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_MONTH);
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
result.put("groupby", SiteProperty.GNOBY_YOIL);
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalPage += Integer.parseInt(String.valueOf(result.get("pagecnt")));
totalPer += Double.parseDouble(String.valueOf(result.get("percnt")));
totalAverage += Double.parseDouble(String.valueOf(result.get("average")));
remind_list.add(result);
cnt++;
}
totalPer = totalPer/cnt;
totalAverage = totalAverage/cnt;
// 합계 비율 구하기(방문수)
if(totalAverage == 0) {
totalPc = totalPer * 100;
} else {
totalPc = ((totalPer-totalAverage)/totalAverage) * 100;
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalPage", totalPage);
modelmap.addAttribute("totalPer", totalPer);
modelmap.addAttribute("totalAverage", totalAverage);
modelmap.addAttribute("totalPc", totalPc);
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitper/index";
}
// 방문당페이지뷰 퓨전차트 JSON 형태 (그래프)
@RequestMapping("/visitper/json.vs")
@ResponseBody
public Json visitperJson(HttpServletRequest request) {
List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData");
DecimalFormat DoubleFormat = new DecimalFormat("#,###.##");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
List<Data> data_list2 = new ArrayList<Data>();
String seriesname = "";
String groupby = "";
for(int i=0; i<list.size(); i++) {
seriesname = String.valueOf(list.get(i).get("seriesname"));
groupby = String.valueOf(list.get(i).get("groupby"));
Category category = new Category();
Data data = new Data();
Data data2 = new Data();
category.setLabel(String.valueOf(list.get(i).get("label")));
// 보여줄지 안보여줄지 체크
if(i%Double.parseDouble((String.valueOf(list.get(i).get("graphCount")))) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
// 방문당 페이지뷰
data.setTooltext(category.getLabel() + " 방문당페이지뷰 : " + DoubleFormat.format(list.get(i).get("percnt")));
data.setValue(String.valueOf(list.get(i).get("percnt")));
data_list.add(data);
// 평균 방문당 페이지뷰
data2.setTooltext(seriesname + " 방문수 : " + DoubleFormat.format(list.get(i).get("average")));
data2.setValue(String.valueOf(list.get(i).get("average")));
data_list2.add(data2);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname("방문당페이지뷰");
dataset.setData(data_list);
dataset_list.add(dataset);
// 요일별은 평균 못구함
if(!SiteProperty.GNOBY_YOIL.equals(groupby)) {
Dataset dataset2 = new Dataset();
dataset2.setSeriesname(seriesname);
dataset2.setRenderas("Line");
dataset2.setData(data_list2);
dataset_list.add(dataset2);
}
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData");
return json;
}
// 신규 방문자
@RequestMapping("/visitnew/index.vs")
public String visitnewSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
modelmap.addAttribute("list", accessDao.visitnewSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
int totalAverage = 0; // 1주,1개월,3개월 평균
double totalPc = 0.00; // 증감율
int totalNewcnt = 0; // 신규방문수
double totalNewcntper = 0.00; // 방문율
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS2));
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("groupby", SiteProperty.GNOBY_HOUR);
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_DAY);
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_WEEK);
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_MONTH);
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
result.put("groupby", SiteProperty.GNOBY_YOIL);
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalNewcnt += Integer.parseInt(String.valueOf(result.get("newcnt")));
totalAverage += Integer.parseInt(String.valueOf(result.get("average")));
remind_list.add(result);
}
// 합계 증감율 구하기
if(totalAverage == 0) {
totalPc = totalNewcnt * 100;
} else {
totalPc = (((double)totalNewcnt-totalAverage)/totalAverage) * 100;
}
// 합계 방문율 구하기
if(totalNewcnt == 0) {
totalNewcntper = totalCnt * 100;
} else {
totalNewcntper = (totalNewcnt/totalCnt) * 100;
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalNewcnt", totalNewcnt);
modelmap.addAttribute("totalNewcntper", totalNewcntper);
modelmap.addAttribute("totalAverage", totalAverage);
modelmap.addAttribute("totalPc", totalPc);
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitnew/index";
}
// 신규방문자 퓨전차트 JSON 형태 (그래프)
@RequestMapping("/visitnew/json.vs")
@ResponseBody
public Json visitnewJson(HttpServletRequest request) {
List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData");
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
List<Data> data_list2 = new ArrayList<Data>();
String seriesname = "";
String groupby = "";
for(int i=0; i<list.size(); i++) {
seriesname = String.valueOf(list.get(i).get("seriesname"));
groupby = String.valueOf(list.get(i).get("groupby"));
Category category = new Category();
Data data = new Data();
Data data2 = new Data();
category.setLabel(String.valueOf(list.get(i).get("label")));
// 보여줄지 안보여줄지 체크
if(i%Double.parseDouble((String.valueOf(list.get(i).get("graphCount")))) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
// 방문수
data.setTooltext(category.getLabel() + " 신규 방문자 : " + IntegerFormat.format(list.get(i).get("newcnt")));
data.setValue(String.valueOf(list.get(i).get("newcnt")));
data_list.add(data);
// 평균 방문수
data2.setTooltext(seriesname + " 신규 방문자 : " + IntegerFormat.format(list.get(i).get("average")));
data2.setValue(String.valueOf(list.get(i).get("average")));
data_list2.add(data2);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname("신규 방문자");
dataset.setData(data_list);
dataset_list.add(dataset);
// 요일별은 평균 못구함
if(!SiteProperty.GNOBY_YOIL.equals(groupby)) {
Dataset dataset2 = new Dataset();
dataset2.setSeriesname(seriesname);
dataset2.setRenderas("Line");
dataset2.setData(data_list2);
dataset_list.add(dataset2);
}
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData");
return json;
}
// 재방문자
@RequestMapping("/visitre/index.vs")
public String visitreSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
modelmap.addAttribute("list", accessDao.visitreSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
int totalAverage = 0; // 1주,1개월,3개월 평균
double totalPc = 0.00; // 증감율
int totalRecnt = 0; // 신규방문수
double totalRecntper = 0.00; // 방문율
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS2));
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("groupby", SiteProperty.GNOBY_HOUR);
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_DAY);
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_WEEK);
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_MONTH);
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
result.put("groupby", SiteProperty.GNOBY_YOIL);
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalRecnt += Integer.parseInt(String.valueOf(result.get("recnt")));
totalAverage += Integer.parseInt(String.valueOf(result.get("average")));
remind_list.add(result);
}
// 합계 증감율 구하기
if(totalAverage == 0) {
totalPc = totalRecnt * 100;
} else {
totalPc = (((double)totalRecnt-totalAverage)/totalAverage) * 100;
}
// 합계 방문율 구하기
if(totalRecnt == 0) {
totalRecntper = totalCnt * 100;
} else {
totalRecntper = (totalRecnt/totalCnt) * 100;
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalRecnt", totalRecnt);
modelmap.addAttribute("totalRecntper", totalRecntper);
modelmap.addAttribute("totalAverage", totalAverage);
modelmap.addAttribute("totalPc", totalPc);
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitre/index";
}
// 재방문자 퓨전차트 JSON 형태 (그래프)
@RequestMapping("/visitre/json.vs")
@ResponseBody
public Json visitreJson(HttpServletRequest request) {
List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData");
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
List<Data> data_list2 = new ArrayList<Data>();
String seriesname = "";
String groupby = "";
for(int i=0; i<list.size(); i++) {
seriesname = String.valueOf(list.get(i).get("seriesname"));
groupby = String.valueOf(list.get(i).get("groupby"));
Category category = new Category();
Data data = new Data();
Data data2 = new Data();
category.setLabel(String.valueOf(list.get(i).get("label")));
// 보여줄지 안보여줄지 체크
if(i%Double.parseDouble((String.valueOf(list.get(i).get("graphCount")))) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
// 방문수
data.setTooltext(category.getLabel() + " 재방문자 : " + IntegerFormat.format(list.get(i).get("recnt")));
data.setValue(String.valueOf(list.get(i).get("recnt")));
data_list.add(data);
// 평균 방문수
data2.setTooltext(seriesname + " 재방문자 : " + IntegerFormat.format(list.get(i).get("average")));
data2.setValue(String.valueOf(list.get(i).get("average")));
data_list2.add(data2);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname("재방문자");
dataset.setData(data_list);
dataset_list.add(dataset);
// 요일별은 평균 못구함
if(!SiteProperty.GNOBY_YOIL.equals(groupby)) {
Dataset dataset2 = new Dataset();
dataset2.setSeriesname(seriesname);
dataset2.setRenderas("Line");
dataset2.setData(data_list2);
dataset_list.add(dataset2);
}
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData");
return json;
}
// 신규 재방문자 비교
@RequestMapping("/visitrenew/index.vs")
public String visitrenewSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
modelmap.addAttribute("list", accessDao.visitrenewSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
int totalNewcnt = 0; // 신규방문수
double totalNewcntper = 0.00; // 재방문율
int totalRecnt = 0; // 재방문수
double totalRecntper = 0.00; // 재방문율
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS2));
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("groupby", SiteProperty.GNOBY_HOUR);
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_DAY);
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_WEEK);
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_MONTH);
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
result.put("groupby", SiteProperty.GNOBY_YOIL);
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalNewcnt += Integer.parseInt(String.valueOf(result.get("newcnt")));
totalRecnt += Integer.parseInt(String.valueOf(result.get("recnt")));
remind_list.add(result);
}
// 합계 신규방문율 구하기
if(totalNewcnt == 0) {
totalNewcntper = totalCnt * 100;
} else {
totalNewcntper = ((double)totalNewcnt/totalCnt) * 100;
}
// 합계 재방문율 구하기
if(totalRecnt == 0) {
totalRecntper = totalCnt * 100;
} else {
totalRecntper = ((double)totalRecnt/totalCnt) * 100;
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalNewcnt", totalNewcnt);
modelmap.addAttribute("totalNewcntper", totalNewcntper);
modelmap.addAttribute("totalRecnt", totalRecnt);
modelmap.addAttribute("totalRecntper", totalRecntper);
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitrenew/index";
}
// 신규재방문자 비교 퓨전차트 JSON 형태 (그래프)
@RequestMapping("/visitrenew/json.vs")
@ResponseBody
public Json visitrenewJson(@RequestParam("totalcount") int totalcount, @RequestParam("newcount") int newcount, @RequestParam("recount") int recount) {
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
DecimalFormat doubleFormat = new DecimalFormat("#,###.##");
Json json = new Json();
Chart chart = new Chart();
List<Data> data = new ArrayList<Data>();
chart.setShowlegend("0");
double newPer = ((double)newcount/totalcount)*100;
double rePer = ((double)recount/totalcount)*100;
Data newData = new Data();
Data reData = new Data();
newData.setLabel("신규방문 : " + IntegerFormat.format(newcount));
newData.setTooltext("신규방문 : " + IntegerFormat.format(newcount) + "(" + doubleFormat.format(newPer) + "%)");
newData.setValue(String.valueOf(newcount));
if(newcount > recount) {
newData.setIssliced("1");
}
data.add(newData);
reData.setLabel("재방문 : " + IntegerFormat.format(recount));
reData.setTooltext("재방문 : " + IntegerFormat.format(recount) + "(" + doubleFormat.format(rePer) + "%)");
reData.setValue(String.valueOf(recount));
if(recount > newcount) {
reData.setIssliced("1");
}
data.add(reData);
json.setChart(chart);
json.setData(data);
return json;
}
// 신규재방문자 비교 퓨전차트 JSON 형태2 (그래프)
@RequestMapping("/visitrenew/json2.vs")
@ResponseBody
public Json visitrenewJson2(@ModelAttribute("p") Parameter param) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 일별 강제 처리
param.setS_startday2(param.getS_startday());
param.setS_endday2(param.getS_endday());
param.setJoinon(SiteProperty.JOINON_DAY);
param.setJoinon2(SiteProperty.JOINON_DAY2);
param.setJoinon3(SiteProperty.JOINON_DAY3);
param.setOrderby(SiteProperty.GNOBY_DAY + " ASC");
param.setGroupby(SiteProperty.GNOBY_DAY);
// 시작일과 종료일이 같다면 기본 시작, 종료일로 넣어줌
if(param.getS_startday2().equals(param.getS_endday2())) {
param.setS_startday2(Function.getDayDateAdd(SiteProperty.DEFAULT_PROGRESS_DAY, param.getS_endday2()));
}
List<LinkedHashMap<String, Object>> list = accessDao.visitrenewSelect(param);
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
List<Data> data_list2 = new ArrayList<Data>();
String seriesname = "신규방문";
String seriesname2 = "재방문";
for(int i=0; i<list.size(); i++) {
Category category = new Category();
Data data = new Data();
Data data2 = new Data();
category.setLabel(String.valueOf(list.get(i).get("year") + "년 " + list.get(i).get("month") + "월 " + list.get(i).get("day") + "일"));
// 보여줄지 안보여줄지 체크
if(i%Math.ceil((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/SiteProperty.GRAPH_ROWS) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
data.setTooltext(category.getLabel() + " " + seriesname + " : " + IntegerFormat.format(list.get(i).get("newcnt")));
data.setValue(String.valueOf(list.get(i).get("newcnt")));
data_list.add(data);
data2.setTooltext(category.getLabel() + " " + seriesname2 + " : " + IntegerFormat.format(list.get(i).get("recnt")));
data2.setValue(String.valueOf(list.get(i).get("recnt")));
data_list2.add(data2);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname(seriesname);
dataset.setRenderas("Line");
dataset.setData(data_list);
dataset_list.add(dataset);
Dataset dataset2 = new Dataset();
dataset2.setSeriesname(seriesname2);
dataset2.setRenderas("Line");
dataset2.setData(data_list2);
dataset_list.add(dataset2);
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
return json;
}
// 순방문자
@RequestMapping("/visitpure/index.vs")
public String visitpureSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
modelmap.addAttribute("list", accessDao.visitpureSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
int totalAverage = 0; // 1주,1개월,3개월 평균
double totalPc = 0.00; // 증감율
int totalPurecnt = 0; // 신규방문수
double totalPurecntper = 0.00; // 방문율
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS2));
result.put("seriesname", getSeriesname(param.getS_pcday()));
result.put("groupby", SiteProperty.GNOBY_HOUR);
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_DAY);
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_WEEK);
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS2));
result.put("groupby", SiteProperty.GNOBY_MONTH);
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
result.put("seriesname", getSeriesname(param.getS_pcday()));
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
result.put("groupby", SiteProperty.GNOBY_YOIL);
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalPurecnt += Integer.parseInt(String.valueOf(result.get("purecnt")));
totalAverage += Integer.parseInt(String.valueOf(result.get("average")));
remind_list.add(result);
}
// 합계 증감율 구하기
if(totalAverage == 0) {
totalPc = totalPurecnt * 100;
} else {
totalPc = (((double)totalPurecnt-totalAverage)/totalAverage) * 100;
}
// 합계 방문율 구하기
if(totalPurecnt == 0) {
totalPurecntper = totalCnt * 100;
} else {
totalPurecntper = (totalPurecnt/totalCnt) * 100;
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalPurecnt", totalPurecnt);
modelmap.addAttribute("totalPurecntper", totalPurecntper);
modelmap.addAttribute("totalAverage", totalAverage);
modelmap.addAttribute("totalPc", totalPc);
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitpure/index";
}
// 순방문자 퓨전차트 JSON 형태 (그래프)
@RequestMapping("/visitpure/json.vs")
@ResponseBody
public Json visitpureJson(HttpServletRequest request) {
List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData");
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
List<Data> data_list2 = new ArrayList<Data>();
String seriesname = "";
String groupby = "";
for(int i=0; i<list.size(); i++) {
seriesname = String.valueOf(list.get(i).get("seriesname"));
groupby = String.valueOf(list.get(i).get("groupby"));
Category category = new Category();
Data data = new Data();
Data data2 = new Data();
category.setLabel(String.valueOf(list.get(i).get("label")));
// 보여줄지 안보여줄지 체크
if(i%Double.parseDouble((String.valueOf(list.get(i).get("graphCount")))) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
// 방문수
data.setTooltext(category.getLabel() + " 순방문자 : " + IntegerFormat.format(list.get(i).get("purecnt")));
data.setValue(String.valueOf(list.get(i).get("purecnt")));
data_list.add(data);
// 평균 방문수
data2.setTooltext(seriesname + " 순방문자 : " + IntegerFormat.format(list.get(i).get("average")));
data2.setValue(String.valueOf(list.get(i).get("average")));
data_list2.add(data2);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname("순방문자");
dataset.setData(data_list);
dataset_list.add(dataset);
// 요일별은 평균 못구함
if(!SiteProperty.GNOBY_YOIL.equals(groupby)) {
Dataset dataset2 = new Dataset();
dataset2.setSeriesname(seriesname);
dataset2.setRenderas("Line");
dataset2.setData(data_list2);
dataset_list.add(dataset2);
}
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData");
return json;
}
// 주요검색사이트
@RequestMapping("/visitsearch/index.vs")
public String visitsearchSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
param.setDataCount(accessDao.visitsearchCount(param)); // 비율 구하기 위한 카운트
modelmap.addAttribute("list", accessDao.visitsearchSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
double totalRatio = 0.00; // 비율
int totalNaver = 0; // 네이버 방문수
int totalDaum = 0; // 다음 방문수
int totalNate = 0; // 네이트 방문수
int totalYahoo = 0; // 야후 방문수
int totalGoogle = 0; // 구글 방문수
int totalEtc = 0; // 기타 검색엔진 방문수
int totalRest = 0; // 그외 방문수
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS2));
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS2));
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS2));
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS2));
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
}
totalNaver += Integer.parseInt(String.valueOf(result.get("navercnt")));
totalDaum += Integer.parseInt(String.valueOf(result.get("daumcnt")));
totalNate += Integer.parseInt(String.valueOf(result.get("natecnt")));
totalYahoo += Integer.parseInt(String.valueOf(result.get("yahoocnt")));
totalGoogle += Integer.parseInt(String.valueOf(result.get("googlecnt")));
totalEtc += Integer.parseInt(String.valueOf(result.get("etccnt")));
totalRest += Integer.parseInt(String.valueOf(result.get("restcnt")));
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalRatio += Double.parseDouble(String.valueOf(result.get("ratio")));
remind_list.add(result);
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalRatio", totalRatio);
modelmap.addAttribute("totalNaver", totalNaver);
modelmap.addAttribute("totalDaum", totalDaum);
modelmap.addAttribute("totalYahoo", totalYahoo);
modelmap.addAttribute("totalGoogle", totalGoogle);
modelmap.addAttribute("totalEtc", totalEtc);
modelmap.addAttribute("totalRest", totalRest);
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitsearch/index";
}
// 주요검색사이트 JSON 형태 (그래프)
@RequestMapping("/visitsearch/json.vs")
@ResponseBody
public Json visitsearchJson(HttpServletRequest request) {
List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData");
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
List<Data> data_list2 = new ArrayList<Data>();
List<Data> data_list3 = new ArrayList<Data>();
List<Data> data_list4 = new ArrayList<Data>();
List<Data> data_list5 = new ArrayList<Data>();
for(int i=0; i<list.size(); i++) {
Category category = new Category();
Data data = new Data();
Data data2 = new Data();
Data data3 = new Data();
Data data4 = new Data();
Data data5 = new Data();
category.setLabel(String.valueOf(list.get(i).get("label")));
// 보여줄지 안보여줄지 체크
if(i%Double.parseDouble((String.valueOf(list.get(i).get("graphCount")))) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
// 네이버
data.setTooltext(category.getLabel() + " 네이버 : " + IntegerFormat.format(list.get(i).get("navercnt")));
data.setValue(String.valueOf(list.get(i).get("navercnt")));
data_list.add(data);
// 다음
data2.setTooltext(category.getLabel() + " 다음 : " + IntegerFormat.format(list.get(i).get("daumcnt")));
data2.setValue(String.valueOf(list.get(i).get("daumcnt")));
data_list2.add(data2);
// 네이트
data3.setTooltext(category.getLabel() + " 네이트 : " + IntegerFormat.format(list.get(i).get("natecnt")));
data3.setValue(String.valueOf(list.get(i).get("natecnt")));
data_list3.add(data3);
// 야후
data4.setTooltext(category.getLabel() + " 야후 : " + IntegerFormat.format(list.get(i).get("yahoocnt")));
data4.setValue(String.valueOf(list.get(i).get("yahoocnt")));
data_list4.add(data4);
// 구글
data5.setTooltext(category.getLabel() + " 구글 : " + IntegerFormat.format(list.get(i).get("googlecnt")));
data5.setValue(String.valueOf(list.get(i).get("googlecnt")));
data_list5.add(data5);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname("네이버");
dataset.setRenderas("Line");
dataset.setData(data_list);
dataset_list.add(dataset);
Dataset dataset2 = new Dataset();
dataset2.setSeriesname("다음");
dataset2.setRenderas("Line");
dataset2.setData(data_list2);
dataset_list.add(dataset2);
Dataset dataset3 = new Dataset();
dataset3.setSeriesname("네이트");
dataset3.setRenderas("Line");
dataset3.setData(data_list3);
dataset_list.add(dataset3);
Dataset dataset4 = new Dataset();
dataset4.setSeriesname("야후");
dataset4.setRenderas("Line");
dataset4.setData(data_list4);
dataset_list.add(dataset4);
Dataset dataset5 = new Dataset();
dataset5.setSeriesname("구글");
dataset5.setRenderas("Line");
dataset5.setData(data_list5);
dataset_list.add(dataset5);
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData");
return json;
}
// 방문빈도
@RequestMapping("/visitfreq/index.vs")
public String visitfreqSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
param.setS_pcstartday(Function.getDayDateAdd(param.getS_pcday()-1, param.getS_startday())); // 비율 평균 시작일
param.setS_pcendday(Function.getDayDateAdd(-1, param.getS_startday())); // 비율 평균 종료일
param.setDataCount(accessDao.visitfreqCount(param)); // 비율 구하기 위한 카운트
String orderby = param.getOrderby();
// 퓨전차트에 쓰일 fix된 정렬 데이터
param.setOrderby("cnt DESC");
modelmap.addAttribute("graph", accessDao.visitfreqSelect(param));
request.getSession().setAttribute("graphData", modelmap.get("graph")); // 세션 저장 (DB 부하 때문에)
// 첫번째 추이 구하기
for(LinkedHashMap<String, Object> first : (List<LinkedHashMap<String, Object>>)modelmap.get("graph")) {
modelmap.addAttribute("firstGraph", first.get("visit"));
break;
}
// 리스트에 뿌려질 데이터
param.setOrderby(orderby);
modelmap.addAttribute("list", accessDao.visitfreqSelect(param));
int totalCnt = 0; // 방문수
double totalRatio = 0.00; // 비율
int totalAverage = 0; // 1주,1개월,3개월 평균
double totalPc = 0.00; // 증감율
int etcCnt = 0; // 기타 방문수
double etcRatio = 0.00; // 기타 비율
int etcAverage = 0; // 기타 1주,1개월,3개월 평균
double etcPc = 0.00; // 기타 증감율
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int forCount = 0;
int etcForCount = 0;
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
// 한페이지에 보여질 로우 수를 초과하면 기타로 처리
if(forCount < param.getPageRows()) {
remind_list.add(result);
} else {
etcCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
etcRatio += Double.parseDouble(String.valueOf(result.get("ratio")));
etcAverage += Integer.parseInt(String.valueOf(result.get("average")));
etcForCount++;
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalRatio += Double.parseDouble(String.valueOf(result.get("ratio")));
totalAverage += Integer.parseInt(String.valueOf(result.get("average")));
forCount++;
}
// 해당 로우수 보다 초과 할 경우 기타로 처리
if(etcForCount > 0) {
// 기타 합계 비율 구하기
etcPc = (((double)etcCnt-etcAverage)/etcAverage) * 100;
LinkedHashMap<String, Object> etcData = new LinkedHashMap<String, Object>();
etcData.put("visit", -1);
etcData.put("cnt", etcCnt);
etcData.put("ratio", etcRatio);
etcData.put("pc", etcPc);
etcData.put("average", etcAverage);
remind_list.add(etcData);
}
// 합계 비율 구하기
if(totalAverage == 0) {
totalPc = totalCnt * 100;
} else {
totalPc = (((double)totalCnt-totalAverage)/totalAverage) * 100;
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalRatio", totalRatio);
modelmap.addAttribute("totalAverage", totalAverage);
modelmap.addAttribute("totalPc", totalPc);
modelmap.addAttribute("list", remind_list);
modelmap.addAttribute("progress_orderby", SiteProperty.GNOBY_DAY + " ASC");
modelmap.addAttribute("groupby", SiteProperty.GNOBY_DAY);
return "/access/visitfreq/index";
}
// 방문빈도 추이 리스트
@RequestMapping("/visitfreq/chu_pop.vs")
public String visitfreqProgressSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 시작일과 종료일이 같다면 기본 시작, 종료일로 넣어줌
if(param.getS_startday().equals(param.getS_endday())) {
param.setS_startday(Function.getDayDateAdd(SiteProperty.DEFAULT_PROGRESS_DAY, param.getS_endday()));
}
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
modelmap.addAttribute("list", accessDao.progress_visitfreqSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
int totalConversion = 0; // 전환직전전환수
double totalCratio = 0.00; // 전환직전전환율
int totalMotive = 0; // 요청동기전환수
double totalMratio = 0.00; // 요청동기전환율
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS));
result.put("seriesname", getSeriesname(param.getS_pcday()) + " " + param.getS_progress());
result.put("groupby", SiteProperty.GNOBY_HOUR);
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
result.put("seriesname", getSeriesname(param.getS_pcday()) + " " + param.getS_progress());
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS));
result.put("groupby", SiteProperty.GNOBY_DAY);
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
result.put("seriesname", getSeriesname(param.getS_pcday()) + " " + param.getS_progress());
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS));
result.put("groupby", SiteProperty.GNOBY_WEEK);
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
result.put("seriesname", getSeriesname(param.getS_pcday()) + " " + param.getS_progress());
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS));
result.put("groupby", SiteProperty.GNOBY_MONTH);
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
result.put("seriesname", getSeriesname(param.getS_pcday()) + " " + param.getS_progress());
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
result.put("groupby", SiteProperty.GNOBY_YOIL);
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalConversion += Integer.parseInt(String.valueOf(result.get("conversion")));
totalMotive += Integer.parseInt(String.valueOf(result.get("motive")));
remind_list.add(result);
}
totalCratio = ((double)totalConversion/totalCnt) * 100;
totalMratio = ((double)totalMotive/totalCnt) * 100;
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalConversion", totalConversion);
modelmap.addAttribute("totalCratio", totalCratio);
modelmap.addAttribute("totalMotive", totalMotive);
modelmap.addAttribute("totalMratio", totalMratio);
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData2", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitfreq/chu_pop";
}
// 방문빈도 퓨전차트 JSON 형태
@RequestMapping("/visitfreq/json.vs")
@ResponseBody
public Json visitfreqJson(HttpServletRequest request) {
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
DecimalFormat doubleFormat = new DecimalFormat("#,###.##");
Json json = new Json();
Chart chart = new Chart();
List<Data> data = new ArrayList<Data>();
chart.setShowlegend("0");
int loop = 0;
int cnt = 0;
double ratio = 0.0;
for(LinkedHashMap<String, Object> fordata : (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData")) {
if(loop < SiteProperty.PIE_ROWS) { // 사이트 프로퍼티에 설정된 값보다 작으면...
if(loop == 0) {
data.add(new Data(
fordata.get("visit") + "회 방문 : " + IntegerFormat.format(fordata.get("cnt")),
fordata.get("visit") + "회 방문 : " + IntegerFormat.format(fordata.get("cnt")) + "(" + doubleFormat.format(fordata.get("ratio")) + "%)",
String.valueOf(fordata.get("cnt")),
"javascript:detailData('"+fordata.get("visit")+"');",
"1"));
} else {
data.add(new Data(
fordata.get("visit") + "회 방문 : " + IntegerFormat.format(fordata.get("cnt")),
fordata.get("visit") + "회 방문 : " + IntegerFormat.format(fordata.get("cnt")) + "(" + doubleFormat.format(fordata.get("ratio")) + "%)",
String.valueOf(fordata.get("cnt")),
"javascript:detailData('"+fordata.get("visit")+"');"));
}
} else {
cnt += Integer.valueOf(String.valueOf(fordata.get("cnt")));
ratio += Double.valueOf(String.valueOf(fordata.get("ratio")));
}
loop++;
}
if(loop >= SiteProperty.PIE_ROWS) {
data.add(new Data(
"기타 : " + IntegerFormat.format(cnt),
"기타 : " + IntegerFormat.format(cnt) + "(" + doubleFormat.format(ratio) + "%)",
String.valueOf(cnt)));
}
json.setChart(chart);
json.setData(data);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData");
return json;
}
// 방문빈도 퓨전차트 JSON 형태 (추이그래프 팝업용)
@RequestMapping("/visitfreq/json2.vs")
@ResponseBody
public Json visitfreqJson2(HttpServletRequest request) {
List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData2");
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
String seriesname = "";
for(int i=0; i<list.size(); i++) {
seriesname = String.valueOf(list.get(i).get("seriesname")) + "회방문의 방문수 추이";
Category category = new Category();
Data data = new Data();
category.setLabel(String.valueOf(list.get(i).get("label")));
// 보여줄지 안보여줄지 체크
if(i%Double.parseDouble((String.valueOf(list.get(i).get("graphCount")))) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
data.setTooltext(category.getLabel() + " " + seriesname + " : " + IntegerFormat.format(list.get(i).get("cnt")));
data.setValue(String.valueOf(list.get(i).get("cnt")));
data_list.add(data);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname(seriesname);
dataset.setRenderas("Line");
dataset.setData(data_list);
dataset_list.add(dataset);
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData2");
return json;
}
// 방문빈도 퓨전차트 JSON 형태 (추이그래프)
@RequestMapping("/visitfreq/json3.vs")
@ResponseBody
public Json visitfreqJson3(@ModelAttribute("p") Parameter param) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 시작일과 종료일이 같다면 기본 시작, 종료일로 넣어줌
if(param.getS_startday().equals(param.getS_endday())) {
param.setS_startday(Function.getDayDateAdd(SiteProperty.DEFAULT_PROGRESS_DAY, param.getS_endday()));
}
// 일별 강제 처리
param.setS_startday2(param.getS_startday());
param.setS_endday2(param.getS_endday());
param.setJoinon(SiteProperty.JOINON_DAY);
param.setJoinon2(SiteProperty.JOINON_DAY2);
param.setJoinon3(SiteProperty.JOINON_DAY3);
param.setOrderby(SiteProperty.GNOBY_DAY + " ASC");
param.setGroupby(SiteProperty.GNOBY_DAY);
List<LinkedHashMap<String, Object>> list = accessDao.progress_visitfreqSelect(param);
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
String seriesname = param.getS_progress() + "회방문의 방문수 추이";
for(int i=0; i<list.size(); i++) {
Category category = new Category();
Data data = new Data();
category.setLabel(String.valueOf(list.get(i).get("year") + "년 " + list.get(i).get("month") + "월 " + list.get(i).get("day") + "일"));
// 보여줄지 안보여줄지 체크
if(i%Math.ceil((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/SiteProperty.GRAPH_ROWS) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
data.setTooltext(category.getLabel() + " " + seriesname + " : " + IntegerFormat.format(list.get(i).get("cnt")));
data.setValue(String.valueOf(list.get(i).get("cnt")));
data_list.add(data);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname(seriesname);
dataset.setRenderas("Line");
dataset.setData(data_list);
dataset_list.add(dataset);
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
return json;
}
// 재방문간격 리스트
@RequestMapping("/visitreinterval/index.vs")
public String visitreintervalSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
param.setS_pcstartday(Function.getDayDateAdd(param.getS_pcday()-1, param.getS_startday())); // 비율 평균 시작일
param.setS_pcendday(Function.getDayDateAdd(-1, param.getS_startday())); // 비율 평균 종료일
param.setDataCount(accessDao.visitreintervalCount(param)); // 비율 구하기 위한 카운트
String orderby = param.getOrderby();
// 퓨전차트에 쓰일 fix된 정렬 데이터
param.setOrderby("cnt DESC");
modelmap.addAttribute("graph", accessDao.visitreintervalSelect(param));
request.getSession().setAttribute("graphData", modelmap.get("graph")); // 세션 저장 (DB 부하 때문에)
// 첫번째 추이 구하기
for(LinkedHashMap<String, Object> first : (List<LinkedHashMap<String, Object>>)modelmap.get("graph")) {
modelmap.addAttribute("firstGraph", first.get("freq"));
break;
}
// 리스트에 뿌려질 데이터
param.setOrderby(orderby);
modelmap.addAttribute("list", accessDao.visitreintervalSelect(param));
int totalCnt = 0; // 방문수
double totalRatio = 0.00; // 비율
int totalAverage = 0; // 1주,1개월,3개월 평균
double totalPc = 0.00; // 증감율
int etcCnt = 0; // 기타 방문수
double etcRatio = 0.00; // 기타 비율
int etcAverage = 0; // 기타 1주,1개월,3개월 평균
double etcPc = 0.00; // 기타 증감율
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int forCount = 0;
int etcForCount = 0;
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
// 한페이지에 보여질 로우 수를 초과하면 기타로 처리
if(forCount < param.getPageRows()) {
result.put("label", ReIntervalType.valueOf("TYPE" + result.get("freq")).getName());
remind_list.add(result);
} else {
etcCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
etcRatio += Double.parseDouble(String.valueOf(result.get("ratio")));
etcAverage += Integer.parseInt(String.valueOf(result.get("average")));
etcForCount++;
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalRatio += Double.parseDouble(String.valueOf(result.get("ratio")));
totalAverage += Integer.parseInt(String.valueOf(result.get("average")));
forCount++;
}
// 해당 로우수 보다 초과 할 경우 기타로 처리
if(etcForCount > 0) {
// 기타 합계 비율 구하기
etcPc = (((double)etcCnt-etcAverage)/etcAverage) * 100;
LinkedHashMap<String, Object> etcData = new LinkedHashMap<String, Object>();
etcData.put("label", -1);
etcData.put("cnt", etcCnt);
etcData.put("ratio", etcRatio);
etcData.put("pc", etcPc);
etcData.put("average", etcAverage);
remind_list.add(etcData);
}
// 합계 비율 구하기
if(totalAverage == 0) {
totalPc = totalCnt * 100;
} else {
totalPc = (((double)totalCnt-totalAverage)/totalAverage) * 100;
}
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalRatio", totalRatio);
modelmap.addAttribute("totalAverage", totalAverage);
modelmap.addAttribute("totalPc", totalPc);
modelmap.addAttribute("list", remind_list);
modelmap.addAttribute("progress_orderby", SiteProperty.GNOBY_DAY + " ASC");
modelmap.addAttribute("groupby", SiteProperty.GNOBY_DAY);
return "/access/visitreinterval/index";
}
// 재방문간격 추이 리스트
@RequestMapping("/visitreinterval/chu_pop.vs")
public String visitreintervalProgressSelect(ModelMap modelmap, @ModelAttribute("p") Parameter param, HttpServletRequest request) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 시작일과 종료일이 같다면 기본 시작, 종료일로 넣어줌
if(param.getS_startday().equals(param.getS_endday())) {
param.setS_startday(Function.getDayDateAdd(SiteProperty.DEFAULT_PROGRESS_DAY, param.getS_endday()));
}
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
param = reProcessing(param);
modelmap.addAttribute("list", accessDao.progress_visitreintervalSelect(param));
// 새로 넣을 데이터 리스트
List<LinkedHashMap<String, Object>> remind_list = new ArrayList<LinkedHashMap<String,Object>>();
int totalCnt = 0; // 방문수
int totalConversion = 0; // 전환직전전환수
double totalCratio = 0.00; // 전환직전전환율
int totalMotive = 0; // 요청동기전환수
double totalMratio = 0.00; // 요청동기전환율
// 합계 구하기
for(LinkedHashMap<String, Object> result : (List<LinkedHashMap<String, Object>>)modelmap.get("list")) {
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일 " + result.get("hour") + "시");
// 시간별은 24시간이니까 24를 곱해줘야함
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)*24)/SiteProperty.GRAPH_ROWS));
result.put("seriesname", getSeriesname(param.getS_pcday()) + ReIntervalType.valueOf("TYPE" + param.getS_progress()).getName() + "의 방문수 추이");
result.put("groupby", SiteProperty.GNOBY_HOUR);
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월 " + result.get("day") + "일");
result.put("seriesname", getSeriesname(param.getS_pcday()) + ReIntervalType.valueOf("TYPE" + param.getS_progress()).getName() + "의 방문수 추이");
// 일별은 그대로
result.put("graphCount", Math.ceil((Function.getDateDiff(param.getS_startday(), param.getS_endday())+1)/SiteProperty.GRAPH_ROWS));
result.put("groupby", SiteProperty.GNOBY_DAY);
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("week") + "주");
result.put("seriesname", getSeriesname(param.getS_pcday()) + ReIntervalType.valueOf("TYPE" + param.getS_progress()).getName() + "의 방문수 추이");
// 주별은 startday2와 endday2 필드를 이용하여 7을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/7)/SiteProperty.GRAPH_ROWS));
result.put("groupby", SiteProperty.GNOBY_WEEK);
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
result.put("label", result.get("year") + "년 " + result.get("month") + "월");
result.put("seriesname", getSeriesname(param.getS_pcday()) + ReIntervalType.valueOf("TYPE" + param.getS_progress()).getName() + "의 방문수 추이");
// 월별은 startday2와 endday2 필드를 이용하여 30을 나눔
result.put("graphCount", Math.ceil(((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/30)/SiteProperty.GRAPH_ROWS));
result.put("groupby", SiteProperty.GNOBY_MONTH);
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
result.put("label", Function.getYoil2(Integer.parseInt(String.valueOf(result.get("yoil")))) + "요일");
result.put("seriesname", getSeriesname(param.getS_pcday()) + ReIntervalType.valueOf("TYPE" + param.getS_progress()).getName() + "의 방문수 추이");
// 요일별은 이렇게 할 필요 없고 다 나오게 함
result.put("graphCount", 1.0);
result.put("groupby", SiteProperty.GNOBY_YOIL);
}
totalCnt += Integer.parseInt(String.valueOf(result.get("cnt")));
totalConversion += Integer.parseInt(String.valueOf(result.get("conversion")));
totalMotive += Integer.parseInt(String.valueOf(result.get("motive")));
remind_list.add(result);
}
totalCratio = ((double)totalConversion/totalCnt) * 100;
totalMratio = ((double)totalMotive/totalCnt) * 100;
modelmap.addAttribute("totalCnt", totalCnt);
modelmap.addAttribute("totalConversion", totalConversion);
modelmap.addAttribute("totalCratio", totalCratio);
modelmap.addAttribute("totalMotive", totalMotive);
modelmap.addAttribute("totalMratio", totalMratio);
modelmap.addAttribute("progressname", ReIntervalType.valueOf("TYPE" + param.getS_progress()).getName());
modelmap.addAttribute("list", remind_list);
request.getSession().setAttribute("graphData2", remind_list); // 세션 저장 (DB 부하 때문에)
return "/access/visitreinterval/chu_pop";
}
// 재방문간격 퓨전차트 JSON 형태
@RequestMapping("/visitreinterval/json.vs")
@ResponseBody
public Json visitreintervalJson(HttpServletRequest request) {
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
DecimalFormat doubleFormat = new DecimalFormat("#,###.##");
Json json = new Json();
Chart chart = new Chart();
List<Data> data_list = new ArrayList<Data>();
chart.setShowlegend("0");
int loop = 0;
int cnt = 0;
double ratio = 0.0;
for(LinkedHashMap<String, Object> fordata : (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData")) {
Data data = new Data();
if(loop < SiteProperty.PIE_ROWS2) { // 사이트 프로퍼티에 설정된 값보다 작으면...
if(loop == 0) {
data.setLabel(ReIntervalType.valueOf("TYPE" + String.valueOf(fordata.get("freq"))).getName() + " : " + IntegerFormat.format(fordata.get("cnt")));
data.setTooltext(ReIntervalType.valueOf("TYPE" + String.valueOf(fordata.get("freq"))).getName() + " : " + IntegerFormat.format(fordata.get("cnt")) + "(" + doubleFormat.format(fordata.get("ratio")) + "%)");
data.setValue(String.valueOf(fordata.get("cnt")));
data.setLink("javascript:detailData('"+fordata.get("freq")+"');");
data.setIssliced("1");
} else {
data.setLabel(ReIntervalType.valueOf("TYPE" + String.valueOf(fordata.get("freq"))).getName() + " : " + IntegerFormat.format(fordata.get("cnt")));
data.setTooltext(ReIntervalType.valueOf("TYPE" + String.valueOf(fordata.get("freq"))).getName() + " : " + IntegerFormat.format(fordata.get("cnt")) + "(" + doubleFormat.format(fordata.get("ratio")) + "%)");
data.setValue(String.valueOf(fordata.get("cnt")));
data.setLink("javascript:detailData('"+fordata.get("freq")+"');");
}
data_list.add(data);
} else {
cnt += Integer.valueOf(String.valueOf(fordata.get("cnt")));
ratio += Double.valueOf(String.valueOf(fordata.get("ratio")));
}
loop++;
}
if(loop >= SiteProperty.PIE_ROWS2) {
Data data = new Data();
data.setLabel("기타 : " + IntegerFormat.format(cnt));
data.setTooltext("기타 : " + IntegerFormat.format(cnt) + "(" + doubleFormat.format(ratio) + "%)");
data.setValue(String.valueOf(cnt));
data_list.add(data);
}
json.setChart(chart);
json.setData(data_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData");
return json;
}
// 재방문간격 퓨전차트 JSON 형태 (추이그래프 팝업용)
@RequestMapping("/visitreinterval/json2.vs")
@ResponseBody
public Json visitreintervalJson2(HttpServletRequest request) {
List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>) request.getSession().getAttribute("graphData2");
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
String seriesname = "";
for(int i=0; i<list.size(); i++) {
seriesname = String.valueOf(list.get(i).get("seriesname"));
Category category = new Category();
Data data = new Data();
category.setLabel(String.valueOf(list.get(i).get("label")));
// 보여줄지 안보여줄지 체크
if(i%Double.parseDouble((String.valueOf(list.get(i).get("graphCount")))) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
data.setTooltext(category.getLabel() + " " + seriesname + " : " + IntegerFormat.format(list.get(i).get("cnt")));
data.setValue(String.valueOf(list.get(i).get("cnt")));
data_list.add(data);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname(seriesname);
dataset.setRenderas("Line");
dataset.setData(data_list);
dataset_list.add(dataset);
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
// 작업이 완료되면 세션 삭제
request.getSession().removeAttribute("graphData2");
return json;
}
// 재방문간격 퓨전차트 JSON 형태 (추이그래프)
@RequestMapping("/visitreinterval/json3.vs")
@ResponseBody
public Json visitreintervalJson3(@ModelAttribute("p") Parameter param) {
param.setAlias(loginInfoProvider.get().currentUser().getAlias());
param.setSitenum(loginInfoProvider.get().currentUserDetail().getSitenum());
// 접속수 분석쪽은 한페이지당 로우수가 필요없기 때문에 최대값으로 설정
param.setPageRows(SiteProperty.MAX_ROWS);
// 시작일과 종료일이 같다면 기본 시작, 종료일로 넣어줌
if(param.getS_startday().equals(param.getS_endday())) {
param.setS_startday(Function.getDayDateAdd(SiteProperty.DEFAULT_PROGRESS_DAY, param.getS_endday()));
}
// 일별 강제 처리
param.setS_startday2(param.getS_startday());
param.setS_endday2(param.getS_endday());
param.setJoinon(SiteProperty.JOINON_DAY);
param.setJoinon2(SiteProperty.JOINON_DAY2);
param.setJoinon3(SiteProperty.JOINON_DAY3);
param.setOrderby(SiteProperty.GNOBY_DAY + " ASC");
param.setGroupby(SiteProperty.GNOBY_DAY);
List<LinkedHashMap<String, Object>> list = accessDao.progress_visitreintervalSelect(param);
DecimalFormat IntegerFormat = new DecimalFormat("#,###");
List<Category> category_list = new ArrayList<Category>();
List<Data> data_list = new ArrayList<Data>();
String seriesname = ReIntervalType.valueOf("TYPE" + param.getS_progress()).getName() + "의 방문수 추이";
for(int i=0; i<list.size(); i++) {
Category category = new Category();
Data data = new Data();
category.setLabel(String.valueOf(list.get(i).get("year") + "년 " + list.get(i).get("month") + "월 " + list.get(i).get("day") + "일"));
// 보여줄지 안보여줄지 체크
if(i%Math.ceil((Function.getDateDiff(param.getS_startday2(), param.getS_endday2())+1)/SiteProperty.GRAPH_ROWS) == 0) {
category.setShowlabel("1");
} else {
category.setShowlabel("0");
}
category_list.add(category);
data.setTooltext(category.getLabel() + " " + seriesname + " : " + IntegerFormat.format(list.get(i).get("cnt")));
data.setValue(String.valueOf(list.get(i).get("cnt")));
data_list.add(data);
}
Json json = new Json();
Chart chart = new Chart();
Categories categories = new Categories();
List<Dataset> dataset_list = new ArrayList<Dataset>();
categories.setCategory(category_list);
Dataset dataset = new Dataset();
dataset.setSeriesname(seriesname);
dataset.setRenderas("Line");
dataset.setData(data_list);
dataset_list.add(dataset);
json.setChart(chart);
json.setCategories(categories);
json.setDataset(dataset_list);
return json;
}
public String getSeriesname(int pcday) {
String returnValue = "";
SearchAverageType[] searchAverageType = SearchAverageType.values();
for(int i=0; i<searchAverageType.length; i++) {
if(searchAverageType[i].getNo() == pcday) {
returnValue = searchAverageType[i].getName();
}
}
return returnValue;
}
// 요일별, 일별, 월별, 주별, 시간별 조인 및 기타 로직 처리
public Parameter reProcessing(Parameter param) {
// 시간별
if(SiteProperty.GNOBY_HOUR.equals(param.getGroupby())) {
param.setS_interval(param.getS_pcday());
param.setS_interval2(param.getS_pcday2());
param.setS_startday2(param.getS_startday());
param.setS_endday2(param.getS_endday());
param.setJoinon(SiteProperty.JOINON_HOUR);
param.setJoinon2(SiteProperty.JOINON_HOUR2);
param.setJoinon3(SiteProperty.JOINON_HOUR3);
param.setSearch_joinon1(SiteProperty.SEARCH_JOINON_HOUR1);
param.setSearch_joinon2(SiteProperty.SEARCH_JOINON_HOUR2);
param.setSearch_joinon3(SiteProperty.SEARCH_JOINON_HOUR3);
param.setSearch_joinon4(SiteProperty.SEARCH_JOINON_HOUR4);
param.setSearch_joinon5(SiteProperty.SEARCH_JOINON_HOUR5);
param.setSearch_joinon6(SiteProperty.SEARCH_JOINON_HOUR6);
param.setSearch_joinon7(SiteProperty.SEARCH_JOINON_HOUR7);
param.setAvg_groupby(SiteProperty.GNOBY_HOUR2);
param.setAvg_where("AND hour=c.hour");
// 일별
} else if(SiteProperty.GNOBY_DAY.equals(param.getGroupby())) {
param.setS_interval(param.getS_pcday());
param.setS_interval2(param.getS_pcday2());
param.setS_startday2(param.getS_startday());
param.setS_endday2(param.getS_endday());
param.setJoinon(SiteProperty.JOINON_DAY);
param.setJoinon2(SiteProperty.JOINON_DAY2);
param.setJoinon3(SiteProperty.JOINON_DAY3);
param.setSearch_joinon1(SiteProperty.SEARCH_JOINON_DAY1);
param.setSearch_joinon2(SiteProperty.SEARCH_JOINON_DAY2);
param.setSearch_joinon3(SiteProperty.SEARCH_JOINON_DAY3);
param.setSearch_joinon4(SiteProperty.SEARCH_JOINON_DAY4);
param.setSearch_joinon5(SiteProperty.SEARCH_JOINON_DAY5);
param.setSearch_joinon6(SiteProperty.SEARCH_JOINON_DAY6);
param.setSearch_joinon7(SiteProperty.SEARCH_JOINON_DAY7);
param.setAvg_groupby(SiteProperty.GNOBY_DAY2);
param.setAvg_where("");
// 주별
} else if(SiteProperty.GNOBY_WEEK.equals(param.getGroupby())) {
if(param.getS_pcday() == -7) { // 최근 1주
param.setS_interval(1);
} else { // 최근 4주
param.setS_interval(4);
}
if(param.getS_pcday2() == -7) { // 최근 1주
param.setS_interval2(1);
} else { // 최근 4주
param.setS_interval2(4);
}
param.setS_startday2(Function.getWeekStartday(param.getS_startday()));
param.setS_endday2(Function.getWeekEndday(param.getS_endday()));
param.setJoinon(SiteProperty.JOINON_WEEK);
param.setJoinon2(SiteProperty.JOINON_WEEK2);
param.setJoinon3(SiteProperty.JOINON_WEEK3);
param.setSearch_joinon1(SiteProperty.SEARCH_JOINON_WEEK1);
param.setSearch_joinon2(SiteProperty.SEARCH_JOINON_WEEK2);
param.setSearch_joinon3(SiteProperty.SEARCH_JOINON_WEEK3);
param.setSearch_joinon4(SiteProperty.SEARCH_JOINON_WEEK4);
param.setSearch_joinon5(SiteProperty.SEARCH_JOINON_WEEK5);
param.setSearch_joinon6(SiteProperty.SEARCH_JOINON_WEEK6);
param.setSearch_joinon7(SiteProperty.SEARCH_JOINON_WEEK7);
param.setAvg_groupby(SiteProperty.GNOBY_WEEK2);
param.setAvg_where("");
// 월별
} else if(SiteProperty.GNOBY_MONTH.equals(param.getGroupby())) {
if(param.getS_pcday() == -30) { // 최근 1개월
param.setS_interval(1);
} else if(param.getS_pcday() == -60) { // 최근 2개월
param.setS_interval(2);
} else { // 최근 3개월
param.setS_interval(3);
}
if(param.getS_pcday2() == -30) { // 최근 1개월
param.setS_interval2(1);
} else if(param.getS_pcday2() == -60) { // 최근 2개월
param.setS_interval2(2);
} else { // 최근 3개월
param.setS_interval2(3);
}
param.setS_startday2(Function.getFirstDay(Integer.parseInt(param.getS_startday().substring(0,4)), Integer.parseInt(param.getS_startday().substring(5,7))));
param.setS_endday2(Function.getLastDay(Integer.parseInt(param.getS_endday().substring(0,4)), Integer.parseInt(param.getS_endday().substring(5,7))));
param.setJoinon(SiteProperty.JOINON_MONTH);
param.setJoinon2(SiteProperty.JOINON_MONTH2);
param.setJoinon3(SiteProperty.JOINON_MONTH3);
param.setSearch_joinon1(SiteProperty.SEARCH_JOINON_MONTH1);
param.setSearch_joinon2(SiteProperty.SEARCH_JOINON_MONTH2);
param.setSearch_joinon3(SiteProperty.SEARCH_JOINON_MONTH3);
param.setSearch_joinon4(SiteProperty.SEARCH_JOINON_MONTH4);
param.setSearch_joinon5(SiteProperty.SEARCH_JOINON_MONTH5);
param.setSearch_joinon6(SiteProperty.SEARCH_JOINON_MONTH6);
param.setSearch_joinon7(SiteProperty.SEARCH_JOINON_MONTH7);
param.setAvg_groupby(SiteProperty.GNOBY_MONTH2);
param.setAvg_where("");
// 요일별
} else if(SiteProperty.GNOBY_YOIL.equals(param.getGroupby())) {
param.setS_interval(param.getS_pcday());
param.setS_interval2(param.getS_pcday2());
param.setS_startday2(Function.getWeekStartday(param.getS_startday()));
param.setS_endday2(Function.getWeekEndday(param.getS_endday()));
param.setJoinon(SiteProperty.JOINON_YOIL);
param.setJoinon2(SiteProperty.JOINON_YOIL2);
param.setJoinon3(SiteProperty.JOINON_YOIL3);
param.setSearch_joinon1(SiteProperty.SEARCH_JOINON_YOIL1);
param.setSearch_joinon2(SiteProperty.SEARCH_JOINON_YOIL2);
param.setSearch_joinon3(SiteProperty.SEARCH_JOINON_YOIL3);
param.setSearch_joinon4(SiteProperty.SEARCH_JOINON_YOIL4);
param.setSearch_joinon5(SiteProperty.SEARCH_JOINON_YOIL5);
param.setSearch_joinon6(SiteProperty.SEARCH_JOINON_YOIL6);
param.setSearch_joinon7(SiteProperty.SEARCH_JOINON_YOIL7);
param.setAvg_groupby(SiteProperty.GNOBY_YOIL2);
param.setAvg_where("AND yoil=c.yoil");
// 디폴트는 시간별
} else {
param.setS_interval(param.getS_pcday());
param.setS_interval2(param.getS_pcday2());
param.setS_startday2(param.getS_startday());
param.setS_endday2(param.getS_endday());
param.setJoinon(SiteProperty.JOINON_HOUR);
param.setJoinon2(SiteProperty.JOINON_HOUR2);
param.setJoinon3(SiteProperty.JOINON_HOUR3);
param.setSearch_joinon1(SiteProperty.SEARCH_JOINON_HOUR1);
param.setSearch_joinon2(SiteProperty.SEARCH_JOINON_HOUR2);
param.setSearch_joinon3(SiteProperty.SEARCH_JOINON_HOUR3);
param.setSearch_joinon4(SiteProperty.SEARCH_JOINON_HOUR4);
param.setSearch_joinon5(SiteProperty.SEARCH_JOINON_HOUR5);
param.setSearch_joinon6(SiteProperty.SEARCH_JOINON_HOUR6);
param.setSearch_joinon7(SiteProperty.SEARCH_JOINON_HOUR7);
param.setOrderby(SiteProperty.GNOBY_HOUR + " ASC");
param.setGroupby(SiteProperty.GNOBY_HOUR);
param.setAvg_groupby(SiteProperty.GNOBY_HOUR2);
param.setAvg_where("AND hour=c.hour");
}
return param;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment