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; import com.xcong.excoin.modules.member.mapper.MemberAuthenticationMapper; 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; @Slf4j @Service @RequiredArgsConstructor public class DocumentaryServiceImpl extends ServiceImpl implements DocumentaryService { 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 findTraderListInPage(FollowTraderInfoEntity followTraderInfoEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage followTraderInfoEntitys = followTraderInfoMapper.findTraderListInPage(page, followTraderInfoEntity); List 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 columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List 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; followTraderInfo.setRealName(realName); } } } return followTraderInfoEntitys; } @Override public FollowTraderInfoEntity selectTraderDetailByid(long id) { FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(id); Long memberId = followTraderInfoEntity.getMemberId(); MemberEntity memberEntity = memberMapper.selectById(memberId); String phone = memberEntity.getPhone(); followTraderInfoEntity.setPhone(phone); String email = memberEntity.getEmail(); followTraderInfoEntity.setEmail(email); String inviteId = memberEntity.getInviteId(); followTraderInfoEntity.setInviteId(inviteId); Integer accountType = memberEntity.getAccountType(); followTraderInfoEntity.setAccountType(accountType); //币币账户 String walletNum = memberMapper.selectBBZCForBasicRealDataBymemberId(memberId); followTraderInfoEntity.setWalletNum(walletNum == null ? 0 : Double.parseDouble(walletNum)); //合约账户 String walletCoinNum = memberMapper.selectHYZCForBasicRealDataBymemberId(memberId); followTraderInfoEntity.setWalletCoinNum(walletCoinNum == null ? 0 : Double.parseDouble(walletCoinNum)); //代理账户 String agentNum = memberMapper.selectDLZCForBasicRealDataBymemberId(memberId); followTraderInfoEntity.setAgentNum(agentNum == null ? 0 : Double.parseDouble(agentNum)); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List 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; followTraderInfoEntity.setRealName(realName); } return followTraderInfoEntity; } @Override @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 columnMap = new HashMap<>(); columnMap.put("trade_member_id", memberId); List 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 traderLabelList(FollowTraderLabelEntity followTraderLabelEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage 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 findTraderProfitInfoInfoInPage( FollowTraderProfitInfoEntity followTraderProfitInfoEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage FollowTraderProfitInfoEntitys = followTraderProfitInfoMapper.findTraderProfitInfoInfoInPage(page, followTraderProfitInfoEntity); List 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 columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List 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 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 page = new Page<>(request.getPageNum(), request.getPageSize()); IPage seeFollowerInfoVos = followFollowerProfitMapper.findFollowFollowerProfitInfo(page, FollowTraderInfo); List 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 columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List 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; } }