package com.xcong.excoin.modules.activity.service.impl; import java.math.BigDecimal; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.common.LoginUserUtils; import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.activity.dao.ActivityMainDao; import com.xcong.excoin.modules.activity.dao.ActivityMemberDetailDao; import com.xcong.excoin.modules.activity.dao.ActivityReceiveRecordDao; import com.xcong.excoin.modules.activity.dao.ActivitySubDao; import com.xcong.excoin.modules.activity.entity.ActivityMain; import com.xcong.excoin.modules.activity.entity.ActivityMemberDetail; import com.xcong.excoin.modules.activity.entity.ActivityReceiveRecord; import com.xcong.excoin.modules.activity.entity.ActivitySub; import com.xcong.excoin.modules.activity.service.ActivityService; import com.xcong.excoin.modules.activity.vo.ActivityMainDetailVo; import com.xcong.excoin.modules.activity.vo.ActivityMainVo; import com.xcong.excoin.modules.activity.vo.ActivityReceiveRecordVo; import com.xcong.excoin.modules.coin.dao.MemberAccountMoneyChangeDao; import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange; import com.xcong.excoin.modules.contract.dao.ContractOrderDao; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import com.xcong.excoin.modules.documentary.vo.MemberIsTradeVo; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; import com.xcong.excoin.modules.platform.dao.PlatformBannerDao; import com.xcong.excoin.modules.platform.entity.PlatformBannerEntity; import com.xcong.excoin.utils.MessageSourceUtils; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; @Slf4j @Service public class ActivityServiceImpl extends ServiceImpl implements ActivityService { @Resource private ActivityMainDao activityMainDao; @Resource private ActivitySubDao activitySubDao; @Resource private ActivityMemberDetailDao activityMemberDetailDao; @Resource private ActivityReceiveRecordDao activityReceiveRecordDao; @Resource private MemberDao memberDao; @Resource PlatformBannerDao platformBannerDao; @Resource ContractOrderDao contractOrderDao; @Resource MemberAccountMoneyChangeDao memberAccountMoneyChangeDao; @Resource MemberWalletCoinDao memberWalletCoinDao; @Override public Result getActivityMain() { //登录验证 //LoginUserUtils.getAppLoginUser().getId(); ActivityMainVo activityMainVo = new ActivityMainVo(); //活动图片 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_banner",PlatformBannerEntity.BANNER_NO); PlatformBannerEntity platformBannerEntity = platformBannerDao.selectOne(queryWrapper); //查询图片绑定的活动 if(ObjectUtil.isNotEmpty(platformBannerEntity)) { activityMainVo.setImageUrl(platformBannerEntity.getImageUrl()); activityMainVo.setIsJump(Integer.parseInt(platformBannerEntity.getIsJump())); QueryWrapper queryWrappers = new QueryWrapper<>(); queryWrappers.eq("banner_id",platformBannerEntity.getId()); ActivityMain activityMain = activityMainDao.selectOne(queryWrappers); if(ObjectUtil.isNotEmpty(activityMain)) { activityMainVo.setId(activityMain.getId()); activityMainVo.setHtmlImg(activityMain.getHtmlImg()); } } return Result.ok(activityMainVo); } @Override public Result getActivityMainDetail(long id) { //登录验证 Long memberId = LoginUserUtils.getAppLoginUser().getId(); ActivityMainDetailVo activityMainDetailVo = new ActivityMainDetailVo(); /** * 头部信息 */ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("member_id",memberId); queryWrapper.eq("main_id",id); ActivityMemberDetail activityMemberDetail = activityMemberDetailDao.selectOne(queryWrapper); //获取当前人的累计爆仓金额 BigDecimal burstUsdt = contractOrderDao.getBurstUsdtByMemberId(memberId); activityMainDetailVo.setBurstUsdt(burstUsdt); activityMainDetailVo.setReceivedUsdt(activityMemberDetail.getReceivedUsdt()); activityMainDetailVo.setSurplusUsdt(activityMemberDetail.getSurplusUsdt()); /** * 活动名称 */ ActivityMain activityMain = activityMainDao.selectById(id); activityMainDetailVo.setName(activityMain.getName()); activityMainDetailVo.setContent(activityMain.getContent()); activityMainDetailVo.setState(activityMain.getState()); activityMainDetailVo.setStartTime(activityMain.getStartTime()); activityMainDetailVo.setEndTime(activityMain.getEndTime()); /** * 活动细则 */ //根据活动主表ID和memberID获取对应的活动细则 List activityReceiveRecordVos = activityReceiveRecordDao.selectListByMemberIdAndMainId(memberId,id); activityMainDetailVo.setActivityReceiveRecordVos(activityReceiveRecordVos); return Result.ok(activityMainDetailVo); } @Override @Transactional(rollbackFor = Exception.class) public Result clinkReceive(long subId) { //登录验证 Long memberId = LoginUserUtils.getAppLoginUser().getId(); //Long memberId = Long.parseLong("47"); //验证是否实名认证 MemberEntity memberEntity = memberDao.selectById(memberId); Integer certifyStatus = memberEntity.getCertifyStatus(); if(MemberEntity.CERTIFY_STATUS_Y != certifyStatus) { return Result.fail(MessageSourceUtils.getString("activity_service_0001")); } //验证领取记录是否失效 QueryWrapper queryWrapperActivityReceiveRecord = new QueryWrapper<>(); queryWrapperActivityReceiveRecord.eq("member_id",memberId); queryWrapperActivityReceiveRecord.eq("sub_id",subId); ActivityReceiveRecord activityReceiveRecord = activityReceiveRecordDao.selectOne(queryWrapperActivityReceiveRecord); Date invalidTime = activityReceiveRecord.getInvalidTime(); Date date = new Date(); if(ObjectUtil.isNotEmpty(invalidTime.getTime())) { if(invalidTime.getTime() - date.getTime() < 0) { //更新失效状态 activityReceiveRecord.setReceiveState(ActivityReceiveRecord.RECEIVESTATE_THREE); activityReceiveRecordDao.updateById(activityReceiveRecord); return Result.fail(MessageSourceUtils.getString("activity_service_0002")); } } //验证当前活动是否结束 ActivityMain activityMain = activityMainDao.selectById(activityReceiveRecord.getMainId()); // Date endTime = activityMain.getEndTime(); // if(endTime.getTime() - date.getTime() < 0) { // return Result.fail(MessageSourceUtils.getString("activity_service_0004")); // } //处于失效状态 Integer receiveState = activityReceiveRecord.getReceiveState(); if(ActivityReceiveRecord.RECEIVESTATE_THREE == receiveState) { return Result.fail(MessageSourceUtils.getString("activity_service_0002")); } //不能重复领取 if(ActivityReceiveRecord.RECEIVESTATE_ONE == receiveState) { return Result.fail(MessageSourceUtils.getString("activity_service_0003")); } //获取对应的规则编码 ActivitySub activitySub = activitySubDao.selectById(subId); //获取当前人的累计爆仓金额 BigDecimal burstUsdt = contractOrderDao.getBurstUsdtByMemberId(memberId); burstUsdt = burstUsdt.multiply(new BigDecimal(-1)); //判断是否满足领取条件 if(!ActivitySub.CODE_ONE.equals(activitySub.getCode())) { if(activitySub.getBurstAmount().compareTo(burstUsdt) > 0) { return Result.fail(MessageSourceUtils.getString("activity_service_0005")); } } Long mainId = activitySub.getMainId(); BigDecimal amount = activitySub.getAmount(); /** * 更新个人详情页面信息 */ QueryWrapper queryWrapperMemberDetail = new QueryWrapper<>(); queryWrapperMemberDetail.eq("member_id",memberId); queryWrapperMemberDetail.eq("main_id",mainId); ActivityMemberDetail activityMemberDetail = activityMemberDetailDao.selectOne(queryWrapperMemberDetail); //累计爆仓金额 activityMemberDetail.setBurstUsdt(burstUsdt); //已领取USDT BigDecimal receivedUsdt = activityMemberDetail.getReceivedUsdt(); BigDecimal addReceivedUsdt = receivedUsdt.add(amount); activityMemberDetail.setReceivedUsdt(addReceivedUsdt); //剩余待领取 BigDecimal amountMain = activityMain.getAmount(); BigDecimal subtractSurplusUsdt = amountMain.subtract(addReceivedUsdt); activityMemberDetail.setSurplusUsdt(subtractSurplusUsdt); activityMemberDetailDao.updateById(activityMemberDetail); /** * 生成一个币币流水记录 */ MemberAccountMoneyChange memberAccountMoneyChange = new MemberAccountMoneyChange(); memberAccountMoneyChange.setContent(MemberWalletCoinEnum.CONTENTFROMACTIVITY.getValue()); memberAccountMoneyChange.setMemberId(memberId); memberAccountMoneyChange.setAmount(amount); memberAccountMoneyChange.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER); memberAccountMoneyChange.setSymbol(MemberWalletCoinEnum.WALLETCOINCODE.getValue()); memberAccountMoneyChange.setType(MemberAccountMoneyChange.TYPE_WALLET_AGENT); memberAccountMoneyChangeDao.insert(memberAccountMoneyChange); /** * 更新领取记录表 */ activityReceiveRecord.setReceiveCoinAmount(amount); activityReceiveRecord.setReceiveState(ActivityReceiveRecord.RECEIVESTATE_ONE); activityReceiveRecord.setReceiveTime(new Date()); activityReceiveRecord.setAmcId(memberAccountMoneyChange.getId()); activityReceiveRecordDao.updateById(activityReceiveRecord); /** * 更新币币账户 */ MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, MemberWalletCoinEnum.WALLETCOINCODE.getValue()); BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance(); BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance(); memberWalletCoinEntity.setAvailableBalance(availableBalance.add(amount)); memberWalletCoinEntity.setTotalBalance(totalBalance.add(amount)); memberWalletCoinDao.updateById(memberWalletCoinEntity); return Result.ok(MessageSourceUtils.getString("activity_service_0006")); } }