/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.plugin.visit.manager.service; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ewcms.common.lang.EmptyUtil; import com.ewcms.plugin.visit.manager.dao.VisitDAO; import com.ewcms.plugin.visit.manager.vo.SummaryVo; import com.ewcms.plugin.visit.util.ChartVisitUtil; import com.ewcms.plugin.visit.util.DateTimeUtil; import com.ewcms.plugin.visit.util.NumberUtil; @Service public class SummaryService implements SummaryServiceable { @Autowired private VisitDAO visitDAO; @Override public String findFirstDate(Integer siteId) { String firstDate = visitDAO.findFirstDate(siteId); if (EmptyUtil.isStringEmpty(firstDate)) return DateTimeUtil.getDateToString(DateTimeUtil.getCurrent()); return firstDate; } @Override public Integer findDays(Integer siteId) { String firstAddDate = visitDAO.findFirstDate(siteId); if (EmptyUtil.isStringEmpty(firstAddDate)) return 1; Date first = DateTimeUtil.getStringToDate(firstAddDate); Date current = DateTimeUtil.getCurrent(); return (int) ((current.getTime() - first.getTime())/(24*60*60*1000)) + 1; } @Override public List<SummaryVo> findSummaryTable(Integer siteId) { List<SummaryVo> list = new ArrayList<SummaryVo>(); Date current = new Date(Calendar.getInstance().getTime().getTime()); Calendar calendar = Calendar.getInstance(); calendar.setTime(current); Integer hour = calendar.get(Calendar.HOUR_OF_DAY); SummaryVo currentVo = assignInDay("今日", siteId, current); list.add(currentVo); Date tomorrow = DateTimeUtil.getPreviousDay(current); SummaryVo tomorrowHour = assignInHour("昨日此时", siteId, tomorrow, hour); list.add(tomorrowHour); SummaryVo currentHour = assignInHour("今日预计", siteId, current, hour); list.add(currentHour); SummaryVo tomorrowVo = assignInDay("昨日", siteId, tomorrow); list.add(tomorrowVo); List<String> weekList = DateTimeUtil.getThisWeek(); SummaryVo weekVo = assignInDateInterval("本周", siteId, weekList); list.add(weekVo); List<String> monthMap = DateTimeUtil.getThisMonth(); SummaryVo monthVo = assignInDateInterval("本月", siteId, monthMap); list.add(monthVo); SummaryVo avgVo = new SummaryVo(); avgVo.setName("平均"); String startDate = visitDAO.findFirstDate(siteId); if (startDate != ""){ String endDate = DateTimeUtil.getDateToString(current); List<String> allMap = DateTimeUtil.getDateArea(startDate, endDate); SummaryVo allVo = assignInDateInterval("全部", siteId, allMap); list.add(allVo); Integer day = endDate.compareTo(startDate) + 1; avgVo.setIp(allVo.getIp()/day); avgVo.setPv(allVo.getPv()/day); avgVo.setUv(allVo.getUv()/day); avgVo.setAvgTime(""); avgVo.setRvRate(""); } list.add(avgVo); SummaryVo maxVo = new SummaryVo(); SummaryVo betideVo = new SummaryVo(); maxVo.setName("最高"); betideVo.setName(""); Map<Date, Long> maxIpMap = visitDAO.findIpMaxValue(siteId); Map<Date, Long> maxPvMap = visitDAO.findPvMaxValue(siteId); Map<Date, Long> maxUvMap = visitDAO.findUvMaxValue(siteId); if (!maxIpMap.isEmpty()){ Date ipDate = (Date) maxIpMap.keySet().toArray()[0]; betideVo.setBetideIp("发生在:" + DateTimeUtil.getDateToString(ipDate)); Long maxIp = maxIpMap.get(ipDate); maxVo.setIp(maxIp); } if (!maxUvMap.isEmpty()){ Date uvDate = (Date) maxUvMap.keySet().toArray()[0]; betideVo.setBetideUv("发生在:" + DateTimeUtil.getDateToString(uvDate)); Long maxUv = maxUvMap.get(uvDate); maxVo.setUv(maxUv); } if (!maxPvMap.isEmpty()){ Date pvDate = (Date) maxPvMap.keySet().toArray()[0]; betideVo.setBetidePv("发生在:" + DateTimeUtil.getDateToString(pvDate)); Long maxPv = maxPvMap.get(pvDate); maxVo.setPv(maxPv); } list.add(maxVo); list.add(betideVo); return list; } @Override public String findSummaryReport(String startDate, String endDate, Integer labelCount, Integer siteId) { List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> mapIP = findSummaryIp(categories, siteId); dataSet.put("IP", mapIP); Map<String, Long> mapUV = findSummaryUv(categories, siteId); dataSet.put("UV", mapUV); Map<String, Long> mapPV = findSummaryPv(categories, siteId); dataSet.put("PV", mapPV); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public List<SummaryVo> findSiteTable(String startDate, String endDate, Integer siteId) { List<SummaryVo> list = new ArrayList<SummaryVo>(); List<String> dateArea = DateTimeUtil.getDateArea(startDate, endDate); SummaryVo vo = null; for (String dateValue : dateArea){ Date date = DateTimeUtil.getStringToDate(dateValue); vo = assignInDay(dateValue, siteId, date); list.add(vo); } return list; } @Override public List<SummaryVo> findLastTable(String startDate, String endDate, Integer siteId) { return visitDAO.findAcInDateInterval(DateTimeUtil.getStringToDate(startDate), DateTimeUtil.getStringToDate(endDate), siteId); } @Override public List<SummaryVo> findHourTable(String startDate, String endDate, Integer siteId) { List<SummaryVo> list = new ArrayList<SummaryVo>(); List<String> dateArea = DateTimeUtil.getDateArea(startDate, endDate); list.add(null); SummaryVo vo = null; Long sumIp = 0L, sumUv = 0L, sumPv = 0L, sumRv = 0L; for (int i = 0; i <= 23; i++){ String start = "" + i + ":00"; String end = "" + i + ":59"; vo = new SummaryVo(); vo.setName(start + " —— " + end); Long countIp = 0L, countUv = 0L, countPv = 0L, countRv = 0L; for (String dateValue : dateArea){ Date date = DateTimeUtil.getStringToDate(dateValue); countIp += visitDAO.findIpCountInDayByHour(date, i, siteId); countUv += visitDAO.findUvCountInDayByHour(date, i, siteId); countPv += visitDAO.findPvCountInDayByHour(date, i, siteId); countRv += visitDAO.findRvCountInDayByHour(date, i, siteId); } vo.setIp(countIp); vo.setUv(countUv); vo.setPv(countPv); vo.setRv(countRv); list.add(vo); sumIp += countIp; sumUv += countUv; sumPv += countPv; sumRv += countRv; } SummaryVo sumVo = new SummaryVo(); sumVo.setName("总计"); sumVo.setIp(sumIp); sumVo.setUv(sumUv); sumVo.setPv(sumPv); sumVo.setRv(sumRv); sumVo.setPvRate("100.00%"); list.set(0, sumVo); for(int i = 1; i < list.size(); i++){ vo = list.get(i); if (vo == null) continue; vo.setPvRate(NumberUtil.percentage(vo.getPv(), sumPv)); list.set(i, vo); } return list; } @Override public String findHourReport(String startDate, String endDate, Integer labelCount, Integer siteId) { List<String> categories = DateTimeUtil.getTimeArea(); List<SummaryVo> summaryVos = new ArrayList<SummaryVo>(); List<String> dateArea = DateTimeUtil.getDateArea(startDate, endDate); SummaryVo vo = null; for (int i = 0; i <= 23; i++){ vo = new SummaryVo(); vo.setName(String.format("%02d", i)); Long countIp = 0L, countUv = 0L, countPv = 0L, countRv = 0L; for (String dateValue : dateArea){ Date date = DateTimeUtil.getStringToDate(dateValue); countIp += visitDAO.findIpCountInDayByHour(date, i, siteId); countUv += visitDAO.findUvCountInDayByHour(date, i, siteId); countPv += visitDAO.findPvCountInDayByHour(date, i, siteId); countRv += visitDAO.findRvCountInDayByHour(date, i, siteId); } vo.setIp(countIp); vo.setUv(countUv); vo.setPv(countPv); vo.setRv(countRv); summaryVos.add(vo); } Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> mapIp = new LinkedHashMap<String, Long>(); Map<String, Long> mapUv = new LinkedHashMap<String, Long>(); Map<String, Long> mapPv = new LinkedHashMap<String, Long>(); for (SummaryVo summaryVo : summaryVos){ mapIp.put(summaryVo.getName(), summaryVo.getIp()); mapUv.put(summaryVo.getName(), summaryVo.getUv()); mapPv.put(summaryVo.getName(), summaryVo.getPv()); } dataSet.put("IP", mapIp); dataSet.put("UV", mapUv); dataSet.put("PV", mapPv); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public List<SummaryVo> findEntranceTable(String startDate, String endDate, Integer siteId) { List<SummaryVo> list = visitDAO.findEntranceInDateInterval(DateTimeUtil.getStringToDate(startDate), DateTimeUtil.getStringToDate(endDate), siteId); Long sum = visitDAO.findUrlCountInDateInterval(DateTimeUtil.getStringToDate(startDate), DateTimeUtil.getStringToDate(endDate), siteId); return conversion(list, sum); } @Override public String findEmtranceTrendReport(String url, String startDate, String endDate, Integer labelCount, Integer siteId) { List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> dataValue = new LinkedHashMap<String, Long>(); for (String category : categories){ Long countPv = visitDAO.findUrlCountInDayByUrl(DateTimeUtil.getStringToDate(category), url, siteId); dataValue.put(category, countPv); } dataSet.put(url, dataValue); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public List<SummaryVo> findExitTable(String startDate, String endDate, Integer siteId) { List<SummaryVo> list = visitDAO.findExitInDateIntervalByEvent(DateTimeUtil.getStringToDate(startDate), DateTimeUtil.getStringToDate(endDate), siteId); Long sum = visitDAO.findUrlCountInDateIntervalByEvent(DateTimeUtil.getStringToDate(startDate), DateTimeUtil.getStringToDate(endDate), siteId); return conversion(list, sum); } @Override public String findExitTrendReport(String url, String startDate, String endDate, Integer labelCount, Integer siteId) { List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> dataValue = new LinkedHashMap<String, Long>(); for (String category : categories){ Long count = visitDAO.findUrlCountInDayByUrlAndEvent(DateTimeUtil.getStringToDate(category), url, siteId); dataValue.put(category, count); } dataSet.put(url, dataValue); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public List<SummaryVo> findHostTable(String startDate, String endDate, Integer siteId) { List<SummaryVo> list = visitDAO.findHostInDateInterval(DateTimeUtil.getStringToDate(startDate), DateTimeUtil.getStringToDate(endDate), siteId); Long sum = visitDAO.findPvSumInDateInterval(DateTimeUtil.getStringToDate(startDate), DateTimeUtil.getStringToDate(endDate), siteId); if (list == null) return new ArrayList<SummaryVo>(0); if (sum == 0) return list; SummaryVo vo = null; for (int i = 0; i < list.size(); i++){ vo = list.get(i); vo.setPvRate(NumberUtil.percentage(vo.getSumPv().longValue(), sum.longValue())); list.set(i, vo); } return list; } @Override public String findHostTrendReport(String host, String startDate, String endDate, Integer labelCount, Integer siteId) { List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> dataValue = new LinkedHashMap<String, Long>(); for (String category : categories){ Long countPv = visitDAO.findPvSumInDayByHost(DateTimeUtil.getStringToDate(category), host, siteId); dataValue.put(category, countPv); } dataSet.put(host, dataValue); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public String findHostReport(String startDate, String endDate, Integer siteId) { List<SummaryVo> list = visitDAO.findHostInDateInterval(DateTimeUtil.getStringToDate(startDate), DateTimeUtil.getStringToDate(endDate), siteId); Map<String, Long> dataSet = new LinkedHashMap<String, Long>(); for (SummaryVo vo : list){ dataSet.put(vo.getName(), vo.getSumPv()); } return ChartVisitUtil.getPie3DChart(dataSet); } @Override public List<SummaryVo> findCountryTable(String startDate, String endDate, Integer siteId) { Date start = DateTimeUtil.getStringToDate(startDate); Date end = DateTimeUtil.getStringToDate(endDate); List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); List<String> countries = visitDAO.findCountryInDateInterval(start, end, siteId); List<SummaryVo> summarys = new ArrayList<SummaryVo>(); Long sumPv = visitDAO.findPvSumInDateInterval(start, end, siteId); SummaryVo vo = null; for (String country : countries){ vo = new SummaryVo(); Long countPv = 0L, countUv = 0L, countIp = 0L; for (String category : categories){ Date categoryDate = DateTimeUtil.getStringToDate(category); countPv += visitDAO.findPvSumInDayByCountry(categoryDate, country, siteId); countUv += visitDAO.findUvCountInDayByCountry(categoryDate, country, siteId); countIp += visitDAO.findIpCountInDayByCountry(categoryDate, country, siteId); } vo.setIp(countIp); vo.setUv(countUv); vo.setPv(countPv); vo.setPvRate(NumberUtil.percentage(countPv.longValue(), sumPv.longValue())); vo.setCountry(country); summarys.add(vo); } Collections.sort(summarys, new SummaryVoPvDescComparator()); return summarys; } @Override public String findCountryReport(String startDate, String endDate, Integer siteId) { List<SummaryVo> list = findCountryTable(startDate, endDate, siteId); Map<String, Long> dataSet = new LinkedHashMap<String, Long>(); for (SummaryVo vo : list){ dataSet.put(vo.getCountry(), vo.getPv()); } return ChartVisitUtil.getPie3DChart(dataSet); } @Override public List<SummaryVo> findProvinceTable(String startDate, String endDate, String country, Integer siteId){ Date start = DateTimeUtil.getStringToDate(startDate); Date end = DateTimeUtil.getStringToDate(endDate); List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); List<String> provinces = visitDAO.findProvinceInDateIntervalByCountry(start, end, country, siteId); List<SummaryVo> summarys = new ArrayList<SummaryVo>(); Long sumPv = visitDAO.findPvSumInDateIntervalByCountry(start, end, country, siteId); SummaryVo vo = null; for (String province : provinces){ vo = new SummaryVo(); Long countPv = 0L, countUv = 0L, countIp = 0L; for (String category : categories){ Date date = DateTimeUtil.getStringToDate(category); countPv += visitDAO.findPvSumInDayByCountryAndProvince(date, country, province, siteId); countUv += visitDAO.findUvCountInDayByCountryAndProvince(date, country, province, siteId); countIp += visitDAO.findIpCountInDayByCountryAndProvince(date, country, province, siteId); } vo.setIp(countIp); vo.setUv(countUv); vo.setPv(countPv); vo.setPvRate(NumberUtil.percentage(countPv.longValue(), sumPv.longValue())); vo.setProvince(province); summarys.add(vo); } Collections.sort(summarys, new SummaryVoPvDescComparator()); return summarys; } @Override public String findProvinceReport(String startDate, String endDate, String country, Integer siteId){ List<SummaryVo> list = findProvinceTable(startDate, endDate, country, siteId); Map<String, Long> dataSet = new LinkedHashMap<String, Long>(); for (SummaryVo vo : list){ dataSet.put(vo.getProvince(), vo.getPv().longValue()); } return ChartVisitUtil.getPie3DChart(dataSet); } @Override public List<SummaryVo> findCityTable(String startDate, String endDate, String country, String province, Integer siteId){ Date start = DateTimeUtil.getStringToDate(startDate); Date end = DateTimeUtil.getStringToDate(endDate); List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); List<String> citys = visitDAO.findProvinceInDateIntervalByCountryAndProvince(start, end, country, province, siteId); List<SummaryVo> summarys = new ArrayList<SummaryVo>(); Long sumPv = visitDAO.findPvSumInDateIntervalByCountryAndProvince(start, end, country, province, siteId); SummaryVo vo = null; for (String city : citys){ vo = new SummaryVo(); Long countPv = 0L, countUv = 0L, countIp = 0L; for (String category : categories){ Date date = DateTimeUtil.getStringToDate(category); countPv += visitDAO.findPvSumInDayByCountryAndProvinceAndCity(date, country, province, city, siteId); countUv += visitDAO.findUvCountInDayByCountryAndProvinceAndCity(date, country, province, city, siteId); countIp += visitDAO.findIpCountInDayByCountryAndProvinceAndCity(date, country, province, city, siteId); } vo.setIp(countIp); vo.setUv(countUv); vo.setPv(countPv); vo.setPvRate(NumberUtil.percentage(countPv.longValue(), sumPv.longValue())); vo.setCity(city); summarys.add(vo); } Collections.sort(summarys, new SummaryVoPvDescComparator()); return summarys; } @Override public String findCityReport(String startDate, String endDate, String country, String province, Integer siteId){ List<SummaryVo> list = findCityTable(startDate, endDate, country, province, siteId); Map<String, Long> dataSet = new LinkedHashMap<String, Long>(); for (SummaryVo vo : list){ dataSet.put(vo.getCity(), vo.getPv().longValue()); } return ChartVisitUtil.getPie3DChart(dataSet); } @Override public String findCountryTrendReport(String startDate, String endDate, String country, Integer labelCount, Integer siteId) { List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> dataValuePv = new LinkedHashMap<String, Long>(); Map<String, Long> dataValueUv = new LinkedHashMap<String, Long>(); Map<String, Long> dataValueIp = new LinkedHashMap<String, Long>(); for (String category : categories){ Long countPv = visitDAO.findPvSumInDayByCountry(DateTimeUtil.getStringToDate(category), country, siteId); dataValuePv.put(category, countPv); Long countUv = visitDAO.findUvCountInDayByCountry(DateTimeUtil.getStringToDate(category), country, siteId); dataValueUv.put(category, countUv); Long countIp = visitDAO.findIpCountInDayByCountry(DateTimeUtil.getStringToDate(category), country, siteId); dataValueIp.put(category, countIp); } dataSet.put("PV", dataValuePv); dataSet.put("UV", dataValueUv); dataSet.put("IP", dataValueIp); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public String findProvinceTrendReport(String startDate, String endDate, String country, String province, Integer labelCount, Integer siteId){ List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> dataValuePv = new LinkedHashMap<String, Long>(); Map<String, Long> dataValueUv = new LinkedHashMap<String, Long>(); Map<String, Long> dataValueIp = new LinkedHashMap<String, Long>(); for (String category : categories){ Long countPv = visitDAO.findPvSumInDayByCountryAndProvince(DateTimeUtil.getStringToDate(category), country, province, siteId); dataValuePv.put(category, countPv); Long countUv = visitDAO.findUvCountInDayByCountryAndProvince(DateTimeUtil.getStringToDate(category), country, province, siteId); dataValueUv.put(category, countUv); Long countIp = visitDAO.findIpCountInDayByCountryAndProvince(DateTimeUtil.getStringToDate(category), country, province, siteId); dataValueIp.put(category, countIp); } dataSet.put("PV", dataValuePv); dataSet.put("UV", dataValueUv); dataSet.put("IP", dataValueIp); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public String findCityTrendReport(String startDate, String endDate, String country, String province, String city, Integer labelCount, Integer siteId){ List<String> categories = DateTimeUtil.getDateArea(startDate, endDate); Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> dataValuePv = new LinkedHashMap<String, Long>(); Map<String, Long> dataValueUv = new LinkedHashMap<String, Long>(); Map<String, Long> dataValueIp = new LinkedHashMap<String, Long>(); for (String category : categories){ Long countPv = visitDAO.findPvSumInDayByCountryAndProvinceAndCity(DateTimeUtil.getStringToDate(category), country, province, city, siteId); dataValuePv.put(category, countPv); Long countUv = visitDAO.findUvCountInDayByCountryAndProvinceAndCity(DateTimeUtil.getStringToDate(category), country, province, city, siteId); dataValueUv.put(category, countUv); Long countIp = visitDAO.findIpCountInDayByCountryAndProvinceAndCity(DateTimeUtil.getStringToDate(category), country, province, city, siteId); dataValueIp.put(category, countIp); } dataSet.put("PV", dataValuePv); dataSet.put("UV", dataValueUv); dataSet.put("IP", dataValueIp); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public String findOnlineReport(String startDate, String endDate, Integer labelCount, Integer siteId) { List<String> categories = DateTimeUtil.getTimeArea(); List<String> dateArea = DateTimeUtil.getDateArea(startDate, endDate); Map<String, Map<String, Long>> dataSet = new LinkedHashMap<String, Map<String, Long>>(); Map<String, Long> mapFive = new LinkedHashMap<String, Long>(); Map<String, Long> mapTen = new LinkedHashMap<String, Long>(); Map<String, Long> mapFifteen = new LinkedHashMap<String, Long>(); for (int i = 0; i <= 23; i++){ String hour = String.format("%02d", i); Long countFive = 0L, countTen = 0L, countFifteen = 0L; for (String dateValue : dateArea){ Date date = DateTimeUtil.getStringToDate(dateValue); List<Long> stickTimes = visitDAO.findStInHour(date, i, siteId); for (Long stickTime : stickTimes){ if (stickTime <= 5*60) countFive = countFive + 1; else if (stickTime > 5*60 && stickTime <= 10*60) countTen = countTen + 1; else countFifteen = countFifteen + 1; } } mapFive.put(hour, countFive); mapTen.put(hour, countTen); mapFifteen.put(hour, countFifteen); } dataSet.put("5分钟", mapFive); dataSet.put("10分钟", mapTen); dataSet.put("15分钟", mapFifteen); return ChartVisitUtil.getLine2DChart(categories, dataSet, labelCount); } @Override public List<SummaryVo> findOnlineTable(String startDate, String endDate, Integer siteId) { List<SummaryVo> list = new ArrayList<SummaryVo>(); List<String> dateArea = DateTimeUtil.getDateArea(startDate, endDate); SummaryVo vo = null; for (int i = 0; i <= 23; i++){ String start = "" + i + ":00"; String end = "" + i + ":59"; Integer countFive = 0, countTen = 0, countFifteen = 0; for (String dateValue : dateArea){ Date date = DateTimeUtil.getStringToDate(dateValue); List<Long> stickTimes = visitDAO.findStInHour(date, i, siteId); for (Long stickTime : stickTimes){ if (stickTime <= 5*60) countFive = countFive + 1; else if (stickTime > 5*60 && stickTime <= 10*60) countTen = countTen + 1; else countFifteen = countFifteen + 1; } } vo = new SummaryVo(start + " —— " + end, countFive, countTen, countFifteen); list.add(vo); } return list; } private Map<String, Long> findSummaryIp(List<String> categories, Integer siteId){ Map<String, Long> result = new LinkedHashMap<String, Long>(); for (String category : categories){ Date date = DateTimeUtil.getStringToDate(category); Long value = visitDAO.findIpCountInDay(date, siteId); result.put(category, value); } return result; } private Map<String, Long> findSummaryPv(List<String> categories, Integer siteId){ Map<String, Long> result = new LinkedHashMap<String, Long>(); for (String category : categories){ Date date = DateTimeUtil.getStringToDate(category); Long value = visitDAO.findPvCountInDay(date, siteId); result.put(category, value); } return result; } private Map<String, Long> findSummaryUv(List<String> categories, Integer siteId){ Map<String, Long> result = new LinkedHashMap<String, Long>(); for (String category : categories){ Date date = DateTimeUtil.getStringToDate(category); Long value = visitDAO.findUvCountInDay(date, siteId); result.put(category, value); } return result; } private SummaryVo assignInDay(String name, Integer siteId, Date date){ SummaryVo vo = new SummaryVo(); vo.setName(name); Long countIp = visitDAO.findIpCountInDay(date, siteId); vo.setIp(countIp); Long countUv = visitDAO.findUvCountInDay(date, siteId); vo.setUv(countUv); Long countPv = visitDAO.findPvCountInDay(date, siteId); vo.setPv(countPv); Long countSt = visitDAO.findStCountInDay(date, siteId); Long sumSt = visitDAO.findStSumInDay(date, siteId); Long avgTime = (countSt == 0 ? 0 : sumSt/countSt); vo.setAvgTime(Long.toString(avgTime)); Long countRv = visitDAO.findRvCountInDay(date, siteId); vo.setRv(countRv); Long count = visitDAO.findAcCountInDay(date, siteId); vo.setRvRate(NumberUtil.percentage(countRv.longValue(), count.longValue())); return vo; } private SummaryVo assignInHour(String name, Integer siteId, Date date, Integer hour){ SummaryVo vo = new SummaryVo(); vo.setName(name); Long countIp = 0L, countUv = 0L, countPv = 0L; for (int i = 0; i <= hour; i++){ countIp += visitDAO.findIpCountInDayByHour(date, i, siteId); countUv += visitDAO.findUvCountInDayByHour(date, i, siteId); countPv += visitDAO.findPvCountInDayByHour(date, i, siteId); } vo.setIp(countIp); vo.setPv(countPv); vo.setUv(countUv); return vo; } private SummaryVo assignInDateInterval(String name, Integer siteId, List<String> dateArea){ SummaryVo vo = new SummaryVo(); vo.setName(name); Long countIp = 0L, countUv = 0L, countPv = 0L, avgTime = 0L, countRv = 0L, count = 0L; for(String dateValue : dateArea){ Date date = DateTimeUtil.getStringToDate(dateValue); countIp += visitDAO.findIpCountInDay(date, siteId); countUv += visitDAO.findUvCountInDay(date, siteId); countPv += visitDAO.findPvCountInDay(date, siteId); Long sumSt = visitDAO.findStSumInDay(date, siteId); Long countSt = visitDAO.findStCountInDay(date, siteId); avgTime = avgTime + (countSt == 0 ? 0 : sumSt / countSt); countRv += visitDAO.findRvCountInDay(date, siteId); count += visitDAO.findAcCountInDay(date, siteId); } vo.setIp(countIp); vo.setPv(countPv); vo.setUv(countUv); vo.setAvgTime(Long.toString(avgTime)); vo.setRv(countRv); vo.setRvRate(NumberUtil.percentage(countRv, count)); return vo; } private List<SummaryVo> conversion(List<SummaryVo> list, Long sum){ if (list == null) return new ArrayList<SummaryVo>(0); if (sum == 0) return list; SummaryVo vo = null; for (int i = 0; i < list.size(); i++){ vo = list.get(i); vo.setEeRate(NumberUtil.percentage(vo.getEeCount(), sum)); list.set(i, vo); } return list; } class SummaryVoPvDescComparator implements Comparator<SummaryVo>{ @Override public int compare(SummaryVo o1, SummaryVo o2) { if (o1.getPv() < o2.getPv()){ return 1; }else{ if (o1.getPv() == o2.getPv()) return 0; else return -1; } } } }