|
@@ -1,19 +1,19 @@
|
|
|
package com.zanxiang.game.data.serve.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
-import com.zanxiang.game.data.serve.pojo.dto.*;
|
|
|
-import com.zanxiang.game.module.base.pojo.params.SendMsgTaskResultParam;
|
|
|
-import com.zanxiang.game.module.base.pojo.vo.SendMsgResultVO;
|
|
|
-import com.zanxiang.game.module.base.pojo.vo.SendMsgVO;
|
|
|
import com.zanxiang.erp.base.ErpServer;
|
|
|
import com.zanxiang.erp.base.rpc.ISysUserRpc;
|
|
|
import com.zanxiang.erp.security.util.SecurityUtil;
|
|
|
+import com.zanxiang.game.data.serve.pojo.dto.*;
|
|
|
import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
|
|
|
import com.zanxiang.game.data.serve.service.IRoleManageService;
|
|
|
import com.zanxiang.game.data.serve.utils.Page;
|
|
|
import com.zanxiang.game.module.base.ServerInfo;
|
|
|
import com.zanxiang.game.module.base.pojo.dto.SendMsgDTO;
|
|
|
import com.zanxiang.game.module.base.pojo.params.SendMsgTaskParam;
|
|
|
+import com.zanxiang.game.module.base.pojo.params.SendMsgTaskResultParam;
|
|
|
+import com.zanxiang.game.module.base.pojo.vo.SendMsgResultVO;
|
|
|
+import com.zanxiang.game.module.base.pojo.vo.SendMsgVO;
|
|
|
import com.zanxiang.game.module.base.rpc.ICPSendMsgRpc;
|
|
|
import com.zanxiang.game.module.base.util.PageUtil;
|
|
|
import com.zanxiang.module.util.exception.BaseException;
|
|
@@ -30,6 +30,7 @@ import org.nutz.dao.sql.Criteria;
|
|
|
import org.nutz.dao.sql.Sql;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.StopWatch;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.function.Function;
|
|
@@ -61,11 +62,193 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
*/
|
|
|
@Override
|
|
|
public Page<Map> getRoleRechargeRanking(RoleRechargeRankingDTO dto) {
|
|
|
+ //创建查询条件 给主表使用
|
|
|
+ Criteria criA = getSqlByQuery(dto);
|
|
|
+ //给充值时间查询条件
|
|
|
+ Criteria criTodayAmount = getDateSqlByQuery(dto);
|
|
|
+ //分页对象
|
|
|
+ Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
|
|
|
+
|
|
|
+ StopWatch watch=new StopWatch();
|
|
|
+ watch.start();
|
|
|
+ //查询总记录数
|
|
|
+ Sql countSql = Sqls.create(getCountNumSql2(criA, criTodayAmount));
|
|
|
+ countSql.setCallback(Sqls.callback.integer());
|
|
|
+ dao.execute(countSql);
|
|
|
+ watch.stop();
|
|
|
+
|
|
|
+ pager.setRecordCount(countSql.getInt());
|
|
|
+ //主表添加排序条件
|
|
|
+ if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
+ dto.setSortType(OrderByEnum.DESC.getOrderType());
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
+ criA.getOrderBy().orderBy("amount", dto.getSortType());
|
|
|
+ } else {
|
|
|
+ criA.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
|
|
|
+ }
|
|
|
+ //创建sql
|
|
|
+ StopWatch watch2=new StopWatch();
|
|
|
+ watch2.start();
|
|
|
+ Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount));
|
|
|
+ sql.setCallback(Sqls.callback.maps());
|
|
|
+ sql.setPager(pager);
|
|
|
+ dao.execute(sql);
|
|
|
+ watch2.stop();
|
|
|
+ //查询结果
|
|
|
+ List<Map> list = sql.getList(Map.class);
|
|
|
+ //用户id列表
|
|
|
+ List<Long> userIds = new ArrayList<>();
|
|
|
+ for (Map map : list) {
|
|
|
+ //把投手id和运营id和GSID和客服人员ID 转成List
|
|
|
+ List<String> keys = Arrays.asList("put_user_id", "oper_user_id", "gs_id", "customer_service_id");
|
|
|
+ for (String key : keys) {
|
|
|
+ if (map.get(key) != null) {
|
|
|
+ userIds.add(Long.valueOf(map.get(key).toString()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //去掉字符串中的‘[]’
|
|
|
+ String str = (String) map.get("role_amount");
|
|
|
+ if(str!=null&&str.contains("[") && str.contains("]")){
|
|
|
+ map.put("role_amount", str.replaceAll("[\\[\\]]", ""));
|
|
|
+ }
|
|
|
+ //去除‘null’字符串
|
|
|
+ List<String> nullStringKeys = Arrays.asList("add_corp_user_id", "user_wechat", "remark", "user_phone", "country");
|
|
|
+ nullStringKeys.stream()
|
|
|
+ .filter(key -> "null".equals(map.get(key)))
|
|
|
+ .forEach(key -> map.put(key, null));
|
|
|
+ }
|
|
|
+ //去重userIds
|
|
|
+ userIds = userIds.stream().distinct().collect(Collectors.toList());
|
|
|
+ //发送RPC接口查询所有用户
|
|
|
+ ResultVO<Map<Long, String>> userMap = sysUserRpc.getUserNameByIds(userIds);
|
|
|
+
|
|
|
+ for (Map map : list) {
|
|
|
+ //投手名
|
|
|
+ updateUserName(map, "put_user_id", "put_user_name", userMap);
|
|
|
+ //运营人员名
|
|
|
+ updateUserName(map, "oper_user_id", "oper_user_name", userMap);
|
|
|
+ //GS人员名
|
|
|
+ updateUserName(map, "gs_id", "gs_name", userMap);
|
|
|
+ //客服人员名
|
|
|
+ updateUserName(map, "customer_service_id", "customer_service_name", userMap);
|
|
|
+ }
|
|
|
+ //返回结果
|
|
|
+ log.info("查询总记录数耗时:{}",watch.getTotalTimeMillis());
|
|
|
+ log.info("查询数据耗时:{}",watch2.getTotalTimeMillis());
|
|
|
+ return new Page<>(list, pager);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 角色充值排行榜(优化版)
|
|
|
+ * @param dto RoleRechargeRankingDTO
|
|
|
+ * @return Page<List<Map<String, Object>>>
|
|
|
+ */
|
|
|
+ public Page<Map> getRoleRechargeRanking2(RoleRechargeRankingDTO dto) {
|
|
|
+ //创建查询条件 给主表使用
|
|
|
+ Criteria criA = getSqlByQuery(dto);
|
|
|
+ //给充值时间查询条件
|
|
|
+ Criteria criTodayAmount = getDateSqlByQuery(dto);
|
|
|
+ //分页对象
|
|
|
+ Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
|
|
|
+
|
|
|
+ StopWatch watch=new StopWatch();
|
|
|
+ watch.start();
|
|
|
+ //查询总记录数
|
|
|
+ Sql countSql = Sqls.create(getCountNumSql2(criA, criTodayAmount));
|
|
|
+ countSql.setCallback(Sqls.callback.integer());
|
|
|
+ dao.execute(countSql);
|
|
|
+ watch.stop();
|
|
|
+
|
|
|
+ pager.setRecordCount(countSql.getInt());
|
|
|
+ //主表添加排序条件
|
|
|
+ if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
+ dto.setSortType(OrderByEnum.DESC.getOrderType());
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
+ criA.getOrderBy().orderBy("amount", dto.getSortType());
|
|
|
+ } else {
|
|
|
+ criA.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
|
|
|
+ }
|
|
|
+ //创建sql
|
|
|
+ StopWatch watch2=new StopWatch();
|
|
|
+ watch2.start();
|
|
|
+ Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount));
|
|
|
+ sql.setCallback(Sqls.callback.maps());
|
|
|
+ sql.setPager(pager);
|
|
|
+ dao.execute(sql);
|
|
|
+ watch2.stop();
|
|
|
+ //查询结果
|
|
|
+ List<Map> list = sql.getList(Map.class);
|
|
|
+ //用户id列表
|
|
|
+ List<Long> userIds = new ArrayList<>();
|
|
|
+ for (Map map : list) {
|
|
|
+ //把投手id和运营id和GSID和客服人员ID 转成List
|
|
|
+ List<String> keys = Arrays.asList("put_user_id", "oper_user_id", "gs_id", "customer_service_id");
|
|
|
+ for (String key : keys) {
|
|
|
+ if (map.get(key) != null) {
|
|
|
+ userIds.add(Long.valueOf(map.get(key).toString()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //去掉字符串中的‘[]’
|
|
|
+ String str = (String) map.get("role_amount");
|
|
|
+ if(str!=null&&str.contains("[") && str.contains("]")){
|
|
|
+ map.put("role_amount", str.replaceAll("[\\[\\]]", ""));
|
|
|
+ }
|
|
|
+ //去除‘null’字符串
|
|
|
+ List<String> nullStringKeys = Arrays.asList("add_corp_user_id", "user_wechat", "remark", "user_phone", "country");
|
|
|
+ nullStringKeys.stream()
|
|
|
+ .filter(key -> "null".equals(map.get(key)))
|
|
|
+ .forEach(key -> map.put(key, null));
|
|
|
+ }
|
|
|
+ //去重userIds
|
|
|
+ userIds = userIds.stream().distinct().collect(Collectors.toList());
|
|
|
+ //发送RPC接口查询所有用户
|
|
|
+// ResultVO<Map<Long, String>> userMap = sysUserRpc.getUserNameByIds(userIds);
|
|
|
+//
|
|
|
+// for (Map map : list) {
|
|
|
+// //投手名
|
|
|
+// updateUserName(map, "put_user_id", "put_user_name", userMap);
|
|
|
+// //运营人员名
|
|
|
+// updateUserName(map, "oper_user_id", "oper_user_name", userMap);
|
|
|
+// //GS人员名
|
|
|
+// updateUserName(map, "gs_id", "gs_name", userMap);
|
|
|
+// //客服人员名
|
|
|
+// updateUserName(map, "customer_service_id", "customer_service_name", userMap);
|
|
|
+// }
|
|
|
+ //返回结果
|
|
|
+ log.info("查询总记录数耗时:{}",watch.getTotalTimeMillis());
|
|
|
+ log.info("查询数据耗时:{}",watch2.getTotalTimeMillis());
|
|
|
+ return new Page<>(list, pager);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新用户名称
|
|
|
+ private void updateUserName(Map<String, Object> map, String userIdKey, String userNameKey, ResultVO<Map<Long, String>> userMap) {
|
|
|
+ Object userIdObj = map.get(userIdKey);
|
|
|
+ if (userIdObj != null) {
|
|
|
+ try {
|
|
|
+ long userId = Long.parseLong(userIdObj.toString());
|
|
|
+ String userName = userMap.getData().get(userId);
|
|
|
+ if (userName != null) {
|
|
|
+ map.put(userNameKey, userName);
|
|
|
+ }
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ // 处理长整型转换异常
|
|
|
+ log.error("Error parsing user ID for key " + userIdKey + ": " + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据条件生成查询sql条件
|
|
|
+ */
|
|
|
+ private Criteria getSqlByQuery(RoleRechargeRankingDTO dto){
|
|
|
//默认查询不合服的数据
|
|
|
if (dto.getIsMergeServer() == null) {
|
|
|
dto.setIsMergeServer(Boolean.FALSE);
|
|
|
}
|
|
|
- //创建查询条件 给主表使用
|
|
|
Criteria criA = Cnd.cri();
|
|
|
if (CollectionUtils.isNotEmpty(dto.getGameId())) {
|
|
|
//角色注册子游戏
|
|
@@ -74,10 +257,10 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
|
|
|
//拼接24内充值金额条件
|
|
|
if(dto.getRechargeAmountWithin24h()!=null){
|
|
|
- criA = spliceRechargeAmountWithin24h(dto, criA);
|
|
|
+ spliceRechargeAmountWithin24h(dto, criA);
|
|
|
}
|
|
|
if(dto.getRechargeTotalAmountWithin24h()!=null){
|
|
|
- criA = spliceRechargeTotalAmountWithin24h(dto, criA);
|
|
|
+ spliceRechargeTotalAmountWithin24h(dto, criA);
|
|
|
}
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(dto.getParentGameIds())) {
|
|
@@ -208,7 +391,18 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
criA.where().andEquals("is_add_corp_wechat", dto.getIsAddCorpWechat());
|
|
|
}
|
|
|
}
|
|
|
- //给充值时间查询条件
|
|
|
+ //角色最近活跃时间
|
|
|
+ if(dto.getLastActiveTimeMax()!=null && dto.getLastActiveTimeMin()!=null){
|
|
|
+ criA.where().andBetween("DATE(role_active_time)", dto.getLastActiveTimeMin(), dto.getLastActiveTimeMax());
|
|
|
+ }
|
|
|
+
|
|
|
+ return criA;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据时间条件生成查询sql
|
|
|
+ */
|
|
|
+ private Criteria getDateSqlByQuery(RoleRechargeRankingDTO dto){
|
|
|
Criteria criTodayAmount = Cnd.cri();
|
|
|
//查询充值成功的
|
|
|
criTodayAmount.where().andEquals("status", 2);
|
|
@@ -216,121 +410,22 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
//充值时间限制
|
|
|
criTodayAmount.where().andBetween("DATE(pay_time)", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
|
}
|
|
|
- //分页对象
|
|
|
- Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
|
|
|
- //查询总记录数
|
|
|
- Sql countSql = Sqls.create(getCountNumSql(criA, criTodayAmount));
|
|
|
- countSql.setCallback(Sqls.callback.integer());
|
|
|
- dao.execute(countSql);
|
|
|
- pager.setRecordCount(countSql.getInt());
|
|
|
- //主表添加排序条件
|
|
|
- if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
- dto.setSortType(OrderByEnum.DESC.getOrderType());
|
|
|
- }
|
|
|
- if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
- criA.getOrderBy().orderBy("amount", dto.getSortType());
|
|
|
- } else {
|
|
|
- criA.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
|
|
|
- }
|
|
|
- //创建sql
|
|
|
- Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount));
|
|
|
- sql.setCallback(Sqls.callback.maps());
|
|
|
- sql.setPager(pager);
|
|
|
- dao.execute(sql);
|
|
|
- //查询结果
|
|
|
- List<Map> list = sql.getList(Map.class);
|
|
|
- //用户id列表
|
|
|
- List<Long> userIds = new ArrayList<>();
|
|
|
- for (Map map : list) {
|
|
|
-// getNameById(map);
|
|
|
- //把投手id和运营id和GSID和客服人员ID 转成List
|
|
|
- if(map.get("put_user_id") != null){
|
|
|
- userIds.add(Long.valueOf(map.get("put_user_id").toString()));
|
|
|
- }
|
|
|
- if(map.get("oper_user_id") != null){
|
|
|
- userIds.add(Long.valueOf(map.get("oper_user_id").toString()));
|
|
|
- }
|
|
|
- if(map.get("gs_id") != null){
|
|
|
- userIds.add(Long.valueOf(map.get("gs_id").toString()));
|
|
|
- }
|
|
|
- if(map.get("customer_service_id") != null){
|
|
|
- userIds.add(Long.valueOf(map.get("customer_service_id").toString()));
|
|
|
- }
|
|
|
- String str = (String) map.get("role_amount");
|
|
|
- if(str!=null&&str.contains("[") && str.contains("]")){
|
|
|
- //去掉字符串中的‘[]’
|
|
|
- map.put("role_amount", str.replaceAll("\\[|\\]", ""));
|
|
|
- }
|
|
|
-
|
|
|
- //去除‘null’字符串
|
|
|
- if ("null".equals(map.get("add_corp_user_id"))) {
|
|
|
- map.put("add_corp_user_id", null);
|
|
|
- }
|
|
|
- if ("null".equals(map.get("user_wechat"))) {
|
|
|
- map.put("user_wechat", null);
|
|
|
- }
|
|
|
- if ("null".equals(map.get("remark"))) {
|
|
|
- map.put("remark", null);
|
|
|
- }
|
|
|
- if ("null".equals(map.get("user_phone"))) {
|
|
|
- map.put("user_phone", null);
|
|
|
- }
|
|
|
- if ("null".equals(map.get("country"))) {
|
|
|
- map.put("country", null);
|
|
|
- }
|
|
|
- }
|
|
|
- //去重userIds
|
|
|
- userIds = userIds.stream().distinct().collect(Collectors.toList());
|
|
|
- //发送RPC接口查询所有用户
|
|
|
- ResultVO<Map<Long, String>> userMap = sysUserRpc.getUserNameByIds(userIds);
|
|
|
-
|
|
|
- for (Map map : list) {
|
|
|
- //投手名
|
|
|
- updateUserName(map, "put_user_id", "put_user_name", userMap);
|
|
|
- //运营人员名
|
|
|
- updateUserName(map, "oper_user_id", "oper_user_name", userMap);
|
|
|
- //GS人员名
|
|
|
- updateUserName(map, "gs_id", "gs_name", userMap);
|
|
|
- //客服人员名
|
|
|
- updateUserName(map, "customer_service_id", "customer_service_name", userMap);
|
|
|
- }
|
|
|
- //返回结果
|
|
|
- return new Page<>(list, pager);
|
|
|
- }
|
|
|
-
|
|
|
- // 更新用户名称
|
|
|
- private void updateUserName(Map<String, Object> map, String userIdKey, String userNameKey, ResultVO<Map<Long, String>> userMap) {
|
|
|
- Object userIdObj = map.get(userIdKey);
|
|
|
- if (userIdObj != null) {
|
|
|
- try {
|
|
|
- long userId = Long.parseLong(userIdObj.toString());
|
|
|
- String userName = userMap.getData().get(userId);
|
|
|
- if (userName != null) {
|
|
|
- map.put(userNameKey, userName);
|
|
|
- }
|
|
|
- } catch (NumberFormatException e) {
|
|
|
- // 处理长整型转换异常
|
|
|
- log.error("Error parsing user ID for key " + userIdKey + ": " + e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
+ return criTodayAmount;
|
|
|
}
|
|
|
|
|
|
|
|
|
- private Criteria spliceRechargeTotalAmountWithin24h(RoleRechargeRankingDTO dto, Criteria criA) {
|
|
|
+ private void spliceRechargeTotalAmountWithin24h(RoleRechargeRankingDTO dto, Criteria criA) {
|
|
|
switch (dto.getRechargeTotalAmountWithin24hUnit()) {
|
|
|
case ">" -> criA.where().andGT("role_total_amount", dto.getRechargeTotalAmountWithin24h());
|
|
|
case ">=" -> criA.where().andGTE("role_total_amount", dto.getRechargeTotalAmountWithin24h());
|
|
|
case "=" -> criA.where().andEquals("role_total_amount", dto.getRechargeTotalAmountWithin24h());
|
|
|
case "<" -> criA.where().andLT("role_total_amount", dto.getRechargeTotalAmountWithin24h());
|
|
|
case "<=" -> criA.where().andLTE("role_total_amount", dto.getRechargeTotalAmountWithin24h());
|
|
|
- default -> {
|
|
|
- criA.where().andGTE("role_total_amount", dto.getRechargeTotalAmountWithin24h());
|
|
|
- }
|
|
|
+ default -> criA.where().andGTE("role_total_amount", dto.getRechargeTotalAmountWithin24h());
|
|
|
}
|
|
|
- return criA;
|
|
|
}
|
|
|
|
|
|
- private Criteria spliceRechargeAmountWithin24h(RoleRechargeRankingDTO dto, Criteria criA) {
|
|
|
+ private void spliceRechargeAmountWithin24h(RoleRechargeRankingDTO dto, Criteria criA) {
|
|
|
switch (dto.getRechargeAmountWithin24hUnit()) {
|
|
|
case ">" -> criA.where().andGT("max_amount", dto.getRechargeAmountWithin24h());
|
|
|
// case ">=" -> criA.where().andGTE("max_amount", dto.getRechargeAmountWithin24h());
|
|
@@ -338,11 +433,8 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
case "=" -> criA.where().andEquals("array_contains(role_amount,"+dto.getRechargeAmountWithin24h()+")", 1);
|
|
|
case "<" -> criA.where().andLT("min_amount", dto.getRechargeAmountWithin24h());
|
|
|
// case "<=" -> criA.where().andLTE("max_amount", dto.getRechargeAmountWithin24h());
|
|
|
- default -> {
|
|
|
- criA.where().andGT("max_amount", dto.getRechargeAmountWithin24h());
|
|
|
- }
|
|
|
+ default -> criA.where().andGT("max_amount", dto.getRechargeAmountWithin24h());
|
|
|
}
|
|
|
- return criA;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -386,7 +478,6 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
|
|
|
/**
|
|
|
* 创建发送消息任务
|
|
|
- * @param dto
|
|
|
*/
|
|
|
@Override
|
|
|
public void createSendMsgTask(SendMsgTaskDTO dto) {
|
|
@@ -439,8 +530,6 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
|
|
|
/**
|
|
|
* 获取角色列表
|
|
|
- * @param dto
|
|
|
- * @return
|
|
|
*/
|
|
|
@Override
|
|
|
public List<Map> getRoleList(RoleRechargeRankingDTO dto) {
|
|
@@ -458,10 +547,10 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
|
|
|
//拼接24内充值金额条件
|
|
|
if(dto.getRechargeAmountWithin24h()!=null){
|
|
|
- criA = spliceRechargeAmountWithin24h(dto, criA);
|
|
|
+ spliceRechargeAmountWithin24h(dto, criA);
|
|
|
}
|
|
|
if(dto.getRechargeTotalAmountWithin24h()!=null){
|
|
|
- criA = spliceRechargeTotalAmountWithin24h(dto, criA);
|
|
|
+ spliceRechargeTotalAmountWithin24h(dto, criA);
|
|
|
}
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(dto.getParentGameIds())) {
|
|
@@ -660,8 +749,6 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
|
|
|
/**
|
|
|
* 获取创建人名称
|
|
|
- * @param sendMsgTaskList
|
|
|
- * @return
|
|
|
*/
|
|
|
private Map<Long, String> getCreateByNameMap(PageUtil<SendMsgVO> sendMsgTaskList) {
|
|
|
//取创建人id变成list
|
|
@@ -718,9 +805,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
List<TaskResultDTO> list = sql.getList(TaskResultDTO.class);
|
|
|
//拼成map key为角色id
|
|
|
HashMap<String, TaskResultDTO> taskResultMap = new HashMap<>();
|
|
|
- list.forEach(item -> {
|
|
|
- taskResultMap.put(item.getRoleId(), item);
|
|
|
- });
|
|
|
+ list.forEach(item -> taskResultMap.put(item.getRoleId(), item));
|
|
|
sendMsgTaskResultList.getRecords().forEach(item -> {
|
|
|
TaskResultDTO taskResultDto = taskResultMap.get(item.getRoleId());
|
|
|
if(taskResultDto!=null){
|
|
@@ -779,45 +864,6 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
""";
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 通过id获取 GS、运营、客服人员、投手名字
|
|
|
- * @param dataMap dataMap
|
|
|
- * @return String
|
|
|
- */
|
|
|
- private Map<String, Object> getNameById(Map<String, Object> dataMap){
|
|
|
-
|
|
|
- //投手名
|
|
|
- if (dataMap.get("put_user_id") != null) {
|
|
|
- if (sysUserRpc.getById(Long.valueOf((String) dataMap.get("put_user_id"))).getData() != null) {
|
|
|
- dataMap.put("put_user_name",
|
|
|
- sysUserRpc.getById(Long.valueOf((String) dataMap.get("put_user_id"))).getData().getNickname());
|
|
|
- }
|
|
|
- }
|
|
|
- //运营人员名
|
|
|
- if (dataMap.get("oper_user_id") != null) {
|
|
|
- if (sysUserRpc.getById((Long) dataMap.get("oper_user_id")).getData() != null) {
|
|
|
- dataMap.put("oper_user_name",
|
|
|
- sysUserRpc.getById((Long) dataMap.get("oper_user_id")).getData().getNickname());
|
|
|
- }
|
|
|
- }
|
|
|
- //GS人员名
|
|
|
- if (dataMap.get("gs_id") != null) {
|
|
|
- if (sysUserRpc.getById((Long) dataMap.get("gs_id")).getData() != null) {
|
|
|
- dataMap.put("gs_name",
|
|
|
- sysUserRpc.getById((Long) dataMap.get("gs_id")).getData().getNickname());
|
|
|
- }
|
|
|
- }
|
|
|
- //客服人员名
|
|
|
- if (dataMap.get("customer_service_id") != null) {
|
|
|
- if (sysUserRpc.getById((Long) dataMap.get("customer_service_id")).getData() != null) {
|
|
|
- dataMap.put("customer_service_name",
|
|
|
- sysUserRpc.getById((Long) dataMap.get("customer_service_id")).getData().getNickname());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return dataMap;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 原始服-父游戏
|
|
|
* @param dto RoleCombatRankingDTO
|
|
@@ -2163,6 +2209,260 @@ public class RoleManageServiceImpl implements IRoleManageService {
|
|
|
""" + criA;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 查询记录数
|
|
|
+ * @param criA 主表条件
|
|
|
+ * @param criTodayAmount 今日充值条件
|
|
|
+ * @return String
|
|
|
+ */
|
|
|
+ private String getCountNumSql2(Criteria criA, Criteria criTodayAmount) {
|
|
|
+ return """
|
|
|
+ SELECT
|
|
|
+ COUNT(1)
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ a.association_user_id as association_user_id, -- 来源的用户id
|
|
|
+ a.source_system as source_system, -- sdk来源
|
|
|
+ a.role_id as role_id, -- 角色id
|
|
|
+ a.os as os, -- 角色操作系统
|
|
|
+ b.role_name as role_name, -- 角色名
|
|
|
+ a.create_time as role_create_time, -- 角色创建时间
|
|
|
+ b.role_level as role_level, -- 角色等级
|
|
|
+ IFNULL(c.amount, 0) as amount, -- 角色累计充值金额
|
|
|
+ IFNULL(w.vip_level,
|
|
|
+ (CASE
|
|
|
+ WHEN c.amount >= 0 and c.amount < 2000 THEN '1'
|
|
|
+ WHEN c.amount >= 2000 and c.amount < 5000 THEN '2'
|
|
|
+ WHEN c.amount >= 5000 and c.amount < 10000 THEN '3'
|
|
|
+ WHEN c.amount >= 10000 and c.amount < 20000 THEN '4'
|
|
|
+ WHEN c.amount >= 20000 and c.amount < 50000 THEN '5'
|
|
|
+ WHEN c.amount >= 50000 THEN '6'
|
|
|
+ ELSE '0'
|
|
|
+ END)) as vip_level, -- 角色vip等级
|
|
|
+ a.game_id as role_reg_game_id, -- 角色注册游戏id
|
|
|
+ IFNULL(d.parent_id, a.game_id) as role_reg_parent_game_id, -- 角色注册游戏的父游戏id
|
|
|
+ IFNULL(d.super_game_id, a.game_id) as role_reg_super_game_id, -- 角色注册的超父游戏id
|
|
|
+ a.server_id as server_id, -- 角色所在区服id
|
|
|
+ t.server_name as source_server_name, -- 角色所在区服原始名
|
|
|
+ IFNULL(f.real_amount, 0) as role_last_amount, -- 角色最近充值金额
|
|
|
+ f.pay_time as role_last_pay_time, -- 角色最近充值时间
|
|
|
+ g.update_time as role_active_time, -- 角色最近活跃时间
|
|
|
+ TIMESTAMPDIFF(SECOND, g.update_time, NOW()) as role_active_until_now, -- 角色最近活跃距今
|
|
|
+ IFNULL(h.real_amount, 0) as role_first_amount, -- 角色首次充值金额
|
|
|
+ p.today_amount as today_amount, -- 角色当天充值金额
|
|
|
+ TIMESTAMPDIFF(SECOND, a.create_time, f.pay_time) as role_reg_pay_time, -- 角色创建充值时间差(秒)
|
|
|
+ TIMESTAMPDIFF(SECOND, f.pay_time, NOW()) as role_pay_until_now, -- 角色最近充值距今(秒)
|
|
|
+ a.user_id as user_id, -- 玩家id
|
|
|
+ x.agent_id as agent_id, -- 玩家注册渠道id
|
|
|
+ IF(x.agent_id = 0 , '自然量', y.agent_name) as agent_name, -- 玩家注册渠道名
|
|
|
+ y.put_user_id as put_user_id, -- 投手id
|
|
|
+ IFNULL(j.is_send_mail, 0) as is_send_mail, -- 是否发送邮件
|
|
|
+ j.send_gift_id as send_gift_id, -- 最新发送礼包id
|
|
|
+ j.is_change_game_type as is_change_game_type, -- 是否转端 1-是;0-否
|
|
|
+ j.is_add_corp_wechat as is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
|
|
|
+
|
|
|
+ IF(TIMESTAMPDIFF(HOUR, g.update_time, NOW()) > 72,
|
|
|
+ IF(TIMESTAMPDIFF(HOUR, f.pay_time, NOW()) < 72 , 0, 1) , 0) as is_remove_game_for_system, -- 是否退游 1-是;0-否(系统判定)
|
|
|
+ j.is_remove_game as is_remove_game, -- 是否退游 1-是;0-否;null-代表未操作数据
|
|
|
+ j.is_wake_up as is_wake_up, -- 是否唤醒 1-是;0-否
|
|
|
+
|
|
|
+ j.gs_id as gs_id, -- GS_ID
|
|
|
+ j.customer_service_id as customer_service_id, -- 客服ID
|
|
|
+ j.oper_user_id as oper_user_id, -- 运营ID
|
|
|
+ j.is_delete as is_delete, -- 是否删除 1-删除;0-正常
|
|
|
+ ara.role_total_amount as role_total_amount, -- 创角24小时内总充值金额
|
|
|
+ ara.max_amount as max_amount, -- 创角24小时内单笔最大充值金额
|
|
|
+ ara.min_amount as min_amount, -- 创角24小时内单笔最小充值金额
|
|
|
+ ara.role_amount as role_amount -- 角色充值数组
|
|
|
+ FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ *
|
|
|
+ FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ -- 角色所在子游戏id、区服id、合服id、角色id、角色名、角色创建时间、角色操作系统os(取创建时间最早的信息)
|
|
|
+ b.association_user_id ,
|
|
|
+ a.source_system,
|
|
|
+ a.user_id,
|
|
|
+ a.game_id,
|
|
|
+ a.server_id,
|
|
|
+ a.role_id,
|
|
|
+ a.role_name,
|
|
|
+ a.create_time,
|
|
|
+ a.os,
|
|
|
+ ROW_NUMBER()over(partition by a.role_id , a.source_system order by a.create_time asc, a.user_id asc) as num
|
|
|
+ FROM dm_game_order.t_game_user_role a
|
|
|
+ LEFT JOIN dm_game_order.t_game_user b on a.source_system = b.source_system AND a.user_id = b.id
|
|
|
+ ) a
|
|
|
+ WHERE num = 1
|
|
|
+ ) a
|
|
|
+ left join(
|
|
|
+ SELECT
|
|
|
+ source_system,
|
|
|
+ role_id,
|
|
|
+ role_total_amount,
|
|
|
+ array_min(role_amount) min_amount,
|
|
|
+ array_max(role_amount) max_amount,
|
|
|
+ role_amount
|
|
|
+ FROM game_ads.ads_role_amount
|
|
|
+ ) ara on a.role_id = ara.role_id and a.source_system = ara.source_system
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 角色等级、角色攻击力(取最新的信息)
|
|
|
+ source_system,
|
|
|
+ role_id,
|
|
|
+ role_name,
|
|
|
+ role_level,
|
|
|
+ ROW_NUMBER()over(partition by role_id , source_system order by update_time desc, user_id desc) as num
|
|
|
+ FROM dm_game_order.t_game_user_role
|
|
|
+ ) b on a.source_system = b.source_system AND a.role_id = b.role_id AND b.num = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 累计充值金额、累计充值次数
|
|
|
+ role_id,
|
|
|
+ source_system,
|
|
|
+ SUM(real_amount) as amount
|
|
|
+ FROM dm_game_order.t_game_order
|
|
|
+ WHERE status =2
|
|
|
+ GROUP BY role_id , source_system
|
|
|
+ ) c on a.source_system = c.source_system AND a.role_id = c.role_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 游戏名称、游戏类型、父游戏id、超父游戏id
|
|
|
+ source_system,
|
|
|
+ id,
|
|
|
+ parent_id,
|
|
|
+ super_game_id
|
|
|
+ FROM dm_game_order.t_game
|
|
|
+ ) d on a.source_system = d.source_system AND a.game_id = d.id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 父游戏名称
|
|
|
+ source_system,
|
|
|
+ id,
|
|
|
+ game_name as parent_game_name
|
|
|
+ FROM dm_game_order.t_game
|
|
|
+ ) e on d.source_system = e.source_system AND d.parent_id = e.id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 角色最近充值时间、角色最近充值金额
|
|
|
+ source_system,
|
|
|
+ role_id,
|
|
|
+ real_amount,
|
|
|
+ pay_time,
|
|
|
+ ROW_NUMBER()over(partition by role_id , source_system order by pay_time desc) as num
|
|
|
+ FROM dm_game_order.t_game_order
|
|
|
+ WHERE status =2
|
|
|
+ ) f on a.source_system = f.source_system AND a.role_id = f.role_id AND f.num = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ -- 角色最近活跃时间
|
|
|
+ SELECT
|
|
|
+ source_system ,
|
|
|
+ role_id ,
|
|
|
+ active_time as update_time ,
|
|
|
+ ROW_NUMBER()over(partition by role_id , source_system order by active_time desc) as num
|
|
|
+ FROM game_dw.dw_active_log
|
|
|
+ ) g on a.source_system = g.source_system AND a.role_id = g.role_id AND g.num = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 角色首次充值金额
|
|
|
+ source_system,
|
|
|
+ role_id,
|
|
|
+ real_amount,
|
|
|
+ ROW_NUMBER()over(partition by role_id , source_system order by pay_time asc) as num
|
|
|
+ FROM dm_game_order.t_game_order WHERE status =2
|
|
|
+ ) h on a.source_system = h.source_system AND a.role_id = h.role_id AND h.num = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 角色当天充值金额
|
|
|
+ source_system,
|
|
|
+ role_id,
|
|
|
+ SUM(real_amount) as today_amount
|
|
|
+ FROM dm_game_order.t_game_order
|
|
|
+ """ + criTodayAmount +
|
|
|
+ """
|
|
|
+ GROUP BY role_id ,source_system
|
|
|
+ ) p on a.source_system = p.source_system AND a.role_id = p.role_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 操作表相关数据
|
|
|
+ source_system,
|
|
|
+ user_id,
|
|
|
+ role_id,
|
|
|
+ server_id,
|
|
|
+ game_id,
|
|
|
+ is_send_mail, -- 是否发送邮件
|
|
|
+ send_gift_id, -- 最新发送礼包id
|
|
|
+ is_change_game_type, -- 是否转端 1-是;0-否
|
|
|
+ is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
|
|
|
+ is_remove_game, -- 是否退游 1-是;0-否
|
|
|
+ is_wake_up, -- 是否唤醒 1-是;0-否
|
|
|
+ gs_id, -- GS_ID
|
|
|
+ customer_service_id, -- 客服ID
|
|
|
+ oper_user_id, -- 运营ID
|
|
|
+ is_delete -- 是否删除 1-删除;0-正常
|
|
|
+ FROM dm_game_order.t_role_operate
|
|
|
+ ) j on a.source_system = j.source_system AND a.association_user_id = j.user_id AND
|
|
|
+ a.role_id = j.role_id AND a.server_id = j.server_id AND a.game_id = j.game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ source_system ,
|
|
|
+ id,
|
|
|
+ name
|
|
|
+ FROM dm_game_order.t_game_super
|
|
|
+ ) s on d.source_system = s.source_system AND d.super_game_id = s.id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 原始服名
|
|
|
+ source_system,
|
|
|
+ game_id,
|
|
|
+ server_id,
|
|
|
+ server_name
|
|
|
+ FROM dm_game_order.t_game_server_merge
|
|
|
+ WHERE is_delete = 0
|
|
|
+ ) t on a.source_system = t.source_system AND a.server_id = t.server_id AND d.super_game_id = t.game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- vip等级
|
|
|
+ source_system ,
|
|
|
+ super_game_id ,
|
|
|
+ parent_game_id ,
|
|
|
+ recharge_money_min ,
|
|
|
+ recharge_money_max ,
|
|
|
+ vip_level ,
|
|
|
+ is_delete
|
|
|
+ FROM dm_game_order.t_game_vip
|
|
|
+ WHERE is_delete = 0
|
|
|
+ ) w on d.source_system = w.source_system AND IFNULL(d.parent_id, a.game_id) = w.parent_game_id
|
|
|
+ AND IFNULL(d.super_game_id, a.game_id) = w.super_game_id
|
|
|
+ AND c.amount >= w.recharge_money_min AND c.amount < recharge_money_max
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ source_system,
|
|
|
+ id,
|
|
|
+ create_time,
|
|
|
+ end_time,
|
|
|
+ agent_id,
|
|
|
+ association_user_id
|
|
|
+ FROM dm_game_order.t_game_user_burst
|
|
|
+ ) x on a.source_system = x.source_system AND a.association_user_id = x.id
|
|
|
+ AND a.create_time >= x.create_time AND a.create_time < x.end_time
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 渠道名称、投手id
|
|
|
+ source_system,
|
|
|
+ id,
|
|
|
+ agent_name,
|
|
|
+ pitcher_id as put_user_id
|
|
|
+ FROM dm_game_order.t_pitcher_agent
|
|
|
+ ) y ON x.agent_id = y.id AND x.source_system = y.source_system
|
|
|
+ ) a
|
|
|
+ """ + criA;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 原始服-父游戏维度(区服相关信息)
|
|
|
* @return String
|