Created
January 30, 2012 05:45
-
-
Save zpzgzerg/1702783 to your computer and use it in GitHub Desktop.
비젠웹로그 일부분
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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