|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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)) { | 
|---|
|  |  |  | //更新【会员信息表】数据 | 
|---|
|  |  |  | 
|---|
|  |  |  | memberMapper.updateById(memberEntity); | 
|---|
|  |  |  | //更新【交易员信息表】数据 | 
|---|
|  |  |  | selectById.setProfitRatio(profitRatio); | 
|---|
|  |  |  | selectById.setEntryTime(new Date()); | 
|---|
|  |  |  | selectById.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_Y); | 
|---|
|  |  |  | followTraderInfoMapper.updateById(selectById); | 
|---|
|  |  |  | //新增【交易员收益信息 】数据 | 
|---|
|  |  |  | 
|---|
|  |  |  | redisUtils.set("app_" + token, JSONObject.toJSONString(memberEntity), 36000); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | //更新【交易员信息表】数据 | 
|---|
|  |  |  | selectById.setEntryTime(new Date()); | 
|---|
|  |  |  | selectById.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_N); | 
|---|
|  |  |  | followTraderInfoMapper.updateById(selectById); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public IPage<FollowTraderProfitInfoEntity> findTraderDataInfoInfoInPage(FollowTraderProfitInfoEntity followTraderProfitInfoEntity, QueryRequest request) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public FebsResponse modifyProfitRatio(@Valid ModifyProfitRatioDto modifyProfitRatioDto) { | 
|---|
|  |  |  | Long id = modifyProfitRatioDto.getId(); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_Y); | 
|---|
|  |  |  | 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) { | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|