瀏覽代碼

积分兑换种子

wenhaoyu@mangguoyun.com 3 年之前
父節點
當前提交
2c0e7e5f2e

+ 38 - 0
src/main/java/com/td/boss/game/complayerscore/controller/ComPlayerScoreController.java

@@ -0,0 +1,38 @@
+package com.td.boss.game.complayerscore.controller;
+
+import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.game.complayerscore.pojo.ComPlayerScore;
+import com.td.boss.game.complayerscore.vo.ComPlayerScoreVo;
+import com.td.boss.game.complayerscore.service.ComPlayerScoreService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("/game/comPlayerScore/")
+public class ComPlayerScoreController extends CommonController<ComPlayerScoreVo, ComPlayerScore, Integer> {
+    @Autowired
+    private ComPlayerScoreService comPlayerScoreService;
+
+    /**
+     * 积分兑换种子
+     *
+     * @param userId 用户ID
+     * @param amount 本次兑换数量
+     * @param seedId 种子id
+     * @return {@link Result}<{@link String}>
+     */
+    @PostMapping("exchange")
+    @ResponseBody
+    @Transactional(rollbackFor = Exception.class)
+    public Result<String> exchange(
+            @RequestParam(value = "userId") String userId,
+            @RequestParam(value = "amount") Integer amount,
+            @RequestParam(value = "seedId") Integer seedId
+    ) {
+        return comPlayerScoreService.exchange(userId, amount, seedId);
+    }
+}

+ 5 - 4
src/main/java/com/td/boss/game/complayersorce/pojo/ComPlayerSorce.java → src/main/java/com/td/boss/game/complayerscore/pojo/ComPlayerScore.java

@@ -1,4 +1,4 @@
-package com.td.boss.game.complayersorce.pojo;
+package com.td.boss.game.complayerscore.pojo;
 
 import lombok.Data;
 import javax.persistence.*;
@@ -6,15 +6,16 @@ import java.io.Serializable;
 import java.util.Date;
 
 @Entity
-@Table(name = "com_player_sorce")
+@Table(name = "com_player_score")
 @Data
-public class ComPlayerSorce implements Serializable {
+public class ComPlayerScore implements Serializable {
     @Id
+    @GeneratedValue(strategy= GenerationType.IDENTITY)
     private Integer id;//编号
 
     private String userId;//用户id
 
-    private Double spendCnt;//花费CNT总数
+    private Integer totalCnt;//花费CNT总数
 
     private Integer amount;//兑换数量
 

+ 12 - 0
src/main/java/com/td/boss/game/complayerscore/repository/ComPlayerScoreRepository.java

@@ -0,0 +1,12 @@
+package com.td.boss.game.complayerscore.repository;
+
+import com.td.boss.common.repository.CommonRepository;
+import com.td.boss.game.complayerscore.pojo.ComPlayerScore;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ComPlayerScoreRepository extends CommonRepository<ComPlayerScore, Integer> {
+    List<ComPlayerScore> findAllByUserId(String userId);
+}

+ 20 - 0
src/main/java/com/td/boss/game/complayerscore/service/ComPlayerScoreService.java

@@ -0,0 +1,20 @@
+package com.td.boss.game.complayerscore.service;
+
+import com.td.boss.common.pojo.Result;
+import com.td.boss.common.service.*;
+import com.td.boss.game.complayerscore.pojo.ComPlayerScore;
+import com.td.boss.game.complayerscore.vo.ComPlayerScoreVo;
+
+public interface ComPlayerScoreService extends CommonService<ComPlayerScoreVo, ComPlayerScore, Integer> {
+
+    /**
+     * 积分兑换种子
+     *
+     * @param userId 用户ID
+     * @param amount 本次兑换数量
+     * @param seedId 种子id
+     * @return {@link Result}<{@link String}>
+     */
+    Result<String> exchange(String userId, Integer amount, Integer seedId);
+
+}

+ 110 - 0
src/main/java/com/td/boss/game/complayerscore/service/ComPlayerScoreServiceImpl.java

@@ -0,0 +1,110 @@
+package com.td.boss.game.complayerscore.service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import cn.hutool.core.util.StrUtil;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.common.service.*;
+import com.td.boss.game.commallseed.service.ComMallSeedService;
+import com.td.boss.game.commallseed.vo.ComMallSeedVo;
+import com.td.boss.game.complayercultivate.serivce.ComPlayerCultivateSerivce;
+import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
+import com.td.boss.game.complayergoods.service.ComPlayerGoodsService;
+import com.td.boss.game.complayergoods.vo.ComPlayerGoodsVo;
+import com.td.boss.game.complayerscore.pojo.ComPlayerScore;
+import com.td.boss.game.complayerscore.vo.ComPlayerScoreVo;
+import com.td.boss.game.complayerscore.repository.ComPlayerScoreRepository;
+import com.td.boss.game.comusers.service.ComUsersService;
+import com.td.boss.game.comusers.vo.ComUsersVo;
+import com.td.boss.util.DappUtil;
+import com.td.boss.util.UUIDUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+@Service
+public class ComPlayerScoreServiceImpl extends CommonServiceImpl<ComPlayerScoreVo, ComPlayerScore, Integer> implements ComPlayerScoreService {
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private ComPlayerScoreRepository comPlayerScoreRepository;
+    @Autowired
+    private ComUsersService comUsersService;
+    @Autowired
+    private ComMallSeedService comMallSeedService;
+    @Autowired
+    private ComPlayerGoodsService comPlayerGoodsService;
+
+    /**
+     * 积分兑换种子
+     *
+     * @param userId 用户ID
+     * @param amount 本次兑换数量
+     * @param seedId 种子id
+     * @return {@link Result}<{@link String}>
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result<String> exchange(String userId,
+                                   Integer amount,
+                                   Integer seedId) {
+        ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
+        if (comUsersVo == null) {
+            return Result.of(null, false, "用户不存在");
+        }
+        // 链端获取cnt总数
+        Integer totalCount = DappUtil.getChildrenBuyLandAmount(userId);
+        if (totalCount <= 0) {
+            return Result.of(null, false, "消费土地的总cnt不足");
+        }
+        ComMallSeedVo mallSeed = comMallSeedService.findById(seedId);
+        // 5 = 固定积分兑换种子
+        if (mallSeed == null || mallSeed.getAmount().equals(0) || !"5".equals(mallSeed.getMallType())) {
+            return Result.of(null, false, "种子不存在或已被下架");
+        }
+        // 本次总消费
+        int totalCnt = mallSeed.getPriceCnt() * amount;
+        if (totalCnt <= 0) {
+            return Result.of(null, false, "种子数据异常");
+        }
+        if (totalCount < totalCnt) {
+            return Result.of(null, false, "消费土地的总cnt不足");
+        }
+        // 以往兑换消费总cnt
+        Integer oldTotalCnt = comPlayerScoreRepository.findAllByUserId(userId).stream()
+                .map(ComPlayerScore::getTotalCnt).reduce(0, Integer::sum);
+        if (totalCount < oldTotalCnt + totalCnt) {
+            return Result.of(null, false, "消费土地的总cnt不足");
+        }
+
+        // 记录本次兑换信息
+        ComPlayerScore comPlayerScore = new ComPlayerScore();
+        comPlayerScore.setUserId(userId);
+        comPlayerScore.setTotalCnt(totalCnt);
+        comPlayerScore.setAmount(amount);
+        comPlayerScore.setPriceCnt(mallSeed.getPriceCnt());
+        comPlayerScore.setCreateTime(new Date());
+        comPlayerScoreRepository.save(comPlayerScore);
+        // 保存进仓库
+        ComPlayerGoodsVo comPlayerGoods = new ComPlayerGoodsVo();
+        comPlayerGoods.setGoodsId(UUIDUtil.getUUID());
+        comPlayerGoods.setGoodsIndex(seedId);
+        comPlayerGoods.setGoodsType(0);
+        comPlayerGoods.setUserId(userId);
+        comPlayerGoods.setName(mallSeed.getName());
+        comPlayerGoods.setPictureName(mallSeed.getPicture());
+        comPlayerGoods.setAmount(amount);
+        comPlayerGoods.setAmountPart(0d);
+        comPlayerGoods.setCreateTime(new Date());
+        comPlayerGoods.setMallType(0);
+        comPlayerGoodsService.save(comPlayerGoods);
+
+        return Result.of(null, true, "兑换成功");
+    }
+}

+ 2 - 2
src/main/java/com/td/boss/game/complayersorce/vo/ComPlayerSorceVo.java → src/main/java/com/td/boss/game/complayerscore/vo/ComPlayerScoreVo.java

@@ -1,11 +1,11 @@
-package com.td.boss.game.complayersorce.vo;
+package com.td.boss.game.complayerscore.vo;
 
 import com.td.boss. common.pojo.PageCondition;import lombok.Data;
 import java.io.Serializable;
 import java.util.Date;
 
 @Data
-public class ComPlayerSorceVo extends PageCondition implements Serializable {
+public class ComPlayerScoreVo extends PageCondition implements Serializable {
     private Integer id;//编号
 
     private String userId;//用户id

+ 0 - 15
src/main/java/com/td/boss/game/complayersorce/controller/ComPlayerSorceController.java

@@ -1,15 +0,0 @@
-package com.td.boss.game.complayersorce.controller;
-
-import com.td.boss.common.controller.*;
-import com.td.boss.game.complayersorce.pojo.ComPlayerSorce;
-import com.td.boss.game.complayersorce.vo.ComPlayerSorceVo;
-import com.td.boss.game.complayersorce.service.ComPlayerSorceService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@RequestMapping("/game/comPlayerSorce/")
-public class ComPlayerSorceController extends CommonController<ComPlayerSorceVo, ComPlayerSorce, Integer> {
-    @Autowired
-    private ComPlayerSorceService comPlayerSorceService;
-}

+ 0 - 9
src/main/java/com/td/boss/game/complayersorce/repository/ComPlayerSorceRepository.java

@@ -1,9 +0,0 @@
-package com.td.boss.game.complayersorce.repository;
-
-import com.td.boss.common.repository.*;
-import com.td.boss.game.complayersorce.pojo.ComPlayerSorce;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface ComPlayerSorceRepository extends CommonRepository<ComPlayerSorce, Integer> {
-}

+ 0 - 8
src/main/java/com/td/boss/game/complayersorce/service/ComPlayerSorceService.java

@@ -1,8 +0,0 @@
-package com.td.boss.game.complayersorce.service;
-
-import com.td.boss.common.service.*;
-import com.td.boss.game.complayersorce.pojo.ComPlayerSorce;
-import com.td.boss.game.complayersorce.vo.ComPlayerSorceVo;
-
-public interface ComPlayerSorceService extends CommonService<ComPlayerSorceVo, ComPlayerSorce, Integer> {
-}

+ 0 - 23
src/main/java/com/td/boss/game/complayersorce/service/ComPlayerSorceServiceImpl.java

@@ -1,23 +0,0 @@
-package com.td.boss.game.complayersorce.service;
-
-import com.td.boss.common.service.*;
-import com.td.boss.game.complayersorce.pojo.ComPlayerSorce;
-import com.td.boss.game.complayersorce.vo.ComPlayerSorceVo;
-import com.td.boss.game.complayersorce.repository.ComPlayerSorceRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
-@Service
-@Transactional
-public class ComPlayerSorceServiceImpl extends CommonServiceImpl<ComPlayerSorceVo, ComPlayerSorce, Integer> implements ComPlayerSorceService{
-
-    @PersistenceContext
-    private EntityManager em;
-    @Autowired
-    private ComPlayerSorceRepository comPlayerSorceRepository;
-
-
-}

+ 9 - 0
src/test/java/com/td/boss/ComPlayerLogTests.java

@@ -1,6 +1,7 @@
 package com.td.boss;
 
 import com.td.boss.game.complayerlog.service.ComPlayerLogServiceImpl;
+import com.td.boss.game.complayerscore.service.ComPlayerScoreService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,8 +15,16 @@ public class ComPlayerLogTests {
     @Autowired
     private ComPlayerLogServiceImpl comPlayerLogService;
 
+    @Autowired
+    private ComPlayerScoreService comPlayerScoreService;
+
     @Test
     public void powerLoss() {
         comPlayerLogService.powerLoss("1123");
     }
+
+    @Test
+    public void exchange() {
+        comPlayerScoreService.exchange("1123", 2, 24);
+    }
 }