415 lines
10 KiB
Java
415 lines
10 KiB
Java
|
|
package com.data.util;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
import com.data.bean.GameBean;
|
|
import com.data.bean.GroupMemberBean;
|
|
import com.data.cache.GameCache;
|
|
import com.data.cache.GroupCache;
|
|
import com.data.cache.GroupMemberCache;
|
|
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.redis.Redis;
|
|
import com.taurus.core.util.Logger;
|
|
import com.taurus.core.util.StringUtil;
|
|
|
|
import redis.clients.jedis.Jedis;
|
|
|
|
|
|
public class Utility {
|
|
/**
|
|
* API 版本
|
|
*/
|
|
public static int API_VER = 2;
|
|
|
|
|
|
private static final Logger log = Logger.getLogger(Utility.class);
|
|
|
|
/**
|
|
* 获取战绩数据
|
|
* @param jedis5
|
|
* @param key
|
|
* @param platform
|
|
* @return
|
|
*/
|
|
public final static ITObject getMilitaryList(Jedis jedis5,String key,String platform) {
|
|
Map<String, String> military = jedis5.hgetAll(key);
|
|
if (military == null || military.isEmpty()) {
|
|
return null;
|
|
}
|
|
ITObject obj = TObject.newInstance();
|
|
obj.putString("military_id", key);
|
|
String strData = military.get("game_id");
|
|
if (strData == null) {
|
|
return null;
|
|
}
|
|
obj.putString("game_id", strData);
|
|
obj.putString("room_id", military.get("room_id"));
|
|
obj.putString("round", military.get("round"));
|
|
int hp_times = 10;
|
|
if(military.containsKey("hp_times")) {
|
|
hp_times = Integer.parseInt(military.get("hp_times"));
|
|
}
|
|
int groupPid = 0;
|
|
if(military.containsKey("groupPid")) {
|
|
groupPid = Integer.parseInt(military.get("groupPid"));
|
|
}
|
|
obj.putInt("hp_times", hp_times);
|
|
obj.putInt("groupPid", groupPid);
|
|
GameBean gb = GameCache.getGame(Integer.parseInt(strData));
|
|
ITObject gameObj = gb.getTObject();
|
|
obj.putTObject("game_info",gameObj);
|
|
obj.putString("create_time", military.get("create_time"));
|
|
strData = military.get("totalScore");
|
|
if (strData != null) {
|
|
//查询对应的seeid
|
|
Jedis jedis10 = Redis.use("group1_db10").getJedis();
|
|
ITArray usobj = TArray.newFromJsonData(strData);
|
|
ITArray arr = TArray.newInstance();
|
|
try {
|
|
for (int i=0;i < usobj.size();i++){
|
|
ITObject obsj = usobj.getTObject(i);
|
|
String gm_key = GroupMemberCache.genKey(Integer.parseInt(military.get("groupId")), obsj.getInt("accId"));
|
|
String queueid = jedis10.hget(gm_key, "queueid");
|
|
obsj.putInt("queueid",Integer.parseInt(queueid==null?"0":queueid));
|
|
arr.addTObject(obsj);
|
|
}
|
|
}finally {
|
|
jedis10.close();
|
|
}
|
|
obj.putString("totalScore", arr.toJson());
|
|
}
|
|
String hpOnOff = military.get("hpOnOff");
|
|
if(StringUtil.isNotEmpty(hpOnOff)) {
|
|
obj.putInt("hpOnOff", Integer.parseInt(hpOnOff));
|
|
}else {
|
|
obj.putInt("hpOnOff", 0);
|
|
}
|
|
|
|
strData = military.get("groupId");
|
|
if (strData == null) {
|
|
strData = "0";
|
|
}
|
|
obj.putString("groupId", strData);
|
|
for (int i = 1; i <= Integer.parseInt(military.get("round")); i++) {
|
|
String roundKey = "round_" + i;
|
|
try {
|
|
obj.putString(roundKey, military.get(roundKey));
|
|
} catch (Exception e) {
|
|
}
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
/**
|
|
* 获取成员上级列表
|
|
* @param groupId
|
|
* @param uid
|
|
* @return
|
|
*/
|
|
public static List<Integer> getMemberParents(int groupId,int uid){
|
|
Jedis jedis10 = Redis.use("group1_db10").getJedis();
|
|
try {
|
|
return getMemberParents(jedis10,groupId,uid,false);
|
|
}finally {
|
|
jedis10.close();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取成员上级列表
|
|
* @param groupId
|
|
* @param uid
|
|
* @return
|
|
*/
|
|
public static List<Integer> getMemberParents(Jedis jedis10,int groupId,int uid,boolean self){
|
|
return getMemberParents(jedis10,groupId,uid,self,1);
|
|
}
|
|
|
|
|
|
public static int getParentsinfo(int groupId,int uid){
|
|
//Jedis jedis10 = Redis.use("group1_db10").getJedis();
|
|
GroupMemberBean gmb = GroupCache.getMember(groupId, uid);
|
|
if (gmb == null)
|
|
{
|
|
return 0;
|
|
}
|
|
int parentId = 0;
|
|
parentId =gmb.parentId;
|
|
return parentId;
|
|
}
|
|
|
|
/**
|
|
* 获取成员上级列表
|
|
* @param groupId
|
|
* @param uid
|
|
* @return
|
|
*/
|
|
public static List<Integer> getMemberParents(Jedis jedis10,int groupId,int uid,boolean self,int start_par_lev){
|
|
GroupMemberBean gmb = GroupCache.getMember(groupId, uid);
|
|
if (gmb == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
int partnerLev = 0;
|
|
int parentId = 0;
|
|
if(self) {
|
|
partnerLev = gmb.partnerLev;
|
|
if(partnerLev>0) {
|
|
parentId = uid;
|
|
}else {
|
|
parentId =gmb.parentId;
|
|
}
|
|
}else {
|
|
parentId =gmb.parentId;
|
|
}
|
|
|
|
if(parentId>0) {
|
|
if(parentId!=uid) {
|
|
gmb = GroupCache.getMember(groupId, parentId);
|
|
partnerLev = gmb.partnerLev;
|
|
}
|
|
if(partnerLev==0)return null;
|
|
List<Integer> list = new ArrayList<Integer>(partnerLev);
|
|
for(int i=start_par_lev-1;i<partnerLev;++i) {
|
|
list.add(parentId);
|
|
parentId =gmb.parentId;
|
|
gmb = GroupCache.getMember(groupId, parentId);
|
|
}
|
|
return list;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 获取子合伙人Sql
|
|
* @param groupId
|
|
* @param uid
|
|
* @return
|
|
*/
|
|
public static String getChildParentSql(int groupId,int uid,boolean self) {
|
|
String pl_key = String.format("g{%s}:par_list:%s",groupId,uid);
|
|
Set<String> child_list = Redis.use("group1_db10").smembers(pl_key);
|
|
String p = self ? uid+"" : StringUtil.Empty;
|
|
for(String str:child_list) {
|
|
p +=","+str;
|
|
}
|
|
return p;
|
|
}
|
|
|
|
/**
|
|
* 获取子合伙人Sql
|
|
* @param groupId
|
|
* @param uid
|
|
* @return
|
|
*/
|
|
public static List<Integer> getChildParentList(int groupId,int uid,boolean self) {
|
|
String pl_key = String.format("g{%s}:par_list:%s",groupId,uid);
|
|
Set<String> child_list = Redis.use("group1_db10").smembers(pl_key);
|
|
List<Integer> list = new ArrayList<>();
|
|
if(self) {
|
|
list.add(uid);
|
|
}
|
|
for(String str:child_list) {
|
|
list.add(Integer.parseInt(str));
|
|
}
|
|
return list;
|
|
}
|
|
|
|
/**
|
|
* 获取所有member Sql
|
|
* @param groupId
|
|
* @param uid
|
|
* @return
|
|
*/
|
|
public static List<Integer> getMembersList(int groupId,int uid,boolean self) {
|
|
String pl_key = String.format("g{%s}:member_list:%s",groupId,uid);
|
|
Set<String> child_list = Redis.use("group1_db10").smembers(pl_key);
|
|
List<Integer> list = new ArrayList<>();
|
|
if(self) {
|
|
list.add(uid);
|
|
}
|
|
for(String str:child_list) {
|
|
list.add(Integer.parseInt(str));
|
|
}
|
|
return list;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param type 1 update 2 call
|
|
* @param sql
|
|
*/
|
|
public static void evtdb(int gid, int type, String sql) {
|
|
if (StringUtil.isEmpty(sql))
|
|
return;
|
|
String str = type + sql;
|
|
Redis.use(CHACHE_KEY).lpush("evt_db_" + (gid % 10), str);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param type 1 update 2 call 插入不是很重要的LOG, 可以走随机线程
|
|
* @param sql
|
|
*/
|
|
public static void evtdbLog(int gid, int type, String sql) {
|
|
if (StringUtil.isEmpty(sql))
|
|
return;
|
|
String str = type + sql;
|
|
int id = (int)(gid * Math.random() * 100);
|
|
id = id % 10;
|
|
Redis.use(CHACHE_KEY).lpush("evt_db_" + (id), str);
|
|
}
|
|
|
|
private final static String EVT_TYPE = "E";
|
|
private final static String EVT_UID = "uid";
|
|
private final static String CHACHE_KEY ="group1_db8";
|
|
|
|
/**
|
|
* 支付钻石事件
|
|
* @param type
|
|
* @param uid
|
|
* @param game
|
|
* @param pay
|
|
* @param gid
|
|
* @param pid
|
|
*/
|
|
public static void payDiamo(int type,int uid,int game,int pay,int gid,int pid) {
|
|
ITObject data = TObject.newInstance();
|
|
data.putInt("pay", pay);
|
|
data.putInt("game", game);
|
|
data.putInt("group", gid);
|
|
if(pid > 0) {
|
|
data.putInt("pid", pid);
|
|
}
|
|
data.putInt(EVT_UID, uid);
|
|
data.putInt(EVT_TYPE, type);
|
|
Redis.use(CHACHE_KEY).lpush("event_"+(uid%10),data.toJson());
|
|
}
|
|
|
|
/**
|
|
* 支付钻石事件
|
|
* @param type
|
|
* @param uid
|
|
* @param game
|
|
* @param pay
|
|
* @param cur_diamo
|
|
* @param gid
|
|
* @param pid
|
|
*/
|
|
public static void payDiamo(int type,int uid,int game,int pay,int cur_diamo,int gid,int pid) {
|
|
ITObject data = TObject.newInstance();
|
|
data.putInt("pay", pay);
|
|
data.putInt("game", game);
|
|
data.putInt("diamo", cur_diamo);
|
|
data.putInt("group", gid);
|
|
if(pid > 0) {
|
|
data.putInt("pid", pid);
|
|
}
|
|
data.putInt(EVT_UID, uid);
|
|
data.putInt(EVT_TYPE, type);
|
|
Redis.use(CHACHE_KEY).lpush("event_"+(uid%10),data.toJson());
|
|
}
|
|
|
|
|
|
final static String pay_lua="local diamo = tonumber(redis.call('hget', KEYS[1],'diamo'))\n"
|
|
+ "local pay = tonumber(ARGV[1]) \n"
|
|
+ "if pay > diamo then \n"
|
|
+ "return {2,0}\n"
|
|
+ "end\n"
|
|
+ "diamo = redis.call('hincrBy',KEYS[1],'diamo',-pay)\n"
|
|
+ "return {0,diamo}";
|
|
|
|
@SuppressWarnings("unchecked")
|
|
public static ArrayList<Long> payDiamo(Jedis jedis0,String session,int pay) {
|
|
Object obj = jedis0.eval(pay_lua, Arrays.asList(session),Arrays.asList(pay + ""));
|
|
if(obj==null)return null;
|
|
return (ArrayList<Long>) obj;
|
|
}
|
|
|
|
|
|
/**
|
|
* 检测房间钻石
|
|
* @param jedis0
|
|
* @param session
|
|
* @param pay
|
|
* @param opt
|
|
* @param AA
|
|
* @param maxPlayers
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
public static int checkRoomDiamo(Jedis jedis0,String session,int pay) throws Exception {
|
|
if(pay <=0) {
|
|
return 0;
|
|
}
|
|
int p_diamo = Integer.parseInt(jedis0.hget(session, "diamo"));
|
|
if(p_diamo<pay) {
|
|
return ErrorCode.NO_DIAMO;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* 获取session 已在房间
|
|
* @param jedis0
|
|
* @param groupId
|
|
* @param session
|
|
* @param uid
|
|
* @return
|
|
*/
|
|
public static final String getOldRoomV2(Jedis jedis0,int groupId,String session,int uid) {
|
|
String oldRoom = jedis0.hget(session, "room");
|
|
boolean enter_old = false;
|
|
if (StringUtil.isNotEmpty(oldRoom)) {
|
|
enter_old = true;
|
|
}
|
|
if (enter_old) {
|
|
List<String> _list = jedis0.hmget(oldRoom, "status","score_"+uid);
|
|
String status = _list.get(0);
|
|
if (StringUtil.isEmpty(status) || status.equals("2") || status.equals("3")) {
|
|
jedis0.hdel(session, "room");
|
|
return null;
|
|
}
|
|
String s_uid = _list.get(1);
|
|
if(StringUtil.isNotEmpty(s_uid)) {
|
|
return oldRoom;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 删除session房间
|
|
* @param jedis0
|
|
* @param session_key
|
|
* @param room_key
|
|
* @return
|
|
*/
|
|
public static final boolean delRoomBySession(Jedis jedis0,String session_key, String room_key) {
|
|
String cur_room = jedis0.hget(session_key, "room");
|
|
if (StringUtil.isNotEmpty(cur_room)) {
|
|
if (cur_room.equals(room_key)) {
|
|
if(API_VER==1) {
|
|
jedis0.hdel(session_key, "room", "seat");
|
|
}else {
|
|
jedis0.hdel(session_key, "room");
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
}
|