xiaoyong931011
2021-03-19 31ba782e2e3f82a65bdf6cb1a2d6f0fba73f312d
src/main/java/com/xcong/excoin/modules/activity/service/impl/ActivityServiceImpl.java
@@ -1,17 +1,46 @@
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
@@ -26,11 +55,202 @@
    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 getActivityMainList() {
      // TODO Auto-generated method stub
      return null;
   public Result getActivityMain() {
      //登录验证
        //LoginUserUtils.getAppLoginUser().getId();
        ActivityMainVo activityMainVo = new ActivityMainVo();
        //活动图片
        QueryWrapper<PlatformBannerEntity> 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<ActivityMain> queryWrappers = new QueryWrapper<>();
         queryWrappers.eq("banner_id",platformBannerEntity.getId());
         ActivityMain activityMain = activityMainDao.selectOne(queryWrappers);
         if(ObjectUtil.isNotEmpty(activityMain)) {
            activityMainVo.setId(activityMain.getId());
         }
      }
        return Result.ok(activityMainVo);
   }
   @Override
   public Result getActivityMainDetail(long id) {
      //登录验证
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        ActivityMainDetailVo activityMainDetailVo = new ActivityMainDetailVo();
        /**
        * 头部信息
        */
        QueryWrapper<ActivityMemberDetail> 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<ActivityReceiveRecordVo> 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();
        //验证是否实名认证
        MemberEntity memberEntity = memberDao.selectById(memberId);
        Integer certifyStatus = memberEntity.getCertifyStatus();
        if(MemberEntity.CERTIFY_STATUS_Y != certifyStatus) {
           return Result.fail(MessageSourceUtils.getString("activity_service_0001"));
        }
        //验证领取记录是否失效
        QueryWrapper<ActivityReceiveRecord> 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) {
              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);
        //判断是否满足领取条件
        if(ActivitySub.CODE_ONE != 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<ActivityMemberDetail> 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_COIN);
        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"));
   }
}