Sfoglia il codice sorgente

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

bilingfeng 5 mesi fa
parent
commit
630718d698

+ 30 - 3
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameGiftPackCodeController.java

@@ -3,10 +3,10 @@ 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.params.*;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftPackCodeVO;
 import com.zanxiang.game.module.manage.pojo.vo.GameGiftPackLinkVO;
+import com.zanxiang.game.module.manage.service.IGameGiftPackCodeService;
 import com.zanxiang.game.module.manage.service.IGameGiftPackConfigService;
 import com.zanxiang.game.module.manage.service.IGameGiftPackLinkService;
 import com.zanxiang.module.util.pojo.ResultVO;
@@ -33,6 +33,9 @@ import java.util.Map;
 @RequestMapping("/game/gift/pack")
 public class GameGiftPackCodeController {
 
+    @Autowired
+    private IGameGiftPackCodeService gameGiftPackCodeService;
+
     @Autowired
     private IGameGiftPackLinkService gameGiftPackLinkService;
 
@@ -78,4 +81,28 @@ public class GameGiftPackCodeController {
     public ResultVO<Boolean> addGiftPackLin(@Validated @RequestBody GameGiftPackLinkAddParam param) {
         return ResultVO.ok(gameGiftPackLinkService.addGiftPackLin(param));
     }
+
+    @ApiOperation(value = "查询链接礼包码列表")
+    @PostMapping(value = "/link/code/list")
+    @PreAuthorize(permissionKey = "manage:giftPack:linkCodeList")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameGiftPackCodeVO.class)})
+    public ResultVO<IPage<GameGiftPackCodeVO>> linkList(@Validated @RequestBody GameGiftPackCodeListParam param) {
+        return ResultVO.ok(gameGiftPackCodeService.list(param));
+    }
+
+    @ApiOperation(value = "添加链接礼包码")
+    @PostMapping(value = "/link/code/add")
+    @PreAuthorize(permissionKey = "manage:giftPack:linkCodeAdd")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> addGiftPackLin(@Validated @RequestBody GameGiftPackCodeAddParam param) {
+        return ResultVO.ok(gameGiftPackCodeService.addGiftPackCode(param));
+    }
+
+    @ApiOperation(value = "更新链接礼包码")
+    @PostMapping(value = "/link/code/update")
+    @PreAuthorize(permissionKey = "manage:giftPack:linkCodeUpdate")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> updateGiftPackLin(@Validated @RequestBody GameGiftPackCodeUpdateParam param) {
+        return ResultVO.ok(gameGiftPackCodeService.updateGiftPackCode(param));
+    }
 }

+ 38 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackCodeAddParam.java

@@ -0,0 +1,38 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-11-01
+ * @description : 礼包码添加参数
+ */
+@Data
+public class GameGiftPackCodeAddParam {
+
+    /**
+     * 礼包链接id
+     */
+    @NotNull(message = "礼包链接id不可为空")
+    @ApiModelProperty(notes = "礼包链接id, 必传")
+    private Long linkId;
+
+    /**
+     * 游戏id
+     */
+    @NotNull(message = "游戏id不可为空")
+    @ApiModelProperty(notes = "游戏id, 必传")
+    private Long gameId;
+
+    /**
+     * 礼包码列表
+     */
+    @NotEmpty(message = "礼包码列表不可为空")
+    @ApiModelProperty(notes = "礼包码列表, 必传")
+    private List<String> codeList;
+}

+ 61 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackCodeListParam.java

@@ -0,0 +1,61 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackCode;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-11-01
+ * @description :
+ */
+@Data
+public class GameGiftPackCodeListParam extends BaseListDTO<GameGiftPackCode> {
+
+    /**
+     * 链接id
+     */
+    @NotNull(message = "链接id不可为空")
+    @ApiModelProperty(notes = "链接id, 必传")
+    private Long linkId;
+
+    /**
+     * 礼包码
+     */
+    @ApiModelProperty(notes = "礼包码")
+    private String code;
+
+    /**
+     * 是否可用
+     */
+    @ApiModelProperty(notes = "是否可用")
+    private Integer enabled;
+
+    /**
+     * 创建开始时间
+     */
+    @ApiModelProperty(notes = "创建开始时间")
+    private LocalDate createBeginTime;
+
+    /**
+     * 创建结束时间
+     */
+    @ApiModelProperty(notes = "创建结束时间")
+    private LocalDate createEndTime;
+
+    /**
+     * 创建开始时间
+     */
+    @ApiModelProperty(notes = "创建开始时间")
+    private LocalDate updateBeginTime;
+
+    /**
+     * 创建结束时间
+     */
+    @ApiModelProperty(notes = "创建结束时间")
+    private LocalDate updateEndTime;
+}

+ 27 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftPackCodeUpdateParam.java

@@ -0,0 +1,27 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-11-01
+ * @description : 礼包码更新参数
+ */
+@Data
+public class GameGiftPackCodeUpdateParam {
+
+    /**
+     * 礼包码id列表
+     */
+    @ApiModelProperty(notes = "礼包码id列表, 必传数组")
+    private List<Long> ids;
+
+    /**
+     * 是否有效
+     */
+    @ApiModelProperty(notes = "是否有效, 必传")
+    private Boolean enabled;
+}

+ 57 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameGiftPackCodeVO.java

@@ -0,0 +1,57 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-11-01
+ * @description : 礼包码
+ */
+@Data
+public class GameGiftPackCodeVO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键")
+    private Long id;
+
+    /**
+     * 礼包码
+     */
+    @ApiModelProperty(notes = "礼包码")
+    private String code;
+
+    /**
+     * 是否可用
+     */
+    @ApiModelProperty(notes = "是否可用")
+    private Integer enabled;
+
+    /**
+     * 创建者
+     */
+    @ApiModelProperty(notes = "创建者")
+    private String createByName;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(notes = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    @ApiModelProperty(notes = "更新者")
+    private String updateByName;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(notes = "更新时间")
+    private LocalDateTime updateTime;
+}

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

@@ -1,6 +1,11 @@
 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.GameGiftPackCodeAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackCodeListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackCodeUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftPackCodeVO;
 import com.zanxiang.game.module.mybatis.entity.GameGiftPackCode;
 
 /**
@@ -9,4 +14,28 @@ import com.zanxiang.game.module.mybatis.entity.GameGiftPackCode;
  * @description : 游戏礼包码
  */
 public interface IGameGiftPackCodeService extends IService<GameGiftPackCode> {
+
+    /**
+     * 分页参数
+     *
+     * @param param : 查询参数
+     * @return : 返回数据
+     */
+    IPage<GameGiftPackCodeVO> list(GameGiftPackCodeListParam param);
+
+    /**
+     * 添加礼包码
+     *
+     * @param param : 添加参数
+     * @return : 返回添加结果
+     */
+    boolean addGiftPackCode(GameGiftPackCodeAddParam param);
+
+    /**
+     * 礼包码更新
+     *
+     * @param param : 更新参数
+     * @return : 返回结果
+     */
+    boolean updateGiftPackCode(GameGiftPackCodeUpdateParam param);
 }

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

@@ -1,11 +1,39 @@
 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.manage.pojo.params.GameGiftPackCodeAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackCodeListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftPackCodeUpdateParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftPackCodeVO;
 import com.zanxiang.game.module.manage.service.IGameGiftPackCodeService;
+import com.zanxiang.game.module.manage.service.IGameGiftPackLinkService;
 import com.zanxiang.game.module.mybatis.entity.GameGiftPackCode;
+import com.zanxiang.game.module.mybatis.entity.GameGiftPackLink;
 import com.zanxiang.game.module.mybatis.mapper.GameGiftPackCodeMapper;
+import com.zanxiang.module.util.bean.BeanUtil;
+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 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.stream.Collectors;
+import java.util.stream.Stream;
+
 /**
  * @author : lingfeng
  * @time : 2022-06-22
@@ -14,6 +42,88 @@ import org.springframework.stereotype.Service;
 @Service
 public class GameGiftPackCodeServiceImpl extends ServiceImpl<GameGiftPackCodeMapper, GameGiftPackCode> implements IGameGiftPackCodeService {
 
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+
+    @Autowired
+    private IGameGiftPackLinkService gameGiftPackLinkService;
+
+    @Override
+    public IPage<GameGiftPackCodeVO> list(GameGiftPackCodeListParam param) {
+        IPage<GameGiftPackCode> giftPackLinkIPage = page(param.toPage(), new QueryWrapper<GameGiftPackCode>().lambda()
+                .eq(GameGiftPackCode::getLinkId, param.getLinkId())
+                .eq(Strings.isNotBlank(param.getCode()), GameGiftPackCode::getCode, param.getCode())
+                .eq(param.getEnabled() != null, GameGiftPackCode::getEnabled, param.getEnabled())
+                .ge(param.getCreateBeginTime() != null, GameGiftPackCode::getCreateTime, param.getCreateBeginTime() == null ? null : LocalDateTime.of(param.getCreateBeginTime(), LocalTime.MIN))
+                .le(param.getCreateEndTime() != null, GameGiftPackCode::getCreateTime, param.getCreateEndTime() == null ? null : LocalDateTime.of(param.getCreateEndTime(), LocalTime.MAX))
+                .ge(param.getUpdateBeginTime() != null, GameGiftPackCode::getUpdateTime, param.getUpdateBeginTime() == null ? null : LocalDateTime.of(param.getUpdateBeginTime(), LocalTime.MIN))
+                .le(param.getUpdateEndTime() != null, GameGiftPackCode::getUpdateTime, param.getUpdateEndTime() == null ? null : LocalDateTime.of(param.getUpdateEndTime(), LocalTime.MAX))
+                .orderByDesc(GameGiftPackCode::getUpdateTime));
+        IPage<GameGiftPackCodeVO> result = new Page<>(giftPackLinkIPage.getCurrent(), giftPackLinkIPage.getSize(), giftPackLinkIPage.getTotal());
+        if (CollectionUtils.isNotEmpty(giftPackLinkIPage.getRecords())) {
+            result.setRecords(this.toVOBatch(giftPackLinkIPage.getRecords()));
+        }
+        return result;
+    }
+
+    private List<GameGiftPackCodeVO> toVOBatch(List<GameGiftPackCode> codeList) {
+        //用户信息
+        List<Long> userIdList = codeList.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 codeList.stream().map(code -> {
+            GameGiftPackCodeVO vo = BeanUtil.copy(code, GameGiftPackCodeVO.class);
+            vo.setCreateByName(userMap.get(code.getCreateBy()));
+            vo.setUpdateByName(userMap.get(code.getUpdateBy()));
+            return vo;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public boolean addGiftPackCode(GameGiftPackCodeAddParam param) {
+        //查询礼包码链接信息
+        GameGiftPackLink gameGiftPackLink = gameGiftPackLinkService.getOne(new LambdaQueryWrapper<GameGiftPackLink>()
+                .eq(GameGiftPackLink::getId, param.getLinkId())
+                .eq(GameGiftPackLink::getGameId, param.getGameId())
+        );
+        //礼包码链接信息不可为空
+        assert gameGiftPackLink != null : "参数错误, 礼包码链接信息不存在";
+        //判断已存在的礼包码
+        List<String> existCodeList = super.list(new LambdaQueryWrapper<GameGiftPackCode>()
+                .select(GameGiftPackCode::getCode)
+                .eq(GameGiftPackCode::getLinkId, param.getLinkId())
+                .eq(GameGiftPackCode::getGameId, param.getGameId())
+                .in(GameGiftPackCode::getCode, param.getCodeList())
+        ).stream().map(GameGiftPackCode::getCode).collect(Collectors.toList());
+        //构造新的礼包码
+        List<GameGiftPackCode> saveList = param.getCodeList().stream()
+                .filter(code -> !existCodeList.contains(code))
+                .map(code -> GameGiftPackCode.builder()
+                        .linkId(param.getLinkId())
+                        .gameId(param.getGameId())
+                        .code(code)
+                        .enabled(Boolean.TRUE)
+                        .createBy(SecurityUtil.getUserId())
+                        .createTime(LocalDateTime.now())
+                        .updateTime(LocalDateTime.now())
+                        .build())
+                .collect(Collectors.toList());
+        //保存返回
+        return super.saveBatch(saveList);
+    }
+
+    @Override
+    public boolean updateGiftPackCode(GameGiftPackCodeUpdateParam param) {
+        return super.update(new LambdaUpdateWrapper<GameGiftPackCode>()
+                .set(GameGiftPackCode::getEnabled, param.getEnabled())
+                .set(GameGiftPackCode::getUpdateBy, SecurityUtil.getUserId())
+                .set(GameGiftPackCode::getUpdateTime, LocalDateTime.now())
+                .in(GameGiftPackCode::getId, param.getIds())
+        );
+    }
 }
 
 

+ 11 - 2
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGiftPackCode.java

@@ -7,7 +7,6 @@ import lombok.*;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
-import java.util.Date;
 
 /**
  * @author : lingfeng
@@ -48,7 +47,7 @@ public class GameGiftPackCode implements Serializable {
     /**
      * 是否可用
      */
-    private Integer enabled;
+    private Boolean enabled;
 
     /**
      * 创建者
@@ -59,4 +58,14 @@ public class GameGiftPackCode implements Serializable {
      * 创建时间
      */
     private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
 }