From 03a30ab3d3922c9a7306b775e2b27ddf233d287b Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 07 Dec 2021 14:10:45 +0800
Subject: [PATCH] 20211207 fish
---
src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java | 108 ++++++++++++++++++++
src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java | 15 +++
src/main/resources/mapper/fish/CannonOwnRecordDao.xml | 43 ++++++++
src/main/java/com/xcong/excoin/modules/fish/vo/CannonAwardVo.java | 16 +++
src/main/java/com/xcong/excoin/modules/fish/entity/CannonAward.java | 22 ++++
src/main/java/com/xcong/excoin/modules/fish/vo/AwardVo.java | 14 ++
src/main/java/com/xcong/excoin/modules/fish/vo/AwardsVo.java | 20 ++++
src/main/java/com/xcong/excoin/modules/fish/dto/LotteryDrawDto.java | 9 +
src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java | 26 ++++
src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java | 2
src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java | 4
src/main/java/com/xcong/excoin/modules/fish/entity/CannonAwardSet.java | 18 +++
12 files changed, 288 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java b/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java
index 63fcbd0..322462e 100644
--- a/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java
+++ b/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java
@@ -5,10 +5,7 @@
import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinDealVo;
import com.xcong.excoin.modules.fish.dto.*;
import com.xcong.excoin.modules.fish.service.MemberCannonService;
-import com.xcong.excoin.modules.fish.vo.AccountAvaBanlaceVo;
-import com.xcong.excoin.modules.fish.vo.CannonSettingVo;
-import com.xcong.excoin.modules.fish.vo.GoldAccountVo;
-import com.xcong.excoin.modules.fish.vo.OwnCannonVo;
+import com.xcong.excoin.modules.fish.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
@@ -104,4 +101,25 @@
return memberCannonService.fishing(fishingDto);
}
+ /**
+ * 获取奖品列表
+ */
+ @ApiOperation(value="获取奖品列表", notes="获取奖品列表")
+ @ApiResponses({@ApiResponse( code = 200, message = "success", response = AwardsVo.class)})
+ @GetMapping(value="/getAwards")
+ public Result getAwards() {
+ return memberCannonService.getAwards();
+ }
+
+ /**
+ *点击抽奖
+ */
+ @ApiOperation(value = "点击抽奖")
+ @PostMapping(value = "/lotteryDraw")
+ public Result lotteryDraw(@RequestBody @Valid LotteryDrawDto lotteryDrawDto) {
+ return memberCannonService.lotteryDraw(lotteryDrawDto);
+ }
+
+
+
}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java
index 722e17b..bce341f 100644
--- a/src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java
+++ b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java
@@ -1,10 +1,15 @@
package com.xcong.excoin.modules.fish.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.fish.entity.CannonAccountMoneyChange;
+import com.xcong.excoin.modules.fish.entity.CannonAward;
+import com.xcong.excoin.modules.fish.entity.CannonAwardSet;
import com.xcong.excoin.modules.fish.entity.CannonOwnRecord;
+import com.xcong.excoin.modules.fish.vo.AwardsVo;
import com.xcong.excoin.modules.fish.vo.OwnCannonVo;
import org.apache.ibatis.annotations.Param;
+import java.math.BigDecimal;
import java.util.List;
public interface CannonOwnRecordDao extends BaseMapper<CannonOwnRecord> {
@@ -14,4 +19,14 @@
List<OwnCannonVo> selectCannonOwnRecordsByMemberId(@Param("memberId")Long memberId);
List<CannonOwnRecord> selectCannonOwnRecordsByIdAndMemberId(@Param("id")Long cannonOwnId, @Param("memberId")Long memberId);
+
+ AwardsVo getAwards();
+
+ CannonAwardSet getCannonAwardSet();
+
+ List<CannonAward> selectCannonAward();
+
+ CannonAward selectCannonAwardByCode(@Param("code")String code);
+
+ Integer selectCannonAccountMoneyChangeByMemberId(@Param("memberId")Long memberId);
}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dto/LotteryDrawDto.java b/src/main/java/com/xcong/excoin/modules/fish/dto/LotteryDrawDto.java
new file mode 100644
index 0000000..8131af4
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dto/LotteryDrawDto.java
@@ -0,0 +1,9 @@
+package com.xcong.excoin.modules.fish.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "LotteryDrawDto", description = "参数类")
+public class LotteryDrawDto {
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java
index e770697..23f850d 100644
--- a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java
@@ -16,7 +16,7 @@
private Long memberId;
//金额
private BigDecimal amount;
- //1:USDT购买炮台 2:金币兑换1代币 3:1代币兑换金币
+ //1:USDT购买炮台 2:金币兑换1代币 3:1代币兑换金币 4:抽奖记录
private Integer type;
//内容
private String content;
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAward.java b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAward.java
new file mode 100644
index 0000000..d266a3f
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAward.java
@@ -0,0 +1,22 @@
+package com.xcong.excoin.modules.fish.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("cannon_award")
+public class CannonAward {
+ private Long id;
+ private String name;
+ //活动编码
+ private String code;
+
+ private Integer quantity;
+ private Integer surplusQuantity;
+ private Integer type;
+ private Integer state;
+ private Integer chance;
+ private String activityCode;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAwardSet.java b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAwardSet.java
new file mode 100644
index 0000000..23f95cb
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAwardSet.java
@@ -0,0 +1,18 @@
+package com.xcong.excoin.modules.fish.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("cannon_award_set")
+public class CannonAwardSet {
+
+ private Long id;
+ //每次消耗USDT数量
+ private BigDecimal consume;
+ //活动编码
+ private String code;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java b/src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java
index f57cb6c..c8f716c 100644
--- a/src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java
+++ b/src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java
@@ -27,4 +27,8 @@
Result fishing(FishingDto fishingDto);
Result getAccountAvaBanlace();
+
+ Result getAwards();
+
+ Result lotteryDraw(LotteryDrawDto lotteryDrawDto);
}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java b/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java
index d0671f2..c049297 100644
--- a/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java
@@ -3,6 +3,8 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,10 +16,7 @@
import com.xcong.excoin.modules.fish.dto.*;
import com.xcong.excoin.modules.fish.entity.*;
import com.xcong.excoin.modules.fish.service.MemberCannonService;
-import com.xcong.excoin.modules.fish.vo.AccountAvaBanlaceVo;
-import com.xcong.excoin.modules.fish.vo.CannonSettingVo;
-import com.xcong.excoin.modules.fish.vo.GoldAccountVo;
-import com.xcong.excoin.modules.fish.vo.OwnCannonVo;
+import com.xcong.excoin.modules.fish.vo.*;
import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.utils.RedisUtils;
@@ -279,6 +278,107 @@
return Result.ok(accountAvaBanlaceVo);
}
+ @Override
+ public Result getAwards() {
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ AwardsVo awardsVo = cannonOwnRecordDao.getAwards();
+ return Result.ok(awardsVo);
+ }
+
+ @Override
+ public Result lotteryDraw(LotteryDrawDto lotteryDrawDto) {
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ //获取每次抽奖需要的USDT数量
+ CannonAwardSet cannonAwardSet = cannonOwnRecordDao.getCannonAwardSet();
+ if(ObjectUtil.isEmpty(cannonAwardSet)){
+ Result.fail("活动还没开始,请稍候");
+ }
+ BigDecimal consume = cannonAwardSet.getConsume() == null ? BigDecimal.ZERO : cannonAwardSet.getConsume();
+ if(consume.compareTo(BigDecimal.ZERO) <= 0){
+ Result.fail("活动还没开始,请稍候");
+ }
+ //验证账户USDT余额是否足够
+ MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name());
+ BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance() == null ? BigDecimal.ZERO : memberWalletCoinEntity.getAvailableBalance();
+ if(availableBalance.compareTo(consume) < 0){
+ Result.fail("用户USDT余额不足");
+ }
+ //用户USDT余额减少
+ coinService.updateWalletBalance(memberWalletCoinEntity.getId(),consume.negate(),consume.negate(),null);
+ //增加一条抽奖记录
+ CannonAccountMoneyChange cannonAccountMoneyChange = new CannonAccountMoneyChange();
+ cannonAccountMoneyChange.setMemberId(memberId);
+ cannonAccountMoneyChange.setAmount(consume);
+ cannonAccountMoneyChange.setType(4);
+ cannonAccountMoneyChange.setContent("抽奖");
+ cannonAccountMoneyChange.setChangeBalance(consume);
+ cannonAccountMoneyChange.setChangeBefore(memberWalletCoinEntity.getAvailableBalance());
+ cannonAccountMoneyChange.setChangeAfter(memberWalletCoinEntity.getAvailableBalance().subtract(consume));
+ cannonAccountMoneyChangeDao.insert(cannonAccountMoneyChange);
+ //抽奖品
+ CannonAwardVo award = getAward(memberId);
+ return Result.ok(award);
+ }
+
+ private CannonAwardVo getAward(Long memberId) {
+ CannonAwardVo cannonAwardVo = new CannonAwardVo();
+ //获取所有的奖品列表
+ List<CannonAward> cannonAwards = cannonOwnRecordDao.selectCannonAward();
+ if(CollUtil.isNotEmpty(cannonAwards)){
+ CannonAward cannonAward = RandomUtil.randomEle(cannonAwards);
+ //获得金币
+ if(cannonAward.getCode() == "GOLD"){
+ BigDecimal quantity = new BigDecimal(cannonAward.getQuantity());
+ MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
+ memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),quantity,quantity,null);
+ cannonAwardVo.setName(cannonAward.getName());
+ cannonAwardVo.setQuantity(cannonAward.getQuantity());
+ }else if(cannonAward.getCode() == "COIN"){
+ BigDecimal quantity = new BigDecimal(cannonAward.getQuantity());
+ MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCC.name());
+ coinService.updateWalletBalance(memberWalletCoinEntity.getId(),quantity,quantity,null);
+ cannonAwardVo.setName(cannonAward.getName());
+ cannonAwardVo.setQuantity(cannonAward.getQuantity());
+ }else if(cannonAward.getCode() == "USDT"){
+ BigDecimal quantity = new BigDecimal(cannonAward.getQuantity());
+ MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name());
+ coinService.updateWalletBalance(memberWalletCoinEntity.getId(),quantity,quantity,null);
+ cannonAwardVo.setName(cannonAward.getName());
+ cannonAwardVo.setQuantity(cannonAward.getQuantity());
+ }else{
+ CannonSetting cannonSetting = cannonSettingDao.selectCannonSettingByCannonCode(cannonAward.getCode());
+ List<CannonOwnRecord> cannonOwnRecords = cannonOwnRecordDao.selectCannonOwnRecordsByMemberIdAndCannonCode(memberId, cannonAward.getCode());
+ Integer cannonAccountMoneyChanges = cannonOwnRecordDao.selectCannonAccountMoneyChangeByMemberId(memberId);
+ //抽奖次数小于十次的抽不到炮台
+ if(CollUtil.isEmpty(cannonOwnRecords) && cannonAccountMoneyChanges > 10){
+ //增加一条拥有记录【cannon_own_record】
+ CannonOwnRecord cannonOwnRecord = new CannonOwnRecord();
+ cannonOwnRecord.setMemberId(memberId);
+ cannonOwnRecord.setCannonUuid(UUID.randomUUID().toString());
+ cannonOwnRecord.setCannonCode(cannonSetting.getCode());
+ cannonOwnRecord.setCannonName(cannonSetting.getName());
+ cannonOwnRecord.setCannonPrice(cannonSetting.getExchangePrice());
+ cannonOwnRecord.setType(1);
+ cannonOwnRecordDao.insert(cannonOwnRecord);
+
+ cannonAwardVo.setName(cannonAward.getName());
+ cannonAwardVo.setQuantity(cannonAward.getQuantity());
+ }else{
+ CannonAward cannonAwardGold = cannonOwnRecordDao.selectCannonAwardByCode("GOLD");
+ BigDecimal quantity = new BigDecimal(cannonAwardGold.getQuantity());
+ MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
+ memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),quantity,quantity,null);
+ cannonAwardVo.setName(cannonAwardGold.getName());
+ cannonAwardVo.setQuantity(cannonAwardGold.getQuantity());
+ }
+ }
+ }
+
+ return cannonAwardVo;
+ }
+
+
+
public static void main(String[] args) {
System.out.println(UUID.randomUUID().toString());
}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/vo/AwardVo.java b/src/main/java/com/xcong/excoin/modules/fish/vo/AwardVo.java
new file mode 100644
index 0000000..29be936
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/vo/AwardVo.java
@@ -0,0 +1,14 @@
+package com.xcong.excoin.modules.fish.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AwardVo", description = "")
+public class AwardVo {
+
+ @ApiModelProperty(value = "奖品名称")
+ private String name;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/vo/AwardsVo.java b/src/main/java/com/xcong/excoin/modules/fish/vo/AwardsVo.java
new file mode 100644
index 0000000..6fa8f49
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/vo/AwardsVo.java
@@ -0,0 +1,20 @@
+package com.xcong.excoin.modules.fish.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "AwardsVo", description = "")
+public class AwardsVo {
+
+ @ApiModelProperty(value = "奖品")
+ private List<AwardVo> awardVo;
+
+ @ApiModelProperty(value = "每次参与消耗USDT数量")
+ private BigDecimal consume;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/vo/CannonAwardVo.java b/src/main/java/com/xcong/excoin/modules/fish/vo/CannonAwardVo.java
new file mode 100644
index 0000000..a7a1197
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/vo/CannonAwardVo.java
@@ -0,0 +1,16 @@
+package com.xcong.excoin.modules.fish.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "CannonAwardVo", description = "")
+public class CannonAwardVo {
+
+ @ApiModelProperty(value = "奖品名称")
+ private String name;
+
+ @ApiModelProperty(value = "奖品数量")
+ private Integer quantity;
+}
diff --git a/src/main/resources/mapper/fish/CannonOwnRecordDao.xml b/src/main/resources/mapper/fish/CannonOwnRecordDao.xml
index 2b2239f..465b3f0 100644
--- a/src/main/resources/mapper/fish/CannonOwnRecordDao.xml
+++ b/src/main/resources/mapper/fish/CannonOwnRecordDao.xml
@@ -18,4 +18,47 @@
select a.* from cannon_own_record a where a.member_id = #{memberId} and a.id = #{id}
</select>
+
+ <resultMap id="awardsMap" type="com.xcong.excoin.modules.fish.vo.AwardsVo">
+ <result property="consume" column="consume" />
+ <collection property="awardVo" ofType="com.xcong.excoin.modules.fish.vo.AwardVo" >
+ <result property="name" column="name" />
+ </collection>
+ </resultMap>
+
+ <select id="getAwards" resultMap="awardsMap">
+ select
+ a.consume,
+ b.name
+ from cannon_award_set a
+ inner join cannon_award b on a.code = b.activity_code
+ where b.type = 1;
+ </select>
+
+
+
+ <select id="getCannonAwardSet" resultType="com.xcong.excoin.modules.fish.entity.CannonAwardSet">
+ select a.* from cannon_award_set a
+ </select>
+
+
+
+ <select id="selectCannonAward" resultType="com.xcong.excoin.modules.fish.entity.CannonAward">
+ select a.* from cannon_award a where a.type = 1;
+ </select>
+
+
+
+ <select id="selectCannonAwardByCode" resultType="com.xcong.excoin.modules.fish.entity.CannonAward">
+ select a.* from cannon_award a where a.code = #{code}
+ </select>
+
+
+
+ <select id="selectCannonAccountMoneyChangeByMemberId" resultType="java.lang.Integer">
+ select COUNT(a.id) from cannon_account_money_change a where a.type = 4
+ </select>
+
+
+
</mapper>
\ No newline at end of file
--
Gitblit v1.9.1