generated from root/miduo_server
热度排行榜功能
parent
7cacd54d1c
commit
e558f4234b
|
|
@ -5,13 +5,15 @@ import com.jmfy.dao.BanFuctionDao;
|
||||||
import com.jmfy.dao.ServerInfoDao;
|
import com.jmfy.dao.ServerInfoDao;
|
||||||
import com.jmfy.dao.UserInfoDao;
|
import com.jmfy.dao.UserInfoDao;
|
||||||
import com.jmfy.model.*;
|
import com.jmfy.model.*;
|
||||||
|
import com.jmfy.model.vo.HeroHotRankVo;
|
||||||
import com.jmfy.model.vo.RechargeInfo;
|
import com.jmfy.model.vo.RechargeInfo;
|
||||||
import com.jmfy.redisProperties.RedisUserKey;
|
import com.jmfy.redisProperties.RedisUserKey;
|
||||||
import com.jmfy.thrift.idl.Result;
|
import com.jmfy.thrift.idl.Result;
|
||||||
import com.jmfy.utils.RPCClient;
|
import com.jmfy.utils.*;
|
||||||
import com.jmfy.utils.RedisUtil;
|
import config.SItemConfig;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.data.redis.core.ZSetOperations;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.ModelMap;
|
import org.springframework.ui.ModelMap;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
|
@ -38,6 +40,8 @@ public class GmController {
|
||||||
@Resource
|
@Resource
|
||||||
private BanFuctionDao banFuctionDao;
|
private BanFuctionDao banFuctionDao;
|
||||||
|
|
||||||
|
private int htmlLikeId = 0;
|
||||||
|
|
||||||
@RequestMapping(value = "/sendGm", method = {RequestMethod.POST, RequestMethod.GET})
|
@RequestMapping(value = "/sendGm", method = {RequestMethod.POST, RequestMethod.GET})
|
||||||
public @ResponseBody
|
public @ResponseBody
|
||||||
int publishNotice(HttpServletRequest request) throws Exception {
|
int publishNotice(HttpServletRequest request) throws Exception {
|
||||||
|
|
@ -91,14 +95,81 @@ public class GmController {
|
||||||
return 0;
|
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<HeroHotRankVo> rankVos = new ArrayList<>();
|
||||||
|
if (subRank == 0){
|
||||||
|
for (int i = 1; i < 5; i++) {
|
||||||
|
Set<ZSetOperations.TypedTuple<String>> tuples = RedisUtil.getInstence().rangeWithScores(getHeroHotRankKey(i), 0, -1);
|
||||||
|
rankVos.addAll(packHeroHotRank(i,tuples));
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
Set<ZSetOperations.TypedTuple<String>> 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<HeroHotRankVo> packHeroHotRank(int subRankId, Set<ZSetOperations.TypedTuple<String>> set){
|
||||||
|
ArrayList<HeroHotRankVo> rankVos = new ArrayList<>();
|
||||||
|
if (set == null || set.isEmpty()){
|
||||||
|
return rankVos;
|
||||||
|
}
|
||||||
|
Map<Integer, SItemConfig> heroMap = FileCacheUtils.itemHeroMap;
|
||||||
|
for (ZSetOperations.TypedTuple<String> 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<String, String> 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})
|
@RequestMapping(value = "/addhero", method = {RequestMethod.POST, RequestMethod.GET})
|
||||||
public @ResponseBody
|
public @ResponseBody
|
||||||
int addHero(@RequestBody HeroTemp heroTemp , HttpServletResponse response) throws Exception {
|
int addHero(@RequestBody HeroTemp heroTemp , HttpServletResponse response) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
String stringUid = heroTemp.getUserId();
|
String stringUid = heroTemp.getUserId();
|
||||||
|
|
||||||
for (String userId:stringUid.split("#")) {
|
for (String userId:stringUid.split("#")) {
|
||||||
|
|
||||||
CUserInfo userInfo =null;
|
CUserInfo userInfo =null;
|
||||||
|
|
@ -338,28 +409,6 @@ public @ResponseBody String banFunction(HttpServletRequest request) throws Excep
|
||||||
out.close();
|
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 {
|
static class CPayOrder {
|
||||||
|
|
||||||
private String orderId;//充值回调中的pOrderId
|
private String orderId;//充值回调中的pOrderId
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -43,11 +43,11 @@ public enum PowersEnum {
|
||||||
ADD_WHITELIST_ACCOUNT(407,"添加白名单账号",400,1,"/html/add_white_list.html"),
|
ADD_WHITELIST_ACCOUNT(407,"添加白名单账号",400,1,"/html/add_white_list.html"),
|
||||||
DELETE_WHITELIST(408,"删除白名单",400,1,"getAllWhites"),
|
DELETE_WHITELIST(408,"删除白名单",400,1,"getAllWhites"),
|
||||||
ADD_WHITELIST_ACCOUNT_HERO(409,"添加白名单账号英雄",400,1,"addHeroPage"),
|
ADD_WHITELIST_ACCOUNT_HERO(409,"添加白名单账号英雄",400,1,"addHeroPage"),
|
||||||
|
|
||||||
GUILD_LIST_MANAGER(410,"公会列表管理",400,1,"initGuildList"),
|
GUILD_LIST_MANAGER(410,"公会列表管理",400,1,"initGuildList"),
|
||||||
GUILD_OPERATE_PERMISSIONS(411,"权限: 操作公会",400,1,""),
|
GUILD_OPERATE_PERMISSIONS(411,"权限: 操作公会",400,1,""),
|
||||||
USER_INFO_QUERY1(412,"角色神将查询",400,1,"toGetHeroInfoPage"),
|
USER_INFO_QUERY1(412,"角色神将查询",400,1,"toGetHeroInfoPage"),
|
||||||
SEND_MAILS(413,"发送txt里的邮件",400,1,"toSendMailInfoPage"),
|
SEND_MAILS(413,"发送txt里的邮件",400,1,"toSendMailInfoPage"),
|
||||||
|
HERO_HOT_RANK(414, "英雄热度排行榜管理", 400,1,"findHeroHotRankInfo?subRank=0"),
|
||||||
|
|
||||||
// 流水日志管理500-599
|
// 流水日志管理500-599
|
||||||
BILL_LOG(500,"流水日志管理",500,1,""),
|
BILL_LOG(500,"流水日志管理",500,1,""),
|
||||||
|
|
@ -102,16 +102,13 @@ public enum PowersEnum {
|
||||||
PACKAGE_NAME_MANAGER(1401,"频道管理(公告用)",1400,1,"packageInfoList"),
|
PACKAGE_NAME_MANAGER(1401,"频道管理(公告用)",1400,1,"packageInfoList"),
|
||||||
ADD_PACKAGE_NAME(1402,"权限: 添加频道",1400,0,""),
|
ADD_PACKAGE_NAME(1402,"权限: 添加频道",1400,0,""),
|
||||||
DELETE_PACKAGE_NAME(1403,"权限: 删除频道",1400,0,""),
|
DELETE_PACKAGE_NAME(1403,"权限: 删除频道",1400,0,""),
|
||||||
|
|
||||||
CHANNEL_NAME_MANAGER(1404,"渠道管理",1400,1,"channelInfoList"),
|
CHANNEL_NAME_MANAGER(1404,"渠道管理",1400,1,"channelInfoList"),
|
||||||
ADD_CHANNEL_PERMISSIONS(1405,"权限: 添加渠道",1400,0,""),
|
ADD_CHANNEL_PERMISSIONS(1405,"权限: 添加渠道",1400,0,""),
|
||||||
DELETE_CHANNEL_PERMISSIONS(1406,"权限: 删除渠道",1400,0,""),
|
DELETE_CHANNEL_PERMISSIONS(1406,"权限: 删除渠道",1400,0,""),
|
||||||
UPDATE_CHANNEL_PERMISSIONS(1410,"权限: 修改渠道",1400,0,""),
|
UPDATE_CHANNEL_PERMISSIONS(1407,"权限: 修改渠道",1400,0,""),
|
||||||
|
|
||||||
HAND_IN_MANAGER(1407,"提审服管理",1400,1,"tishenInfoList"),
|
|
||||||
|
|
||||||
GAME_AGREEMENT_MANAGER(1408,"游戏协议管理",1400,1,"gameAgreementList"),
|
GAME_AGREEMENT_MANAGER(1408,"游戏协议管理",1400,1,"gameAgreementList"),
|
||||||
ADD_GAME_AGREEMENT_PERMISSIONS(1409,"权限: 操作游戏协议(增,删,改)",1400,0,""),
|
ADD_GAME_AGREEMENT_PERMISSIONS(1409,"权限: 操作游戏协议(增,删,改)",1400,0,""),
|
||||||
|
HAND_IN_MANAGER(1410,"提审服管理",1400,1,"tishenInfoList"),
|
||||||
|
|
||||||
HEFU(1500,"合服",1500,1,""),
|
HEFU(1500,"合服",1500,1,""),
|
||||||
HEFU_MANAGER(1501,"合服",1500,1,"/html/hefu.html"),
|
HEFU_MANAGER(1501,"合服",1500,1,"/html/hefu.html"),
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,11 @@ public class RedisUserKey {
|
||||||
public static final String CROSS_SERVER_GROUP = "CROSS_SERVER_GROUP";//gm跨服分组,每周一重新分组生效
|
public static final String CROSS_SERVER_GROUP = "CROSS_SERVER_GROUP";//gm跨服分组,每周一重新分组生效
|
||||||
|
|
||||||
public static final String SERVER_STATE = "SERVER_STATE";//服务器状态
|
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
|
* 在线人数 updata/min
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,10 @@ public class FileCacheUtils {
|
||||||
|
|
||||||
private static String path = "";
|
private static String path = "";
|
||||||
|
|
||||||
public static Map<Integer,String> itemNameMap ;
|
public static Map<Integer,String> itemNameMap;
|
||||||
public static Map<Integer,SItemConfig> itemMap ;
|
public static Map<Integer,SItemConfig> itemMap;
|
||||||
public static Map<Integer,String> itemFlowResson ;
|
public static Map<Integer,SItemConfig> itemHeroMap;
|
||||||
|
public static Map<Integer,String> itemFlowResson;
|
||||||
public static Map<Integer,SRechargeCommodityConfig> rechargeMap;
|
public static Map<Integer,SRechargeCommodityConfig> rechargeMap;
|
||||||
|
|
||||||
public static void initData(){
|
public static void initData(){
|
||||||
|
|
@ -28,7 +29,8 @@ public class FileCacheUtils {
|
||||||
itemFlowResson = readFile("Reason.txt");
|
itemFlowResson = readFile("Reason.txt");
|
||||||
// 道具
|
// 道具
|
||||||
itemMap = getConfig(SItemConfig.class);
|
itemMap = getConfig(SItemConfig.class);
|
||||||
itemNameMap = SItemConfig.toMap();
|
itemNameMap = SItemConfig.toNameMap();
|
||||||
|
itemHeroMap = SItemConfig.toHeroMap();
|
||||||
System.out.printf("道具表长度,{%s}\n",itemNameMap.size());
|
System.out.printf("道具表长度,{%s}\n",itemNameMap.size());
|
||||||
// 礼包
|
// 礼包
|
||||||
rechargeMap = getConfig(SRechargeCommodityConfig.class);
|
rechargeMap = getConfig(SRechargeCommodityConfig.class);
|
||||||
|
|
|
||||||
|
|
@ -322,16 +322,15 @@ public class RedisUtil {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sleep(long millis) {
|
private static void sleep(long millis) {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(millis);
|
Thread.sleep(millis);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("sleep->msg=null", e.getMessage(), e);
|
LOGGER.error("sleep->msg=null,{}", e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<ZSetOperations.TypedTuple<String>> getZsetreverseRangeWithScores(String key, long start, long end) {
|
public Set<ZSetOperations.TypedTuple<String>> rangeWithScores(String key, long start, long end) {
|
||||||
|
|
||||||
for (int i = 0; i < MAX_TRY_TIMES; i++) {
|
for (int i = 0; i < MAX_TRY_TIMES; i++) {
|
||||||
try {
|
try {
|
||||||
return redisObjectTemplate.opsForZSet().reverseRangeWithScores(key, start, end);
|
return redisObjectTemplate.opsForZSet().reverseRangeWithScores(key, start, end);
|
||||||
|
|
@ -342,6 +341,17 @@ public class RedisUtil {
|
||||||
return null;
|
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<String> lGet(String key, long start, long end) {
|
public List<String> lGet(String key, long start, long end) {
|
||||||
try {
|
try {
|
||||||
return redisObjectTemplate.opsForList().range(key, start, end);
|
return redisObjectTemplate.opsForList().range(key, start, end);
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,18 @@ public class SItemConfig {
|
||||||
private int[][] extraReward;
|
private int[][] extraReward;
|
||||||
private int recycle;
|
private int recycle;
|
||||||
|
|
||||||
public static Map<Integer,String> toMap(){
|
public static Map<Integer,String> toNameMap(){
|
||||||
Map<Integer,String> toMap = new HashMap<>();
|
Map<Integer,String> toMap = new HashMap<>();
|
||||||
FileCacheUtils.itemMap.values().forEach(v-> toMap.put(v.getId(),v.getName()));
|
FileCacheUtils.itemMap.values().forEach(v-> toMap.put(v.getId(),v.getName()));
|
||||||
return toMap;
|
return toMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Map<Integer,SItemConfig> toHeroMap(){
|
||||||
|
Map<Integer,SItemConfig> map = new HashMap<>();
|
||||||
|
FileCacheUtils.itemMap.values().stream().filter(v->v.getItemType() == 1).forEach(v->map.put(v.getId(),v));
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,149 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<meta name="renderer" content="webkit|ie-comp|ie-stand"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||||
|
<meta name="viewport"
|
||||||
|
content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
|
||||||
|
<meta http-equiv="Cache-Control" content="no-siteapp"/>
|
||||||
|
<script type="text/javascript" src="lib/html5shiv.js"></script>
|
||||||
|
<script type="text/javascript" src="lib/respond.min.js"></script>
|
||||||
|
<!-- <![endif]–>-->
|
||||||
|
<link rel="stylesheet" type="text/css" href="h-ui/css/H-ui.min.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="h-ui.admin/css/H-ui.admin.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="lib/Hui-iconfont/1.0.8/iconfont.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="h-ui.admin/skin/default/skin.css" id="skin"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="h-ui.admin/css/style.css"/>
|
||||||
|
<!-- 多选框 -->
|
||||||
|
<link href="../static/searchableSelect/css/jquery.searchableSelect.css" rel="stylesheet" type="text/css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.css">
|
||||||
|
<link href="../static/bootstrap/css/bootstrap-select.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<script type="text/javascript" src="lib/DD_belatedPNG_0.0.8a-min.js"></script>
|
||||||
|
<script>DD_belatedPNG.fix('*');</script>
|
||||||
|
<title>服务器列表信息</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="breadcrumb" style="padding-bottom: 45px;">
|
||||||
|
<i class="Hui-iconfont"></i> 首页
|
||||||
|
<span class="c-gray en">></span> GM管理
|
||||||
|
<span class="c-gray en">></span> 英雄热度排行榜
|
||||||
|
<a class="btn btn-success radius r" style="margin-top:3px;padding-bottom: 3px;"
|
||||||
|
href="javascript:location.replace('/findHeroHotRankInfo?subRank=0');" title="刷新">
|
||||||
|
<i class="Hui-iconfont"></i>
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
<div class="page-container" style="text-align: center">
|
||||||
|
<h2><span style="color:red;">英雄热度排行榜</span></h2>
|
||||||
|
<div class="text-c">
|
||||||
|
<div style="text-align: left;">
|
||||||
|
<select name="subRank" class="input-text" id="subRank" title="排行榜名称" style="width: 150px;"><!--下拉列表-->
|
||||||
|
<option value="0">全部</option>
|
||||||
|
<option value="1">人气热榜</option>
|
||||||
|
<option value="2">竞技场</option>
|
||||||
|
<option value="3">七界试炼</option>
|
||||||
|
<option value="4">山河社稷</option>
|
||||||
|
</select>
|
||||||
|
<button class="btn btn-primary" type="button" onclick="findRank()">查询</button>
|
||||||
|
</div>
|
||||||
|
<div class="mt-20">
|
||||||
|
<table class="table table-border table-bordered table-bg table-hover table-sort table-responsive">
|
||||||
|
<thead>
|
||||||
|
<tr class="text-c" >
|
||||||
|
<th width="200">英雄ID</th>
|
||||||
|
<th width="200">英雄</th>
|
||||||
|
<th width="200">点赞数</th>
|
||||||
|
<th width="200">排行榜</th>
|
||||||
|
<th width="200">操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr th:each="obj:${ranks}">
|
||||||
|
<td th:text="${obj.getHeroTid()}" style="text-align: center;"></td>
|
||||||
|
<td th:text="${obj.getHeroName()}" style="text-align: center;"></td>
|
||||||
|
<td th:id="'like'+${obj.getHtmlLikeId()}" th:text="${obj.getLikeNum()}" style="text-align: center;"></td>
|
||||||
|
<td th:text="${obj.getRankName()}" style="text-align: center;"></td>
|
||||||
|
<td class="td-manage" style="text-align: center;">
|
||||||
|
<a href="#" class="btn btn-primary radius" th:attr="id='like'+${obj.getHtmlLikeId()},rankId=${obj.getRankId()},heroTid=${obj.getHeroTid()}"
|
||||||
|
onclick="return updateLikeNum(this)">
|
||||||
|
<i class="Hui-iconfont"></i> 修改
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--_footer 作为公共模版分离出去-->
|
||||||
|
<script type="text/javascript" src="lib/jquery/1.9.1/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="lib/layer/2.4/layer.js"></script>
|
||||||
|
<script type="text/javascript" src="h-ui/js/H-ui.min.js"></script>
|
||||||
|
<script type="text/javascript" src="h-ui.admin/js/H-ui.admin.js"></script>
|
||||||
|
|
||||||
|
<!--请在下方写此页面业务相关的脚本-->
|
||||||
|
<script type="text/javascript" src="lib/My97DatePicker/4.8/WdatePicker.js"></script>
|
||||||
|
<script type="text/javascript" src="lib/datatables/1.10.0/jquery.dataTables.min.js"></script>
|
||||||
|
<script type="text/javascript" src="lib/laypage/1.2/laypage.js"></script>
|
||||||
|
<!-- 多选框 -->
|
||||||
|
<script src="../static/bootstrap/js/bootstrap-select.js"></script>
|
||||||
|
<script type="text/javascript" src="../static/searchableSelect/js/jquery.searchableSelect.js"></script>
|
||||||
|
<script src="../static/searchableSelect/js/initBootstrap.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$('.table-sort').dataTable({
|
||||||
|
"aaSorting": [[0, "desc"]],//默认第几个排序
|
||||||
|
"bStateSave": true,//状态保存
|
||||||
|
"pading": false,
|
||||||
|
"aoColumnDefs": [
|
||||||
|
{"orderable": false, "aTargets": [4]}// 不参与排序的列
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
// 删除服务器列表
|
||||||
|
function updateLikeNum(obj) {
|
||||||
|
var likeId = $(obj).attr("id");
|
||||||
|
var rankId = $(obj).attr("rankId");
|
||||||
|
var heroTid = $(obj).attr("heroTid");
|
||||||
|
var likeNum = window.prompt("请输入数字:");
|
||||||
|
|
||||||
|
var regPos = /(^[1-9]\d*$)/; //判断是否是数字。
|
||||||
|
if (!regPos.test(likeNum)){
|
||||||
|
alert("输入内容包含字符,操作失败!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (likeNum >= 2147483647) {
|
||||||
|
alert("输入数字太大,操作失败!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
"rankId" : rankId,
|
||||||
|
"heroTid" : heroTid,
|
||||||
|
"likeNum" : likeNum
|
||||||
|
},
|
||||||
|
url: "/updateHeroHotLikeNum",
|
||||||
|
success: function (data) {
|
||||||
|
if (data === 1) {
|
||||||
|
alert("操作成功");
|
||||||
|
document.getElementById(likeId).innerText = likeNum;
|
||||||
|
}
|
||||||
|
if (data === 0) {
|
||||||
|
alert("操作失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询排行榜信息
|
||||||
|
function findRank() {
|
||||||
|
var subRank = $("#subRank").val().toString();
|
||||||
|
window.location = "/findHeroHotRankInfo?subRank=" + subRank;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -261,7 +261,7 @@
|
||||||
type: "POST",
|
type: "POST",
|
||||||
data: {
|
data: {
|
||||||
"serverId" : serverId,
|
"serverId" : serverId,
|
||||||
"status": status2,
|
"status": status2
|
||||||
},
|
},
|
||||||
url: "/serverListEdit",
|
url: "/serverListEdit",
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,14 @@
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-left: 20px;font-size: 18px">
|
<div style="margin-left: 20px;font-size: 18px">
|
||||||
<div>
|
<div>
|
||||||
<h2 style="color: red" class="f-36">更新日志[2022-7-13]</h2>
|
<h2 style="color: red" class="f-36">更新日志[2022-7-27]</h2>
|
||||||
|
<p class="f-14" style="line-height:32px;">
|
||||||
|
1、“GM管理”标签下添加“英雄热度排行榜”页面,用来查看或修改游戏内英雄热度排行榜的数据<br>
|
||||||
|
2、“英雄热度排行榜”支持分排行榜类型查询,每次刷新默认查询全部榜单<br>
|
||||||
|
3、点赞数修改:(数字必须为正整数,并且不超过int最大值)<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 style="color: red" class="f-18">更新日志[2022-7-13]</h2>
|
||||||
<p class="f-14" style="line-height:32px;">
|
<p class="f-14" style="line-height:32px;">
|
||||||
1、“服务器管理”标签下添加“批量修改服务器信息”页面,用来做服务器的批量修改,包含全部状态服务器<br>
|
1、“服务器管理”标签下添加“批量修改服务器信息”页面,用来做服务器的批量修改,包含全部状态服务器<br>
|
||||||
2、“服务器信息”界面的 批量修改跨服id输入框 移动到 “批量修改服务器信息” 界面下,修改服务器状态选择框还在原位<br>
|
2、“服务器信息”界面的 批量修改跨服id输入框 移动到 “批量修改服务器信息” 界面下,修改服务器状态选择框还在原位<br>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue