From e558f4234b2feb7cae3d2455af0c3c5e1d39d315 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 4 Aug 2022 16:40:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=83=AD=E5=BA=A6=E6=8E=92=E8=A1=8C=E6=A6=9C?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jmfy/controller/GmController.java | 103 ++++++++---- .../java/com/jmfy/model/vo/HeroHotRankVo.java | 75 +++++++++ .../java/com/jmfy/model/vo/PowersEnum.java | 9 +- .../jmfy/redisProperties/RedisUserKey.java | 5 + .../java/com/jmfy/utils/FileCacheUtils.java | 10 +- src/main/java/com/jmfy/utils/RedisUtil.java | 18 ++- .../jmfy/model => }/config/SItemConfig.java | 8 +- .../templates/findHeroHotRankInfo.html | 149 ++++++++++++++++++ .../resources/templates/findServerInfo.html | 2 +- src/main/resources/templates/welcome.html | 9 +- 10 files changed, 344 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/jmfy/model/vo/HeroHotRankVo.java rename src/main/java/{com/jmfy/model => }/config/SItemConfig.java (92%) create mode 100644 src/main/resources/templates/findHeroHotRankInfo.html diff --git a/src/main/java/com/jmfy/controller/GmController.java b/src/main/java/com/jmfy/controller/GmController.java index fd9cd33..41b7c75 100644 --- a/src/main/java/com/jmfy/controller/GmController.java +++ b/src/main/java/com/jmfy/controller/GmController.java @@ -5,13 +5,15 @@ import com.jmfy.dao.BanFuctionDao; import com.jmfy.dao.ServerInfoDao; import com.jmfy.dao.UserInfoDao; import com.jmfy.model.*; +import com.jmfy.model.vo.HeroHotRankVo; import com.jmfy.model.vo.RechargeInfo; import com.jmfy.redisProperties.RedisUserKey; import com.jmfy.thrift.idl.Result; -import com.jmfy.utils.RPCClient; -import com.jmfy.utils.RedisUtil; +import com.jmfy.utils.*; +import config.SItemConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestBody; @@ -38,6 +40,8 @@ public class GmController { @Resource private BanFuctionDao banFuctionDao; + private int htmlLikeId = 0; + @RequestMapping(value = "/sendGm", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int publishNotice(HttpServletRequest request) throws Exception { @@ -91,14 +95,81 @@ public class GmController { return 0; } + public int getHtmlLikeId() { + htmlLikeId++; + if (htmlLikeId >= Integer.MAX_VALUE){ + htmlLikeId = 0; + } + return htmlLikeId; + } + + private String getHeroHotRankKey(int subRank){ + return RedisUserKey.HERO_HOT_RANK + ":" + subRank; + } + + /** + * 查询英雄热度排行榜 + * subRank: 不同的热度排行榜id,0表示全部 + */ + @RequestMapping(value = "/findHeroHotRankInfo", method = {RequestMethod.POST, RequestMethod.GET}) + public String findHeroHotRankInfo(ModelMap map, int subRank) { + List rankVos = new ArrayList<>(); + if (subRank == 0){ + for (int i = 1; i < 5; i++) { + Set> tuples = RedisUtil.getInstence().rangeWithScores(getHeroHotRankKey(i), 0, -1); + rankVos.addAll(packHeroHotRank(i,tuples)); + } + }else { + Set> tuples = RedisUtil.getInstence().rangeWithScores(getHeroHotRankKey(subRank), 0, -1); + rankVos.addAll(packHeroHotRank(subRank,tuples)); + } + map.addAttribute("subRank", subRank); + map.addAttribute("ranks", rankVos); + return "findHeroHotRankInfo"; + } + + /** + * 封装热度排行榜对象 + * @param subRankId + * @param set + * @return + */ + private List packHeroHotRank(int subRankId, Set> set){ + ArrayList rankVos = new ArrayList<>(); + if (set == null || set.isEmpty()){ + return rankVos; + } + Map heroMap = FileCacheUtils.itemHeroMap; + for (ZSetOperations.TypedTuple tuple : set) { + HeroHotRankVo rankVo = new HeroHotRankVo(); + rankVo.setHtmlLikeId(getHtmlLikeId()); + rankVo.setRankId(subRankId); + rankVo.setHeroTid(tuple.getValue()); + rankVo.setLikeNum(tuple.getScore()); + String name = heroMap.get(Integer.valueOf(tuple.getValue())).getName(); + rankVo.setHeroName(name); + + rankVos.add(rankVo); + } + return rankVos; + } + + @RequestMapping(value = "/updateHeroHotLikeNum", method = {RequestMethod.POST, RequestMethod.GET}) + public @ResponseBody + int updateHeroHotLikeNum(HttpServletRequest request) { + HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); + int rankId = Integer.parseInt(parameterMap.get("rankId")); + String heroTid = parameterMap.get("heroTid"); + int likeNum = Integer.parseInt(parameterMap.get("likeNum")); + + RedisUtil.getInstence().zSet(getHeroHotRankKey(rankId),heroTid,likeNum); + return 1; + } @RequestMapping(value = "/addhero", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int addHero(@RequestBody HeroTemp heroTemp , HttpServletResponse response) throws Exception { - - String stringUid = heroTemp.getUserId(); - for (String userId:stringUid.split("#")) { CUserInfo userInfo =null; @@ -338,28 +409,6 @@ public @ResponseBody String banFunction(HttpServletRequest request) throws Excep out.close(); } - public static void main(String[] args) throws IOException { - String osName = System.getProperty("os.name"); - String filePath = ""; - Gson gson = new Gson(); - if (osName.matches("^(?i)Windows.*$")) {// Window 系统 - filePath = "conf/"; - } else {// Linux 系统 - filePath = "../config/"; - } - BufferedReader in = new BufferedReader(new FileReader(filePath+"rank.txt")); - String str; - int i = 568; - while ((str = in.readLine()) != null) { - int value = Integer.valueOf(str); - int i1 = value % 50; - if(i1==16||i1==2||i1==38){ - System.out.println(value+" "+i); - } - i--; - } - in.close(); - } static class CPayOrder { private String orderId;//充值回调中的pOrderId diff --git a/src/main/java/com/jmfy/model/vo/HeroHotRankVo.java b/src/main/java/com/jmfy/model/vo/HeroHotRankVo.java new file mode 100644 index 0000000..430b669 --- /dev/null +++ b/src/main/java/com/jmfy/model/vo/HeroHotRankVo.java @@ -0,0 +1,75 @@ +package com.jmfy.model.vo; + +/** + * @Author hj + * @Date 2022/7/25 11:50:37 + * @Description: + * @Version 1.0 + */ +public class HeroHotRankVo { + private int htmlLikeId;//html用来修改td值的 + private String heroTid;//英雄模板id + private String heroName;//英雄名称 + private double likeNum;//点赞数 + private int rankId;//排行榜id + + public int getHtmlLikeId() { + return htmlLikeId; + } + + public void setHtmlLikeId(int htmlLikeId) { + this.htmlLikeId = htmlLikeId; + } + + public String getHeroTid() { + return heroTid; + } + + public void setHeroTid(String heroTid) { + this.heroTid = heroTid; + } + + public String getHeroName() { + return heroName; + } + + public void setHeroName(String heroName) { + this.heroName = heroName; + } + + public double getLikeNum() { + return likeNum; + } + + public void setLikeNum(double likeNum) { + this.likeNum = likeNum; + } + + public int getRankId() { + return rankId; + } + + public void setRankId(int rankId) { + this.rankId = rankId; + } + + public String getRankName() { + String rankName = "未查询到"; + switch (rankId){ + case 1: + rankName = "人气热榜"; + break; + case 2: + rankName = "竞技场"; + break; + case 3: + rankName = "七界试炼"; + break; + case 4: + rankName = "山河社稷"; + break; + default: break; + } + return rankName; + } +} diff --git a/src/main/java/com/jmfy/model/vo/PowersEnum.java b/src/main/java/com/jmfy/model/vo/PowersEnum.java index b765d3c..5967ff0 100644 --- a/src/main/java/com/jmfy/model/vo/PowersEnum.java +++ b/src/main/java/com/jmfy/model/vo/PowersEnum.java @@ -43,11 +43,11 @@ public enum PowersEnum { ADD_WHITELIST_ACCOUNT(407,"添加白名单账号",400,1,"/html/add_white_list.html"), DELETE_WHITELIST(408,"删除白名单",400,1,"getAllWhites"), ADD_WHITELIST_ACCOUNT_HERO(409,"添加白名单账号英雄",400,1,"addHeroPage"), - GUILD_LIST_MANAGER(410,"公会列表管理",400,1,"initGuildList"), GUILD_OPERATE_PERMISSIONS(411,"权限: 操作公会",400,1,""), USER_INFO_QUERY1(412,"角色神将查询",400,1,"toGetHeroInfoPage"), SEND_MAILS(413,"发送txt里的邮件",400,1,"toSendMailInfoPage"), + HERO_HOT_RANK(414, "英雄热度排行榜管理", 400,1,"findHeroHotRankInfo?subRank=0"), // 流水日志管理500-599 BILL_LOG(500,"流水日志管理",500,1,""), @@ -102,16 +102,13 @@ public enum PowersEnum { PACKAGE_NAME_MANAGER(1401,"频道管理(公告用)",1400,1,"packageInfoList"), ADD_PACKAGE_NAME(1402,"权限: 添加频道",1400,0,""), DELETE_PACKAGE_NAME(1403,"权限: 删除频道",1400,0,""), - CHANNEL_NAME_MANAGER(1404,"渠道管理",1400,1,"channelInfoList"), ADD_CHANNEL_PERMISSIONS(1405,"权限: 添加渠道",1400,0,""), DELETE_CHANNEL_PERMISSIONS(1406,"权限: 删除渠道",1400,0,""), - UPDATE_CHANNEL_PERMISSIONS(1410,"权限: 修改渠道",1400,0,""), - - HAND_IN_MANAGER(1407,"提审服管理",1400,1,"tishenInfoList"), - + UPDATE_CHANNEL_PERMISSIONS(1407,"权限: 修改渠道",1400,0,""), GAME_AGREEMENT_MANAGER(1408,"游戏协议管理",1400,1,"gameAgreementList"), ADD_GAME_AGREEMENT_PERMISSIONS(1409,"权限: 操作游戏协议(增,删,改)",1400,0,""), + HAND_IN_MANAGER(1410,"提审服管理",1400,1,"tishenInfoList"), HEFU(1500,"合服",1500,1,""), HEFU_MANAGER(1501,"合服",1500,1,"/html/hefu.html"), diff --git a/src/main/java/com/jmfy/redisProperties/RedisUserKey.java b/src/main/java/com/jmfy/redisProperties/RedisUserKey.java index 5c4b3d9..927aebb 100644 --- a/src/main/java/com/jmfy/redisProperties/RedisUserKey.java +++ b/src/main/java/com/jmfy/redisProperties/RedisUserKey.java @@ -37,6 +37,11 @@ public class RedisUserKey { public static final String CROSS_SERVER_GROUP = "CROSS_SERVER_GROUP";//gm跨服分组,每周一重新分组生效 public static final String SERVER_STATE = "SERVER_STATE";//服务器状态 + + public final static String HERO_HOT_RANK = "HERO_HOT_RANK"; // 英雄热度排行榜 + + public static final String USER_LIKE_HERO_HOT_RANK = "USER_LIKE_HERO_HOT_RANK"; //玩家给点击过的英雄 + /** * 在线人数 updata/min */ diff --git a/src/main/java/com/jmfy/utils/FileCacheUtils.java b/src/main/java/com/jmfy/utils/FileCacheUtils.java index 2b094d7..74793b0 100644 --- a/src/main/java/com/jmfy/utils/FileCacheUtils.java +++ b/src/main/java/com/jmfy/utils/FileCacheUtils.java @@ -11,9 +11,10 @@ public class FileCacheUtils { private static String path = ""; - public static Map itemNameMap ; - public static Map itemMap ; - public static Map itemFlowResson ; + public static Map itemNameMap; + public static Map itemMap; + public static Map itemHeroMap; + public static Map itemFlowResson; public static Map rechargeMap; public static void initData(){ @@ -28,7 +29,8 @@ public class FileCacheUtils { itemFlowResson = readFile("Reason.txt"); // 道具 itemMap = getConfig(SItemConfig.class); - itemNameMap = SItemConfig.toMap(); + itemNameMap = SItemConfig.toNameMap(); + itemHeroMap = SItemConfig.toHeroMap(); System.out.printf("道具表长度,{%s}\n",itemNameMap.size()); // 礼包 rechargeMap = getConfig(SRechargeCommodityConfig.class); diff --git a/src/main/java/com/jmfy/utils/RedisUtil.java b/src/main/java/com/jmfy/utils/RedisUtil.java index 2d630eb..3f8da6c 100644 --- a/src/main/java/com/jmfy/utils/RedisUtil.java +++ b/src/main/java/com/jmfy/utils/RedisUtil.java @@ -322,16 +322,15 @@ public class RedisUtil { return null; } - public static void sleep(long millis) { + private static void sleep(long millis) { try { Thread.sleep(millis); } catch (Exception e) { - LOGGER.error("sleep->msg=null", e.getMessage(), e); + LOGGER.error("sleep->msg=null,{}", e.getMessage(), e); } } - public Set> getZsetreverseRangeWithScores(String key, long start, long end) { - + public Set> rangeWithScores(String key, long start, long end) { for (int i = 0; i < MAX_TRY_TIMES; i++) { try { return redisObjectTemplate.opsForZSet().reverseRangeWithScores(key, start, end); @@ -342,6 +341,17 @@ public class RedisUtil { return null; } + public void zSet(String key, String element, double score){ + for (int i = 0; i < MAX_TRY_TIMES; i++) { + try { + redisObjectTemplate.opsForZSet().add(key, element, score); + return; + } catch (Exception e) { + sleep(FAILED_SLEEP); + } + } + } + public List lGet(String key, long start, long end) { try { return redisObjectTemplate.opsForList().range(key, start, end); diff --git a/src/main/java/com/jmfy/model/config/SItemConfig.java b/src/main/java/config/SItemConfig.java similarity index 92% rename from src/main/java/com/jmfy/model/config/SItemConfig.java rename to src/main/java/config/SItemConfig.java index 2bb8ae2..e24be51 100644 --- a/src/main/java/com/jmfy/model/config/SItemConfig.java +++ b/src/main/java/config/SItemConfig.java @@ -33,12 +33,18 @@ public class SItemConfig { private int[][] extraReward; private int recycle; - public static Map toMap(){ + public static Map toNameMap(){ Map toMap = new HashMap<>(); FileCacheUtils.itemMap.values().forEach(v-> toMap.put(v.getId(),v.getName())); return toMap; } + public static Map toHeroMap(){ + Map map = new HashMap<>(); + FileCacheUtils.itemMap.values().stream().filter(v->v.getItemType() == 1).forEach(v->map.put(v.getId(),v)); + return map; + } + public int getId() { return id; } diff --git a/src/main/resources/templates/findHeroHotRankInfo.html b/src/main/resources/templates/findHeroHotRankInfo.html new file mode 100644 index 0000000..808112b --- /dev/null +++ b/src/main/resources/templates/findHeroHotRankInfo.html @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + 服务器列表信息 + + + +
+

英雄热度排行榜

+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + +
英雄ID英雄点赞数排行榜操作
+ + 修改 + +
+
+
+
+ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/findServerInfo.html b/src/main/resources/templates/findServerInfo.html index d218ab2..07c5e78 100644 --- a/src/main/resources/templates/findServerInfo.html +++ b/src/main/resources/templates/findServerInfo.html @@ -261,7 +261,7 @@ type: "POST", data: { "serverId" : serverId, - "status": status2, + "status": status2 }, url: "/serverListEdit", success: function (data) { diff --git a/src/main/resources/templates/welcome.html b/src/main/resources/templates/welcome.html index 0cfd5aa..0ff4445 100644 --- a/src/main/resources/templates/welcome.html +++ b/src/main/resources/templates/welcome.html @@ -27,7 +27,14 @@
-

更新日志[2022-7-13]

+

更新日志[2022-7-27]

+

+ 1、“GM管理”标签下添加“英雄热度排行榜”页面,用来查看或修改游戏内英雄热度排行榜的数据
+ 2、“英雄热度排行榜”支持分排行榜类型查询,每次刷新默认查询全部榜单
+ 3、点赞数修改:(数字必须为正整数,并且不超过int最大值)
+

+ +

更新日志[2022-7-13]

1、“服务器管理”标签下添加“批量修改服务器信息”页面,用来做服务器的批量修改,包含全部状态服务器
2、“服务器信息”界面的 批量修改跨服id输入框 移动到 “批量修改服务器信息” 界面下,修改服务器状态选择框还在原位