Selaa lähdekoodia

Merge remote-tracking branch 'origin/package' into package

bilingfeng 1 vuosi sitten
vanhempi
commit
3e2809b976

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

@@ -140,7 +140,7 @@ public class GameDataController {
     }
 
     @ApiOperation(value = "流水监控")
-    @PreAuthorize(permissionKey = "gameData:flow:monitor")
+//    @PreAuthorize(permissionKey = "gameData:flow:monitor")
     @PostMapping("/flow/monitor")
     public ResultVO<Page<FlowMonitorVO>> getFlowMonitor(@RequestBody FlowMonitorDTO dto) {
         return ResultVO.ok(gameDataService.getFlowMonitor(dto));

+ 11 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/RoleManageController.java

@@ -3,6 +3,7 @@ package com.zanxiang.game.data.serve.controller;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
 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.service.IRoleManageService;
 import com.zanxiang.game.data.serve.utils.Page;
 import com.zanxiang.module.util.pojo.ResultVO;
@@ -10,6 +11,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -45,5 +47,14 @@ public class RoleManageController {
         return ResultVO.ok(roleManageService.getRoleCombatRanking(dto));
     }
 
+    @ApiOperation(value = "创建发送消息任务")
+    @PreAuthorize(permissionKey = "roleManage:sendMsgTask:create")
+    @PostMapping("/sendMsgTask")
+    public ResultVO rcreateSendMsgTask(@RequestBody SendMsgTaskDto dto) {
+        roleManageService.createSendMsgTask(dto);
+        return ResultVO.ok();
+    }
+
+
 
 }

+ 57 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/SendMsgTaskDto.java

@@ -0,0 +1,57 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+
+import com.zanxiang.game.data.serve.pojo.enums.TaskStrategyEnum;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * @author ZhangXianyu
+ * @time 2024-03-11 11:24:16
+ * @Description 发送消息任务参数
+ **/
+@Data
+public class SendMsgTaskDto implements Serializable {
+
+    /**
+     * 任务名称
+     */
+    private String taskName;
+
+    /**
+     * 任务调度策略
+     * {@link TaskStrategyEnum}
+     */
+    private Integer taskStrategy;
+
+    /**
+     * 定时发送时间
+     */
+    private LocalDate sendOnTime;
+
+    /**
+     * 定时发送开始时间
+     */
+    private LocalDate everyDayBeginTime;
+
+    /**
+     * 定时发送结束时间(默认2099表示永久)
+     */
+    private LocalDate everyDayEndTime;
+
+    /**
+     * 发送文本内容
+     */
+    private String sendContent;
+    /**
+     * 发送对象条件(筛选条件放入JSON)
+     * {@link RoleRechargeRankingDTO}
+     */
+    private String sendConditionJson;
+
+
+
+
+}

+ 73 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/enums/TaskStrategyEnum.java

@@ -0,0 +1,73 @@
+package com.zanxiang.game.data.serve.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * @author : ZhangXianyu
+ * @time : 2024-03-11 11:36:57
+ * @description : 任务策略类型枚举
+ */
+@Getter
+@AllArgsConstructor
+public enum TaskStrategyEnum {
+
+    /**
+     * 立即发送
+     */
+    SEND_NOW(1, "立即发送"),
+
+    /**
+     * 定时发送
+     */
+    SEND_ON_TIME(2, "定时发送"),
+
+    /**
+     * 每日循环发送
+     */
+    SEND_ON_EVERYDAY(3, "每日循环发送"),
+
+    /**
+     * 触发条件发送
+     */
+    APPLET(4, "触发条件发送");
+
+    /**
+     * 标识ID
+     */
+    private Integer id;
+
+    /**
+     * 类型名
+     */
+    private String name;
+
+    /**
+     * 获取任务类型名字
+     *
+     * @param deviceTypeId id
+     * @return {@link String}
+     */
+    public static String getName(Integer deviceTypeId) {
+        TaskStrategyEnum deviceType = TaskStrategyEnum.getDeviceType(deviceTypeId);
+        return deviceType == null ? null : deviceType.getName();
+    }
+
+    /**
+     * 获取客户端类型枚举
+     *
+     * @param deviceTypeId id
+     * @return DeviceTypeEnum
+     */
+    public static TaskStrategyEnum getDeviceType(Integer deviceTypeId) {
+        for (TaskStrategyEnum deviceTypeEnum : TaskStrategyEnum.values()) {
+            if (Objects.equals(deviceTypeEnum.getId(), deviceTypeId)) {
+                return deviceTypeEnum;
+            }
+        }
+        return null;
+    }
+
+}

+ 74 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/SendMsgTaskVo.java

@@ -0,0 +1,74 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @author ZhangXianyu
+ * @time 2024-03-11 11:24:16
+ * @Description 发送消息任务参数
+ **/
+@Data
+public class SendMsgTaskVo {
+
+    private Long taskId;
+
+    private String taskName;
+
+    private String taskCondition;
+
+    private String gameName;
+
+    private LocalDate createTime;
+
+    private String createBy;
+
+    private LocalDate updateTime;
+
+    private String updateBy;
+
+    private String sendContent;
+
+    /**
+     * 任务调度策略类型
+     * {@link com.zanxiang.game.data.serve.pojo.enums.TaskStrategyEnum}
+     */
+    private String taskStrategy;
+
+    /**
+     * 定时发送时间
+     */
+    private LocalDate sendOnTime;
+
+    /**
+     * 发送角色总数
+     */
+    private Integer sendCount;
+
+    /**
+     * 发送角色成功总数
+     */
+    private Integer sendSuccessCount;
+
+    /**
+     * 发送角色失败总数
+     */
+    private Integer sendFailCount;
+
+    /**
+     * 发送状态(任务实例状态 是否执行过任务)
+     */
+    private Integer sendStatus;
+
+    /**
+     * 任务状态(执行  停止)
+     */
+    private Integer taskStatus;
+
+
+
+
+
+
+}

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

@@ -2,6 +2,7 @@ package com.zanxiang.game.data.serve.service;
 
 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.utils.Page;
 
 import java.util.Map;
@@ -12,4 +13,9 @@ public interface IRoleManageService {
 
     Page<Map> getRoleCombatRanking(RoleCombatRankingDTO dto);
 
+    /**
+     * 创建发送消息任务
+     * @param dto
+     */
+    void createSendMsgTask(SendMsgTaskDto dto);
 }

+ 86 - 12
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -5229,18 +5229,38 @@ public class GameDataServiceImpl implements IGameDataService {
     @Override
     public Page<FlowMonitorVO> getFlowMonitor(FlowMonitorDTO dto) {
         LocalDate today = LocalDate.now();
-        //如果消耗时间和订单时间都为空,那么就给默认值
+        //如果消耗时间为空,那么就给默认值
         if(dto.getCostBeginDate()==null && dto.getCostEndDate()==null){
             LocalDate oneMonthAgo = today.minusMonths(1);
             //消耗时间如果为空,那么就给默认值当天前一个月
             dto.setCostBeginDate(oneMonthAgo);
             dto.setCostEndDate(today);
         }
+
+        //校验订单时间,必须包含在消耗时间内
+        if(dto.getOrderBeginDate()!=null && dto.getOrderEndDate()!=null){
+            //如果订单选择范围开始时间在消耗之前,那么就将订单时间设置为消耗开始时间
+            if(dto.getOrderBeginDate().isBefore(dto.getCostBeginDate())){
+                dto.setOrderBeginDate(dto.getCostBeginDate());
+            }
+            //如果订单选择范围结束时间在消耗之后,那么就将订单时间设置为消耗结束时间
+            if(dto.getOrderEndDate().isAfter(dto.getCostEndDate())){
+                dto.setOrderEndDate(dto.getCostEndDate());
+            }
+        }
+
+        //如果订单时间为空,那么就最多查询消耗结束时间当天和前一天的数据
         if(dto.getOrderBeginDate()==null && dto.getOrderEndDate()==null){
-            LocalDate twoDaysAgo = today.minusDays(1);
-            //订单时间如果为空,那么就给默认值当天和前一天
-            dto.setOrderBeginDate(twoDaysAgo);
-            dto.setOrderEndDate(today);
+            //订单结束时间默认为消耗结束时间
+            dto.setOrderEndDate(dto.getCostEndDate());
+            //获取前一天
+            LocalDate twoDaysAgo = dto.getCostEndDate().minusDays(1);
+            //如果前一天在消耗开始之后或等于,那么就将订单开始时间设置为前一天
+            if(twoDaysAgo.isEqual(dto.getCostBeginDate())||twoDaysAgo.isAfter(dto.getCostBeginDate())){
+                dto.setOrderBeginDate(twoDaysAgo);
+            }else {
+                dto.setOrderBeginDate(dto.getCostEndDate());
+            }
         }
         //分页条件
         Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
@@ -5248,14 +5268,17 @@ public class GameDataServiceImpl implements IGameDataService {
         //订单表查询条件
         Criteria cri = getOrderQueryStr(dto);
 
+        //渠道单独的查询条件
+        Criteria agentCri = getAgentQueryStr(dto);
+
         //查询总记录数
-        Sql countSql = Sqls.create(getCountNumSql(cri));
+        Sql countSql = Sqls.create(getCountNumSql(cri,agentCri));
         countSql.setCallback(Sqls.callback.integer());
         dao.execute(countSql);
         pager.setRecordCount(countSql.getInt());
 
         //查询sql
-        Sql sql = Sqls.create(flowMonitorSql(cri));
+        Sql sql = Sqls.create(flowMonitorSql(cri,agentCri));
         //设置自定义回传类型
         sql.setCallback(Sqls.callback.entities());
         sql.setEntity(dao.getEntity(FlowMonitorVO.class));
@@ -5325,7 +5348,7 @@ public class GameDataServiceImpl implements IGameDataService {
         return sql;
     }
 
-    private String getCountNumSql(Criteria cri){
+    private String getCountNumSql(Criteria cri,Criteria agentCri){
         String sql = """
                 
                 SELECT COUNT(*) FROM (
@@ -5539,7 +5562,7 @@ public class GameDataServiceImpl implements IGameDataService {
                                 ) f
                                                group by day, source_system
                                      ) ab  
-                                     """+ cri +""" 
+                                     """+ agentCri +""" 
                                      order by day desc
                 
                 
@@ -5578,7 +5601,7 @@ public class GameDataServiceImpl implements IGameDataService {
             BigDecimal costBigDecimal = new BigDecimal(costCount);
             BigDecimal amountBigDecimal = new BigDecimal(amountCount);
             BigDecimal bd = amountBigDecimal.divide(costBigDecimal, 2, RoundingMode.HALF_UP);
-            vo.setRecoveryCount(bd.doubleValue());
+            vo.setRecoveryCount(bd.doubleValue()*100);
         }
         return vo;
     }
@@ -5623,7 +5646,7 @@ public class GameDataServiceImpl implements IGameDataService {
      * @param cri 条件
      * @return sql
      */
-    public String flowMonitorSql(Criteria cri){
+    public String flowMonitorSql(Criteria cri,Criteria agentCri){
 
         String sql  = """
                 select day as order_date,
@@ -5837,7 +5860,7 @@ public class GameDataServiceImpl implements IGameDataService {
                 ) f
                                group by day, source_system
                      ) ab  
-                     """+ cri +"""
+                     """+ agentCri +"""
                      order by day desc
                     
                     """;
@@ -5846,6 +5869,52 @@ public class GameDataServiceImpl implements IGameDataService {
     }
 
 
+    /**
+     * 拼接查询条件
+     *
+     * @param dto
+     * @return
+     */
+    public Criteria getAgentQueryStr(FlowMonitorDTO dto) {
+        Criteria cri = Cnd.cri();
+
+        //SDK类型
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+
+        String gameColumn = "game_id";
+        if (dto.getGameDimension() != 1) {
+            gameColumn = "parent_game_id";
+        }
+
+        //拼接游戏ID
+        if (CollectionUtils.isNotEmpty(dto.getGameId())) {
+            cri.where().andInList(gameColumn, dto.getGameId());
+        }
+
+        //拼接查询时间
+        if (dto.getOrderBeginDate() != null && dto.getOrderEndDate() != null) {
+            cri.where().andBetween("day", dto.getOrderBeginDate(), dto.getOrderEndDate());
+        }
+
+
+        //拼接投手ID
+        if (CollectionUtils.isNotEmpty(dto.getPitcherId())) {
+            cri.where().andInList("pitcher_id", dto.getPitcherId());
+        }
+        //拼接渠道ID
+        if (CollectionUtils.isNotEmpty(dto.getAgentId())) {
+            cri.where().andInList("agent_id", dto.getAgentId());
+        }
+        //拼接广告账号id
+        if (CollectionUtils.isNotEmpty(dto.getAccountId())) {
+            cri.where().andInList("account_id", dto.getAccountId());
+        }
+
+        return cri;
+    }
+
     /**
      * 拼接查询条件
      *
@@ -5875,6 +5944,10 @@ public class GameDataServiceImpl implements IGameDataService {
             cri.where().andBetween("day", dto.getOrderBeginDate(), dto.getOrderEndDate());
         }
 
+        if(dto.getCostBeginDate()!=null && dto.getCostEndDate()!=null){
+            cri.where().andBetween("reg_time", dto.getCostBeginDate(), dto.getCostEndDate());
+        }
+
         //拼接投手ID
         if (CollectionUtils.isNotEmpty(dto.getPitcherId())) {
             cri.where().andInList("pitcher_id", dto.getPitcherId());
@@ -5891,6 +5964,7 @@ public class GameDataServiceImpl implements IGameDataService {
         return cri;
     }
 
+
     /**
      * 查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id
      *

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

@@ -4,6 +4,7 @@ import com.zanxiang.erp.base.ErpServer;
 import com.zanxiang.erp.base.rpc.ISysUserRpc;
 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;
@@ -316,6 +317,16 @@ public class RoleManageServiceImpl implements IRoleManageService {
         }
     }
 
+    /**
+     * 创建发送消息任务
+     * @param dto
+     */
+    @Override
+    public void createSendMsgTask(SendMsgTaskDto dto) {
+
+
+    }
+
     /**
      * 通过id获取 GS、运营、客服人员、投手名字
      * @param dataMap dataMap