Forráskód Böngészése

:feat:角色充值排行榜界面- 创建发送消息任务

zhangxianyu 1 éve
szülő
commit
117174eee4
14 módosított fájl, 453 hozzáadás és 7 törlés
  1. 20 0
      game-data/game-data-base/pom.xml
  2. 42 0
      game-data/game-data-base/src/main/java/com/zangxiang/game/base/pojo/dto/SendMsgDto.java
  3. 15 0
      game-data/game-data-base/src/main/java/com/zangxiang/game/base/rpc/SendMsgRpc.java
  4. 1 3
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/RoleManageController.java
  5. 3 4
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/SendMsgTaskDto.java
  6. 10 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IRoleManageService.java
  7. 213 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RoleManageServiceImpl.java
  8. 38 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/dto/SendMsgDto.java
  9. 14 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/rpc/SendMsgRpc.java
  10. 37 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/rpc/impl/SendMsgImpl.java
  11. 8 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/ISendMsgTaskService.java
  12. 11 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/SendMsgTaskServiceImpl.java
  13. 32 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/SendMsgTask.java
  14. 9 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/SendMsgTaskMapper.java

+ 20 - 0
game-data/game-data-base/pom.xml

@@ -16,4 +16,24 @@
         <maven.compiler.target>8</maven.compiler.target>
     </properties>
 
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-metadata-definition-protobuf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.zanxiang.module</groupId>
+            <artifactId>zx-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-core</artifactId>
+        </dependency>
+    </dependencies>
+
 </project>

+ 42 - 0
game-data/game-data-base/src/main/java/com/zangxiang/game/base/pojo/dto/SendMsgDto.java

@@ -0,0 +1,42 @@
+package com.zangxiang.game.base.pojo.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+
+@Data
+public class SendMsgDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+
+    /**
+     * 消息
+     */
+    private String msg;
+    /**
+     * 角色列表
+     */
+    private List<String> roles;
+
+    /**
+     * 发送对象条件(筛选条件放入JSON)
+     */
+    private String sendConditionJson;
+
+    /**
+     * 游戏名称
+     */
+    private String gameName;
+
+
+
+
+}

+ 15 - 0
game-data/game-data-base/src/main/java/com/zangxiang/game/base/rpc/SendMsgRpc.java

@@ -0,0 +1,15 @@
+package com.zangxiang.game.base.rpc;
+
+
+import com.zangxiang.game.base.pojo.dto.SendMsgDto;
+import com.zanxiang.module.util.pojo.ResultVO;
+
+/**
+ * @author : ZhangXianyu
+ * @time : 2024-03-13 11:05:18
+ * @description : 发送消息
+ */
+public interface SendMsgRpc {
+
+    ResultVO<Boolean> sendMsg(SendMsgDto sendMsgDto);
+}

+ 1 - 3
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/RoleManageController.java

@@ -50,11 +50,9 @@ public class RoleManageController {
     @ApiOperation(value = "创建发送消息任务")
     @PreAuthorize(permissionKey = "roleManage:sendMsgTask:create")
     @PostMapping("/sendMsgTask")
-    public ResultVO rcreateSendMsgTask(@RequestBody SendMsgTaskDto dto) {
+    public ResultVO createSendMsgTask(@RequestBody SendMsgTaskDto dto) {
         roleManageService.createSendMsgTask(dto);
         return ResultVO.ok();
     }
 
-
-
 }

+ 3 - 4
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/SendMsgTaskDto.java

@@ -13,7 +13,7 @@ import java.time.LocalDate;
  * @Description 发送消息任务参数
  **/
 @Data
-public class SendMsgTaskDto implements Serializable {
+public class SendMsgTaskDto  implements Serializable {
 
     /**
      * 任务名称
@@ -46,10 +46,9 @@ public class SendMsgTaskDto implements Serializable {
      */
     private String sendContent;
     /**
-     * 发送对象条件(筛选条件放入JSON)
-     * {@link RoleRechargeRankingDTO}
+     * 任务条件
      */
-    private String sendConditionJson;
+    private RoleRechargeRankingDTO roleRechargeRankingDTO;
 
 
 

+ 10 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IRoleManageService.java

@@ -5,6 +5,7 @@ import com.zanxiang.game.data.serve.pojo.dto.RoleRechargeRankingDTO;
 import com.zanxiang.game.data.serve.pojo.dto.SendMsgTaskDto;
 import com.zanxiang.game.data.serve.utils.Page;
 
+import java.util.List;
 import java.util.Map;
 
 public interface IRoleManageService {
@@ -18,4 +19,13 @@ public interface IRoleManageService {
      * @param dto
      */
     void createSendMsgTask(SendMsgTaskDto dto);
+
+
+    /**
+     * 获取角色列表
+     * @param dto
+     * @return
+     */
+    List<Map> getRoleList(RoleRechargeRankingDTO dto);
+
 }

+ 213 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RoleManageServiceImpl.java

@@ -1,13 +1,19 @@
 package com.zanxiang.game.data.serve.service.impl;
 
+import com.alibaba.fastjson2.JSON;
+import com.zangxiang.game.base.pojo.dto.SendMsgDto;
 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.RoleCombatRankingDTO;
 import com.zanxiang.game.data.serve.pojo.dto.RoleRechargeRankingDTO;
 import com.zanxiang.game.data.serve.pojo.dto.SendMsgTaskDto;
 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.module.util.JsonUtil;
+import com.zanxiang.module.util.exception.BaseException;
+import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -20,6 +26,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 com.zangxiang.game.base.rpc.SendMsgRpc;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -42,6 +49,11 @@ public class RoleManageServiceImpl implements IRoleManageService {
     @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
     private ISysUserRpc sysUserRpc;
 
+    @DubboReference
+    private SendMsgRpc sendMsgRpc;
+
+
+
     /**
      * 角色充值排行榜
      * @param dto RoleRechargeRankingDTO
@@ -323,8 +335,209 @@ public class RoleManageServiceImpl implements IRoleManageService {
      */
     @Override
     public void createSendMsgTask(SendMsgTaskDto dto) {
+        //获取当前用户id
+        Long sysUserId = SecurityUtil.getUserId();
+
+        //先查出来所有的角色
+        List<Map> roleList = getRoleList(dto.getRoleRechargeRankingDTO());
+        //筛选出角色id
+        List<String> roleIdList = roleList.stream().map(map -> map.get("role_id").toString()).collect(Collectors.toList());
+        SendMsgDto sendMsgDto = new SendMsgDto();
+        sendMsgDto.setMsg(dto.getSendContent());
+        sendMsgDto.setRoles(roleIdList);
+        sendMsgDto.setCreateBy(sysUserId);
+        if(CollectionUtils.isNotEmpty(roleList)){
+            String gameName = (String) roleList.get(0).get("role_reg_parent_game_name");
+            sendMsgDto.setGameName(gameName);
+        }
+        RoleRechargeRankingDTO roleRechargeRankingDTO = dto.getRoleRechargeRankingDTO();
+        sendMsgDto.setSendConditionJson(JSON.toJSONString(roleRechargeRankingDTO));
+
+        //调用发送消息接口
+        ResultVO<Boolean> booleanResultVO = sendMsgRpc.sendMsg(sendMsgDto);
+        if (!booleanResultVO.isSuccess()) {
+            throw new BaseException(booleanResultVO.getMsg());
+        }
+    }
+
+    /**
+     * 获取角色列表
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<Map> getRoleList(RoleRechargeRankingDTO dto) {
+
+        //默认查询不合服的数据
+        if (dto.getIsMergeServer() == null) {
+            dto.setIsMergeServer(Boolean.FALSE);
+        }
+        //创建查询条件 给主表使用
+        Criteria criA = Cnd.cri();
+        if (CollectionUtils.isNotEmpty(dto.getGameId())) {
+            //角色注册子游戏
+            criA.where().andInList("role_reg_game_id", dto.getGameId());
+        }
 
+        //拼接24内充值金额条件
+        if(dto.getRechargeAmountWithin24h()!=null){
+            criA = spliceRechargeAmountWithin24h(dto, criA);
+        }
+        if(dto.getRechargeTotalAmountWithin24h()!=null){
+            criA = spliceRechargeTotalAmountWithin24h(dto, criA);
+        }
+
+        if (CollectionUtils.isNotEmpty(dto.getParentGameIds())) {
+            //角色注册父游戏
+            criA.where().andInList("role_reg_parent_game_id", dto.getParentGameIds());
+        }
+        if (dto.getSuperGameId() != null) {
+            //角色注册超父游戏
+            criA.where().andEquals("role_reg_super_game_id", dto.getSuperGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            criA.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (StringUtils.isNotBlank(dto.getRoleId())) {
+            criA.where().andEquals("role_id", dto.getRoleId());
+        }
+        if (StringUtils.isNotBlank(dto.getRoleName())) {
+            criA.where().andLike("role_name", dto.getRoleName());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds()) && !dto.getIsMergeServer()) {
+            //区服列表查询,不合服的区服
+            criA.where().andIn("server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds()) && dto.getIsMergeServer()) {
+            //合服区服列表查询
+            criA.where().andIn("merge_server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (dto.getCreateRoleBeginDate() != null && dto.getCreateRoleEndDate() != null) {
+            //角色创建时间
+            criA.where().andBetween("DATE(role_create_time)", dto.getCreateRoleBeginDate(), dto.getCreateRoleEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getVipLevel())) {
+            //角色vip等级
+            criA.where().andInList("vip_level", dto.getVipLevel());
+        }
+        if (dto.getIsSendMail() != null) {
+            criA.where().andEquals("is_send_mail", dto.getIsSendMail());
+        }
+        if (dto.getIsChange() != null) {
+            if (dto.getIsChange() == 2) {
+                //是否转端
+                criA.where().andIsNull("is_change_game_type");
+            } else {
+                //是否转端
+                criA.where().andEquals("is_change_game_type", dto.getIsChange());
+            }
+        }
+        if (StringUtils.isNotBlank(dto.getWeChatCompany())) {
+            //企业微信号
+            criA.where().andLike("add_corp_user_id", dto.getWeChatCompany());
+        }
+        if (StringUtils.isNotBlank(dto.getWeChat())) {
+            //客户微信
+            criA.where().andLike("user_wechat", dto.getWeChat());
+        }
+        if (StringUtils.isNotBlank(dto.getPhone())) {
+            //客户手机号
+            criA.where().andEquals("user_phone", dto.getPhone());
+        }
+        if (dto.getGsId() != null) {
+            //GS
+            if (dto.getGsId() == 0L) {
+                criA.where().andIsNull("gs_id");
+            } else {
+                criA.where().andEquals("gs_id", dto.getGsId());
+            }
+        }
+        if (dto.getPitcherId() != null) {
+            //投手
+            criA.where().andEquals("put_user_id", dto.getPitcherId());
+        }
+        if (dto.getOperatorId() != null) {
+            //运营
+            if (dto.getOperatorId() == 0L) {
+                criA.where().andIsNull("oper_user_id");
+            } else {
+                criA.where().andEquals("oper_user_id", dto.getOperatorId());
+            }
+        }
+        if (dto.getCustomerServerId() != null) {
+            //客服
+            if (dto.getCustomerServerId() == 0L) {
+                criA.where().andIsNull("customer_service_id");
+            } else {
+                criA.where().andEquals("customer_service_id", dto.getCustomerServerId());
+            }
+        }
+        if (dto.getTotalRechargeMin() != null) {
+            //累计充值金额最小值
+            criA.where().andGTE("amount", dto.getTotalRechargeMin());
+        }
+        if (dto.getTotalRechargeMax() != null) {
+            //累计充值金额最大值
+            criA.where().andLTE("amount", dto.getTotalRechargeMax());
+        }
+        if (StringUtils.isNotBlank(dto.getOs())) {
+            //玩家操作系统
+            criA.where().andEquals("os", dto.getOs());
+        }
+        if (dto.getIsRemoveGame() != null) {
+            if (dto.getIsRemoveGame() == 2) {
+                //是否退游
+                criA.where().andIsNull("is_remove_game");
+            } else {
+                //是否退游
+                criA.where().andEquals("is_remove_game", dto.getIsRemoveGame());
+            }
+        }
+        if (dto.getIsRemoveGameForSystem() != null) {
+            //是否退游(系统判定)
+            criA.where().andEquals("is_remove_game_for_system", dto.getIsRemoveGameForSystem());
+        }
+        if (dto.getIsWakeUp() != null) {
+            if (dto.getIsWakeUp() == 2) {
+                //是否唤醒
+                criA.where().andIsNull("is_wake_up");
+            } else {
+                //是否唤醒
+                criA.where().andEquals("is_wake_up", dto.getIsWakeUp());
+            }
+        }
+        if (dto.getIsAddCorpWechat() != null) {
+            if (dto.getIsAddCorpWechat() == 2) {
+                //是否添加企微
+                criA.where().andIsNull("is_add_corp_wechat");
+            } else {
+                //是否添加企微
+                criA.where().andEquals("is_add_corp_wechat", dto.getIsAddCorpWechat());
+            }
+        }
+        //给充值时间查询条件
+        Criteria criTodayAmount = Cnd.cri();
+        //查询充值成功的
+        criTodayAmount.where().andEquals("status", 2);
+        if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
+            //充值时间限制
+            criTodayAmount.where().andBetween("DATE(pay_time)", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
+        }
 
+        //主表添加排序条件
+        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());
+        dao.execute(sql);
+        return sql.getList(Map.class);
     }
 
     /**

+ 38 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/dto/SendMsgDto.java

@@ -0,0 +1,38 @@
+package com.zanxiang.game.module.base.pojo.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+
+@Data
+public class SendMsgDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+    /**
+     * 消息
+     */
+    private String msg;
+    /**
+     * 角色列表
+     */
+    private List<String> roles;
+
+    /**
+     * 发送对象条件(筛选条件放入JSON)
+     */
+    private String sendConditionJson;
+
+    /**
+     * 游戏名称
+     */
+    private String gameName;
+
+}

+ 14 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/rpc/SendMsgRpc.java

@@ -0,0 +1,14 @@
+package com.zanxiang.game.module.base.rpc;
+
+import com.zanxiang.game.module.base.pojo.dto.SendMsgDto;
+import com.zanxiang.module.util.pojo.ResultVO;
+
+/**
+ * @author : ZhangXianyu
+ * @time : 2024-03-13 11:05:18
+ * @description : 发送消息
+ */
+public interface SendMsgRpc {
+
+    ResultVO<Boolean> sendMsg(SendMsgDto sendMsgDto);
+}

+ 37 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/rpc/impl/SendMsgImpl.java

@@ -0,0 +1,37 @@
+package com.zanxiang.game.module.manage.rpc.impl;
+
+import com.zanxiang.game.module.base.pojo.dto.SendMsgDto;
+import com.zanxiang.game.module.base.rpc.SendMsgRpc;
+import com.zanxiang.game.module.manage.service.ISendMsgTaskService;
+import com.zanxiang.game.module.manage.service.impl.SendMsgTaskServiceImpl;
+import com.zanxiang.game.module.mybatis.entity.SendMsgTask;
+import com.zanxiang.module.util.pojo.ResultVO;
+import org.apache.dubbo.config.annotation.DubboService;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.util.Date;
+
+@DubboService
+public class SendMsgImpl implements SendMsgRpc {
+
+    @Resource
+    private ISendMsgTaskService sendMsgTaskService;
+
+    @Override
+    public ResultVO<Boolean> sendMsg(SendMsgDto sendMsgDto) {
+        //创建任务
+        SendMsgTask sendMsgTask = new SendMsgTask();
+        sendMsgTask.setTaskName(sendMsgDto.getMsg());
+        sendMsgTask.setTaskCondition(sendMsgDto.getSendConditionJson());
+        sendMsgTask.setGameName(sendMsgDto.getGameName());
+        sendMsgTask.setCreateBy(sendMsgDto.getCreateBy());
+        sendMsgTask.setCreateTime(LocalDate.now());
+        sendMsgTask.setMsg(sendMsgDto.getMsg());
+        sendMsgTask.setRoleIds(String.join(",", sendMsgDto.getRoles()));
+        //保存任务
+        sendMsgTaskService.save(sendMsgTask);
+        //todo:发送消息
+        return ResultVO.ok();
+    }
+}

+ 8 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/ISendMsgTaskService.java

@@ -0,0 +1,8 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.RoleOperate;
+import com.zanxiang.game.module.mybatis.entity.SendMsgTask;
+
+public interface ISendMsgTaskService extends IService<SendMsgTask> {
+}

+ 11 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/SendMsgTaskServiceImpl.java

@@ -0,0 +1,11 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.manage.service.ISendMsgTaskService;
+import com.zanxiang.game.module.mybatis.entity.SendMsgTask;
+import com.zanxiang.game.module.mybatis.mapper.SendMsgTaskMapper;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SendMsgTaskServiceImpl extends ServiceImpl<SendMsgTaskMapper,SendMsgTask> implements ISendMsgTaskService {
+}

+ 32 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/SendMsgTask.java

@@ -0,0 +1,32 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @author : ZhangXianyu
+ * @time : 2024-03-13 14:03:40
+ * @description : 发送消息任务实体类
+ */
+@Data
+public class SendMsgTask {
+
+    private Long id;
+
+    private String msg;
+
+    private String taskName;
+
+    private String taskCondition;
+
+    private String gameName;
+
+    private Long createBy;
+
+    private LocalDate createTime;
+
+    private String roleIds;
+
+
+}

+ 9 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/SendMsgTaskMapper.java

@@ -0,0 +1,9 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.SendMsgTask;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SendMsgTaskMapper extends BaseMapper<SendMsgTask> {
+}