package com.group.service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import javax.xml.bind.annotation.XmlElementDecl.GLOBAL; import com.data.bean.AccountBean; import com.data.bean.GroupBean; import com.data.bean.GroupMemberBean; import com.data.cache.AccountCache; import com.data.cache.GroupCache; import com.data.cache.GroupMemberCache; import com.data.util.ConsumeCode; import com.data.util.CountUtil; import com.data.util.ErrorCode; import com.data.util.Utility; import com.taurus.core.entity.ITArray; import com.taurus.core.entity.ITObject; import com.taurus.core.entity.TArray; import com.taurus.core.entity.TObject; import com.taurus.core.plugin.database.DataBase; import com.taurus.core.plugin.redis.Redis; import com.taurus.core.plugin.redis.RedisLock; import com.taurus.core.util.DateUtils; import com.taurus.core.util.Logger; import com.taurus.core.util.StringUtil; import com.taurus.web.WebException; import jdk.nashorn.internal.objects.Global; import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; public class GroupLogService { private static final Logger log = Logger.getLogger(GroupLogService.class); // 体力值变化 private static final int CHOOSE_CHAGE = 1; // 操作上分 private static final int CHOOSE_UPPER = 2; // 操作下分 private static final int CHOOSE_SUB = 4; // 抽水 private static final int CHOOSE_PUMP = 8; // 奖励 private static final int CHOOSE_RWARD = 16; // 转账 private static final int CHOOSE_TRADE = 32; // 提取 private static final int CHOOSE_TAKE_REWARD = 64; // 洗牌 private static final int CHOOSE_XIPAI = 128; private static final String redisdb = "group1_db13"; /** * 上下分记录类型 */ private static final int[] MGRLOG_TYPE = { ConsumeCode.HP_MGR_UPPER, ConsumeCode.HP_MGR_SUB, ConsumeCode.HP_PARTNER_UPPER, ConsumeCode.HP_PARTNER_SUB }; /** * 获取成员排行 * * @param groupId * @param pid * @param limit * @param num * @param beginTime * @param endTime * @return * @throws Exception */ public static final ITObject getMemberRank(int groupId, int uid, int pid, int type, int limit, int num, int beginTime, int endTime) throws Exception { ITObject obj1 = TObject.newInstance(); GroupMemberBean mng_bean = GroupCache.getMember(groupId, uid); if (mng_bean == null) { throw new WebException(ErrorCode.GROUP_NOT_MEMBER); } int mgn_partner = mng_bean.partnerLev; int mgn_lev = mng_bean.lev; String strGodsList = null; Set godsList = Redis.use("group1_db1").smembers("gods"); Jedis jedis1 = Redis.use("group1_db1").getJedis(); boolean findok = false; try { if (!godsList.isEmpty()) { for (String mem : godsList) { String havemems = jedis1.hget("gods_super", mem); if (!StringUtil.isNotEmpty(havemems)) { // 判断是否是超级号 if (strGodsList == null) { strGodsList = mem; } else { strGodsList += "," + mem; } } } if (!strGodsList.isEmpty()) { strGodsList = "(" + strGodsList + ")"; findok = true; } } } finally { jedis1.close(); } // log.info("getMemberRank strGodsList:"+strGodsList+" mgn_partner:"+mgn_partner // + " mgn_lev:"+mgn_lev); // if (mgn_lev == 1 && mgn_partner == 0) { String sql = String.format( "SELECT uid,SUM(win) AS win,SUM(round) as round,SUM(score) as score FROM group_member_log WHERE groupId = %s ", groupId); if (pid > 0) { sql = sql + " AND pid =" + pid; } if (findok) { sql = sql + " AND uid not in " + strGodsList; } if (type == 0) { sql = sql + String.format(" AND time >=%s AND time <%s GROUP BY uid ORDER BY round DESC limit %s,%s", beginTime, endTime, limit, num); } else if (type == 1) { sql = sql + String.format(" AND time >=%s AND time <%s GROUP BY uid ORDER BY score DESC limit %s,%s", beginTime, endTime, limit, num); } // log.info("getMemberRank sql:"+sql); ITArray arr = DataBase.use().executeQueryByTArray(sql); for (int i = 0; i < arr.size(); ++i) { ITObject obj = arr.getTObject(i); AccountBean acc = AccountCache.getAccount(obj.getInt("uid")); obj.putString("nick", acc.nick); obj.putString("portrait", acc.portrait); } obj1.putTArray("ranks", arr); String sql2 = String.format( "select count(uid) as num from group_member_log where groupId = %s and round > 0 and time >=%s AND time <%s ", groupId, beginTime, endTime); if (findok) { sql2 = sql2 + " and uid not in " + strGodsList; } // log.info("getMemberRank sql2:"+sql2); int allActiveNum = 0; ITArray arr2 = DataBase.use().executeQueryByTArray(sql2); if (arr2.size() > 0) { ITObject obj = arr2.getTObject(0); allActiveNum = obj.getLong("num").intValue(); } obj1.putInt("allActiveNum", allActiveNum); // } obj1.putInt("limit", limit); return obj1; } /** * 获取战绩列表 * * @param platform * @param groupId * @param limit * @param num * @return */ public static ITObject getPersonRecords(String platform, int groupId, int timeType, int beginTime, int endTime, int limit, int num, int qid, int uid) throws Exception { String qid_sql = StringUtil.Empty; qid_sql = "and uid=" + qid; ITArray militaryList = TArray.newInstance(); ITObject obj1 = TObject.newInstance(); if (timeType == 0) { beginTime = DateUtils.getBeginDay(); endTime = DateUtils.getBeginDay() + 3600 * 24; } else if (timeType == 1) { beginTime = DateUtils.getBeginDay() - 3600 * 24; endTime = DateUtils.getBeginDay(); } else if (timeType == 2) { beginTime = DateUtils.getBeginDay() - 3600 * 48; endTime = DateUtils.getBeginDay() - 3600 * 24; } int total = 0; int consume = 0; String where = String.format("gid=%s and time>=%s and time<=%s", groupId, beginTime, endTime); if (limit == 0) { String count_sql = String.format("SELECT count(*) AS total FROM room_rec_log where %s %s", where, qid_sql); ITArray arr = DataBase.use().executeQueryByTArray(count_sql); if (arr.size() > 0) { ITObject obj = arr.getTObject(0); total = obj.getLong("total").intValue(); } Jedis jedis9 = Redis.use(redisdb).getJedis(); try { String key = String.format("g%s:m%s:consume_hp", groupId, uid); if (timeType >= 0 && timeType <= 2) { String hp_key = String.format("%s:d%s", key, beginTime); String r_str = jedis9.get(hp_key); int r_num = 0; if (StringUtil.isNotEmpty(r_str)) { r_num = Integer.parseInt(r_str); } consume = r_num; } else { int timeBegin = beginTime; while (timeBegin <= endTime) { String hp_key = String.format("%s:d%s", key, timeBegin); String r_str = jedis9.get(hp_key); int r_num = 0; if (StringUtil.isNotEmpty(r_str)) { r_num = Integer.parseInt(r_str); } consume += r_num; timeBegin += 86400; } } getMemberData(jedis9, uid, obj1, groupId, 0, beginTime, endTime, false, false); } finally { jedis9.close(); } } String sql = String.format( "select rec_key from room_rec_log where %s %s GROUP BY roomid ORDER BY time desc limit %s,%s", where, qid_sql, limit, num); ITArray list = DataBase.use().executeQueryByTArray(sql); if (list.size() > 0) { Jedis jedis5 = Redis.use("group1_db5").getJedis(); try { for (int i = 0; i < list.size(); ++i) { ITObject tem = list.getTObject(i); String rec_key = tem.getString("rec_key"); ITObject obj = Utility.getMilitaryList(jedis5, rec_key, platform); if (obj == null) { continue; } militaryList.addTObject(obj); } } finally { jedis5.close(); } } obj1.putTArray("records", militaryList); obj1.putInt("limit", limit); obj1.putInt("total", total); obj1.putInt("consume", consume); return obj1; } public static ITObject getPartnerStatPlay(int groupId, int uid, int parent_id, int limit, int num, int timeType, int beginTime, int endTime) throws Exception { ITObject obj = TObject.newInstance(); String gp_key = GroupCache.genPidsKey(groupId); Set pids = Redis.use("group1_db11").zrangeByScore(gp_key, 10, 11); Jedis jedis9 = Redis.use(redisdb).getJedis(); ITArray arr = TArray.newInstance(); try { for (String pid : pids) { ITObject objp = TObject.newInstance(); objp.putInt("pid", Integer.parseInt(pid)); if (timeType == 0) { String key = String.format("g{%s}:m%s:valid_round:p%s", groupId, uid, pid); int round = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("round", round); key = String.format("g%s:hp_cost:m%s:p%s", groupId, uid, pid); int pump = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("pump", pump); key = String.format("g{%s}:m%s:p%s:reward_log", groupId, uid, pid); int award = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("award", award); } else if (timeType == 1) { String curMonth = ":m" + DateUtils.getBeginMonth(); String key = String.format("g{%s}:m%s:valid_round:p%s%s", groupId, uid, pid, curMonth); int round = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("round", round); key = String.format("g%s:hp_cost:m%s:p%s%s", groupId, uid, pid, curMonth); int pump = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("pump", pump); key = String.format("g{%s}:m%s:p%s:reward_log%s", groupId, uid, pid, curMonth); int award = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("award", award); } else if (timeType == 2) { String curMonth = ":m" + DateUtils.getBeginLastMonth(); String key = String.format("g{%s}:m%s:valid_round:p%s%s", groupId, uid, pid, curMonth); int round = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("round", round); key = String.format("g%s:hp_cost:m%s:p%s%s", groupId, uid, pid, curMonth); int pump = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("pump", pump); key = String.format("g{%s}:m%s:p%s:reward_log%s", groupId, uid, pid, curMonth); int award = _getCountValue(jedis9, key, beginTime, endTime); objp.putInt("award", award); } arr.addTObject(objp); } } finally { jedis9.close(); } obj.putTArray("members", arr); obj.putInt("limit", limit); return obj; } public static ITObject getDirectStatMember(int groupId, int uid, int rootUid, int limit, int num, int timeType, int beginTime, int endTime) throws Exception { ITObject obj = TObject.newInstance(); String limitSql = String.format("limit %s,%s", limit, num); String sql = String.format( "SELECT uid, partnerLev" + " FROM group_member" + " WHERE groupId = %s and ((parentId=%s and partnerLev = 0) or uid = %s) GROUP BY uid %s", groupId, uid, uid, limitSql); ITArray temp = TArray.newInstance(); ITArray list = DataBase.use().executeQueryByTArray(sql); Jedis jedis9 = Redis.use(redisdb).getJedis(); try { for (int i = 0; i < list.size(); ++i) { ITObject objLine = list.getTObject(i); if (objLine.containsKey("uid")) { int tagUid = objLine.getInt("uid"); AccountBean acc = AccountCache.getAccount(tagUid); objLine.putString("nick", acc.nick); // int newBeginTime = beginTime - 86400*30; getMemberData(jedis9, tagUid, objLine, groupId, timeType, beginTime, endTime, false, false); if (timeType == 0) { { String tmpKey = String.format("g{%s}:m%s:", groupId, tagUid); int reward_hp = _getCountValue(jedis9, tmpKey + "reward_log", beginTime, endTime); objLine.putInt("reward_tongji", reward_hp); } String key = String.format("g{%s}:m%s:reward_log_to:par%s", groupId, tagUid, uid); int reward_hp = _getCountValue(jedis9, key, beginTime, endTime); objLine.putInt("reward_hp", (int) reward_hp); } else if (timeType == 1) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginMonth(); String key = String.format("g{%s}:m%s:reward_log_to:par%s", groupId, tagUid, uid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } else if (timeType == 2) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginLastMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginLastMonth(); String key = String.format("g{%s}:m%s:reward_log_to:par%s", groupId, tagUid, uid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } temp.addTObject(objLine); } } } finally { jedis9.close(); } obj.putTArray("members", temp); obj.putInt("limit", limit); return obj; } public static ITObject getXingYunHaoMember(int groupId, int limit, int num, int timeType, int beginTime, int endTime) throws Exception { ITObject obj = TObject.newInstance(); String limitSql = String.format("limit %s,%s", limit, num); String strGodsList = null; Set godsList = Redis.use("group1_db1").smembers("gods"); Map mapString = Redis.use("group1_db1").hgetAll("gods_special"); for (Map.Entry entry : mapString.entrySet()) { String strPlayerId = entry.getKey(); godsList.remove(strPlayerId); } List allList = new ArrayList(); allList.addAll(godsList); for (String mem : godsList) { if (strGodsList == null) { strGodsList = mem; } else { strGodsList += "," + mem; } } String sql = String.format( "SELECT uid, partnerLev" + " FROM group_member" + " WHERE groupId = %s and uid in (%s) GROUP BY uid %s", groupId, strGodsList, limitSql); ITArray temp = TArray.newInstance(); int allTotalWin = 0; ITArray list = DataBase.use().executeQueryByTArray(sql); Jedis jedis9 = Redis.use(redisdb).getJedis(); try { for (int i = 0; i < list.size(); ++i) { ITObject objLine = list.getTObject(i); if (objLine.containsKey("uid")) { int tagUid = objLine.getInt("uid"); AccountBean acc = AccountCache.getAccount(tagUid); objLine.putString("nick", acc.nick); getMemberData(jedis9, tagUid, objLine, groupId, timeType, beginTime, endTime, false, false); temp.addTObject(objLine); } } for (String user : allList) { String key = String.format("g{%s}:m%s:", groupId, user); int total_win = _getCountValue(jedis9, key + "total_win_self", beginTime, endTime); allTotalWin += total_win; } } finally { jedis9.close(); } obj.putTArray("members", temp); obj.putInt("limit", limit); obj.putLong("all_total_win", allTotalWin); return obj; } public static ITObject getPartnerStatMember(int groupId, int uid, int rootUid, int limit, int num, int timeType, int beginTime, int endTime) throws Exception { ITObject obj = TObject.newInstance(); String limitSql = String.format("limit %s,%s", limit, num); String sql = String.format( "SELECT uid, partnerLev" + " FROM group_member" + " WHERE groupId = %s and (parentId=%s or uid = %s) and partnerLev > 0 GROUP BY uid %s", groupId, uid, uid, limitSql); ITArray temp = TArray.newInstance(); ITArray list = DataBase.use().executeQueryByTArray(sql); Jedis jedis9 = Redis.use(redisdb).getJedis(); try { for (int i = 0; i < list.size(); ++i) { ITObject objLine = list.getTObject(i); if (objLine.containsKey("uid")) { int tagUid = objLine.getInt("uid"); AccountBean acc = AccountCache.getAccount(tagUid); objLine.putString("nick", acc == null ? "" : acc.nick); if (tagUid != uid) { // int newBeginTime = beginTime - 86400 * 30; getMemberData(jedis9, tagUid, objLine, groupId, timeType, beginTime, endTime, false, true); } else { // int newBeginTime = beginTime - 86400 * 30; // getMemberData(jedis9,tagUid,objLine,groupId,timeType, // beginTime,endTime,false,true); getDirectMemberData(jedis9, tagUid, objLine, groupId, timeType, beginTime, endTime); } if (tagUid == uid) { if (timeType == 0) { String tmpKey = String.format("g{%s}:m%s:", groupId, tagUid); int reward_hp = _getCountValue(jedis9, tmpKey + "d_reward", beginTime, endTime); objLine.putInt("reward_tongji", reward_hp); // String key = String.format("g{%s}:m%s:d_reward", groupId, tagUid); // int reward_hp1 = _getCountValue(jedis9, key, beginTime, endTime); // objLine.putInt("reward_hp", reward_hp1); } else if (timeType == 1) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginMonth(); String key = String.format("g{%s}:m%s:d_reward", groupId, tagUid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } else if (timeType == 2) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginLastMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginLastMonth(); String key = String.format("g{%s}:m%s:d_reward", groupId, tagUid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } } else { if (timeType == 0) { String tmpKey = String.format("g{%s}:m%s:", groupId, tagUid); int reward_hp = _getCountValue(jedis9, tmpKey + "d_reward", beginTime, endTime); objLine.putInt("reward_tongji", reward_hp); String undersql = "select * from group_member gm,account a where a.id=gm.uid and gm.parentId=" + tagUid; ITArray arr = DataBase.use().executeQueryByTArray(undersql); int under_round = 0; int under_win = 0; int under_total_win = 0; int under_reward_hp = 0; if (arr.size() > 0) { // log.info("underKey:"+uid); for (int ii = 0; ii < arr.size(); ii++) { ITObject underData = arr.getTObject(ii); String underKey = String.format("g{%s}:m%s:", groupId, underData.getInt("uid")); under_round += _getCountValue(jedis9, underKey + "round_log", beginTime, endTime); under_win += _getCountValue(jedis9, underKey + "valid_round", beginTime, endTime); under_reward_hp += _getCountValue(jedis9, underKey + "d_reward", beginTime, endTime); // under_total_win += _getCountValue(jedis9, underKey + "total_win", beginTime, endTime); // log.info("underKey:"+underKey); // log.info("under_reward_hp:"+under_reward_hp); } if (under_reward_hp != 0) { objLine.putLong("reward_tongji", under_reward_hp); // 获得奖励 } // param.putInt("total_win", under_total_win); // 总赢分 } else { objLine.putLong("reward_tongji", reward_hp); // 获得奖励 } objLine.putLong("reward_tongji", reward_hp); // 获得奖励 // String key = String.format("g{%s}:m%s:d_reward", groupId, tagUid); // int reward_hp = _getCountValue(jedis9, key, beginTime, endTime); // objLine.putInt("reward_hp", reward_hp); } else if (timeType == 1) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginMonth(); String key = String.format("g{%s}:m%s:reward_log_to:par%s", groupId, tagUid, uid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } else if (timeType == 2) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginLastMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginLastMonth(); String key = String.format("g{%s}:m%s:reward_log_to:par%s", groupId, tagUid, uid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } } temp.addTObject(objLine); } } } finally { jedis9.close(); } obj.putTArray("members", temp); obj.putInt("limit", limit); return obj; } public static ITObject findPartnerStatMember(int groupId, int uid, int rootUid, int tagId, int limit, int num, int timeType, int beginTime, int endTime) throws Exception { ITObject obj = TObject.newInstance(); String limitSql = String.format("limit %s,%s", limit, num); String sql = String.format("SELECT uid, partnerLev" + " FROM group_member" + " WHERE groupId = %s and (parentId=%s or uid = %s) and partnerLev > 0 and uid=%s GROUP BY uid %s", groupId, uid, uid, tagId, limitSql); ITArray temp = TArray.newInstance(); ITArray list = DataBase.use().executeQueryByTArray(sql); Jedis jedis9 = Redis.use(redisdb).getJedis(); try { for (int i = 0; i < list.size(); ++i) { ITObject objLine = list.getTObject(i); if (objLine.containsKey("uid")) { int tagUid = objLine.getInt("uid"); AccountBean acc = AccountCache.getAccount(tagUid); objLine.putString("nick", acc.nick); if (tagUid != uid) { // int newBeginTime = beginTime - 86400 * 30; getMemberData(jedis9, tagUid, objLine, groupId, timeType, beginTime, endTime, false, true); } else { // int newBeginTime = beginTime - 86400 * 30; // getMemberData(jedis9,tagUid,objLine,groupId,timeType, // beginTime,endTime,false,true); getDirectMemberData(jedis9, tagUid, objLine, groupId, timeType, beginTime, endTime); } if (tagUid == uid) { if (timeType == 0) { { String tmpKey = String.format("g{%s}:m%s:", groupId, tagUid); int reward_hp = _getCountValue(jedis9, tmpKey + "reward_log", beginTime, endTime); objLine.putInt("reward_tongji", reward_hp); } String key = String.format("g{%s}:m%s:d_reward", groupId, tagUid); int reward_hp = _getCountValue(jedis9, key, beginTime, endTime); objLine.putInt("reward_hp", reward_hp); } else if (timeType == 1) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginMonth(); String key = String.format("g{%s}:m%s:d_reward", groupId, tagUid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } else if (timeType == 2) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginLastMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginLastMonth(); String key = String.format("g{%s}:m%s:d_reward", groupId, tagUid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } } else { if (timeType == 0) { { long reward_hp_total = 0; List listParent = Utility.getChildParentList(groupId, tagUid, true); for (Integer parId : listParent) { String tmpKey = String.format("g{%s}:m%s:", groupId, parId); int reward_hp = _getCountValue(jedis9, tmpKey + "reward_log", beginTime, endTime); reward_hp_total += reward_hp; } String key = String.format("g{%s}:m%s:d_reward", groupId, tagUid); int reward_hp = _getCountValue(jedis9, key, beginTime, endTime); objLine.putInt("reward_hp", reward_hp); if (reward_hp_total == 0) { reward_hp_total = reward_hp; } objLine.putInt("reward_tongji", (int) reward_hp_total); } String key = String.format("g{%s}:m%s:reward_log_to:par%s", groupId, tagUid, uid); int reward_hp = _getCountValue(jedis9, key, beginTime, endTime); objLine.putInt("reward_hp", (int) reward_hp); } else if (timeType == 1) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginMonth(); String key = String.format("g{%s}:m%s:reward_log_to:par%s", groupId, tagUid, uid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } else if (timeType == 2) { { String key = String.format("g{%s}:m%s:", groupId, tagUid); String curMonth = ":m" + DateUtils.getBeginLastMonth(); int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); objLine.putInt("reward_tongji", reward_hp); } String curMonth = ":m" + DateUtils.getBeginLastMonth(); String key = String.format("g{%s}:m%s:reward_log_to:par%s", groupId, tagUid, uid); int reward_hp = _getValue(jedis9, key + curMonth); objLine.putInt("reward_hp", reward_hp); } } temp.addTObject(objLine); } } } finally { jedis9.close(); } obj.putTArray("members", temp); obj.putInt("limit", limit); return obj; } public static ITObject getPartnerStat(int groupId, int uid, int limit, int num, int timeType, int beginTime, int endTime) throws Exception { ITObject obj = TObject.newInstance(); GroupMemberBean gmb = GroupCache.getMember(groupId, uid); int lev = gmb.lev; boolean mgr = lev < 3; ITArray list = null; String limitSql = String.format("limit %s,%s", limit, num); if (mgr) { String sql = String.format("SELECT A.uid,A.partnerLev, A.autoscore," + "(SELECT COUNT(uid) FROM group_member B where B.groupId = %s AND B.parentId = A.uid) AS total " + "FROM group_member AS A" + " where A.groupId= %s and A.partnerLev=1 %s", groupId, groupId, limitSql); list = DataBase.use().executeQueryByTArray(sql); // log.info("统计sql:" + sql); } else { String sql = String.format( "SELECT A.uid,A.partnerLev, A.autoscore, (SELECT COUNT(uid) FROM group_member B where B.groupId = %s AND B.parentId = A.uid) AS total " + "FROM group_member AS A" + " where A.groupId= %s and (A.parentId=%s or A.uid=%s) AND A.partnerLev >0 %s", groupId, groupId, uid, uid, limitSql); list = DataBase.use().executeQueryByTArray(sql); // log.info("统计sql:" + sql); } Jedis jedis9 = Redis.use(redisdb).getJedis(); Jedis jedis10 = Redis.use("group1_db10").getJedis(); try { for (int i = 0; i < list.size(); ++i) { ITObject objLine = list.getTObject(i); int tagUid = objLine.getInt("uid"); AccountBean acc = AccountCache.getAccount(tagUid); if (acc != null) { objLine.putString("nick", acc.nick); } getMemberData(jedis9, tagUid, objLine, groupId, timeType, beginTime, endTime, true, true); } } catch (Exception e) { log.error(e); } finally { jedis9.close(); jedis10.close(); } obj.putTArray("members", list); obj.putInt("limit", limit); return obj; } public static ITObject findPartnerStat(int groupId, int uid, int tagId, int limit, int num, int timeType, int beginTime, int endTime) throws Exception { ITObject obj = TObject.newInstance(); GroupMemberBean gmb = GroupCache.getMember(groupId, uid); int lev = gmb.lev; boolean mgr = lev < 3; ITArray list = null; String limitSql = String.format("limit %s,%s", limit, num); if (mgr) { String sql = String.format("SELECT A.uid,A.partnerLev, A.autoscore," + "(SELECT COUNT(uid) FROM group_member B where B.groupId = %s AND B.parentId = A.uid) AS total " + "FROM group_member AS A" + " where A.groupId= %s and A.uid=%s %s", groupId, groupId, tagId, limitSql); list = DataBase.use().executeQueryByTArray(sql); } else { if (uid != tagId) { Jedis jedis10 = Redis.use("group1_db10").getJedis(); try { List par_list = Utility.getMemberParents(jedis10, groupId, tagId, true); if (par_list == null || !par_list.contains(uid)) { throw new WebException(ErrorCode.GROUP_NOT_PERMISSION); } } finally { jedis10.close(); } } String sql = String.format( "SELECT A.uid,A.partnerLev, A.autoscore, (SELECT COUNT(uid) FROM group_member B where B.groupId = %s AND B.parentId = A.uid) AS total " + "FROM group_member AS A" + " where A.groupId= %s AND A.uid=%s %s", groupId, groupId, tagId, limitSql); list = DataBase.use().executeQueryByTArray(sql); } Jedis jedis9 = Redis.use(redisdb).getJedis(); Jedis jedis10 = Redis.use("group1_db10").getJedis(); try { for (int i = 0; i < list.size(); ++i) { ITObject objLine = list.getTObject(i); int tagUid = objLine.getInt("uid"); AccountBean acc = AccountCache.getAccount(tagUid); objLine.putString("nick", acc == null ? "" : acc.nick); getMemberData(jedis9, tagUid, objLine, groupId, timeType, beginTime, endTime, true, true); } } finally { jedis9.close(); jedis10.close(); } obj.putTArray("members", list); obj.putInt("limit", limit); return obj; } public static void getMemberData(Jedis jedis9, int uid, ITObject param, int groupId, int timeType, int beginTime, int endTime, boolean rewardHP, boolean total) throws Exception { GroupBean gb = GroupCache.getGroup(groupId); String key = String.format("g{%s}:m%s:", groupId, uid); String self = total ? "" : "_self"; if (timeType == 0) { // 包含下级合伙人 long reward_hp_total = 0; // List listParent = Utility.getChildParentList(groupId, uid, true); String uidkey = String.format("g{%s}:m%s:d_reward", groupId, uid); int reward_hp = _getCountValue(jedis9, uidkey, beginTime, endTime); param.putLong("reward_hp", reward_hp); // 获得奖励 // if (rewardHP) { //// int reward_hp = _getCountValue(jedis9,key + "reward_log",beginTime,endTime); //// param.putInt("reward_hp", reward_hp); // // // 包含下级合伙人 // long reward_hp_total = 0; // // List listParent = Utility.getChildParentList(groupId, uid, true); // String uidkey = String.format("g{%s}:m%s:d_reward", groupId, uid); // int reward_hp = _getCountValue(jedis9, uidkey, beginTime, endTime); // // param.putLong("reward_hp", reward_hp); // 获得奖励 // } int valid_round = _getCountValue(jedis9, key + "valid_round" + self, beginTime, endTime); // param.putInt("valid_round", valid_round); // int win_round = _getCountNumValue(jedis9, key + "valid_round", beginTime, endTime); int win_round = _getCountNumValue(jedis9, key + "valid_round", beginTime, endTime); param.putInt("win_round", win_round); int total_round = _getCountValue(jedis9, key + "round_log" + self, beginTime, endTime); int total_win = _getCountValue(jedis9, key + "total_win" + self, beginTime, endTime); String roundSql = "select ifnull(sum(round_cnt),0) round_cnt,ifnull(sum(bigwin_cnt),0) bigwin_cnt,ifnull(sum(win_score),0) win_score,ifnull(sum(round_reward),0) round_reward from team_round_stat_day where uid=" + uid + " and stat_day>=" + beginTime + " and stat_day<" + endTime; log.info("roundSql:" + roundSql); ITArray roundArr = DataBase.use().executeQueryByTArray(roundSql); if (roundArr.size() > 0) { ITObject userData = roundArr.getTObject(0); total_round = userData.getDouble("round_cnt").intValue() > 0 ? userData.getDouble("round_cnt").intValue() : total_round; valid_round = userData.getDouble("bigwin_cnt").intValue() > 0 ? userData.getDouble("bigwin_cnt").intValue() : 0; total_win = userData.getDouble("win_score").intValue() != 0 ? userData.getDouble("win_score").intValue() : total_win; reward_hp = userData.getDouble("round_reward").intValue() > 0 ? userData.getDouble("round_reward").intValue() : reward_hp; } // if (beginTime==1753286400&&endTime==1753372800){ // param.putInt("total_round" , total_round+valid_round/100); // }else { // param.putInt("total_round" , total_round); // } // g{618028}:m668628:xipai_reward_log_to:par100095:d1758470400 // int xipai_hp_cost = jedis9.getInt("g{"+groupId+"}:m668628:xipai_reward_log_to:par100095:d1758470400"); String sql = "select * from group_member gm,account a where a.id=gm.uid and gm.parentId=" + uid; ITArray arr = DataBase.use().executeQueryByTArray(sql); int under_round = 0; int under_win = 0; int under_total_win = 0; int under_reward_hp = 0; int xipai_hp_cost = 0; if (arr.size() > 0) { // log.info("underKey:"+uid); for (int i = 0; i < arr.size(); i++) { ITObject underData = arr.getTObject(i); String underKey = String.format("g{%s}:m%s:", groupId, underData.getInt("uid")); // under_round += _getCountValue(jedis9, underKey + "round_log", beginTime, endTime); under_win += _getCountValue(jedis9, underKey + "valid_round", beginTime, endTime); under_reward_hp += _getCountValue(jedis9, underKey + "d_reward", beginTime, endTime); // log.info("xipai_hp_cost_key:" + "g{" + groupId + "}:m" + underData.getInt("uid") // + ":xipai_reward_log_to:par" + gb.owner + ":d" + beginTime + ""); // // String xipai_hp_cost_key = jedis9.get("g{" + groupId + "}:m" + underData.getInt("uid") // + ":xipai_cost_log:par" + gb.owner + ":d" + beginTime + ""); // log.info("xipai_hp_cost:" + xipai_hp_cost_key); // // xipai_hp_cost += (xipai_hp_cost_key == null ? 0 : Integer.parseInt(xipai_hp_cost_key)); // under_total_win += _getCountValue(jedis9, underKey + "total_win", beginTime, endTime); // log.info("underKey:"+underKey); // log.info("under_reward_hp:"+under_reward_hp); } if (under_reward_hp != 0) { param.putLong("reward_hp", under_reward_hp); // 获得赠送 } // param.putInt("valid_round", under_win); } else { param.putInt("total_round", total_round); param.putLong("reward_hp", reward_hp); // 获得赠送 } String cost_key = jedis9.get("g{" + groupId + "}:m" + uid + ":xipai_cost:d" + beginTime + ""); int xipai_cost = cost_key == null ? 0 : Integer.parseInt(cost_key); // log.info("xipai_cost:" + xipai_cost); param.putInt("total_win", total_win - xipai_cost); // 总赢分 param.putInt("total_round", total_round);// 总场次 param.putInt("valid_round", valid_round);// 大赢家 param.putLong("reward_hp", reward_hp); // 获得赠送 ITObject gallc = GroupService.getAllHpCache(groupId, uid, 30); param.putTObject("hpall", gallc); } else if (timeType == 1) { String curMonth = ":m" + DateUtils.getBeginMonth(); if (rewardHP) { int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); param.putInt("reward_hp", reward_hp); } int win_round = _getNumValue(jedis9, key + "valid_round" + self + curMonth); int valid_round = _getValue(jedis9, key + "valid_round" + self + curMonth); int total_round = _getValue(jedis9, key + "round_log" + self + curMonth); int total_win = _getValue(jedis9, key + "total_win" + self + curMonth); String cost_key = jedis9.get("g{" + groupId + "}:m" + uid + ":xipai_cost:d" + beginTime + ""); int xipai_cost = cost_key == null ? 0 : Integer.parseInt(cost_key); // log.info("xipai_cost:" + xipai_cost); String roundSql = "select ifnull(sum(round_cnt),0) round_cnt,ifnull(sum(bigwin_cnt),0) bigwin_cnt,ifnull(sum(win_score),0) win_score,ifnull(sum(round_reward),0) round_reward from team_round_stat_day where uid=" + uid + " and stat_day>=" + beginTime + " and stat_day<" + endTime; // log.info("timeType==1--roundSql:" + roundSql); ITArray roundArr = DataBase.use().executeQueryByTArray(roundSql); if (roundArr.size() > 0) { ITObject userData = roundArr.getTObject(0); total_round = userData.getDouble("round_cnt").intValue() > 0 ? userData.getDouble("round_cnt").intValue() : total_round; valid_round = userData.getDouble("bigwin_cnt").intValue() > 0 ? userData.getDouble("bigwin_cnt").intValue() : 0; total_win = userData.getDouble("win_score").intValue() !=0 ? userData.getDouble("win_score").intValue() : total_win; } param.putInt("valid_round", valid_round); param.putInt("total_round", total_round); param.putInt("win_round", win_round); param.putInt("total_win", total_win-xipai_cost); ITObject gallc = GroupService.getAllHpCache(groupId, uid, 30); param.putTObject("hpall", gallc); } else if (timeType == 2) { String curMonth = ":m" + DateUtils.getBeginLastMonth(); if (rewardHP) { int reward_hp = _getValue(jedis9, key + "reward_log" + curMonth); param.putInt("reward_hp", reward_hp); } int win_round = _getNumValue(jedis9, key + "valid_round" + self + curMonth); int valid_round = _getValue(jedis9, key + "valid_round" + self + curMonth); int total_round = _getValue(jedis9, key + "round_log" + self + curMonth); int total_win = _getValue(jedis9, key + "total_win" + self + curMonth); String cost_key = jedis9.get("g{" + groupId + "}:m" + uid + ":xipai_cost:d" + beginTime + ""); int xipai_cost = cost_key == null ? 0 : Integer.parseInt(cost_key); // log.info("xipai_cost:" + xipai_cost); String roundSql = "select ifnull(sum(round_cnt),0) round_cnt,ifnull(sum(bigwin_cnt),0) bigwin_cnt,ifnull(sum(win_score),0) win_score,ifnull(sum(round_reward),0) round_reward from team_round_stat_day where uid=" + uid + " and stat_day>=" + beginTime + " and stat_day<" + endTime; // log.info("timeType==2--roundSql:" + roundSql); ITArray roundArr = DataBase.use().executeQueryByTArray(roundSql); if (roundArr.size() > 0) { ITObject userData = roundArr.getTObject(0); total_round = userData.getDouble("round_cnt").intValue() > 0 ? userData.getDouble("round_cnt").intValue() : total_round; valid_round = userData.getDouble("bigwin_cnt").intValue() > 0 ? userData.getDouble("bigwin_cnt").intValue() : 0; total_win = userData.getDouble("win_score").intValue() !=0 ? userData.getDouble("win_score").intValue() : total_win; } param.putInt("total_win", total_win-xipai_cost); param.putInt("total_round", total_round); param.putInt("valid_round", valid_round); param.putInt("win_round", win_round); ITObject gallc = GroupService.getAllHpCache(groupId, uid, 30); param.putTObject("hpall", gallc); } } public static List getMemberLogList(int groupId, int uid, boolean self) { String pl_key = String.format("g{%s}:member_list:%s", groupId, uid); Set child_list = Redis.use("group1_db10").smembers(pl_key); List list = new ArrayList<>(); if (self) { list.add(uid); } for (String str : child_list) { list.add(Integer.parseInt(str)); } return list; } private static void getDirectMemberData(Jedis jedis9, int uid, ITObject param, int groupId, int timeType, int beginTime, int endTime) { String key = String.format("g{%s}:m%s:", groupId, uid); if (timeType == 0) { /* * int valid_round = _getCountValue(jedis9,key + * "d_valid_round",beginTime,endTime); param.putInt("valid_round" , * valid_round); * * int total_round = _getCountValue(jedis9,key + * "d_round_log",beginTime,endTime); param.putInt("total_round" , total_round); * * int total_win = _getCountValue(jedis9,key + "d_total_win",beginTime,endTime); * param.putInt("total_win" , total_win); */ int valid_round = _getCountValue(jedis9, key + "d_valid_round", beginTime, endTime); param.putInt("valid_round", valid_round); int win_round = _getCountNumValue(jedis9, key + "d_valid_round", beginTime, endTime); param.putInt("win_round", win_round); int total_round = _getCountValue(jedis9, key + "d_round_log", beginTime, endTime); param.putInt("total_round", total_round); int total_win = _getCountValue(jedis9, key + "d_total_win", beginTime, endTime); param.putInt("total_win", total_win); } else if (timeType == 1) { String curMonth = ":m" + DateUtils.getBeginMonth(); int valid_round = _getValue(jedis9, key + "d_valid_round" + curMonth); param.putInt("valid_round", valid_round); int win_round = _getNumValue(jedis9, key + "d_valid_round" + curMonth); param.putInt("win_round", win_round); int total_round = _getValue(jedis9, key + "d_round_log" + curMonth); param.putInt("total_round", total_round); int total_win = _getValue(jedis9, key + "d_total_win" + curMonth); param.putInt("total_win", total_win); } else if (timeType == 2) { String curMonth = ":m" + DateUtils.getBeginLastMonth(); int valid_round = _getValue(jedis9, key + "d_valid_round" + curMonth); param.putInt("valid_round", valid_round); int win_round = _getNumValue(jedis9, key + "d_valid_round" + curMonth); param.putInt("win_round", win_round); int total_round = _getValue(jedis9, key + "d_round_log" + curMonth); param.putInt("total_round", total_round); int total_win = _getValue(jedis9, key + "d_total_win" + curMonth); param.putInt("total_win", total_win); } } /** * 获取战绩列表 * * @param platform * @param groupId * @param limit * @param num * @return */ public static ITObject getMemberStat(int groupId, int uid, int qid, int partnerId, int limit, int num, int timeType, int beginTime, int endTime, int sortType) throws Exception { ITObject obj1 = TObject.newInstance(); String qid_sql = StringUtil.Empty; if (qid > 0) { GroupMemberBean mng_bean = GroupCache.getMember(groupId, uid); if (mng_bean == null) { throw new WebException(ErrorCode.GROUP_NOT_MEMBER); } int mgn_partner = mng_bean.partnerLev; int mgn_lev = mng_bean.lev; if (mgn_lev == 3 && mgn_partner == 0) { throw new WebException(ErrorCode.GROUP_NOT_PARTNER); } if (mgn_lev == 3) { Jedis jedis10 = Redis.use("group1_db10").getJedis(); try { List par_list = Utility.getMemberParents(jedis10, groupId, qid, false); if ((par_list == null || !par_list.contains(uid)) && qid!=uid) { throw new WebException(ErrorCode.GROUP_NOT_PERMISSION); } } finally { jedis10.close(); } } qid_sql = " AND A.uid=" + qid; } else if (partnerId > 0) { String ugm_key = GroupMemberCache.genKey(groupId, partnerId); String lev = Redis.use("group1_db10").hget(ugm_key, "lev"); boolean mgr = StringUtil.isNotEmpty(lev) && Integer.parseInt(lev) < 3; String p = Utility.getChildParentSql(groupId, partnerId, true); if (mgr) { p = p + ",0"; } if (Integer.parseInt(lev) > 1) { qid_sql = String.format(" AND (A.parentId in(%s) or A.uid = %s)", p, partnerId); } GroupBean gb = GroupCache.getGroup(groupId); if (gb.owner == uid && partnerId == gb.owner) { qid_sql = ""; } // qid_sql = String.format(" AND A.parentId = %s", partnerId); } if (timeType == 0) { beginTime = DateUtils.getBeginDay(); endTime = DateUtils.getEndDay(); } else if (timeType == 1) { beginTime = DateUtils.getBeginDay() - 3600 * 24; endTime = DateUtils.getBeginDay(); } else if (timeType == 2) { beginTime = DateUtils.getBeginDay() - 3600 * 48; endTime = DateUtils.getBeginDay() - 3600 * 24; } String order_sql = "ORDER BY win DESC "; if (sortType > 0) { ArrayList tempSortList = new ArrayList(); tempSortList.add("score"); tempSortList.add("round"); tempSortList.add("win"); tempSortList.add("pump"); order_sql = String.format(" ORDER BY %s %s ", tempSortList.get((sortType - 1) / 2), (sortType % 2 == 1 ? "DESC" : "ASC")); } String sql = String.format( "SELECT IFNULL(B.win, 0) AS win, IFNULL(B.ROUND, 0) AS round, IFNULL(B.score, 0) + IFNULL(D.reason15_hp, 0) AS score, IFNULL(C.pump, 0) AS pump, A.uid, A.hp, A.lev, A.partnerLev " + "FROM group_member AS A " + "LEFT JOIN( SELECT SUM(win) AS win, SUM(ROUND) AS ROUND, SUM(score) AS score, uid FROM group_member_log WHERE groupId = %s AND TIME >= %s AND TIME < %s GROUP BY uid ) AS B ON A.uid = B.uid " + "LEFT JOIN( SELECT IFNULL(SUM(hp), 0) AS pump, uid FROM group_hp_log WHERE gid = %s AND TIME >= %s AND TIME < %s AND reason = 7 GROUP BY uid ) AS C ON A.uid = C.uid " + "LEFT JOIN (SELECT SUM(hp) AS reason15_hp,uid FROM group_hp_log WHERE gid = %s AND TIME >= %s AND TIME < %s AND reason = 18 GROUP BY uid ) AS D ON A.uid = D.uid " + "WHERE A.groupId = %s AND round > 0 %s " + "GROUP BY A.uid %s" + "limit %s,%s", groupId, beginTime, endTime, groupId, beginTime, endTime, groupId, beginTime, endTime, groupId, qid_sql, order_sql, limit, num); // log.info("查询sql:" + sql); ITArray arr = DataBase.use().executeQueryByTArray(sql); if (arr.size() > 0) { Jedis jedis9 = Redis.use(redisdb).getJedis(); try { String strtmp = ""; for (int i = 0; i < arr.size(); ++i) { ITObject obj = arr.getTObject(i); AccountBean acc = AccountCache.getAccount(obj.getInt("uid")); if (acc != null) { obj.putString("nick", acc.nick); } else { obj.putString("nick", StringUtil.Empty); } // strtmp = String.format( "SELECT IFNULL(SUM(hp), 0) AS reward_hp from group_hp_log where gid=%s and reason=7 and uid=%s and time >=%s AND time <%s", groupId, acc.id, beginTime, endTime); ITArray arrtmp = DataBase.use().executeQueryByTArray(strtmp); if (arrtmp.size() > 0) { obj.putDouble("`pump`", arrtmp.getTObject(0).getDouble("reward_hp")); } else { obj.putInt("pump", 0); } } } finally { jedis9.close(); } } obj1.putTArray("members", arr); obj1.putInt("limit", limit); return obj1; } /** * 获取战绩列表 * * @param platform * @param groupId * @param limit * @param num * @return */ public static ITObject getRecords(String platform, int groupId, int limit, int num, int qid, int uid, int includeMembers, int timeType, int beginTime, int endTime) throws Exception { boolean find = true; boolean mgr = true; boolean tagIsPartner = false; Jedis jedis10 = Redis.use("group1_db10").getJedis(); try { GroupMemberBean mng = GroupCache.getMember(groupId, uid); int _lev = mng.lev; mgr = _lev < 3; if (qid > 0) { GroupMemberBean tag = GroupCache.getMember(groupId, qid); if (tag != null) { int parentId = tag.parentId; if (!mgr) { if (parentId == 0) { // log.info("parentId == 0 find:"+find); find = false; } else { if (tag.partnerLev > 0) { tagIsPartner = true; } List par_list = Utility.getMemberParents(jedis10, groupId, includeMembers == 0 ? parentId : qid, true); if ((par_list == null || !par_list.contains(uid)) && uid!=qid) { // log.info("par_list:"+par_list); // log.info("uid:"+uid); // // log.info("par_list == null || !par_list.contains(uid) find:"+find); find = false; } } } } else { log.info("else find:"+find); find = false; } } }catch(Exception e) { e.printStackTrace(); log.error(e); } finally { jedis10.close(); } ITArray militaryList = TArray.newInstance(); if (find) { String where = StringUtil.Empty; if (timeType == 0) { where = String.format("gid=%s and time>=%s and time<=%s", groupId, beginTime, endTime); } else if (timeType == 1) { beginTime = DateUtils.getBeginMonth(); where = String.format("gid=%s and time>=%s", groupId, beginTime); } else if (timeType == 2) { beginTime = DateUtils.getBeginLastMonth(); endTime = DateUtils.getBeginMonth(); where = String.format("gid=%s and time>=%s and time<=%s", groupId, beginTime, endTime); } else { beginTime = DateUtils.getBeginDay() - 259200; endTime = DateUtils.getEndDay(); where = String.format("gid=%s and time>=%s and time<=%s", groupId, beginTime, endTime); } if (qid == 0) { if (!mgr) { String p = Utility.getChildParentSql(groupId, uid, true); where += String.format(" and (parentId in(%s) or uid = %s)", p, uid); } } else { if (includeMembers == 1) { String p; if (tagIsPartner) { p = Utility.getChildParentSql(groupId, qid, true); where += String.format(" and (parentId in(%s) or uid = %s)", p, qid); } else { where += " and uid=" + qid; } } else { where += " and uid=" + qid; } } String sql = String.format("select rec_key from room_rec_log where %s ORDER BY time desc limit %s,%s", where, limit, num); ITArray list = DataBase.use().executeQueryByTArray(sql); if (list.size() > 0) { Jedis jedis5 = Redis.use("group1_db5").getJedis(); try { for (int i = 0; i < list.size(); ++i) { ITObject tem = list.getTObject(i); String rec_key = tem.getString("rec_key"); ITObject obj = Utility.getMilitaryList(jedis5, rec_key, platform); if (obj == null) { continue; } militaryList.addTObject(obj); } } finally { jedis5.close(); } } } ITObject obj1 = TObject.newInstance(); obj1.putTArray("records", militaryList); obj1.putInt("limit", limit); return obj1; } /** * 根据房间ID查询战绩 * * @param platform * @param groupId * @param roomid * @return */ public static ITArray findRecordByRoom(String platform, int groupId, String roomid, int uid) throws Exception { if (StringUtil.isNotEmpty(roomid)) { if (roomid.length() != 6) { return null; } } boolean find = false; int time3last = DateUtils.getBeginDay() - 259200; String sql = String.format("select rec_key,uid from room_rec_log where gid=%s and roomid='%s' and time>=%s", groupId, roomid, time3last); ITArray list = DataBase.use().executeQueryByTArray(sql); if (list.size() == 0) return null; Jedis jedis10 = Redis.use("group1_db10").getJedis(); try { GroupMemberBean mng = GroupCache.getMember(groupId, uid); int _lev = mng.lev; boolean mgr = _lev < 3; if (!mgr) { for (int i = 0; i < list.size(); ++i) { ITObject obj = list.getTObject(i); int id = obj.getInt("uid"); if (id == uid) { find = true; break; } GroupMemberBean tag = GroupCache.getMember(groupId, id); if (tag == null) continue; int par = tag.parentId; if (par == 0) continue; List par_list = Utility.getMemberParents(jedis10, groupId, par, true); if (par_list != null && par_list.contains(uid)) { find = true; break; } } } else { find = true; } } finally { jedis10.close(); } if (!find) return null; ITArray militaryList = TArray.newInstance(); Jedis jedis5 = Redis.use("group1_db5").getJedis(); try { for (int i = 0; i < list.size(); i++) { String rec_key = list.getTObject(i).getString("rec_key"); ITObject data = Utility.getMilitaryList(jedis5, rec_key, platform); boolean flag = true; for (int j = 0; j < militaryList.size(); j++) { ITObject temp = militaryList.getTObject(j); String temp_create_time = temp.getString("create_time"); String create_time = data.getString("create_time"); String temp_rec_key = temp.getString("military_id"); if (temp_rec_key.equals(rec_key) && create_time.equals(temp_create_time)) { flag = false; break; } } if (flag) { militaryList.addTObject(data); } } return militaryList; } finally { jedis5.close(); } } /** * * @param groupId * @param uid * @param limit * @param num * @param type 1上分 2下分 3合伙人上分 4合伙人下分 * @return * @throws Exception */ public static final ITObject getHpLogMgr(int groupId, int uid, int limit, int num, int type, int qid, String tagName) throws Exception { GroupMemberBean mng = GroupCache.getMember(groupId, uid); int beginDay = DateUtils.getBeginDay(); int beginTime = beginDay - 9 * 24 * 3600; if (mng.lev >= 3) { beginTime = beginDay - 2 * 24 * 3600; } long endTime = DateUtils.getEndDay(); int reason = MGRLOG_TYPE[type - 1]; String mgr_sql = StringUtil.Empty; String qid_sql = StringUtil.Empty; ITArray arr = null; if (type > 2) { mgr_sql = "and A.mgr_id=" + uid; if (StringUtil.isNotEmpty(tagName) || qid > 0) { if (qid > 0) { qid_sql = "and A.uid=" + qid; String where_sql = String.format( "WHERE A.gid = %s " + "and A.reason = %s " + "and A.time>=%s " + "and A.time <=%s %s %s", groupId, reason, beginTime, endTime, mgr_sql, qid_sql); String sql = String.format( "SELECT uid,mgr_id,hp,cur_hp,time FROM group_hp_log as A %s ORDER BY time desc limit %s,%s", where_sql, limit, num); arr = DataBase.use().executeQueryByTArray(sql); } if (StringUtil.isNotEmpty(tagName)) { String where_sql = String.format( "WHERE A.gid = %s " + "and A.reason = %s " + "and A.time>=%s " + "and A.time <=%s %s %s", groupId, reason, beginTime, endTime, mgr_sql, qid_sql); String sql = String.format("SELECT A.uid,A.mgr_id,A.hp,A.cur_hp,A.time " + "FROM group_hp_log as A " + "RIGHT JOIN account as B " + "ON A.uid = B.id and B.nick like '%%%s%%' " + "%s ORDER BY time desc " + "limit %s,%s", tagName, where_sql, limit, num); ITArray temp = DataBase.use().executeQueryByTArray(sql); if (temp.size() > 0) { if (arr == null) { arr = temp; } else { for (int i = 0; i < temp.size(); i++) { ITObject mo = temp.getTObject(i); if (qid > 0 && mo.getInt("uid") == qid) { continue; } arr.addTObject(temp.getTObject(i)); } } } } } else { String where_sql = String.format( "WHERE A.gid = %s " + "and A.reason = %s " + "and A.time>=%s " + "and A.time <=%s %s %s", groupId, reason, beginTime, endTime, mgr_sql, qid_sql); String sql = String.format( "SELECT uid,mgr_id,hp,cur_hp,time FROM group_hp_log as A %s ORDER BY time desc limit %s,%s", where_sql, limit, num); arr = DataBase.use().executeQueryByTArray(sql); } } else { if (StringUtil.isNotEmpty(tagName) || qid > 0) { if (qid > 0) { qid_sql = "and (A.uid=" + qid; qid_sql += " or A.mgr_id=" + qid + ")"; String where_sql = String.format( "WHERE A.gid = %s " + "and A.reason = %s " + "and A.time>=%s " + "and A.time <=%s %s %s", groupId, reason, beginTime, endTime, mgr_sql, qid_sql); String sql = String.format( "SELECT uid,mgr_id,hp,cur_hp,time FROM group_hp_log as A %s ORDER BY time desc limit %s,%s", where_sql, limit, num); arr = DataBase.use().executeQueryByTArray(sql); } if (StringUtil.isNotEmpty(tagName)) { String where_sql = String.format( "WHERE A.gid = %s " + "and A.reason = %s " + "and A.time>=%s " + "and A.time <=%s %s %s", groupId, reason, beginTime, endTime, mgr_sql, qid_sql); String sql = String.format("SELECT A.uid,A.mgr_id,A.hp,A.cur_hp,A.time " + "FROM group_hp_log as A " + "RIGHT JOIN account as B " + "ON (A.uid = B.id OR A.mgr_id = B.id) and B.nick like '%%%s%%' " + "%s ORDER BY time desc " + "limit %s,%s", tagName, where_sql, limit, num); ITArray temp = DataBase.use().executeQueryByTArray(sql); if (temp.size() > 0) { if (arr == null) { arr = temp; } else { for (int i = 0; i < temp.size(); i++) { ITObject mo = temp.getTObject(i); if (qid > 0 && mo.getInt("uid") == qid) { continue; } arr.addTObject(temp.getTObject(i)); } } } } } else { String where_sql = String.format( "WHERE A.gid = %s " + "and A.reason = %s " + "and A.time>=%s " + "and A.time <=%s %s %s", groupId, reason, beginTime, endTime, mgr_sql, qid_sql); String sql = String.format( "SELECT uid,mgr_id,hp,cur_hp,time FROM group_hp_log as A %s ORDER BY time desc limit %s,%s", where_sql, limit, num); arr = DataBase.use().executeQueryByTArray(sql); } } ITObject resData = TObject.newInstance(); resData.putInt("limit", limit); if (arr != null) { for (int i = 0; i < arr.size(); ++i) { ITObject obj = arr.getTObject(i); AccountBean acc = AccountCache.getAccount(obj.getInt("uid")); obj.putString("t_nick", acc.nick); acc = AccountCache.getAccount(obj.getInt("mgr_id")); obj.putString("m_nick", acc.nick); } resData.putTArray("hp_logs", arr); } return resData; } /** * 获取体力值管理统计数据 * * @param groupId * @return * @throws Exception */ public static final ITObject getHpLogMgrCount(int groupId) throws Exception { int beginTime = DateUtils.getBeginDay() - 9 * 24 * 3600; long upper_count = 0; long sub_count = 0; Jedis jedis9 = Redis.use(redisdb).getJedis(); try { String str = null; for (int i = 0; i < 10; ++i) { String hp_mgr_upper_key = String.format("g%s:hp_mgr:upper:d%s", groupId, beginTime); String hp_mgr_sub_key = String.format("g%s:hp_mgr:sub:d%s", groupId, beginTime); str = jedis9.get(hp_mgr_upper_key); if (StringUtil.isNotEmpty(str)) { upper_count += Long.parseLong(str); } str = jedis9.get(hp_mgr_sub_key); if (StringUtil.isNotEmpty(str)) { sub_count += Long.parseLong(str); } beginTime += 24 * 3600; } String hp_cost_key = String.format("g%s:hp_cost:d%s", groupId, DateUtils.getBeginDay()); long hp_cost_count = 0; str = jedis9.get(hp_cost_key); if (StringUtil.isNotEmpty(str)) { hp_cost_count += Long.parseLong(str); } hp_cost_key = String.format("g%s:hp_cost:d%s", groupId, DateUtils.getBeginLastday()); long last_hp_cost_count = 0; str = jedis9.get(hp_cost_key); if (StringUtil.isNotEmpty(str)) { last_hp_cost_count += Long.parseLong(str); } ITObject resData = TObject.newInstance(); resData.putLong("hp_cost", hp_cost_count); resData.putLong("last_hp_cost", last_hp_cost_count); resData.putLong("hp_upper", upper_count); resData.putLong("hp_sub", sub_count); return resData; } finally { jedis9.close(); } } /** * 获取体力值管理员详细信息 * * @param jedis9 * @param groupId * @param uid * @param beginTime * @param endTime * @param mgr * @return */ private static final ITObject _getHpLogMgrInfo(Jedis jedis9, int groupId, int uid, int beginTime, int endTime, boolean mgr) { long upper_count = 0; long sub_count = 0; AccountBean acc = AccountCache.getAccount(uid); String str = null; int tem = beginTime; int tem_day = (endTime - beginTime) / 86400; String hp_key = mgr ? "hp_mgr" : "hp_par"; for (int k = 0; k < tem_day; ++k) { String hp_mgr_upper_key = String.format("g%s:%s:upper:u%s:d%s", groupId, hp_key, uid, tem); String hp_mgr_sub_key = String.format("g%s:%s:sub:u%s:d%s", groupId, hp_key, uid, tem); str = jedis9.get(hp_mgr_upper_key); if (StringUtil.isNotEmpty(str)) { upper_count += Long.parseLong(str); } str = jedis9.get(hp_mgr_sub_key); if (StringUtil.isNotEmpty(str)) { sub_count += Long.parseLong(str); } tem += 86400; } ITObject info = TObject.newInstance(); info.putLong("hp_upper", upper_count); info.putLong("hp_sub", sub_count); info.putString("nick", acc.nick); if (mgr) { String gm_key = "gm_" + groupId + "_" + uid; String lev_str = Redis.use("group1_db10").hget(gm_key, "lev"); info.putInt("lev", StringUtil.isEmpty(lev_str) ? 2 : Integer.parseInt(lev_str)); } return info; } /** * 获取体力值管理员详细信息 * * @param groupId * @param uid 操作人 * @param beginTime * @param endTime * @param type 1 管理员 2合伙人 * @return * @throws Exception */ public static final ITArray getHpLogMgrInfo(int groupId, int uid, int beginTime, int endTime, int type) throws Exception { if (type == 1) { String sql = String.format("SELECT uid FROM group_member WHERE groupId =%s AND lev <3", groupId); ITArray arr = DataBase.use().executeQueryByTArray(sql); Jedis jedis9 = Redis.use(redisdb).getJedis(); try { ITArray list = TArray.newInstance(); for (int i = 0; i < arr.size(); ++i) { ITObject obj = arr.getTObject(i); ITObject info = _getHpLogMgrInfo(jedis9, groupId, obj.getInt("uid"), beginTime, endTime, type == 1); list.addTObject(info); } return list; } finally { jedis9.close(); } } else { Jedis jedis9 = Redis.use(redisdb).getJedis(); try { ITArray list = TArray.newInstance(); ITObject info = _getHpLogMgrInfo(jedis9, groupId, uid, beginTime, endTime, type == 1); list.addTObject(info); return list; } finally { jedis9.close(); } } } /** * 体力值抽水记录 * * @param groupId * @param tagId * @param limit * @param num * @param choose * @return */ public static final ITObject getHpLogPumpInfo(int groupId, int uids, int limit, int num, int beginTime, int endTime) throws Exception { String where_sql = String.format("WHERE gid = %s and reason = %s and time>=%s and time <=%s", groupId, ConsumeCode.HP_PUMP, beginTime, endTime); String sql = String.format("SELECT uid,hp,roomid,pid,time FROM group_hp_log %s ORDER BY time desc limit %s,%s", where_sql, limit, num); ITArray arr = DataBase.use().executeQueryByTArray(sql); for (int i = 0; i < arr.size(); ++i) { ITObject obj = arr.getTObject(i); int uid = obj.getInt("uid"); AccountBean acc = AccountCache.getAccount(uid); obj.putString("nick", acc.nick); } int hp_cost = 0; int hp_reward = 0; int count = 0; int valid_count = 0; int reward_hpnum = 0; if (limit == 0) { Jedis jedis9 = Redis.use(redisdb).getJedis(); try { String hp_cost_key = String.format("g%s:hp_cost", groupId); String hp_reward_key = String.format("g%s:hp_reward", groupId); String total_round = String.format("g%s:round", groupId); String valid_round = String.format("g%s:valid_room", groupId); // log.info("盟主号大赢家总数:" + _getCountValue(jedis9, valid_round, beginTime, endTime)); valid_count = _getCountValue(jedis9, valid_round, beginTime, endTime); GroupBean gb = GroupCache.getGroup(groupId); String roundSql = "select ifnull(sum(round_cnt),0) round_cnt,ifnull(sum(bigwin_cnt),0) bigwin_cnt from team_round_stat_day where uid=" + gb.owner + " and stat_day>=" + beginTime + " and stat_day<" + endTime; log.info("盟主号大赢家总数SQL:" + roundSql); // String reward_hp = String.format("g{%s}:m%s:", groupId,uids); hp_cost = _getCountValue(jedis9, hp_cost_key, beginTime, endTime); hp_reward = _getCountValue(jedis9, hp_reward_key, beginTime, endTime); count = _getCountValue(jedis9, total_round, beginTime, endTime); ITArray roundArr = DataBase.use().executeQueryByTArray(roundSql); if (roundArr.size() > 0) { ITObject userData = roundArr.getTObject(0); valid_count = userData.getDouble("bigwin_cnt").intValue() > 0 ? userData.getDouble("bigwin_cnt").intValue() : 0; count = userData.getDouble("round_cnt").intValue() > 0 ? userData.getDouble("round_cnt").intValue() : count; } // log.info("盟主号大赢家总数SQL:" + valid_count); // reward_hpnum = _getCountValue(jedis9,reward_hp + // "reward_log",beginTime,endTime); } finally { jedis9.close(); } } ITObject resData = TObject.newInstance(); resData.putInt("limit", limit); resData.putTArray("hp_logs", arr); // 计算群主每日抽水 GroupBean gb = GroupCache.getGroup(groupId); String pumpwhere_sql = String.format( " WHERE gid = %s and uid=%s and reason = %s and time>=%s and time <=%s AND info != '' ", groupId, gb.owner, ConsumeCode.HP_PARTNER_REWARD, beginTime, endTime); String pumpsql = String.format("SELECT ifnull(sum(hp),0) as hp FROM group_hp_log %s ", pumpwhere_sql); ITArray resultArray = DataBase.use().executeQueryByTArray(pumpsql); if (resultArray.size() == 0) { resData.putInt("pump", 0); } else { ITObject dbData = resultArray.getTObject(0); Double pump = dbData.getDouble("hp"); String xipaiwhere_sql = String.format( " WHERE gid = %s and reason in(%s,%s) and time>=%s and time <=%s AND info != '' ", groupId, ConsumeCode.HP_XIPAI_PUMP,ConsumeCode.HP_PARTNER_XIPAI_REWARD_BACK, beginTime, endTime); String xipaisql = String.format("SELECT ifnull(sum(hp),0) as hp FROM group_hp_log %s ", xipaiwhere_sql); ITArray xipaiArray = DataBase.use().executeQueryByTArray(xipaisql); if (xipaiArray.size() == 0) { // 获得赠送 resData.putDouble("pump", pump); } else { ITObject xipaiData = xipaiArray.getTObject(0); // 获得赠送 resData.putDouble("pump", pump - xipaiData.getDouble("hp")); } } // resData.putInt("pump", hp_cost); String rewardsql = String.format( " SELECT -sum(win_score+round_reward) reward FROM `team_round_stat_day` WHERE stat_day >= %s AND stat_day < %s and uid!=%s", beginTime, endTime,gb.owner); // log.info("rewardsql:" + rewardsql); ITArray rewardArray = DataBase.use().executeQueryByTArray(rewardsql); if(rewardArray.size()!=0) { ITObject rewardData = rewardArray.getTObject(0); // log.info("reward:" + rewardData.getDouble("reward") ); resData.putDouble("pump", rewardData.getDouble("reward") ); } resData.putInt("gains", hp_cost - hp_reward); // 总数 resData.putInt("count", count); // 场次 // log.info("valid_count:" + valid_count); // log.info("hp_cost - hp_reward:" + (hp_cost - hp_reward)); resData.putInt("valid_count", valid_count); return resData; } /** * 体力值详情 * * @param groupId * @param tagId * @param limit * @param num * @param choose * @return */ public static final ITObject getHpLogInfo(int groupId, int tagId, int limit, int num, int choose, int beginTime, int endTime) throws Exception { String reason_sql = StringUtil.Empty; if ((choose & CHOOSE_UPPER) != 0) { reason_sql += ConsumeCode.HP_MGR_UPPER + "," + ConsumeCode.HP_PARTNER_UPPER + ","; reason_sql += ConsumeCode.HP_MGR_SUB + "," + ConsumeCode.HP_PARTNER_SUB + ","; } if ((choose & CHOOSE_SUB) != 0) { reason_sql += ConsumeCode.HP_MGR_SUB + "," + ConsumeCode.HP_PARTNER_SUB + ","; } if ((choose & CHOOSE_PUMP) != 0) { reason_sql += ConsumeCode.HP_PUMP + ","; } if ((choose & CHOOSE_RWARD) != 0) { reason_sql += ConsumeCode.HP_PARTNER_REWARD + ","; } if ((choose & CHOOSE_CHAGE) != 0) { reason_sql += ConsumeCode.HP_PUMP_TOTAL + ","; reason_sql += ConsumeCode.HP_PUMP_BAODI + ","; } if ((choose & CHOOSE_TRADE) != 0) { reason_sql += ConsumeCode.HP_TRADE + ","; } if ((choose & CHOOSE_TAKE_REWARD) != 0) { reason_sql += ConsumeCode.HP_TAKE_REWARD + ","; } if ((choose & CHOOSE_XIPAI) != 0) { reason_sql += ConsumeCode.HP_PARTNER_XIPAI_REWARD + ","; } // reason_sql +=ConsumeCode.HP_CLEARING+ ","; if (StringUtil.isNotEmpty(reason_sql)) { reason_sql = reason_sql.substring(0, reason_sql.length() - 1); } else { reason_sql = "0"; } // int time = DateUtils.getBeginDay() - 2 * 24 * 3600; String where_sql = String.format("WHERE gid = %s and uid =%s and reason in(%s) and time > %s and time < %s", groupId, tagId, reason_sql, beginTime, endTime); String sql = String.format("SELECT pid,mgr_id,hp,reason,cur_hp,time,info,roomid " + "FROM group_hp_log %s " + "ORDER BY time desc " + "limit %s,%s", where_sql, limit, num); // log.info("getHpLogInfo sql:" + sql); ITArray arr = DataBase.use().executeQueryByTArray(sql); for (int i = 0; i < arr.size(); ++i) { ITObject obj = arr.getTObject(i); int mgr_id = obj.getInt("mgr_id"); if (mgr_id > 0) { AccountBean acc = AccountCache.getAccount(obj.getInt("mgr_id")); obj.putString("m_nick", acc.nick); } } ITObject resData = TObject.newInstance(); resData.putInt("limit", limit); resData.putTArray("hp_logs", arr); return resData; } /** * 体力值详情 * * @param groupId * @param tagId * @param limit * @param num * @param choose * @return */ public static final ITObject getHpLogDetailInfo(int groupId, int tagId, String roomId, int time) throws Exception { String reason_sql = StringUtil.Empty; reason_sql += ConsumeCode.HP_CLEARING + ","; reason_sql += ConsumeCode.HP_PUMP + ","; reason_sql += ConsumeCode.HP_XIPAI_PUMP + ","; // reason_sql += ConsumeCode.HP_PUMP_BAODI + ","; if (StringUtil.isNotEmpty(reason_sql)) { reason_sql = reason_sql.substring(0, reason_sql.length() - 1); } else { reason_sql = "0"; } String where_sql = String.format( "WHERE gid = %s and uid =%s and reason in(%s) and roomId ='%s' and time >= %s and time <= %s and hp!=0", groupId, tagId, reason_sql, roomId, time - 7200, time + 3600); String sql = String.format( "SELECT mgr_id,hp,reason,cur_hp,time,info,roomid " + "FROM group_hp_log %s " + "ORDER BY time desc", where_sql); // log.info("详情sql:"+sql); try { ITArray arr = DataBase.use().executeQueryByTArray(sql); for (int i = 0; i < arr.size(); ++i) { ITObject obj = arr.getTObject(i); int mgr_id = obj.getInt("mgr_id"); if (mgr_id > 0) { AccountBean acc = AccountCache.getAccount(obj.getInt("mgr_id")); obj.putString("m_nick", acc.nick); } } ITObject resData = TObject.newInstance(); resData.putTArray("hp_logs", arr); return resData; } catch (Exception e) { log.info("sql error:" + sql); log.error(e); } ITObject resData = TObject.newInstance(); return resData; } private static final int _getCountValue(Jedis jedis9, String key, int beginTime, int endTime) { String str = null; int tem = beginTime; int tem_day = (endTime - beginTime) / 86400; int count = 0; for (int k = 0; k < tem_day; ++k) { String tem_key = String.format("%s:d%s", key, tem); str = jedis9.get(tem_key); if (StringUtil.isNotEmpty(str)) { count += Integer.parseInt(str); } tem += 86400; } return count; } private static final int _getValue(Jedis jedis9, String key) { int count = 0; String str = jedis9.get(key); if (StringUtil.isNotEmpty(str)) { count = Integer.parseInt(str); } return count; } private static final int _getCountNumValue(Jedis jedis9, String key, int beginTime, int endTime) { String str = null; int tem = beginTime; int tem_day = (endTime - beginTime) / 86400; int count = 0; for (int k = 0; k < tem_day; ++k) { String tem_key = String.format("%s:d%s", key, tem); str = jedis9.get(tem_key); if (StringUtil.isNotEmpty(str)) { count++; } tem += 86400; } return count; } private static final int _getNumValue(Jedis jedis9, String key) { int count = 0; String str = jedis9.get(key); if (StringUtil.isNotEmpty(str)) { count++; } return count; } /** * 获取奖励日志 * * @param groupId * @param tagId * @param limit * @param num * @param beginTime * @param endTime * @return * @throws Exception */ public static final ITObject getRewardLog(int groupId, int tagId, int limit, int num, int beginTime, int endTime) throws Exception { String where_sql = String.format( "WHERE gid = %s and (reason = %s or reason = %s ) and time>=%s and time <=%s and uid=%s and hp != 0", groupId, ConsumeCode.HP_PARTNER_REWARD, ConsumeCode.HP_PARTNER_XIPAI_REWARD, beginTime, endTime, tagId); int total_num = 0; int total_hp = 0; if (limit == 0) { String count_sql = String.format( "SELECT IFNULL(SUM(round),0) AS num,IFNULL(SUM(hp),0) AS total_hp FROM group_hp_log %s", where_sql); ITArray arr = DataBase.use().executeQueryByTArray(count_sql); if (arr.size() > 0) { ITObject obj = arr.getTObject(0); total_num = obj.getDouble("num").intValue(); total_hp = obj.getDouble("total_hp").intValue(); } } String sql = String.format( "SELECT hp,pid,roomid,time,round,reason,info FROM group_hp_log %s ORDER BY time desc limit %s,%s", where_sql, limit, num); ITArray arr = DataBase.use().executeQueryByTArray(sql); ITObject resData = TObject.newInstance(); resData.putInt("limit", limit); resData.putTArray("reward_logs", arr); resData.putInt("total_num", total_num); resData.putInt("total_hp", total_hp); return resData; } /** * 奖励统计 * * @param groupId * @param pid * @param beginTime * @param endTime * @return */ public static final ITObject getRewardLogCount(int groupId, int pid, int beginTime, int endTime) { String p_key = pid > 0 ? (":p" + pid) : StringUtil.Empty; String valid_key = String.format("g%s:valid_room%s", groupId, p_key); String round_key = String.format("g%s:round%s", groupId, p_key); String hp_cost_key = String.format("g%s:hp_cost%s", groupId, p_key); String hp_reward_key = String.format("g%s:hp_reward%s", groupId, p_key); Jedis jedis9 = Redis.use(redisdb).getJedis(); try { int v_round = _getCountValue(jedis9, valid_key, beginTime, endTime); int round = _getCountValue(jedis9, round_key, beginTime, endTime); int hp_cost = _getCountValue(jedis9, hp_cost_key, beginTime, endTime); int hp_reward = _getCountValue(jedis9, hp_reward_key, beginTime, endTime); ITObject resData = TObject.newInstance(); resData.putInt("v_round", v_round); resData.putInt("round", round); resData.putInt("hp_cost", hp_cost); resData.putInt("gains", hp_cost - hp_reward); return resData; } finally { jedis9.close(); } } /** * 体力值提取记录 * * @param groupId * @param tagid * @param limit * @param num * @param beginTime * @param endTime * @return * @throws Exception */ public static final ITObject getHpLogTakeInfo(int groupId, int uid, int tagId, int limit, int num, int beginTime, int endTime) throws Exception { Jedis jedis10 = Redis.use("group1_db10").getJedis(); try { GroupMemberBean uid_bean = GroupCache.getMember(groupId, uid); if (uid_bean == null) { throw new WebException(ErrorCode.GROUP_NOT_MEMBER); } if (uid_bean.lev >= 3) { List par_list = Utility.getMemberParents(jedis10, groupId, tagId, true); if (par_list == null || !par_list.contains(uid)) { throw new WebException(ErrorCode.GROUP_NOT_PERMISSION); } } } finally { jedis10.close(); } String where_sql = String.format("WHERE gid = %s and uid=%s and reason = %s and time>=%s and time <=%s", groupId, tagId, ConsumeCode.HP_TAKE_REWARD, beginTime, endTime); String sql = String.format("SELECT hp,time FROM group_hp_log %s ORDER BY time desc limit %s,%s", where_sql, limit, num); ITArray arr = DataBase.use().executeQueryByTArray(sql); ITObject resData = TObject.newInstance(); resData.putInt("limit", limit); resData.putTArray("hp_logs", arr); return resData; } public static final ITObject getHpLogTakeBankInfo(int groupId, int uid, int tagId, int limit, int num, int beginTime, int endTime) throws Exception { Jedis jedis10 = Redis.use("group1_db10").getJedis(); try { GroupMemberBean uid_bean = GroupCache.getMember(groupId, uid); if (uid_bean == null) { throw new WebException(ErrorCode.GROUP_NOT_MEMBER); } if (uid_bean.lev >= 3 && uid != tagId) { List par_list = Utility.getMemberParents(jedis10, groupId, tagId, true); if (par_list == null || !par_list.contains(uid)) { throw new WebException(ErrorCode.GROUP_NOT_PERMISSION); } } } finally { jedis10.close(); } String where_sql = String.format( "WHERE gid = %s and uid=%s and (reason = %s or reason = %s) and time>=%s and time <=%s", groupId, tagId, ConsumeCode.HP_TAKE_BANK, ConsumeCode.HP_SAVE_BANK, beginTime, endTime); String sql = String.format("SELECT hp,time FROM group_hp_log %s ORDER BY time desc limit %s,%s", where_sql, limit, num); ITArray arr = DataBase.use().executeQueryByTArray(sql); ITObject resData = TObject.newInstance(); resData.putInt("limit", limit); resData.putTArray("hp_logs", arr); return resData; } /** * 获取消耗统计 * * @param groupId * @return */ public static final ITArray getCostCount(int groupId, int uid, int beginTime, int endTime) { String gp_key = GroupCache.genPidsKey(groupId); Set pids = Redis.use("group1_db11").zrangeByScore(gp_key, 10, 11); GroupMemberBean uid_bean = GroupCache.getMember(groupId, uid); Jedis jedis9 = Redis.use(redisdb).getJedis(); ITArray arr = TArray.newInstance(); try { if (uid_bean.lev < 3) { for (String pid : pids) { ITObject obj = TObject.newInstance(); String round_key = String.format("g%s:round:p%s", groupId, pid); obj.putInt("round", _getCountValue(jedis9, round_key, beginTime, endTime) * 100); String valid_key = String.format("g%s:valid_room:p%s", groupId, pid); obj.putInt("valid", _getCountValue(jedis9, valid_key, beginTime, endTime) * 100); String no_valid_key = String.format("g%s:no_valid_room:p%s", groupId, pid); obj.putInt("no_valid", _getCountValue(jedis9, no_valid_key, beginTime, endTime) * 100); String diamo_cost_key = String.format("g%s:diamo_cost:p%s", groupId, pid); obj.putInt("diamo_cost", _getCountValue(jedis9, diamo_cost_key, beginTime, endTime) * 100); obj.putInt("pid", Integer.parseInt(pid)); arr.addTObject(obj); } } else { for (String pid : pids) { ITObject obj = TObject.newInstance(); String round_key = String.format("g{%s}:m%s:valid_round2:p%s", groupId, uid, pid); int all_round = _getCountValue(jedis9, round_key, beginTime, endTime); obj.putInt("round", all_round * 100); String valid_key = String.format("g{%s}:m%s:valid_round2:p%s", groupId, uid, pid); int valid = _getCountValue(jedis9, valid_key, beginTime, endTime); obj.putInt("valid", valid * 100); int no_valid_key = all_round - valid; obj.putInt("no_valid", no_valid_key * 100); String diamo_cost_key = String.format("g{%s}:m%s:valid_diamo:p%s", groupId, uid, pid); obj.putInt("diamo_cost", _getCountValue(jedis9, diamo_cost_key, beginTime, endTime)); obj.putInt("pid", Integer.parseInt(pid)); arr.addTObject(obj); } } } finally { jedis9.close(); } // log.info("玩法统计:" + arr); return arr; } /** * 获取局数统计 * * @param groupId * @return */ public static final ITArray getRoundCount(int groupId, int pid) { int bengin = DateUtils.getBeginDay() - 29 * 86400; Jedis jedis9 = Redis.use(redisdb).getJedis(); ITArray arr = TArray.newInstance(); try { String p_key = pid > 0 ? (":p" + pid) : StringUtil.Empty; for (int i = 0; i < 30; ++i) { String round_key = String.format("g%s:round%s:d%s", groupId, p_key, bengin); String r_str = jedis9.get(round_key); ITObject obj = TObject.newInstance(); obj.putInt("time", bengin); int r_num = 0; if (StringUtil.isNotEmpty(r_str)) { r_num = Integer.parseInt(r_str); } obj.putInt("num", r_num); arr.addTObject(obj); bengin += 86400; } } finally { jedis9.close(); } return arr; } /** * 获取体力值消耗统计 * * @param groupId * @return */ public static final ITArray getHpConsumeCount(int groupId, int uid) { int bengin = DateUtils.getBeginDay() - 2 * 86400; Jedis jedis9 = Redis.use(redisdb).getJedis(); ITArray arr = TArray.newInstance(); try { String key = String.format("g%s:m%s:consume_hp", groupId, uid); for (int i = 0; i < 3; ++i) { String hp_key = String.format("%s:d%s", key, bengin); String r_str = jedis9.get(hp_key); ITObject obj = TObject.newInstance(); obj.putInt("time", bengin); int r_num = 0; if (StringUtil.isNotEmpty(r_str)) { r_num = Integer.parseInt(r_str); } obj.putInt("num", r_num); arr.addTObject(obj); bengin += 86400; } } finally { jedis9.close(); } return arr; } /** * 获取体力值统计信息 * * @param groupId * @return * @throws Exception */ public static final ITObject getHpCountInfo(int groupId) throws Exception { String sql = String.format("SELECT uid FROM group_member WHERE groupId=%s" + " AND partnerLev >0", groupId); ITArray list = DataBase.use().executeQueryByTArray(sql); Jedis jedis10 = Redis.use("group1_db10").getJedis(); int _t_hp = 0; try { for (int i = 0; i < list.size(); ++i) { ITObject obj = list.getTObject(i); int parentId = obj.getInt("uid"); String key = String.format("g{%s}:m%s:reward_hp", groupId, parentId); String r_hp = jedis10.get(key); if (StringUtil.isNotEmpty(r_hp)) { _t_hp += Integer.parseInt(r_hp); } } } finally { jedis10.close(); } String where = String.format("FROM group_member WHERE groupId = %s", groupId); String count_sql = String.format("SELECT (SELECT IFNULL(SUM(hp),0) %s AND hp >0) t_hp1," + " (SELECT IFNULL(SUM(ABS(hp)),0) %s AND hp <0) t_hp2", where, where); ITArray arr = DataBase.use().executeQueryByTArray(count_sql); ITObject obj1 = TObject.newInstance(); if (arr.size() > 0) { ITObject obj = arr.getTObject(0); obj1.putLong("hp_num1", obj.getDouble("t_hp1").longValue()); obj1.putLong("hp_num2", obj.getDouble("t_hp2").longValue()); } else { obj1.putLong("hp_num1", 0); obj1.putLong("hp_num2", 0); } obj1.putLong("hp_num3", _t_hp); return obj1; } }