瀏覽代碼

游戏策略配置

Letianhua 1 年之前
父節點
當前提交
6544acce53

+ 54 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GamePolicyConfigController.java

@@ -0,0 +1,54 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.params.GamePolicyConfigAddOrUpdateParam;
+import com.zanxiang.game.module.manage.pojo.params.GamePolicyConfigListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GamePolicyConfigListVO;
+import com.zanxiang.game.module.manage.service.IGamePolicyConfigService;
+import com.zanxiang.module.util.pojo.ResultVO;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author tianhua
+ * @version 1.0
+ * @description: 游戏策略配置控制器
+ * @date 2023/11/29 13:55
+ */
+@Api(tags = "游戏策略配置")
+@RestController
+@RequestMapping("/game/policy/config")
+@Slf4j
+public class GamePolicyConfigController {
+
+    @Autowired
+    private IGamePolicyConfigService gamePolicyConfigService;
+
+    @ApiOperation(value = "游戏策略配置新增或修改")
+    @PostMapping("/add/or/update")
+    //@PreAuthorize(permissionKey = "manage:gamePolicy:addOrUpdate")
+    public ResultVO<Boolean> addOrUpdate(@Validated @RequestBody GamePolicyConfigAddOrUpdateParam param) {
+        return ResultVO.ok(gamePolicyConfigService.addOrUpdate(param));
+    }
+
+    @ApiOperation(value = "游戏策略配置删除")
+    @DeleteMapping("/deleteById/{id}")
+    //@PreAuthorize(permissionKey = "manage:gamePolicy:delete")
+    public ResultVO<Boolean> deleteById(@PathVariable("id") Long id) {
+        return ResultVO.ok(gamePolicyConfigService.deleteById(id));
+    }
+
+    @ApiOperation(value = "游戏策略配置列表")
+    @PostMapping("/listOfPage")
+    //@PreAuthorize(permissionKey = "manage:gamePolicy:listOfPage")
+    public ResultVO<IPage<GamePolicyConfigListVO>> listOfPage(@RequestBody GamePolicyConfigListParam param) {
+        return ResultVO.ok(gamePolicyConfigService.listOfPage(param));
+    }
+
+
+}

+ 49 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GamePolicyConfigAddOrUpdateParam.java

@@ -0,0 +1,49 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author tianhua
+ * @version 1.0
+ * @description: 游戏策略添加或修改参数
+ * @date 2023/11/29 14:32
+ */
+@Data
+public class GamePolicyConfigAddOrUpdateParam {
+
+    /**
+     * 传id为修改, 不传id为新增
+     */
+    @ApiModelProperty("传id为修改, 不传id为新增")
+    private Long id;
+
+    /**
+     * 超父游戏id
+     */
+    @NotNull(message = "超父游戏id不能为空")
+    @ApiModelProperty("超父游戏id")
+    private Long superGameId;
+
+    /**
+     * 策略类型
+     */
+    @NotNull(message = "策略类型不能为空")
+    @ApiModelProperty("策略类型")
+    private Long type;
+
+    /**
+     * 金额
+     */
+    @ApiModelProperty("金额")
+    private Long amount;
+
+    /**
+     * 时间(单位:小时)
+     */
+    @ApiModelProperty("时间(单位:小时)")
+    private Long time;
+
+}

+ 31 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GamePolicyConfigListParam.java

@@ -0,0 +1,31 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.GamePolicyConfig;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author tianhua
+ * @version 1.0
+ * @description: 游戏策略列表参数
+ * @date 2023/11/29 14:32
+ */
+@Data
+public class GamePolicyConfigListParam extends BaseListDTO<GamePolicyConfig> {
+
+    /**
+     * 超父游戏id
+     */
+    @ApiModelProperty("超父游戏id")
+    private Long superGameId;
+
+    /**
+     * 策略类型
+     */
+    @ApiModelProperty("策略类型")
+    private Long type;
+
+}

+ 30 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GamePolicyConfigInnerObjVO.java

@@ -0,0 +1,30 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author tianhua
+ * @version 1.0
+ * @description: TODO
+ * @date 2023/11/29 15:10
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class GamePolicyConfigInnerObjVO {
+
+    /**
+     * 金额
+     */
+    private Long amount;
+
+    /**
+     * 时间(单位:小时)
+     */
+    private Long time;
+
+}

+ 99 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GamePolicyConfigListVO.java

@@ -0,0 +1,99 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author tianhua
+ * @version 1.0
+ * @description: TODO
+ * @date 2023/11/29 14:45
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class GamePolicyConfigListVO {
+
+    /**
+     * 主键id
+     */
+    @ApiModelProperty(notes = "主键id")
+    private Long id;
+
+    /**
+     * 超父游戏id
+     */
+    @ApiModelProperty("超父游戏id")
+    private Long superGameId;
+
+    /**
+     * 超父游戏名称
+     */
+    @ApiModelProperty("超父游戏名称")
+    private String superGameName;
+
+    /**
+     * 策略类型:1-追踪玩家;2-玩家流失;3-新用户追踪
+     * 1:单笔充值金额大于XX,并且注册时间在XX小时内的玩家
+     * 2:累计充值金额大于XX,并且最近游戏距今时间超过XX小时的玩家
+     * 3:新用户注册创角首日充值大于XX的用户
+     */
+    @ApiModelProperty("策略类型:1-追踪玩家策略;2-玩家流失策略;3-新用户追踪策略")
+    private Long type;
+
+    /**
+     * 金额
+     */
+    @ApiModelProperty("金额")
+    private Long amount;
+
+    /**
+     * 时间(单位:小时)
+     */
+    @ApiModelProperty("时间(单位:小时)")
+    private Long time;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    @ApiModelProperty("创建者")
+    private Long createBy;
+
+    /**
+     * 创建者名称
+     */
+    @ApiModelProperty("创建者名称")
+    private String createName;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    @ApiModelProperty("更新者")
+    private Long updateBy;
+
+    /**
+     * 更新者名称
+     */
+    @ApiModelProperty("更新者名称")
+    private String updateName;
+
+}

+ 21 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGamePolicyConfigService.java

@@ -0,0 +1,21 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.manage.pojo.params.GamePolicyConfigAddOrUpdateParam;
+import com.zanxiang.game.module.manage.pojo.params.GamePolicyConfigListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GamePolicyConfigListVO;
+import com.zanxiang.game.module.mybatis.entity.GamePolicyConfig;
+
+/**
+ * @author tianhua
+ */
+public interface IGamePolicyConfigService extends IService<GamePolicyConfig> {
+
+    boolean addOrUpdate(GamePolicyConfigAddOrUpdateParam param);
+
+    boolean deleteById(Long id);
+
+    IPage<GamePolicyConfigListVO> listOfPage(GamePolicyConfigListParam param);
+
+}

+ 139 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GamePolicyConfigServiceImpl.java

@@ -0,0 +1,139 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.manage.pojo.params.GamePolicyConfigAddOrUpdateParam;
+import com.zanxiang.game.module.manage.pojo.params.GamePolicyConfigListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GamePolicyConfigInnerObjVO;
+import com.zanxiang.game.module.manage.pojo.vo.GamePolicyConfigListVO;
+import com.zanxiang.game.module.manage.service.IGamePolicyConfigService;
+import com.zanxiang.game.module.manage.service.IGameSupperService;
+import com.zanxiang.game.module.mybatis.entity.GamePolicyConfig;
+import com.zanxiang.game.module.mybatis.entity.GameSupper;
+import com.zanxiang.game.module.mybatis.mapper.GamePolicyConfigMapper;
+import com.zanxiang.module.util.JsonUtil;
+import com.zanxiang.module.util.exception.BaseException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * @author tianhua
+ * @version 1.0
+ * @description: TODO
+ * @date 2023/11/29 14:25
+ */
+@Service
+@Slf4j
+public class GamePolicyConfigServiceImpl extends ServiceImpl<GamePolicyConfigMapper, GamePolicyConfig> implements IGamePolicyConfigService {
+
+    @Autowired
+    private IGameSupperService gameSupperService;
+
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addOrUpdate(GamePolicyConfigAddOrUpdateParam param) {
+        if (param.getAmount() == null && param.getTime() == null) {
+            throw new BaseException("策略配置的金额和时间不能同时为空,请重新输入。");
+        }
+        //当前操作人员
+        //Long sysUserId = SecurityUtil.getUserId();
+        //当前操作时间
+        LocalDateTime now = LocalDateTime.now();
+
+        //生成配置json字符串
+        String configParam = JsonUtil.toString(GamePolicyConfigInnerObjVO.builder()
+                .amount(param.getAmount())
+                .time(param.getTime())
+                .build());
+
+        int count = this.count(new LambdaQueryWrapper<GamePolicyConfig>()
+                .ne(param.getId() != null, GamePolicyConfig::getId, param.getId())
+                .eq(GamePolicyConfig::getSuperGameId, param.getSuperGameId())
+                .eq(GamePolicyConfig::getType, param.getType())
+                .eq(GamePolicyConfig::getConfigParam, configParam)
+                .eq(GamePolicyConfig::getEnabled, true));
+
+        if (count > 0) {
+            throw new BaseException("该游戏策略配置已经设置过,请勿重复设置");
+        }
+
+        GamePolicyConfig gamePolicyConfig = GamePolicyConfig.builder()
+                .superGameId(param.getSuperGameId())
+                .type(param.getType())
+                .configParam(configParam)
+                .updateBy(2L) // 测试用2
+                .updateTime(now)
+                .build();
+
+        if (param.getId() != null) {
+            //id不为空,表示修改配置
+            gamePolicyConfig.setId(param.getId());
+            return updateById(gamePolicyConfig);
+        }
+
+        //id为空,表示新增配置
+        gamePolicyConfig.setCreateBy(1L); //测试用1
+        gamePolicyConfig.setCreateTime(now);
+        return save(gamePolicyConfig);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteById(Long id) {
+        //当前操作人员
+        //Long sysUserId = SecurityUtil.getUserId();
+        return update(new LambdaUpdateWrapper<GamePolicyConfig>()
+                .set(GamePolicyConfig::getEnabled, false)
+                .set(GamePolicyConfig::getUpdateBy, 3L) //测试用3
+                .set(GamePolicyConfig::getUpdateTime, LocalDateTime.now())
+                .eq(GamePolicyConfig::getId, id));
+    }
+
+    @Override
+    public IPage<GamePolicyConfigListVO> listOfPage(GamePolicyConfigListParam param) {
+        return page(param.toPage(), new LambdaQueryWrapper<GamePolicyConfig>()
+                .eq(param.getSuperGameId() != null, GamePolicyConfig::getSuperGameId, param.getSuperGameId())
+                .eq(param.getType() != null , GamePolicyConfig::getType, param.getType())
+                .eq(GamePolicyConfig::getEnabled, true))
+                .convert(this::toVO);
+    }
+
+    private GamePolicyConfigListVO toVO(GamePolicyConfig vo) {
+        //得到配置参数map
+        Map<String, String> configParam = JsonUtil.toMap(vo.getConfigParam(), Map.class, String.class);
+        String amount = configParam.get("amount");
+        String time = configParam.get("time");
+        GameSupper gameSupper = gameSupperService.getById(vo.getSuperGameId());
+        return GamePolicyConfigListVO.builder()
+                .id(vo.getId())
+                .superGameId(vo.getSuperGameId())
+                .superGameName(null == gameSupper ? null : gameSupper.getName())
+                .type(vo.getType())
+                .amount(amount == null ? null : Long.valueOf(amount))
+                .time(time == null ? null : Long.valueOf(time))
+                .createBy(vo.getCreateBy())
+                .createName("创建者")
+                .createTime(vo.getCreateTime())
+                .updateBy(vo.getUpdateBy())
+                .updateName("修改者")
+                .updateTime(vo.getUpdateTime())
+                .build();
+    }
+
+
+
+}

+ 70 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GamePolicyConfig.java

@@ -0,0 +1,70 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author tianhua
+ * @version 1.0
+ * @description: 游戏策略具体配置表
+ * @date 2023/11/29 14:01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_policy_config")
+public class GamePolicyConfig {
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 超父游戏ID
+     */
+    private Long superGameId;
+
+    /**
+     * 策略类型:1-追踪玩家;2-玩家流失;3-新用户追踪
+     */
+    private Long type;
+
+    /**
+     * 游戏策略的配置参数,json数据:amount-金额;time-时间(小时)
+     */
+    private String configParam;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 1 正常  0 删除
+     */
+    private Boolean enabled;
+
+}

+ 7 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GamePolicyConfigMapper.java

@@ -0,0 +1,7 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GamePolicyConfig;
+
+public interface GamePolicyConfigMapper extends BaseMapper<GamePolicyConfig> {
+}