@Override public String execute() throws Exception { UserGoldLogService userGoldLogService = ServiceCacheFactory.getServiceCache().getService(UserGoldLogService.class); if (isCommit.equals("T")) { String searchUserId = super.searchUser(); // 搜索玩家的时候出错了,返回 if (super.getErroDescrip() != null) { return SUCCESS; } IPage<Object> list = userGoldLogService.findPageLogListByCondition( searchUserId, super.getStartDate(), super.getEndDate(), searchCategory, searchType, super.getToPage(), super.getPageSize()); count = userGoldLogService.countAll(1, searchUserId, super.getStartDate(), super.getEndDate()); useCount = userGoldLogService.countAll(2, searchUserId, super.getStartDate(), super.getEndDate()); if (list != null) { List<Object> ll = (List<Object>) list.getData(); for (int i = 0; i < ll.size(); i++) { Object[] arr = (Object[]) ll.get(i); UserGoldLog log = new UserGoldLog(); log.setUserId(arr[0].toString()); log.setUserName(arr[1].toString()); log.setLodoId(Integer.valueOf(arr[2].toString())); log.setUserLevel(Integer.valueOf(arr[3].toString())); log.setCategory(Integer.valueOf(arr[4].toString())); log.setType(Integer.valueOf(arr[5].toString())); log.setChangeNum(Integer.valueOf(arr[6].toString())); log.setTime( new Timestamp( DateUtil.stringtoDate(arr[7].toString(), DateUtil.FORMAT_ONE).getTime())); userGoldLogList.add(log); } super.setTotalPage(list.getTotalPage()); super.setTotalSize(list.getTotalSize()); } } return SUCCESS; }
/** 采集数据调度入口 */ @Override public void executeJob(JobExecutionContext jobExecutionContext) throws JobExecutionException { LogSystem.info("日统计开始 " + jobExecutionContext.getJobDetail().getName()); // CronTrigger cronTrigger= (CronTrigger)jobExecutionContext.getTrigger(); // String[] serverIdsArr = ((String)cronTrigger.getJobDataMap().get("serverIds")).split(","); // // 已经修正 Map<Integer, TGameServer> gameServerMap = DataSourceManager.getInstatnce().getGameServerMap(); StringBuilder serverName = new StringBuilder(); Iterator<Integer> iter = gameServerMap.keySet().iterator(); while (iter.hasNext()) { Integer key = iter.next(); TGameServer value = gameServerMap.get(key); LogSystem.info("print key = " + key + " value = " + value); serverName.append(value.getServerId() + ","); } String[] serverIdsArr = serverName.toString().split(","); Date date = new Date(); for (int i = 0; i < serverIdsArr.length; i++) { CustomerContextHolder.setSystemNum(Integer.valueOf(serverIdsArr[i])); LogSystem.info("serverId:" + serverIdsArr[i]); // LogSystem.info("cronTrigger.timezone:"+cronTrigger.getTimeZone().getID()); LogSystem.info("管理后台的时间:" + date.toString()); Date nowServerTime = DateUtil.getNowDateBySystemNum(); LogSystem.info("游戏服务器时间:" + nowServerTime.toString()); // 开服过后一天才统计数据(已经修正) Date serverOpernTime = DataSourceManager.getInstatnce() .getGameServerMap() .get(CustomerContextHolder.getSystemNum()) .getServerOpernTime(); // Date d = new Date(serverOpernTime.getTime()+24*60*60*1000); Date d = new Date(serverOpernTime.getTime()); if (nowServerTime.getTime() < d.getTime()) { LogSystem.info("还木有开服,不统计!"); continue; } // InvocationCollector invocationCollector = (InvocationCollector) // ServiceCacheFactory.getServiceCache().getBeanById("dayInvocationCollector"); // invocationCollector.invoke(date); executeOneServer(date, Integer.valueOf(serverIdsArr[i])); LogSystem.info("日统计完毕 " + jobExecutionContext.getJobDetail().getName()); } }
public String execute() { UserRegLogService userRegLogService = ServiceCacheFactory.getServiceCache().getService(UserRegLogService.class); if (DTools.isEmpty(serverIds)) { return SUCCESS; } for (String serverId : serverIds.split(",")) { CustomerContextHolder.setSystemNum(Integer.valueOf(serverId.trim())); TGameServer gameServer = DataSourceManager.getInstatnce() .getGameServerMap() .get(CustomerContextHolder.getSystemNum()); Date openDate = new Date(gameServer.getServerOpernTime().getTime()); if (DateUtil.dayDiff(regStartDate, openDate) > 0) { super.setErroDescrip("\"" + gameServer.getServerAlias() + "\"在当前注册日期还没开服!"); continue; } // 登录开始日期 // super.getStartDate(); // 登录结束日期 // super.getEndDate(); Map<String, Integer> tempMap = userRegLogService.findReLoginMap( regStartDate, regEndDate, super.getStartDate(), super.getEndDate()); // Calendar calendar = Calendar.getInstance(); // calendar.get(Calendar.DAY_OF_MONTH); // 再登录人数:在A时间段注册的人中 在B时间段登陆的人数 Integer reLoginAmount = 0; // 在A时间段注册的人中 B时间段内,各个日期登陆的人数 Map<String, Integer> dayAndAmountmap = new HashMap<String, Integer>(); Iterator<Entry<String, Integer>> ite1 = tempMap.entrySet().iterator(); while (ite1.hasNext()) { Entry<String, Integer> entry = ite1.next(); Integer count = entry.getValue(); reLoginAmount += count; String[] dayStrArr = entry.getKey().split(","); for (String dayStr : dayStrArr) { if (dayAndAmountmap.get(dayStr) == null) { dayAndAmountmap.put(dayStr, count); } else { dayAndAmountmap.put(dayStr, count + dayAndAmountmap.get(dayStr)); } } } // 每天的再登录人数(总和): 在A时间段注册的人中 B时间段内,每天登陆的人数 的总和 Integer allDayAmount = 0; Iterator<Entry<String, Integer>> ite2 = dayAndAmountmap.entrySet().iterator(); while (ite2.hasNext()) { Entry<String, Integer> entry = ite2.next(); allDayAmount += entry.getValue(); } // A时间段注册的人数 String[] dates = new String[2]; Calendar c = Calendar.getInstance(); c.setTimeInMillis(regStartDate.getTime()); dates[0] = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE) + " 00:00:00"; c.setTimeInMillis(regEndDate.getTime()); dates[1] = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE) + " 23:59:59"; int regAmount = userRegLogService.findRegUserNumInSomeTime(dates); // 当前服务器的统计数据 Map<String, Integer> serverMap = new HashMap<String, Integer>(); serverMap.put("regAmount", regAmount); serverMap.put("reLoginAmount", reLoginAmount); serverMap.put("allDayAmount", allDayAmount); map.put(gameServer.getServerAlias(), serverMap); } return SUCCESS; }
@Override public void execute(Date date) throws Exception { LogSystem.info("VIP 玩家元宝统计 Collector开始"); UserGoldLogService userGoldLogService = ServiceCacheFactory.getServiceCache().getService(UserGoldLogService.class); UserService userService = ServiceCacheFactory.getServiceCache().getService(UserService.class); VipUserDiamondStatsService vipUserDiamondStatsService = ServiceCacheFactory.getServiceCache().getService(VipUserDiamondStatsService.class); String[] dates = DateUtil.getOneDayStrArr(SystemStatsDate.YESTERDAY); List<Object> tempList = userService.findVipUser(); List<String> userList = new ArrayList<String>(); for (int i = 0; i < tempList.size(); i++) { Object objArr = (Object) tempList.get(i); Character[] cc = (Character[]) objArr; StringBuilder sb = new StringBuilder(); for (int j = 0; j < cc.length; j++) { Character c = cc[j]; sb.append(c); } userList.add(sb.toString()); } int actityCount = userService.findActityVipUser(dates, userList); Map<Integer, Integer> map1 = userGoldLogService.findEveryTypeAmountVIP(UserGoldLogCategory.RECEIVE, dates, userList); Map<Integer, Integer> map2 = userGoldLogService.findEveryTypeAmountVIP(UserGoldLogCategory.CONSUME, dates, userList); List<VipUserDiamondStats> resultList = new ArrayList<VipUserDiamondStats>(); Iterator<Integer> key1 = map1.keySet().iterator(); while (key1.hasNext()) { Integer k = key1.next(); Integer value = map1.get(k); VipUserDiamondStats stats = new VipUserDiamondStats(); stats.setSysNum(CustomerContextHolder.getSystemNum()); stats.setDate(DateUtil.getSomeDaysDiffDate(SystemStatsDate.YESTERDAY)); stats.setCount(tempList.size()); stats.setType(k); stats.setCaterory(UserGoldLogCategory.RECEIVE); stats.setDiamond(value); stats.setActityCount(actityCount); resultList.add(stats); } Iterator<Integer> key2 = map2.keySet().iterator(); while (key2.hasNext()) { Integer k = key2.next(); Integer value = map2.get(k); VipUserDiamondStats stats = new VipUserDiamondStats(); stats.setSysNum(CustomerContextHolder.getSystemNum()); stats.setDate(DateUtil.getSomeDaysDiffDate(SystemStatsDate.YESTERDAY)); stats.setCount(tempList.size()); stats.setType(k); stats.setDiamond(value); stats.setCaterory(UserGoldLogCategory.CONSUME); stats.setActityCount(actityCount); resultList.add(stats); } vipUserDiamondStatsService.saveBatch(resultList); LogSystem.info("VIP 玩家元宝统计 Collector结束"); }
@Override public String execute() { UserMallRankStatsService userMallRankStatsService = ServiceCacheFactory.getServiceCache().getService(UserMallRankStatsService.class); TTreasureConstantService treasureConstantService = ServiceCacheFactory.getServiceCache().getService(TTreasureConstantService.class); treasureIdNameMap = treasureConstantService.findMallTreasureIdNameMap(); IPage<UserMallRankStats> page = null; if (getStartDate() != null && getEndDate() != null) { page = userMallRankStatsService.findListInDate( super.getPageSize(), super.getToPage(), getStartDate(), getEndDate()); } else { page = userMallRankStatsService.findList(super.getPageSize(), super.getToPage()); } if (page != null) { List<UserMallRankStats> list = (List<UserMallRankStats>) page.getData(); if (list != null && list.size() > 0) { for (UserMallRankStats stats : list) { String date = DateUtil.dateToString(stats.getTime(), DateUtil.LONG_DATE_FORMAT); if (statsMap.containsKey(date)) { statsMap.get(date).add(stats); } else { List<UserMallRankStats> ll = new ArrayList<UserMallRankStats>(); ll.add(stats); statsMap.put(date, ll); } } } super.setTotalPage(page.getTotalPage()); super.setTotalSize(page.getTotalSize()); } if (statsMap.size() > 0) { for (List<UserMallRankStats> list : statsMap.values()) { Collections.sort( list, new Comparator<UserMallRankStats>() { @Override public int compare(UserMallRankStats o1, UserMallRankStats o2) { // TODO Auto-generated method stub if (o1.getRank().intValue() > o2.getRank().intValue()) { return 1; } else { return -1; } } }); } } // 排序 if (statsMap.size() > 0) { mappingList = new ArrayList<Map.Entry<String, List<UserMallRankStats>>>(statsMap.entrySet()); Collections.sort( mappingList, new Comparator<Map.Entry<String, List<UserMallRankStats>>>() { public int compare( Map.Entry<String, List<UserMallRankStats>> mapping1, Map.Entry<String, List<UserMallRankStats>> mapping2) { return mapping2.getKey().compareTo(mapping1.getKey()); } }); } return SUCCESS; }