xiaoyong931011
2021-07-05 cf200a1f92c01ba22c326c49391f748ffb006910
src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java
@@ -1,20 +1,38 @@
package com.xcong.excoin.modules.documentary.service.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import com.alibaba.fastjson.JSONObject;
import com.xcong.excoin.common.utils.RedisUtils;
import com.xcong.excoin.modules.documentary.vo.SeeFollowerInfoVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.excoin.common.entity.FebsResponse;
import com.xcong.excoin.common.entity.QueryRequest;
import com.xcong.excoin.modules.documentary.dto.FollowTraderInfoDto;
import com.xcong.excoin.modules.documentary.dto.ModifyProfitRatioDto;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity;
import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity;
import com.xcong.excoin.modules.documentary.entity.FollowTraderLabelEntity;
import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity;
import com.xcong.excoin.modules.documentary.mapper.FollowFollowerProfitMapper;
import com.xcong.excoin.modules.documentary.mapper.FollowTraderInfoMapper;
import com.xcong.excoin.modules.documentary.mapper.FollowTraderLabelMapper;
import com.xcong.excoin.modules.documentary.mapper.FollowTraderProfitInfoMapper;
import com.xcong.excoin.modules.documentary.service.DocumentaryService;
import com.xcong.excoin.modules.member.entity.MemberAuthenticationEntity;
import com.xcong.excoin.modules.member.entity.MemberEntity;
@@ -22,6 +40,8 @@
import com.xcong.excoin.modules.member.mapper.MemberMapper;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -32,9 +52,17 @@
   
   private final FollowTraderInfoMapper followTraderInfoMapper;
   
   private final FollowFollowerProfitMapper followFollowerProfitMapper;
   private final FollowTraderLabelMapper followTraderLabelMapper;
   private final MemberAuthenticationMapper memberAuthenticationMapper;
   
   private final MemberMapper memberMapper;
   private final FollowTraderProfitInfoMapper followTraderProfitInfoMapper;
   private final RedisUtils redisUtils;
   
   @Override
   public IPage<FollowTraderInfoEntity> findTraderListInPage(FollowTraderInfoEntity followTraderInfoEntity,
@@ -44,6 +72,11 @@
      List<FollowTraderInfoEntity> records = followTraderInfoEntitys.getRecords();
      if(CollUtil.isNotEmpty(records)) {
         for(FollowTraderInfoEntity followTraderInfo : records) {
            //获取当前跟单人数
            Long traderId = followTraderInfo.getId();
            String followNowNumString = followTraderInfoMapper.selectFollowNowBytraderId(traderId);
            followTraderInfo.setFollowNumNow(followNowNumString);
            Long memberId = followTraderInfo.getMemberId();
            Map<String, Object> columnMap = new HashMap<>();
            columnMap.put("member_id", memberId);
@@ -98,9 +131,301 @@
   }
   @Override
   public FebsResponse traderConfirm(@Valid FollowTraderInfoEntity followTraderInfoEntity) {
      // TODO Auto-generated method stub
      return null;
   @Transactional
   public FebsResponse traderConfirm(@Valid FollowTraderInfoDto followTraderInfoDto) {
      Long id = followTraderInfoDto.getId();
      FollowTraderInfoEntity selectById = followTraderInfoMapper.selectById(id);
      if(ObjectUtil.isEmpty(selectById)) {
         return new FebsResponse().fail().message("交易员信息不存在");
      }
      BigDecimal profitRatio = BigDecimal.ZERO;
      String profitRatioStr = followTraderInfoDto.getProfitRatio();
      if(StrUtil.isNotEmpty(profitRatioStr)) {
         profitRatio = new BigDecimal(profitRatioStr);
      }
      if(profitRatio.compareTo(BigDecimal.ZERO) < 0 || profitRatio.compareTo(BigDecimal.ONE) >= 0){
         return new FebsResponse().fail().message("利润率设置规则:只允许0到1之间的小数");
      }
      String isok = followTraderInfoDto.getIsok();
      if("1".equals(isok)) {
         //更新【会员信息表】数据
         Long memberId = selectById.getMemberId();
         MemberEntity memberEntity = memberMapper.selectById(memberId);
         if(ObjectUtil.isEmpty(memberEntity)) {
            return new FebsResponse().fail().message("会员信息不存在");
         }
         memberEntity.setIsTrader(1);
         memberMapper.updateById(memberEntity);
         //更新【交易员信息表】数据
         selectById.setProfitRatio(profitRatio);
         selectById.setEntryTime(new Date());
         selectById.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_Y);
         followTraderInfoMapper.updateById(selectById);
         //新增【交易员收益信息 】数据
         FollowTraderProfitInfoEntity followTraderProfitInfoEntity = new FollowTraderProfitInfoEntity();
         followTraderProfitInfoEntity.setCreateBy("system");
         followTraderProfitInfoEntity.setCreateTime(new Date());
         followTraderProfitInfoEntity.setUpdateBy("system");
         followTraderProfitInfoEntity.setUpdateTime(new Date());
         followTraderProfitInfoEntity.setMemberId(memberId);
         followTraderProfitInfoEntity.setTraderId(selectById.getId());
         followTraderProfitInfoEntity.setTotalProfitRatio(BigDecimal.ZERO);
         followTraderProfitInfoEntity.setTotalProfit(BigDecimal.ZERO);
         followTraderProfitInfoEntity.setFollowerTotalProfit(BigDecimal.ZERO);
         followTraderProfitInfoEntity.setWinRate(BigDecimal.ZERO);
         followTraderProfitInfoEntity.setTotalFollowerCnt(BigDecimal.ZERO);
         followTraderProfitInfoEntity.setTotalOrderCnt(BigDecimal.ZERO);
         followTraderProfitInfoMapper.insert(followTraderProfitInfoEntity);
         String token = redisUtils.getString("app_" + memberEntity.getId());
         redisUtils.set("app_" + token, JSONObject.toJSONString(memberEntity), 36000);
      }else {
         //更新【交易员信息表】数据
         selectById.setEntryTime(new Date());
         selectById.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_N);
         followTraderInfoMapper.updateById(selectById);
      }
      return new FebsResponse().success();
   }
   @Override
   @Transactional
   public FebsResponse traderGetOut(@NotNull(message = "{required}") Long id) {
      FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(id);
      if(ObjectUtil.isEmpty(followTraderInfoEntity)) {
         return new FebsResponse().fail().message("交易员信息不存在");
      }
      Long memberId = followTraderInfoEntity.getMemberId();
      Map<String, Object> columnMap = new HashMap<>();
      columnMap.put("trade_member_id", memberId);
      List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitMapper.selectByMap(columnMap);
      if(CollUtil.isNotEmpty(selectByMap)) {
         for(FollowFollowerProfitEntity FollowFollowerProfitEntity : selectByMap ) {
            FollowFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_N);
            followFollowerProfitMapper.updateById(FollowFollowerProfitEntity);
         }
      }
      followTraderInfoEntity.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_N);
      followTraderInfoMapper.updateById(followTraderInfoEntity);
      MemberEntity memberEntity = memberMapper.selectById(memberId);
      memberEntity.setIsTrader(2);
      memberMapper.updateById(memberEntity);
      return new FebsResponse().success();
   }
   @Override
   @Transactional
   public FebsResponse traderGetFull(@NotNull(message = "{required}") Long id) {
      FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(id);
      if(ObjectUtil.isEmpty(followTraderInfoEntity)) {
         return new FebsResponse().fail().message("交易员信息不存在");
      }
      followTraderInfoEntity.setIsAll(1);
      followTraderInfoMapper.updateById(followTraderInfoEntity);
      return new FebsResponse().success();
   }
   @Override
   public IPage<FollowTraderLabelEntity> traderLabelList(FollowTraderLabelEntity followTraderLabelEntity,
         QueryRequest request) {
      Page<FollowTraderLabelEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
      IPage<FollowTraderLabelEntity> followTraderLabelEntitys = followTraderLabelMapper.findFollowTraderLabelEntitysInPage(page, followTraderLabelEntity);
      return followTraderLabelEntitys;
   }
   @Override
   public FebsResponse traderLabelDelete(@NotNull(message = "{required}") Long id) {
      followTraderLabelMapper.deleteById(id);
      return new FebsResponse().success();
   }
   @Override
   public void followLabelSetAdd(@Valid FollowTraderLabelEntity followTraderLabelEntity) {
      followTraderLabelMapper.insert(followTraderLabelEntity);
   }
   @Override
   public void followLabelSetUpdate(@Valid FollowTraderLabelEntity followTraderLabelEntity) {
      followTraderLabelMapper.updateById(followTraderLabelEntity);
   }
   @Override
   @Transactional
   public FebsResponse modifyProfitRatio(@Valid ModifyProfitRatioDto modifyProfitRatioDto) {
      Long id = modifyProfitRatioDto.getId();
      FollowTraderInfoEntity selectById = followTraderInfoMapper.selectById(id);
      if(ObjectUtil.isEmpty(selectById)) {
         return new FebsResponse().fail().message("交易员信息不存在");
      }
      BigDecimal profitRatio = BigDecimal.ZERO;
      String profitRatioStr = modifyProfitRatioDto.getProfitRatio();
      if(StrUtil.isNotEmpty(profitRatioStr)) {
         profitRatio = new BigDecimal(profitRatioStr);
      }
      if(profitRatio.compareTo(BigDecimal.ZERO) < 0 || profitRatio.compareTo(BigDecimal.ONE) >= 0){
         return new FebsResponse().fail().message("利润率设置规则:只允许0到1之间的小数");
      }
      //最大跟随人数
      boolean matches = isMatches(modifyProfitRatioDto.getFollowNum());
      if(!matches) {
         return new FebsResponse().fail().message("最大跟随人数只能输入正整数");
      }
      Integer followNum = Integer.parseInt(modifyProfitRatioDto.getFollowNum());
      if(ObjectUtil.isEmpty(followNum) || followNum == 0) {
         return new FebsResponse().fail().message("最大跟随人数不能为0");
      }
      String followNumNow = followTraderInfoMapper.selectFollowNowBytraderId(id);
      int parseInt = Integer.parseInt(followNumNow);
      if(parseInt > followNum){
         return new FebsResponse().fail().message("请填写大于当前跟随人数"+parseInt+"的整数");
      }
      //更新【交易员信息表】数据
      selectById.setProfitRatio(profitRatio);
      selectById.setFollowNum(followNum);
      followTraderInfoMapper.updateById(selectById);
      return new FebsResponse().success();
   }
   public boolean isMatches(String bot){
       boolean flag=false;
       try{
        String regex="^[1-9]+[0-9]*$";
        //^[1-9]+\\d*$
        Pattern p=Pattern.compile(regex);
        Matcher m=p.matcher(bot);
        if(m.find()){
         System.out.println("successss");
        return true;
        }else{
        System.out.println("falsss");
        }
       }catch(Exception e){
        e.printStackTrace();
       }
       return flag;
      }
   @Override
   public FebsResponse traderGetOn(@NotNull(message = "{required}") Long id) {
      FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(id);
      if(ObjectUtil.isEmpty(followTraderInfoEntity)) {
         return new FebsResponse().fail().message("交易员信息不存在");
      }
      followTraderInfoEntity.setIsSetFrist(FollowTraderInfoEntity.IS_SETFRIST_Y);
      followTraderInfoMapper.updateById(followTraderInfoEntity);
      return new FebsResponse().success();
   }
   @Override
   public FebsResponse traderGetOutFrist(@NotNull(message = "{required}") Long id) {
      FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(id);
      if(ObjectUtil.isEmpty(followTraderInfoEntity)) {
         return new FebsResponse().fail().message("交易员信息不存在");
      }
      followTraderInfoEntity.setIsSetFrist(FollowTraderInfoEntity.IS_SETFRIST_N);
      followTraderInfoMapper.updateById(followTraderInfoEntity);
      return new FebsResponse().success();
   }
   @Override
   public IPage<FollowTraderProfitInfoEntity> findTraderProfitInfoInfoInPage(
         FollowTraderProfitInfoEntity followTraderProfitInfoEntity, QueryRequest request) {
      Page<FollowTraderProfitInfoEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
      IPage<FollowTraderProfitInfoEntity> FollowTraderProfitInfoEntitys = followTraderProfitInfoMapper.findTraderProfitInfoInfoInPage(page, followTraderProfitInfoEntity);
      List<FollowTraderProfitInfoEntity> records = FollowTraderProfitInfoEntitys.getRecords();
      if(CollUtil.isNotEmpty(records)) {
         for(FollowTraderProfitInfoEntity followTraderProfitInfo : records) {
            Long traderId = followTraderProfitInfo.getTraderId();
            FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(traderId);
            //利润率
            BigDecimal profitRatio = BigDecimal.ZERO;
            //总返利
            BigDecimal profitRatioTotal = BigDecimal.ZERO;
            if(ObjectUtil.isNotEmpty(followTraderInfoEntity)) {
               profitRatio = followTraderInfoEntity.getProfitRatio();
               profitRatioTotal = new BigDecimal(followTraderInfoMapper.selectProfitRatioTotal(followTraderInfoEntity.getMemberId())).setScale(2, RoundingMode.HALF_UP);
            }
            followTraderProfitInfo.setProfitRatio(profitRatio);
            followTraderProfitInfo.setProfitRatioTotal(profitRatioTotal);
            Long memberId = followTraderProfitInfo.getMemberId();
            Map<String, Object> columnMap = new HashMap<>();
            columnMap.put("member_id", memberId);
            List<MemberAuthenticationEntity> selectByMap = memberAuthenticationMapper.selectByMap(columnMap );
            if(CollUtil.isNotEmpty(selectByMap)) {
               MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0);
               String firstName = memberAuthenticationEntity.getFirstName();
               String secondName = memberAuthenticationEntity.getSecondName();
               String realName = firstName + secondName;
               followTraderProfitInfo.setRealName(realName);
            }
         }
      }
      return FollowTraderProfitInfoEntitys;
   }
   @Override
   public IPage<SeeFollowerInfoVo> findlistSeeFollowerInfo(QueryRequest request, FollowTraderProfitInfoEntity followTraderProfitInfoEntity) {
      Long id = followTraderProfitInfoEntity.getId();
      if(ObjectUtil.isEmpty(id)) {
         return null;
      }
      //获取交易员信息
      FollowTraderProfitInfoEntity FollowTraderProfitInfo = followTraderProfitInfoMapper.selectById(id);
      if(ObjectUtil.isEmpty(FollowTraderProfitInfo)) {
         return null;
      }
      Long traderId = FollowTraderProfitInfo.getTraderId();
      Long traderMemberId = FollowTraderProfitInfo.getMemberId();
      FollowTraderInfoEntity FollowTraderInfo = followTraderInfoMapper.selectById(traderId);
      if(ObjectUtil.isEmpty(FollowTraderInfo)) {
         return null;
      }
      //获取当前的跟随者
      Page<SeeFollowerInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<SeeFollowerInfoVo> seeFollowerInfoVos = followFollowerProfitMapper.findFollowFollowerProfitInfo(page, FollowTraderInfo);
        List<SeeFollowerInfoVo> records = seeFollowerInfoVos.getRecords();
        if(CollUtil.isNotEmpty(records)) {
           for(SeeFollowerInfoVo seeFollowerInfoVo : records) {
              long memberId = seeFollowerInfoVo.getMemberId();
              MemberEntity memberEntity = memberMapper.selectById(memberId);
              if(ObjectUtil.isNotEmpty(memberEntity)) {
                 String phone = memberEntity.getPhone();
                 String email = memberEntity.getEmail();
                 String inviteId = memberEntity.getInviteId();
                 seeFollowerInfoVo.setPhone(phone);
                 seeFollowerInfoVo.setEmail(email);
                 seeFollowerInfoVo.setInviteId(inviteId);
                 //合约账户总资产
                 String totalString = memberMapper.selectMemberWalletContractByMemberId(memberId);
                 BigDecimal contractTotal = new BigDecimal(totalString);
                 seeFollowerInfoVo.setContractTotal(contractTotal);
                 //总返利
                 String totalProfitStr = followTraderInfoMapper.selectAllProfitByMemberIdAndTraderMemberId(memberId,traderMemberId);
                 BigDecimal totalProfit = new BigDecimal(totalProfitStr);
                 seeFollowerInfoVo.setProfitTotal(totalProfit);
                 Map<String, Object> columnMap = new HashMap<>();
               columnMap.put("member_id", memberId);
               List<MemberAuthenticationEntity> selectByMap = memberAuthenticationMapper.selectByMap(columnMap );
               if(CollUtil.isNotEmpty(selectByMap)) {
                  MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0);
                  String firstName = memberAuthenticationEntity.getFirstName();
                  String secondName = memberAuthenticationEntity.getSecondName();
                  String realName = firstName + secondName;
                  seeFollowerInfoVo.setRealName(realName);
               }
              }
           }
        }
        return seeFollowerInfoVos;
   }
}