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