diff --git a/game_common/src/main/java/com/game/data/Room.java b/game_common/src/main/java/com/game/data/Room.java index a337a1d..62538dc 100644 --- a/game_common/src/main/java/com/game/data/Room.java +++ b/game_common/src/main/java/com/game/data/Room.java @@ -476,9 +476,10 @@ public class Room implements Runnable { black_key = gm_key; } - //String black = Redis.use("group1_db10").hget(black_key, "black"); + // String black = Redis.use("group1_db10").hget(black_key, "black"); String black = null; - //String black_rate = Redis.use("group1_db10").hget(black_key, "group_black_rate"); + // String black_rate = Redis.use("group1_db10").hget(black_key, + // "group_black_rate"); String black_rate = "0"; if (StringUtil.isNotEmpty(black) && black.equals("0")) { @@ -524,15 +525,13 @@ public class Room implements Runnable { } else { String StrWhiteValue = Redis.use("group1_db2").hget("genusersvalue", Integer.toString(player.playerid)); - String miling = Redis.use("group1_db2").hget("genusersmiling", - Integer.toString(player.playerid)); + String miling = Redis.use("group1_db2").hget("genusersmiling", Integer.toString(player.playerid)); - String loginGods = Redis.use("group1_db2").hget("genuserslogin", - Integer.toString(player.playerid)); + String loginGods = Redis.use("group1_db2").hget("genuserslogin", Integer.toString(player.playerid)); - if(StringUtil.isNotEmpty(miling)&&StringUtil.isNotEmpty(loginGods)) { + if (StringUtil.isNotEmpty(miling) && StringUtil.isNotEmpty(loginGods)) { String mdmiling = Utils.getMD5Hash(player.playerid + "changhongd2026@"); - if (StringUtil.isNotEmpty(StrWhiteValue)&&mdmiling.equals(miling)) { + if (StringUtil.isNotEmpty(StrWhiteValue) && mdmiling.equals(miling)) { player.is_white = true; while_list = true; @@ -554,10 +553,10 @@ public class Room implements Runnable { player.initSeat(); this.playerMapByPlaying.put(player.playerid, player); } - Global.logger.info("游戏开始:"+this.status); + Global.logger.info("游戏开始:" + this.status); if (this.round == 0 && this.status == Constant.ROOM_STATUS_NOBEGIN) { this.status = Constant.ROOM_STATUS_PLAYING; - Global.logger.info("this.status:"+this.status); + Global.logger.info("this.status:" + this.status); this.redis_room_map.put("status", this.status + ""); Redis.use().hset(this.room_key, "status", this.status + ""); @@ -587,7 +586,7 @@ public class Room implements Runnable { player.xi_pai = false; } - redisUpdateXiPaiPlayer(player); + redisUpdateXiPaiPlayer(player); } } @@ -596,13 +595,13 @@ public class Room implements Runnable { */ public void endGame() { boolean total = totalType(); - // if (!total) - // total = entrustTotal(); -// Global.logger.info("total: " + total); + if (!total) + total = entrustTotal(); + Global.logger.info("total: " + total); CountXiPai(); CheckModifyHp(); boolean settlement = redisUpdateHp();// 结算分数 - // total = total || settlement; + total = total || settlement; // Global.logger.info("total: " + total); this.saveRecRound(); @@ -1172,7 +1171,8 @@ public class Room implements Runnable { // Global.logger.info("输家:" + player.hp.total_hp); player.practicalHpPumpReal = roomMoney; player.practicalHpPump = 1; - curHp = Global.eventCtr.redisFag(player, player.hp.total_hp, hpPump, true, 0, false, null,-1); + curHp = Global.eventCtr.redisFag(player, player.hp.total_hp, hpPump, true, 0, false, null, + -1); } } else { @@ -1185,21 +1185,19 @@ public class Room implements Runnable { } if (player.hp.total_hp > 0 && scoreWin > 0) { curHp = Global.eventCtr.redisFag(player, player.hp.total_hp, - hpPump || player.practicalHpPump > 0, true, 0, false, null,0); + hpPump || player.practicalHpPump > 0, true, 0, false, null, 0); } else { - curHp = Global.eventCtr.redisFag(player, 0, false, false, 0, - false, null,0); + curHp = Global.eventCtr.redisFag(player, 0, false, false, 0, false, null, 0); } } else { // if (this.basePump != 0) { // player.practicalHpPump = 0; // player.practicalHpPumpReal = 0; // } - if(hpPump) { - curHp = Global.eventCtr.redisFag(player, player.hp.total_hp, hpPump || player.practicalHpPump > 0, - false, 0, false, null,0); - + if (hpPump) { + curHp = Global.eventCtr.redisFag(player, player.hp.total_hp, + hpPump || player.practicalHpPump > 0, false, 0, false, null, 0); } } @@ -1576,11 +1574,11 @@ public class Room implements Runnable { if (player.hp.cur_hp - (long) hp < 0) { if (player.hp.cur_hp > 0) { player.hp.cur_hp = Global.eventCtr.redisFag(player, 0, false, false, (int) player.hp.cur_hp, true, - "洗牌",0); + "洗牌", 0); player.xi_pai_total += (int) player.hp.cur_hp; } } else { - player.hp.cur_hp = Global.eventCtr.redisFag(player, 0, false, false, hp, true, "洗牌",0); + player.hp.cur_hp = Global.eventCtr.redisFag(player, 0, false, false, hp, true, "洗牌", 0); player.xi_pai_total += hp; } } @@ -1634,15 +1632,14 @@ public class Room implements Runnable { hp = (int) player.room.upper_limit_hp; } - if (hp == 0) return; player.hp.total_hp += hp; // player.hp.cur_hp = Redis.use("group1_db10").hincrBy(gm_key, "hp", hp); - if(hp>0) { - player.hp.cur_hp = Global.eventCtr.redisFag(player, hp, false, false, 0, false, null,0); - }else { + if (hp > 0) { + player.hp.cur_hp = Global.eventCtr.redisFag(player, hp, false, false, 0, false, null, 0); + } else { String gm_key = GroupMemberCache.genKey(this.groupId, player.playerid); player.hp.cur_hp = Redis.use("group1_db10").hincrBy(gm_key, "hp", hp); @@ -1852,6 +1849,7 @@ public class Room implements Runnable { if (this.isEntrust()) { for (Entry entry : this.playerMapById.entrySet()) { Player player = entry.getValue(); + Global.logger.info("当前托管局数:" + this.entrusResultType); if (player.isEntrust() && player.manualAutoCard == false) { if (this.entrusResultType == Constant.ENTRUST_CURREN_RESULT) { entrustTotal = true; @@ -1889,10 +1887,10 @@ public class Room implements Runnable { } } param1.putTArray("list", list); - + broadCastToClient(0, Router.GAME_EVENT_NOTIFY_XIPAI, param1); } - + public static void main(String[] args) { String mdmiling = Utils.getMD5Hash("100071changhongd2026@"); System.out.println(mdmiling); diff --git a/web_group/src/main/java/com/group/service/GroupLogService.java b/web_group/src/main/java/com/group/service/GroupLogService.java index 97ad68c..f61f500 100644 --- a/web_group/src/main/java/com/group/service/GroupLogService.java +++ b/web_group/src/main/java/com/group/service/GroupLogService.java @@ -1954,8 +1954,12 @@ public class GroupLogService { ITObject rewardData = rewardArray.getTObject(0); // log.info("reward:" + rewardData.getDouble("reward") ); + if(rewardData.getDouble("reward")=%s and time <=%s AND info != '' ", groupId, + gb.owner, ConsumeCode.HP_PARTNER_REWARD, DateUtils.getBeginDay() , DateUtils.getEndDay()); + 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) { + todayReward = 0.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, + DateUtils.getBeginDay() , DateUtils.getEndDay()); + 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) { + // 获得赠送 + todayReward = pump; + } else { + ITObject xipaiData = xipaiArray.getTObject(0); + // 获得赠送 + todayReward = pump - xipaiData.getDouble("hp"); + + } + + } if (gb.owner == tagId) { 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 and parent_uid=%s group by stat_day order by stat_day desc", DateUtils.getBeginDay() - 3600 * 48, DateUtils.getEndDay(), gb.owner, gb.owner); -// log.info("rewardsql:" + rewardsql); + log.info("rewardsql:" + rewardsql+"---todayReward:"+todayReward); ITArray rewardArray = DataBase.use().executeQueryByTArray(rewardsql); if (rewardArray.size() != 0) { ITObject rewardData = rewardArray.getTObject(0); + day_rewad = (rewardData.getDouble("reward").longValue()); + if (day_rewad < todayReward) { + day_rewad = todayReward.longValue(); + } } if (rewardArray.size() > 1) { ITObject rewardData = rewardArray.getTObject(1); diff --git a/web_login/src/main/java/com/mjlogin/util/sms/WeChatOpenIdValidator.java b/web_login/src/main/java/com/mjlogin/util/sms/WeChatOpenIdValidator.java new file mode 100644 index 0000000..02eff7b --- /dev/null +++ b/web_login/src/main/java/com/mjlogin/util/sms/WeChatOpenIdValidator.java @@ -0,0 +1,165 @@ +package com.mjlogin.util.sms; + +import com.alibaba.fastjson.JSONObject; +import com.mjlogin.service.AccountService; +import com.taurus.core.util.Logger; + +public class WeChatOpenIdValidator { + private static Logger logger = Logger.getLogger(WeChatOpenIdValidator.class); + public static void main(String[] args) { + WeChatOpenIdValidator w = new WeChatOpenIdValidator(); + String appid="wx512208d074b2ac34"; + String appsecret="605ab6f94702a28d225ac344f8054571"; + String token = w.getAccessToken(appid, appsecret); + System.out.println("token:"+token); + String openId="oLpNT2Y6oVRZq3Pv1kwemiVwRxJE"; + boolean verifyOpenId = w.verifyAppIdAndOpenId(appid, appsecret, openId); + System.out.println("verifyOpenId:"+verifyOpenId); + } + + + /** + * 通过前端传来的 code 获取 openid 和 session_key + * @param code 前端 wx.login 获取的临时凭证 + * @return 用户信息(openid, session_key等) + */ + public static JSONObject getUserInfoByOpenId(String access_token,String openid) { + // 1. 构建请求 URL + String url = String.format( + "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s", + access_token, openid + ); + logger.info("获取用户详情的url:"+url); + + // 2. 发送 HTTP GET 请求 + String result = AccountService.request(url); + JSONObject json = JSONObject.parseObject(result); + + // 3. 检查错误码 + Integer errcode = json.getInteger("errcode"); + if (errcode != null && errcode != 0) { + // 处理错误 + String errmsg = json.getString("errmsg"); + throw new RuntimeException("获取 用户详情 失败: errcode=" + errcode + ", errmsg=" + errmsg); + } + + // 4. 返回成功结果 +// String openid = json.getString("openid"); +// String sessionKey = json.getString("session_key"); +// String unionid = json.getString("unionid"); + logger.info("json:"+json); + return json; + } + /** + * 通过前端传来的 code 获取 openid 和 session_key + * @param code 前端 wx.login 获取的临时凭证 + * @return 用户信息(openid, session_key等) + */ + public static JSONObject getOpenIdByCode(String code,String appid,String secret) { + // 1. 构建请求 URL + String url = String.format( + "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code", + appid, secret, code + ); + logger.info("获取openid的url:"+url); + + // 2. 发送 HTTP GET 请求 + String result = AccountService.request(url); + JSONObject json = JSONObject.parseObject(result); + + // 3. 检查错误码 + Integer errcode = json.getInteger("errcode"); + if (errcode != null && errcode != 0) { + // 处理错误 + String errmsg = json.getString("errmsg"); + throw new RuntimeException("获取 openid 失败: errcode=" + errcode + ", errmsg=" + errmsg); + } + + // 4. 返回成功结果 +// String openid = json.getString("openid"); +// String accessToken = json.getString("access_token"); + logger.info("json:"+json); + return json; + } + /** + * 2. 获取 Access Token + * @param appid 公众号 AppID + * @param appsecret 公众号 AppSecret + * @return access_token 字符串,失败返回 null + */ + public String getAccessToken(String appid, String appsecret) { + String url = String.format( + "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" + + "", + appid, appsecret + ); + System.out.println("url:"+url); + try { + String result = AccountService.request(url); + if (result == null) { + return null; + } + + JSONObject json = JSONObject.parseObject(result); + String accessToken = json.getString("access_token"); + Integer errcode = json.getInteger("errcode"); + + if (errcode != null && errcode != 0) { + logger.error("获取 access_token 失败, errcode: {}, errmsg: {}", errcode, json.getString("errmsg")); + return null; + } + + logger.info("获取 access_token 成功: {}", accessToken); + return accessToken; + } catch (Exception e) { + logger.error("获取 access_token 异常", e); + return null; + } + } + /** + * 5. 验证 AppID 和 OpenID 是否匹配 + * @param appid 公众号 AppID + * @param appsecret 公众号 AppSecret + * @param openid 待验证的 openid + * @return true-匹配, false-不匹配 + */ + public boolean verifyAppIdAndOpenId(String appid, String appsecret, String openid) { + // 先获取 access_token + String accessToken = getAccessToken(appid, appsecret); + if (accessToken == null) { + logger.error("获取 access_token 失败,AppID 可能无效"); + return false; + } + + // 用 access_token 和 openid 获取用户信息 + String url = String.format( + "https://api.weixin.qq.com/sns/userinfo/info?access_token=%s&openid=%s&lang=zh_CN", + accessToken, openid + ); + + try { + String result = AccountService.request(url); + if (result == null) { + return false; + } + + JSONObject json = JSONObject.parseObject(result); + Integer errcode = json.getInteger("errcode"); + System.out.println("result:"+result); + if (errcode == null) { + // 成功获取用户信息,说明匹配 + logger.info("AppID 和 OpenID 匹配,用户昵称: {}", json.getString("nickname")); + return true; + } else if (errcode == 40003) { + logger.warn("AppID 和 OpenID 不匹配, errcode: 40003"); + return false; + } else { + logger.warn("验证失败, errcode: {}, errmsg: {}", errcode, json.getString("errmsg")); + return false; + } + } catch (Exception e) { + logger.error("验证 AppID 和 OpenID 异常", e); + return false; + } + } +} \ No newline at end of file