Переглянути джерело

fix : 游戏礼包发码器设计代码提交

bilingfeng 5 місяців тому
батько
коміт
8a4998ed82
27 змінених файлів з 1163 додано та 0 видалено
  1. 81 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameGiftPackCodeController.java
  2. 9 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/handler/GlobalExceptionHandler.java
  3. 50 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/dto/GameGiftPackConditionDTO.java
  4. 37 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackLinkAddParam.java
  5. 59 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackLinkListParam.java
  6. 37 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackLinkUpdateParam.java
  7. 70 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameGiftPackLinkVO.java
  8. 12 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackCodeLogService.java
  9. 12 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackCodeService.java
  10. 23 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackConfigService.java
  11. 12 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackLinkLogService.java
  12. 49 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackLinkService.java
  13. 17 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftPackCodeLogServiceImpl.java
  14. 21 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftPackCodeServiceImpl.java
  15. 50 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftPackConfigServiceImpl.java
  16. 21 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftPackLinkLogServiceImpl.java
  17. 182 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftPackLinkServiceImpl.java
  18. 62 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackCode.java
  19. 82 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackCodeLog.java
  20. 75 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackConfig.java
  21. 81 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackLink.java
  22. 61 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackLinkLog.java
  23. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackCodeLogMapper.java
  24. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackCodeMapper.java
  25. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackConfigMapper.java
  26. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackLinkLogMapper.java
  27. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackLinkMapper.java

+ 81 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameGiftPackCodeController.java

@@ -0,0 +1,81 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.sd4324530.jtuple.Tuple3;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackLinkAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackLinkListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackLinkUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftPackLinkVO;
+import com.zanxiang.game.module.manage.service.IGameGiftPackConfigService;
+import com.zanxiang.game.module.manage.service.IGameGiftPackLinkService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-10-31
+ * @description : 游戏礼包发码器
+ */
+@Slf4j
+@Api(tags = {"游戏礼包发码器"})
+@RestController
+@RequestMapping("/game/gift/pack")
+public class GameGiftPackCodeController {
+
+    @Autowired
+    private IGameGiftPackLinkService gameGiftPackLinkService;
+
+    @Autowired
+    private IGameGiftPackConfigService gameGiftPackConfigService;
+
+    @ApiOperation(value = "获取发码器配置")
+    @GetMapping(value = "/config/list")
+    @PreAuthorize(permissionKey = "manage:giftPack:configList")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = List.class)})
+    public ResultVO<List<Tuple3<Long, List<Long>, Map<String, String>>>> getGameGiftPackConfig() {
+        return ResultVO.ok(gameGiftPackConfigService.getGameGiftPackConfig());
+    }
+
+    @ApiOperation(value = "查询礼包码链接列表")
+    @PostMapping(value = "/link/list")
+    @PreAuthorize(permissionKey = "manage:giftPack:linkList")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameGiftPackLinkVO.class)})
+    public ResultVO<IPage<GameGiftPackLinkVO>> linkList(@Validated @RequestBody GameGiftPackLinkListParam param) {
+        return ResultVO.ok(gameGiftPackLinkService.list(param));
+    }
+
+    @ApiOperation(value = "更新礼包码链接")
+    @PostMapping(value = "/link/update")
+    @PreAuthorize(permissionKey = "manage:giftPack:linkUpdate")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> updateGiftPackLin(@Validated @RequestBody GameGiftPackLinkUpdateParam param) {
+        return ResultVO.ok(gameGiftPackLinkService.updateGiftPackLin(param));
+    }
+
+    @ApiOperation(value = "删除礼包码链接")
+    @DeleteMapping(value = "/link/delete")
+    @PreAuthorize(permissionKey = "manage:giftPack:linkDelete")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> deleteById(@RequestParam Long id) {
+        return ResultVO.ok(gameGiftPackLinkService.deleteById(id));
+    }
+
+    @ApiOperation(value = "添加礼包码链接")
+    @PostMapping(value = "/link/add")
+    @PreAuthorize(permissionKey = "manage:giftPack:linkAdd")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> addGiftPackLin(@Validated @RequestBody GameGiftPackLinkAddParam param) {
+        return ResultVO.ok(gameGiftPackLinkService.addGiftPackLin(param));
+    }
+}

+ 9 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/handler/GlobalExceptionHandler.java

@@ -34,6 +34,15 @@ public class GlobalExceptionHandler {
         return ResultVO.fail(e.getMessage());
     }
 
+    /**
+     * 断言判断异常
+     */
+    @ExceptionHandler(AssertionError.class)
+    public ResultVO<?> assertionError(AssertionError e) {
+        log.error(e.getMessage(), e);
+        return ResultVO.fail(e.getMessage());
+    }
+
     /**
      * http method错误
      *

+ 50 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/dto/GameGiftPackConditionDTO.java

@@ -0,0 +1,50 @@
+package com.zanxiang.game.module.manage.pojo.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-10-31
+ * @description : 发码器礼包领取条件
+ */
+@Data
+public class GameGiftPackConditionDTO {
+
+    /**
+     * 未登录时间区间(单位 : 分钟)
+     */
+    @ApiModelProperty(notes = "未登录时间区间(单位 : 分钟)")
+    private RangeBean unLogin;
+
+    /**
+     * 注册时间区间(单位 : 分钟)
+     */
+    @ApiModelProperty(notes = "注册时间区间(单位 : 分钟)")
+    private RangeBean regTime;
+
+    /**
+     * 付费区间(单位 : 元)
+     */
+    @ApiModelProperty(notes = "付费区间(单位 : 元)")
+    private RangeBean pay;
+
+    /**
+     * 区间对象
+     */
+    @Data
+    public static class RangeBean {
+
+        /**
+         * 最小值
+         */
+        @ApiModelProperty(notes = "最小值")
+        private Long min;
+
+        /**
+         * 最大值
+         */
+        @ApiModelProperty(notes = "最大值")
+        private Long max;
+    }
+}

+ 37 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackLinkAddParam.java

@@ -0,0 +1,37 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.manage.pojo.dto.GameGiftPackConditionDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-10-31
+ * @description : 发码器链接添加参数
+ */
+@Data
+public class GameGiftPackLinkAddParam {
+
+    /**
+     * 游戏id
+     */
+    @NotNull(message = "游戏id不可为空")
+    @ApiModelProperty(notes = "游戏id")
+    private Long gameId;
+
+    /**
+     * 礼包类型
+     */
+    @NotBlank(message = "礼包类型不可为空")
+    @ApiModelProperty(notes = "礼包类型")
+    private String codeType;
+
+    /**
+     * 礼包判定条件
+     */
+    @ApiModelProperty(notes = "礼包判定条件")
+    private GameGiftPackConditionDTO conditionDTO;
+}

+ 59 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackLinkListParam.java

@@ -0,0 +1,59 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackLink;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-10-31
+ * @description : 游戏礼包码链接查询参数
+ */
+@Data
+public class GameGiftPackLinkListParam extends BaseListDTO<GameGiftPackLink> {
+
+    /**
+     * 游戏id
+     */
+    @ApiModelProperty(notes = "游戏id")
+    private Long gameId;
+
+    /**
+     * 礼包码类型
+     */
+    @ApiModelProperty(notes = "礼包码类型")
+    private String codeType;
+
+    /**
+     * 礼包链接
+     */
+    @ApiModelProperty(notes = "礼包链接")
+    private String codeLink;
+
+    /**
+     * 创建开始时间
+     */
+    @ApiModelProperty(notes = "创建开始时间")
+    private LocalDate createBeginTime;
+
+    /**
+     * 创建结束时间
+     */
+    @ApiModelProperty(notes = "创建结束时间")
+    private LocalDate createEndTime;
+
+    /**
+     * 创建开始时间
+     */
+    @ApiModelProperty(notes = "创建开始时间")
+    private LocalDate updateBeginTime;
+
+    /**
+     * 创建结束时间
+     */
+    @ApiModelProperty(notes = "创建结束时间")
+    private LocalDate updateEndTime;
+}

+ 37 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackLinkUpdateParam.java

@@ -0,0 +1,37 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.manage.pojo.dto.GameGiftPackConditionDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-10-31
+ * @description : 礼包链接更新
+ */
+@Data
+public class GameGiftPackLinkUpdateParam {
+
+    /**
+     * 主键id
+     */
+    @NotNull(message = "主键id不可为空")
+    @ApiModelProperty(notes = "主键id")
+    private Long id;
+
+    /**
+     * 礼包类型
+     */
+    @NotBlank(message = "礼包类型不可为空")
+    @ApiModelProperty(notes = "礼包类型")
+    private String codeType;
+
+    /**
+     * 礼包判定条件
+     */
+    @ApiModelProperty(notes = "礼包判定条件")
+    private GameGiftPackConditionDTO conditionDTO;
+}

+ 70 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameGiftPackLinkVO.java

@@ -0,0 +1,70 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import com.zanxiang.game.module.manage.pojo.dto.GameGiftPackConditionDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-10-31
+ * @description : 游戏礼包码链接
+ */
+@Data
+public class GameGiftPackLinkVO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键")
+    private Long id;
+
+    /**
+     * 游戏名称
+     */
+    @ApiModelProperty(notes = "游戏名称")
+    private String gameName;
+
+    /**
+     * 礼包码类型名称
+     */
+    @ApiModelProperty(notes = "礼包码类型名称")
+    private String codeTypeName;
+
+    /**
+     * 礼包判定条件
+     */
+    @ApiModelProperty(notes = "礼包判定条件")
+    private GameGiftPackConditionDTO conditionDTO;
+
+    /**
+     * 礼包链接
+     */
+    @ApiModelProperty(notes = "礼包链接")
+    private String codeLink;
+
+    /**
+     * 更新者名字
+     */
+    @ApiModelProperty(notes = "更新者名字")
+    private String createByName;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(notes = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者名字
+     */
+    @ApiModelProperty(notes = "更新者名字")
+    private String updateByName;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(notes = "更新时间")
+    private LocalDateTime updateTime;
+}

+ 12 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackCodeLogService.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackCodeLog;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-09-23
+ * @description : 游戏礼包码领取日志
+ */
+public interface IGameGiftPackCodeLogService extends IService<GameGiftPackCodeLog> {
+}

+ 12 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackCodeService.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackCode;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-09-23
+ * @description : 游戏礼包码
+ */
+public interface IGameGiftPackCodeService extends IService<GameGiftPackCode> {
+}

+ 23 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackConfigService.java

@@ -0,0 +1,23 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.sd4324530.jtuple.Tuple3;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackConfig;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-09-23
+ * @description : 游戏礼包码配置
+ */
+public interface IGameGiftPackConfigService extends IService<GameGiftPackConfig> {
+
+    /**
+     * 获取游戏礼包配置
+     *
+     * @return : 返回游戏礼包配置
+     */
+    List<Tuple3<Long, List<Long>, Map<String, String>>> getGameGiftPackConfig();
+}

+ 12 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackLinkLogService.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackLinkLog;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-09-23
+ * @description : 游戏礼包码链接访问日志
+ */
+public interface IGameGiftPackLinkLogService extends IService<GameGiftPackLinkLog> {
+}

+ 49 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftPackLinkService.java

@@ -0,0 +1,49 @@
+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.GameGiftPackLinkAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackLinkListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackLinkUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftPackLinkVO;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackLink;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-09-23
+ * @description : 游戏礼包码链接
+ */
+public interface IGameGiftPackLinkService extends IService<GameGiftPackLink> {
+
+    /**
+     * 分页查询
+     *
+     * @param param : 查询参数
+     * @return : 查询结果
+     */
+    IPage<GameGiftPackLinkVO> list(GameGiftPackLinkListParam param);
+
+    /**
+     * 根据主键id删除
+     *
+     * @param id : 主键id
+     * @return : 删除结果
+     */
+    boolean deleteById(Long id);
+
+    /**
+     * 礼包码链接更新
+     *
+     * @param param : 更新参数
+     * @return : 返回更新结果
+     */
+    boolean updateGiftPackLin(GameGiftPackLinkUpdateParam param);
+
+    /**
+     * 添加礼包码链接
+     *
+     * @param param : 添加参数
+     * @return : 返回结果
+     */
+    boolean addGiftPackLin(GameGiftPackLinkAddParam param);
+}

+ 17 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftPackCodeLogServiceImpl.java

@@ -0,0 +1,17 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.manage.service.IGameGiftPackCodeLogService;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackCodeLog;
+import com.zanxiang.game.module.mybatis.mapper.GameGiftPackCodeLogMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-22
+ * @description : 游戏礼包码领取日志
+ */
+@Service
+public class GameGiftPackCodeLogServiceImpl extends ServiceImpl<GameGiftPackCodeLogMapper, GameGiftPackCodeLog> implements IGameGiftPackCodeLogService {
+
+}

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

@@ -0,0 +1,21 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.manage.service.IGameGiftPackCodeService;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackCode;
+import com.zanxiang.game.module.mybatis.mapper.GameGiftPackCodeMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-22
+ * @description : 游戏礼包码
+ */
+@Service
+public class GameGiftPackCodeServiceImpl extends ServiceImpl<GameGiftPackCodeMapper, GameGiftPackCode> implements IGameGiftPackCodeService {
+
+}
+
+
+
+

+ 50 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftPackConfigServiceImpl.java

@@ -0,0 +1,50 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.sd4324530.jtuple.Tuple3;
+import com.zanxiang.game.module.manage.service.IGameGiftPackConfigService;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackConfig;
+import com.zanxiang.game.module.mybatis.mapper.GameGiftPackConfigMapper;
+import com.zanxiang.module.util.JsonUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-22
+ * @description : 游戏礼包码配置
+ */
+@Slf4j
+@Service
+public class GameGiftPackConfigServiceImpl extends ServiceImpl<GameGiftPackConfigMapper, GameGiftPackConfig> implements IGameGiftPackConfigService {
+
+    @Override
+    public List<Tuple3<Long, List<Long>, Map<String, String>>> getGameGiftPackConfig() {
+        List<GameGiftPackConfig> gameGiftPackConfigList = super.list();
+        if (CollectionUtils.isEmpty(gameGiftPackConfigList)) {
+            return Collections.emptyList();
+        }
+        List<Tuple3<Long, List<Long>, Map<String, String>>> list = new ArrayList<>();
+        gameGiftPackConfigList.forEach(config -> {
+            String gameIds = config.getGameIds();
+            String codeTypeConfig = config.getCodeTypeConfig();
+            if (StringUtils.isAnyEmpty(gameIds, codeTypeConfig)) {
+                return;
+            }
+            List<Long> gameIdList = Arrays.stream(gameIds.split(",")).distinct()
+                    .map(Long::valueOf).collect(Collectors.toList());
+            Map<String, String> codeTypeMap = JsonUtil.toMap(codeTypeConfig, Map.class, String.class);
+            list.add(Tuple3.with(config.getSuperGameId(), gameIdList, codeTypeMap));
+        });
+        return list;
+    }
+}
+
+
+
+

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

@@ -0,0 +1,21 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.manage.service.IGameGiftPackLinkLogService;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackLinkLog;
+import com.zanxiang.game.module.mybatis.mapper.GameGiftPackLinkLogMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-22
+ * @description : 游戏礼包码链接访问日志
+ */
+@Service
+public class GameGiftPackLinkLogServiceImpl extends ServiceImpl<GameGiftPackLinkLogMapper, GameGiftPackLinkLog> implements IGameGiftPackLinkLogService {
+
+}
+
+
+
+

+ 182 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftPackLinkServiceImpl.java

@@ -0,0 +1,182 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.base.pojo.enums.DeleteEnum;
+import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
+import com.zanxiang.game.module.manage.pojo.dto.GameGiftPackConditionDTO;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackLinkAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackLinkListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackLinkUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftPackLinkVO;
+import com.zanxiang.game.module.manage.service.IGameGiftPackConfigService;
+import com.zanxiang.game.module.manage.service.IGameGiftPackLinkService;
+import com.zanxiang.game.module.manage.service.IGameService;
+import com.zanxiang.game.module.mybatis.entity.Game;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackConfig;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackLink;
+import com.zanxiang.game.module.mybatis.mapper.GameGiftPackLinkMapper;
+import com.zanxiang.module.util.JsonUtil;
+import com.zanxiang.module.util.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-22
+ * @description : 游戏礼包码链接
+ */
+@Slf4j
+@Service
+public class GameGiftPackLinkServiceImpl extends ServiceImpl<GameGiftPackLinkMapper, GameGiftPackLink> implements IGameGiftPackLinkService {
+
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+
+    @Autowired
+    private IGameService gameService;
+
+    @Autowired
+    private IGameGiftPackConfigService gameGiftPackConfigService;
+
+    @Override
+    public IPage<GameGiftPackLinkVO> list(GameGiftPackLinkListParam param) {
+        IPage<GameGiftPackLink> giftPackLinkIPage = page(param.toPage(), new QueryWrapper<GameGiftPackLink>().lambda()
+                .eq(param.getGameId() != null, GameGiftPackLink::getGameId, param.getGameId())
+                .eq(Strings.isNotBlank(param.getCodeType()), GameGiftPackLink::getCodeType, param.getCodeType())
+                .eq(Strings.isNotBlank(param.getCodeLink()), GameGiftPackLink::getCodeLink, param.getCodeLink())
+                .ge(param.getCreateBeginTime() != null, GameGiftPackLink::getCreateTime, param.getCreateBeginTime() == null ? null : LocalDateTime.of(param.getCreateBeginTime(), LocalTime.MIN))
+                .le(param.getCreateEndTime() != null, GameGiftPackLink::getCreateTime, param.getCreateEndTime() == null ? null : LocalDateTime.of(param.getCreateEndTime(), LocalTime.MAX))
+                .ge(param.getUpdateBeginTime() != null, GameGiftPackLink::getUpdateTime, param.getUpdateBeginTime() == null ? null : LocalDateTime.of(param.getUpdateBeginTime(), LocalTime.MIN))
+                .le(param.getUpdateEndTime() != null, GameGiftPackLink::getUpdateTime, param.getUpdateEndTime() == null ? null : LocalDateTime.of(param.getUpdateEndTime(), LocalTime.MAX))
+                .orderByDesc(GameGiftPackLink::getUpdateTime));
+        IPage<GameGiftPackLinkVO> result = new Page<>(giftPackLinkIPage.getCurrent(), giftPackLinkIPage.getSize(), giftPackLinkIPage.getTotal());
+        if (CollectionUtils.isNotEmpty(giftPackLinkIPage.getRecords())) {
+            result.setRecords(this.toVOBatch(giftPackLinkIPage.getRecords()));
+        }
+        return result;
+    }
+
+    private List<GameGiftPackLinkVO> toVOBatch(List<GameGiftPackLink> linkList) {
+        //游戏信息
+        List<Long> gameIdList = linkList.stream().map(GameGiftPackLink::getGameId).collect(Collectors.toList());
+        Map<Long, Game> gameMap = gameService.listByIds(gameIdList).stream()
+                .collect(Collectors.toMap(Game::getId, Function.identity()));
+        //查询配置
+        List<Long> supperGameIdList = gameMap.values().stream().map(Game::getSuperGameId).collect(Collectors.toList());
+        Map<Long, GameGiftPackConfig> configMap = gameGiftPackConfigService.list(new LambdaQueryWrapper<GameGiftPackConfig>()
+                .in(GameGiftPackConfig::getSuperGameId, supperGameIdList)
+        ).stream().collect(Collectors.toMap(GameGiftPackConfig::getId, Function.identity()));
+        //用户信息
+        List<Long> userIdList = linkList.stream()
+                .flatMap(link -> Stream.of(link.getCreateBy(), link.getUpdateBy()))
+                .filter(Objects::nonNull)
+                .distinct().collect(Collectors.toList());
+        Map<Long, String> userMap = sysUserRpc.getUserNameByIds(new ArrayList<>(userIdList)).getData();
+        //循环构造
+        return linkList.stream().map(link -> {
+            GameGiftPackLinkVO vo = BeanUtil.copy(link, GameGiftPackLinkVO.class);
+            vo.setConditionDTO(JsonUtil.toObj(link.getCondition(), GameGiftPackConditionDTO.class));
+            vo.setCreateByName(userMap.get(link.getCreateBy()));
+            vo.setUpdateByName(userMap.get(link.getUpdateBy()));
+            Game game = gameMap.get(link.getGameId());
+            if (game != null) {
+                vo.setGameName(game.getName());
+            }
+            GameGiftPackConfig gameGiftPackConfig = configMap.get(link.getConfigId());
+            if (gameGiftPackConfig != null) {
+                vo.setCodeTypeName(this.codeTypeName(link.getCodeType(), gameGiftPackConfig.getCodeTypeConfig()));
+            }
+            return vo;
+        }).collect(Collectors.toList());
+    }
+
+    private String codeTypeName(String codeType, String codeTypeConfig) {
+        if (Strings.isBlank(codeTypeConfig) || Strings.isBlank(codeType)) {
+            return null;
+        }
+        Map<String, String> codeTypeMap = JsonUtil.toMap(codeTypeConfig, Map.class, String.class);
+        return codeTypeMap.get(codeType);
+    }
+
+    @Override
+    public boolean updateGiftPackLin(GameGiftPackLinkUpdateParam param) {
+        return super.update(new LambdaUpdateWrapper<GameGiftPackLink>()
+                .set(GameGiftPackLink::getCodeType, param.getCodeType())
+                .set(GameGiftPackLink::getCondition, param.getConditionDTO() == null ? null : JsonUtil.toString(param.getConditionDTO()))
+                .set(GameGiftPackLink::getUpdateBy, SecurityUtil.getUserId())
+                .set(GameGiftPackLink::getUpdateTime, LocalDateTime.now())
+                .eq(GameGiftPackLink::getId, param.getId())
+        );
+    }
+
+    @Override
+    public boolean deleteById(Long id) {
+        return super.update(new LambdaUpdateWrapper<GameGiftPackLink>()
+                .set(GameGiftPackLink::getIsDelete, DeleteEnum.YES.getCode())
+                .set(GameGiftPackLink::getUpdateBy, SecurityUtil.getUserId())
+                .set(GameGiftPackLink::getUpdateTime, LocalDateTime.now())
+                .eq(GameGiftPackLink::getId, id)
+        );
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addGiftPackLin(GameGiftPackLinkAddParam param) {
+        //查询超父游戏id
+        GameDTO gameDTO = gameService.getById(param.getGameId());
+        //游戏不可以为空
+        assert gameDTO != null : "参数错误, 游戏信息不存在";
+        //查询配置
+        GameGiftPackConfig giftPackConfig = gameGiftPackConfigService.getOne(new LambdaQueryWrapper<GameGiftPackConfig>()
+                .eq(GameGiftPackConfig::getSuperGameId, gameDTO.getSuperGameId()));
+        //礼包码配置不可为空
+        assert giftPackConfig.getGameIdList().contains(param.getGameId()) : "参数错误, 游戏礼包码配置不存在";
+        //链接域名必须存在
+        assert Strings.isNotBlank(giftPackConfig.getCodeLinkHost()) : "数据错误, 配置链接域名不可为空";
+        //礼包码链接
+        String codeLink = giftPackConfig.getCodeLinkHost() + "?gameId=" + param.getGameId() + "&codeType=" + param.getCodeType();
+        //判断该游戏该类型是否已经存在礼包链接
+        assert super.count(new LambdaQueryWrapper<GameGiftPackLink>()
+                .eq(GameGiftPackLink::getGameId, param.getGameId())
+                .eq(GameGiftPackLink::getCodeType, param.getCodeType())
+        ) <= 0 : "该游戏已经存在此类型礼包码链接, 请勿重复添加";
+        //保存且返回结果
+        return super.save(this.transform(giftPackConfig.getId(), codeLink, param));
+    }
+
+    private GameGiftPackLink transform(Long configId, String codeLink, GameGiftPackLinkAddParam param) {
+        return GameGiftPackLink.builder()
+                .configId(configId)
+                .gameId(param.getGameId())
+                .codeType(param.getCodeType())
+                .condition(JsonUtil.toString(param))
+                .codeLink(codeLink)
+                .createBy(SecurityUtil.getUserId())
+                .createTime(LocalDateTime.now())
+                .updateTime(LocalDateTime.now())
+                .build();
+    }
+}

+ 62 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackCode.java

@@ -0,0 +1,62 @@
+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.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : 游戏礼包码
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_gift_pack_code")
+public class GameGiftPackCode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 链接id
+     */
+    private Long linkId;
+
+    /**
+     * 礼包码
+     */
+    private String code;
+
+    /**
+     * 是否可用
+     */
+    private Integer enabled;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+}

+ 82 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackCodeLog.java

@@ -0,0 +1,82 @@
+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.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : 游戏礼包码领取日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_gift_pack_code_log")
+public class GameGiftPackCodeLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 礼包码
+     */
+    private String code;
+
+    /**
+     * 链接id
+     */
+    private Long linkId;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 玩家id
+     */
+    private Integer userId;
+
+    /**
+     * 角色id
+     */
+    private String roleId;
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 企业id
+     */
+    private String corpId;
+
+    /**
+     * 客服号id
+     */
+    private String corpUserId;
+
+    /**
+     * 企微用户id
+     */
+    private String externalUserId;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+}

+ 75 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackConfig.java

@@ -0,0 +1,75 @@
+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 org.apache.logging.log4j.util.Strings;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : CP表
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_gift_pack_config")
+public class GameGiftPackConfig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 超父游戏id
+     */
+    private Long superGameId;
+
+    /**
+     * 子游戏列表
+     */
+    private String gameIds;
+
+    /**
+     * 礼包码类型
+     */
+    private String codeTypeConfig;
+
+    /**
+     * 礼包链接域名
+     */
+    private String codeLinkHost;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    public List<Long> getGameIdList() {
+        if (Strings.isBlank(this.gameIds)) {
+            return Collections.emptyList();
+        }
+        return Arrays.stream(this.gameIds.split(","))
+                .map(Long::valueOf)
+                .collect(Collectors.toList());
+    }
+}

+ 81 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackLink.java

@@ -0,0 +1,81 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : CP表
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_gift_pack_link")
+public class GameGiftPackLink implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 配置id
+     */
+    private Long configId;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 礼包码类型
+     */
+    private String codeType;
+
+    /**
+     * 礼包条件
+     */
+    @TableField
+    private String condition;
+
+    /**
+     * 礼包链接
+     */
+    private String codeLink;
+
+    /**
+     * 1 删除  0 正常
+     */
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 61 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackLinkLog.java

@@ -0,0 +1,61 @@
+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.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : CP表
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_gift_pack_link_log")
+public class GameGiftPackLinkLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 链接id
+     */
+    private Long linkId;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 企业id
+     */
+    private String corpId;
+
+    /**
+     * 客服号id
+     */
+    private String corpUserId;
+
+    /**
+     * 企微用户id
+     */
+    private String externalUserId;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+}

+ 12 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackCodeLogMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackCodeLog;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : ${description}
+ */
+public interface GameGiftPackCodeLogMapper extends BaseMapper<GameGiftPackCodeLog> {
+}

+ 12 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackCodeMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackCode;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : ${description}
+ */
+public interface GameGiftPackCodeMapper extends BaseMapper<GameGiftPackCode> {
+}

+ 12 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackConfigMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackConfig;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : ${description}
+ */
+public interface GameGiftPackConfigMapper extends BaseMapper<GameGiftPackConfig> {
+}

+ 12 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackLinkLogMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackLinkLog;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : ${description}
+ */
+public interface GameGiftPackLinkLogMapper extends BaseMapper<GameGiftPackLinkLog> {
+}

+ 12 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftPackLinkMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackLink;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-06
+ * @description : ${description}
+ */
+public interface GameGiftPackLinkMapper extends BaseMapper<GameGiftPackLink> {
+}