From 0f4df6c351d87054ded6bd54f0c6b9f6253ea56f Mon Sep 17 00:00:00 2001 From: zainali5120 <512061637@qq.com> Date: Sun, 14 Mar 2021 20:42:51 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/whole_new' into whole_new --- src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java | 456 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 362 insertions(+), 94 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java index de44524..18d649c 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -11,9 +12,12 @@ import javax.validation.Valid; import com.xcong.excoin.modules.documentary.common.NoticeConstant; +import com.xcong.excoin.modules.member.entity.MemberSettingEntity; +import com.xcong.excoin.modules.member.parameter.vo.MemberMessageReminderVo; import com.xcong.excoin.utils.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -37,10 +41,12 @@ import com.xcong.excoin.modules.documentary.dao.FollowTraderLabelDao; import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitDetailDao; import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitInfoDao; +import com.xcong.excoin.modules.documentary.dto.BeTraderDto; import com.xcong.excoin.modules.documentary.dto.CancelDocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.dto.DocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.dto.FollowFollowerNoticeDto; import com.xcong.excoin.modules.documentary.dto.FollowRecordsDto; +import com.xcong.excoin.modules.documentary.dto.FollowTraderProfitInfoDto; import com.xcong.excoin.modules.documentary.dto.HistoryOrderRecordsDto; import com.xcong.excoin.modules.documentary.dto.MyFollowOrderDto; import com.xcong.excoin.modules.documentary.dto.MyFollowTraderInfoDto; @@ -57,8 +63,10 @@ import com.xcong.excoin.modules.documentary.entity.FollowTraderLabelEntity; import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; import com.xcong.excoin.modules.documentary.service.DocumentaryService; +import com.xcong.excoin.modules.documentary.vo.BeTraderConditionVo; import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderInfoVo; import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderSetInfoVo; +import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderSetStateVo; import com.xcong.excoin.modules.documentary.vo.FollowFollowerNoticeVo; import com.xcong.excoin.modules.documentary.vo.FollowInfoVo; import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo; @@ -76,6 +84,7 @@ import com.xcong.excoin.modules.documentary.vo.TraderStatusVo; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.dao.MemberLevelRateDao; +import com.xcong.excoin.modules.member.dao.MemberSettingDao; import com.xcong.excoin.modules.member.dao.MemberWalletContractDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.entity.MemberLevelRateEntity; @@ -124,6 +133,8 @@ private FollowFollowerNoticeDao followFollowerNoticeDao; @Resource private FollowTraderLabelDao followTraderLabelDao; + @Resource + private MemberSettingDao memberSettingDao; @Override @@ -143,10 +154,24 @@ } @Override - public Result getFollowTraderProfitInfo(@Valid RecordsPageDto recordsPageDto) { - + public Result getFollowTraderProfitInfo(@Valid FollowTraderProfitInfoDto recordsPageDto) { + + int type = recordsPageDto.getType(); Page<FollowTraderProfitInfoVo> page = new Page<>(recordsPageDto.getPageNum(), recordsPageDto.getPageSize()); FollowTraderProfitInfoEntity followTraderProfitInfoEntity = new FollowTraderProfitInfoEntity(); + if(FollowTraderInfoEntity.IS_SETFRIST_Y.equals(type)) { + followTraderProfitInfoEntity.setType(type); + }else { + String nicknameDto = recordsPageDto.getNickname(); + followTraderProfitInfoEntity.setNickname(nicknameDto); + int totalProfitRatioSc = recordsPageDto.getTotalProfitRatioSc(); + followTraderProfitInfoEntity.setTotalProfitRatioSc(totalProfitRatioSc); + int totalFollowerCntSc = recordsPageDto.getTotalFollowerCntSc(); + followTraderProfitInfoEntity.setTotalFollowerCntSc(totalFollowerCntSc); + int winRateSc = recordsPageDto.getWinRateSc(); + followTraderProfitInfoEntity.setWinRateSc(winRateSc); + } + IPage<FollowTraderProfitInfoVo> followTraderProfitInfoList = followTraderProfitInfoDao.selectFollowTraderProfitInfoEntity(page, followTraderProfitInfoEntity); List<FollowTraderProfitInfoVo> followTraderProfitInfoVoList = followTraderProfitInfoList.getRecords(); @@ -162,9 +187,27 @@ }else { FollowTraderProfitInfoVo.setDocumentaryType(2); } + } Long traderId = FollowTraderProfitInfoVo.getTraderId(); FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectFollowTraderInfoEntityBytreaderId(traderId); + + //获取当前跟单人数 + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("trader_id", traderId); + List<FollowFollowerSettingEntity> selectByMap = followFollowerSettingDao.selectByMap(columnMap); + if(CollUtil.isNotEmpty(selectByMap)) { + Integer followNum = followTraderInfoEntity.getFollowNum(); + int size = selectByMap.size(); + if(followNum > size) { + FollowTraderProfitInfoVo.setIsActualAll(2); + }else { + FollowTraderProfitInfoVo.setIsActualAll(1); + } + }else { + FollowTraderProfitInfoVo.setIsActualAll(2); + } + String avatar = followTraderInfoEntity.getAvatar(); FollowTraderProfitInfoVo.setAvatar(avatar); String nickname = followTraderInfoEntity.getNickname(); @@ -221,7 +264,8 @@ historyOrderRecordsVo.setClosingPrice(closingPrice); BigDecimal openingPrice = historyOrderRecordsVo.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN); historyOrderRecordsVo.setOpeningPrice(openingPrice); - } + historyOrderRecordsVo.setClosingTimeStamp(historyOrderRecordsVo.getClosingTime().getTime()); + } } return Result.ok(historyOrderRecordsVoList); } @@ -273,7 +317,43 @@ }else { followInfoVo.setNickname(phone); } - + + List<ContractHoldOrderEntity> myFollowOrder = followFollowerProfitDao.getFollowOrderNowRecords(memberId); + + BigDecimal totalBondAmount = BigDecimal.ZERO; + BigDecimal profitOrLess = BigDecimal.ZERO; + if (CollUtil.isNotEmpty(myFollowOrder)) { + for(ContractHoldOrderEntity contractHoldOrderEntity : myFollowOrder) { + BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol()))); + BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(contractHoldOrderEntity.getSymbol()); + + // 盈亏 + BigDecimal rewardRatio = BigDecimal.ZERO; + // 开多 + if (contractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) { + // (最新价-开仓价)*规格*张数 + rewardRatio = newPrice.subtract(contractHoldOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt())); + // 开空 + } else { + // (开仓价-最新价)*规格*张数 + rewardRatio = contractHoldOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt())); + } + + if (member.getIsProfit() == MemberEntity.IS_PROFIT_Y) { + PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting(); + if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) { + rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam())); + } + } + + profitOrLess = profitOrLess.add(rewardRatio).setScale(2, BigDecimal.ROUND_DOWN); + totalBondAmount = totalBondAmount.add(contractHoldOrderEntity.getBondAmount()).setScale(2, BigDecimal.ROUND_DOWN); + } + } + + followInfoVo.setTotalAmount(totalBondAmount); + followInfoVo.setTotalProfitOrLess(profitOrLess); + BigDecimal totalPrincipals = BigDecimal.ZERO; BigDecimal totalProfits = BigDecimal.ZERO; Map<String, Object> columnMap = new HashMap<>(); @@ -308,38 +388,41 @@ MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo(); //获取交易员信息 Long orderId = contractOrderEntity.getId(); - myFollowOrderVo.setOrderId(orderId); FollowFollowerOrderRelationEntity FollowFollowerOrderRelation = followFollowerOrderRelationDao.selectHistoryOneByorderId(orderId); - Long tradeId = FollowFollowerOrderRelation.getTradeId(); - FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId); - String nickname = followTraderInfoEntity.getNickname(); - myFollowOrderVo.setNickname(nickname); - - String symbol = contractOrderEntity.getSymbol(); - myFollowOrderVo.setSymbol(symbol); - int orderType = contractOrderEntity.getOrderType(); - myFollowOrderVo.setOrderType(orderType); - int leverRatio = contractOrderEntity.getLeverRatio(); - myFollowOrderVo.setLeverRatio(leverRatio); - BigDecimal rewardAmount = contractOrderEntity.getRewardAmount().setScale(2, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setRewardAmount(rewardAmount); - BigDecimal rewardRatio = contractOrderEntity.getRewardRatio().setScale(4, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setRewardRatio(rewardRatio); - int symbolCnt = contractOrderEntity.getSymbolCnt(); - myFollowOrderVo.setSymbolCnt(symbolCnt); - BigDecimal bondAmount = contractOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setBondAmount(bondAmount); - BigDecimal openingPrice = contractOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setOpeningPrice(openingPrice); - BigDecimal closingPrice = contractOrderEntity.getClosingPrice().setScale(2, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setClosingPrice(closingPrice); - Date openingTime = contractOrderEntity.getOpeningTime(); - myFollowOrderVo.setOpeningTime(openingTime); - Date closingTime = contractOrderEntity.getClosingTime(); - myFollowOrderVo.setClosingTime(closingTime); - String orderNo = contractOrderEntity.getOrderNo(); - myFollowOrderVo.setOrderNo(orderNo); - myFollowOrderVos.add(myFollowOrderVo); + if(ObjectUtil.isNotEmpty(FollowFollowerOrderRelation)) { + myFollowOrderVo.setOrderId(orderId); + Long tradeId = FollowFollowerOrderRelation.getTradeId(); + FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId); + if(ObjectUtil.isNotEmpty(followTraderInfoEntity)) { + String nickname = followTraderInfoEntity.getNickname(); + myFollowOrderVo.setNickname(nickname); + } + String symbol = contractOrderEntity.getSymbol(); + myFollowOrderVo.setSymbol(symbol); + int orderType = contractOrderEntity.getOrderType(); + myFollowOrderVo.setOrderType(orderType); + int leverRatio = contractOrderEntity.getLeverRatio(); + myFollowOrderVo.setLeverRatio(leverRatio); + BigDecimal rewardAmount = contractOrderEntity.getRewardAmount().setScale(2, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setRewardAmount(rewardAmount); + BigDecimal rewardRatio = contractOrderEntity.getRewardRatio().setScale(4, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setRewardRatio(rewardRatio); + int symbolCnt = contractOrderEntity.getSymbolCnt(); + myFollowOrderVo.setSymbolCnt(symbolCnt); + BigDecimal bondAmount = contractOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setBondAmount(bondAmount); + BigDecimal openingPrice = contractOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setOpeningPrice(openingPrice); + BigDecimal closingPrice = contractOrderEntity.getClosingPrice().setScale(2, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setClosingPrice(closingPrice); + Date openingTime = contractOrderEntity.getOpeningTime(); + myFollowOrderVo.setOpeningTime(openingTime); + Date closingTime = contractOrderEntity.getClosingTime(); + myFollowOrderVo.setClosingTime(closingTime); + String orderNo = contractOrderEntity.getOrderNo(); + myFollowOrderVo.setOrderNo(orderNo); + myFollowOrderVos.add(myFollowOrderVo); + } } } return Result.ok(myFollowOrderVos); @@ -579,8 +662,23 @@ public Result getDocumentaryOrderSetInfo(String tradeId) { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); + log.info("跟单---点击跟单或者编辑---"+memberId+"参数"+tradeId); DocumentaryOrderSetInfoVo documentaryOrderSetInfoVo = new DocumentaryOrderSetInfoVo(); long parseLong = Long.parseLong(tradeId); + + //只能跟随一个人 +// Map<String, Object> columnMaps = new HashMap<>(); +// columnMaps.put("member_id", memberId); +// List<FollowFollowerSettingEntity> followFollowerSettingEntityAllows = followFollowerSettingDao.selectByMap(columnMaps); +// if(CollUtil.isNotEmpty(followFollowerSettingEntityAllows)) { +// for(FollowFollowerSettingEntity followFollowerSettingEntityAllow : followFollowerSettingEntityAllows) { +// Long tradeIdAllow = followFollowerSettingEntityAllow.getTraderId(); +// if(parseLong != tradeIdAllow) { +// return Result.fail(MessageSourceUtils.getString("documentary_service_0015")); +// } +// } +// } + //获取【跟随者设置】数据 FollowFollowerSettingEntity followFollowerSettingEntity = followFollowerSettingDao.selectOneBymemberIdAndTradeId(memberId,parseLong); @@ -607,8 +705,12 @@ documentaryOrderSetInfoVo.setFollowCnt(followCnt); Integer maxFollowCnt = followFollowerSettingEntity.getMaxFollowCnt(); - documentaryOrderSetInfoVo.setMaxFollowCnt(maxFollowCnt); - + if(maxFollowCnt > 0){ + documentaryOrderSetInfoVo.setMaxFollowCnt(maxFollowCnt.toString()); + }else { + documentaryOrderSetInfoVo.setMaxFollowCnt(""); + } + log.info(memberId + "-最大持仓张数-"+maxFollowCnt.toString()); return Result.ok(documentaryOrderSetInfoVo); } @@ -676,16 +778,61 @@ String nickname = followTraderInfoEntity.getNickname(); String declaration = followTraderInfoEntity.getDeclaration(); Integer isAll = followTraderInfoEntity.getIsAll(); + Integer followNum = followTraderInfoEntity.getFollowNum(); + Date entryTime = followTraderInfoEntity.getEntryTime(); + int datePoor = getDatePoor(entryTime, new Date()); + followTraderProfitInfoVo.setEntryDays(datePoor); + //获取当前跟单人数 + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("trade_id", traderId); + columnMap.put("is_follow", FollowFollowerProfitEntity.IS_FOLLOW_Y); + List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitDao.selectByMap(columnMap); + if(CollUtil.isNotEmpty(selectByMap)) { + followTraderProfitInfoVo.setFollowNumNow(selectByMap.size()); + }else { + followTraderProfitInfoVo.setFollowNumNow(0); + } + if(CollUtil.isNotEmpty(selectByMap)) { + if(followNum > selectByMap.size()){ + followTraderProfitInfoVo.setIsActualAll(2); + }else{ + followTraderProfitInfoVo.setIsActualAll(1); + } + }else { + followTraderProfitInfoVo.setIsActualAll(2); + } + followTraderProfitInfoVo.setFollowNum(followNum); followTraderProfitInfoVo.setAvatar(avatar); followTraderProfitInfoVo.setNickname(nickname); followTraderProfitInfoVo.setDeclaration(declaration); followTraderProfitInfoVo.setIsAll(isAll); return Result.ok(followTraderProfitInfoVo); } + + //获取两个时间之间的日期 + private int getDatePoor(Date endDate, Date nowDate) { + Calendar cal = Calendar.getInstance(); + cal.setTime(endDate); + long time1 = cal.getTimeInMillis(); + cal.setTime(nowDate); + long time2 = cal.getTimeInMillis(); + long between_days=(time2-time1)/(1000*3600*24); + int parseInt = Integer.parseInt(String.valueOf(between_days)); + parseInt = parseInt + 1; + return parseInt ; + } @Override @Transactional - public Result beTrader() { + public Result beTrader(@Valid BeTraderDto beTraderDto) { + //头像 + String avatar = beTraderDto.getAvatar(); + //昵称 + String nickname = beTraderDto.getNickname(); + //宣言 + String declaration = beTraderDto.getDeclaration(); + //标签 + String labels = beTraderDto.getLabels(); //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); MemberEntity memberEntity = memberDao.selectById(memberId); @@ -723,14 +870,25 @@ followTraderInfoEntity.setMemberId(memberId); followTraderInfoEntity.setProfitRatio(BigDecimal.valueOf(0.1)); // followTraderInfoEntity.setAvatar(FollowTraderInfoEntity.AVATAR_DEFAULT); - String phone = memberEntity.getPhone(); - String email = memberEntity.getEmail(); - if(StrUtil.isNotEmpty(phone)) { - followTraderInfoEntity.setNickname(phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")); - }else { - followTraderInfoEntity.setNickname(email.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)","$1****$3$4")); +// String phone = memberEntity.getPhone(); +// String email = memberEntity.getEmail(); +// if(StrUtil.isNotEmpty(phone)) { +// followTraderInfoEntity.setNickname(phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")); +// }else { +// followTraderInfoEntity.setNickname(email.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)","$1****$3$4")); +// } + if(StrUtil.isNotEmpty(avatar)) { + followTraderInfoEntity.setAvatar(avatar); } - followTraderInfoEntity.setDeclaration(FollowTraderInfoEntity.DECLARATION_DEFAULT); + followTraderInfoEntity.setNickname(nickname); + followTraderInfoEntity.setNicknameState(FollowTraderInfoEntity.STATE_Y); + if(StrUtil.isEmpty(declaration)) { + followTraderInfoEntity.setDeclaration(FollowTraderInfoEntity.DECLARATION_DEFAULT); + }else { + followTraderInfoEntity.setDeclaration(declaration); + } + followTraderInfoEntity.setLabels(labels); + followTraderInfoEntity.setFollowNum(FollowTraderInfoEntity.FOLLOWNUM_DEFAULT); followTraderInfoEntity.setIsAll(FollowTraderInfoEntity.IS_ALL_N); followTraderInfoEntity.setProfitRatio(BigDecimal.ZERO); followTraderInfoEntity.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_ING); @@ -776,6 +934,8 @@ tradeSetInfoVo.setAvatar(avatar); String nickname = followTraderInfoEntity.getNickname(); tradeSetInfoVo.setNickname(nickname); + Integer nicknameState = followTraderInfoEntity.getNicknameState(); + tradeSetInfoVo.setNicknameState(nicknameState); String declaration = followTraderInfoEntity.getDeclaration(); tradeSetInfoVo.setDeclaration(declaration); Integer isOpen = followTraderInfoEntity.getIsOpen(); @@ -810,6 +970,14 @@ String declaration = updateTradeSetInfoDto.getDeclaration(); int isOpen = updateTradeSetInfoDto.getIsOpen(); String labels = updateTradeSetInfoDto.getLabels(); + Integer nicknameState = followTraderInfoEntity.getNicknameState(); + if(FollowTraderInfoEntity.STATE_Y == nicknameState && !nickname.equals(followTraderInfoEntity.getNickname())) { + return Result.ok(MessageSourceUtils.getString("member_service_0099")); + } + if(!nickname.equals(followTraderInfoEntity.getNickname())) { + followTraderInfoEntity.setNickname(nickname); + followTraderInfoEntity.setNicknameState(FollowTraderInfoEntity.STATE_Y); + } followTraderInfoEntity.setLabels(labels); followTraderInfoEntity.setAvatar(avatar); followTraderInfoEntity.setNickname(nickname); @@ -826,7 +994,22 @@ TradeProfitInfoVo tradeProfitInfoVo = new TradeProfitInfoVo(); //获取【交易员信息表】数据 FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectTraderInfoByMemberId(memberId); + Date entryTime = followTraderInfoEntity.getEntryTime(); + int datePoor = getDatePoor(entryTime, new Date()); + tradeProfitInfoVo.setEntryDays(datePoor); if(ObjectUtil.isNotEmpty(followTraderInfoEntity)) { + Integer followNum = followTraderInfoEntity.getFollowNum(); + //获取当前跟单人数 + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("trade_id", followTraderInfoEntity.getId()); + columnMap.put("is_follow", FollowFollowerProfitEntity.IS_FOLLOW_Y); + List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitDao.selectByMap(columnMap); + if(CollUtil.isNotEmpty(selectByMap)) { + tradeProfitInfoVo.setFollowNumNow(selectByMap.size()); + }else { + tradeProfitInfoVo.setFollowNumNow(0); + } + tradeProfitInfoVo.setFollowNum(followNum); String avatar = followTraderInfoEntity.getAvatar(); tradeProfitInfoVo.setAvatar(avatar); String nickname = followTraderInfoEntity.getNickname(); @@ -870,58 +1053,59 @@ TradeOrderInfoVo myFollowOrderVo = new TradeOrderInfoVo(); //获取交易员信息 Long orderId = contractHoldOrderEntity.getId(); - myFollowOrderVo.setOrderId(orderId); FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectTraderInfoByMemberId(memberId); - String nickname = followTraderInfoEntity.getNickname(); - myFollowOrderVo.setNickname(nickname); - - String symbol = contractHoldOrderEntity.getSymbol(); - myFollowOrderVo.setSymbol(symbol); - int orderType = contractHoldOrderEntity.getOpeningType(); - myFollowOrderVo.setOrderType(orderType); - int leverRatio = contractHoldOrderEntity.getLeverRatio(); - myFollowOrderVo.setLeverRatio(leverRatio); - int symbolCnt = contractHoldOrderEntity.getSymbolCnt(); - myFollowOrderVo.setSymbolCnt(symbolCnt); - BigDecimal bondAmount = contractHoldOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setBondAmount(bondAmount); - BigDecimal openingPrice = contractHoldOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setOpeningPrice(openingPrice); - String orderNo = contractHoldOrderEntity.getOrderNo(); - myFollowOrderVo.setOrderNo(orderNo); - Date openingTime = contractHoldOrderEntity.getCreateTime(); - myFollowOrderVo.setOpeningTime(openingTime); - - // 获取最新价 - BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol()))); - myFollowOrderVo.setNewPrice(newPrice); - - BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(contractHoldOrderEntity.getSymbol()); - // 盈亏 - BigDecimal rewardRatio = BigDecimal.ZERO; - // 开多 - if (contractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) { - // (最新价-开仓价)*规格*张数 - rewardRatio = newPrice.subtract(contractHoldOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt())); - // 开空 - } else { - // (开仓价-最新价)*规格*张数 - rewardRatio = contractHoldOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt())); - } - - if (member.getIsProfit() == MemberEntity.IS_PROFIT_Y) { - PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting(); - if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) { - rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam())); + if(ObjectUtil.isNotEmpty(followTraderInfoEntity)) { + myFollowOrderVo.setOrderId(orderId); + String nickname = followTraderInfoEntity.getNickname(); + myFollowOrderVo.setNickname(nickname); + String symbol = contractHoldOrderEntity.getSymbol(); + myFollowOrderVo.setSymbol(symbol); + int orderType = contractHoldOrderEntity.getOpeningType(); + myFollowOrderVo.setOrderType(orderType); + int leverRatio = contractHoldOrderEntity.getLeverRatio(); + myFollowOrderVo.setLeverRatio(leverRatio); + int symbolCnt = contractHoldOrderEntity.getSymbolCnt(); + myFollowOrderVo.setSymbolCnt(symbolCnt); + BigDecimal bondAmount = contractHoldOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setBondAmount(bondAmount); + BigDecimal openingPrice = contractHoldOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setOpeningPrice(openingPrice); + String orderNo = contractHoldOrderEntity.getOrderNo(); + myFollowOrderVo.setOrderNo(orderNo); + Date openingTime = contractHoldOrderEntity.getCreateTime(); + myFollowOrderVo.setOpeningTime(openingTime); + + // 获取最新价 + BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol()))); + myFollowOrderVo.setNewPrice(newPrice); + + BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(contractHoldOrderEntity.getSymbol()); + // 盈亏 + BigDecimal rewardRatio = BigDecimal.ZERO; + // 开多 + if (contractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) { + // (最新价-开仓价)*规格*张数 + rewardRatio = newPrice.subtract(contractHoldOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt())); + // 开空 + } else { + // (开仓价-最新价)*规格*张数 + rewardRatio = contractHoldOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt())); } + + if (member.getIsProfit() == MemberEntity.IS_PROFIT_Y) { + PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting(); + if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) { + rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam())); + } + } + myFollowOrderVo.setRewardAmount(rewardRatio.setScale(2, BigDecimal.ROUND_DOWN)); + + // 回报率 + BigDecimal returnRate = rewardRatio.divide(contractHoldOrderEntity.getBondAmount().subtract(contractHoldOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setRewardRatio(returnRate.setScale(4, BigDecimal.ROUND_DOWN)); + + myFollowOrderVos.add(myFollowOrderVo); } - myFollowOrderVo.setRewardAmount(rewardRatio.setScale(2, BigDecimal.ROUND_DOWN)); - - // 回报率 - BigDecimal returnRate = rewardRatio.divide(contractHoldOrderEntity.getBondAmount().subtract(contractHoldOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setRewardRatio(returnRate.setScale(4, BigDecimal.ROUND_DOWN)); - - myFollowOrderVos.add(myFollowOrderVo); } } @@ -1054,6 +1238,18 @@ long id = outFollowInfoDto.getId(); //获取【跟随者收益】 FollowFollowerProfitEntity followFollowerProfitEntity = followFollowerProfitDao.selectById(id); + + //当前有跟单合约不允许移除 + //获取【跟随者-订单关联表】 + Map<String, Object> selectColumnMap = new HashMap<>(); + selectColumnMap.put("member_id", followFollowerProfitEntity.getMemberId()); + selectColumnMap.put("trade_member_id", memberId); + selectColumnMap.put("order_type", FollowFollowerOrderRelationEntity.ORDER_TYPE_HOLD); + List<FollowFollowerOrderRelationEntity> followFollowerOrderRelationEntitys = followFollowerOrderRelationDao.selectByMap(selectColumnMap); + if(CollUtil.isNotEmpty(followFollowerOrderRelationEntitys)) { + return Result.fail(MessageSourceUtils.getString("documentary_service_0019")); + } + followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_N); followFollowerProfitDao.updateById(followFollowerProfitEntity); @@ -1079,6 +1275,7 @@ } @Override + @Transactional public Result getFollowFollowerNoticeList(FollowFollowerNoticeDto followFollowerNoticeDto) { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); @@ -1100,6 +1297,12 @@ followFollowerNoticeVo.setCreateTime(createTime); arrayList.add(followFollowerNoticeVo); } + } + MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(memberId); + if(ObjectUtil.isNotEmpty(memberSettingEntity)) { + log.info(memberId + "的消息提醒状态变更"); + memberSettingEntity.setMessageReminder(0); + memberSettingDao.updateById(memberSettingEntity); } return Result.ok(arrayList); @@ -1125,6 +1328,71 @@ } return Result.ok(arrayList); } + + @Override + public Result beTraderCondition() { + String type = "apply_trader_rule"; + List<BeTraderConditionVo> beTraderConditionVos = followTraderInfoDao.selectBeTraderCondition(type); + return Result.ok(beTraderConditionVos); + } + + @Override + public Result getDocumentaryOrderSetState(String tradeId) { + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + long parseLong = Long.parseLong(tradeId); + //交易员判断 + Map<String, Object> columnMapTrader = new HashMap<>(); + columnMapTrader.put("member_id", memberId); + List<FollowTraderInfoEntity> followTraderInfoEntitys = followTraderInfoDao.selectByMap(columnMapTrader); + + //只能跟随一个人 + Map<String, Object> columnMaps = new HashMap<>(); + columnMaps.put("member_id", memberId); + List<FollowFollowerSettingEntity> followFollowerSettingEntityAllows = followFollowerSettingDao.selectByMap(columnMaps); + + //没有交易员审核记录 + if(CollUtil.isEmpty(followTraderInfoEntitys)) { + //没有跟随记录 + if(CollUtil.isEmpty(followFollowerSettingEntityAllows)) { + return Result.ok("获取成功"); + }else { + //有跟随记录 + if(followFollowerSettingEntityAllows.size() == 1) { + Long tradeIdAllow = followFollowerSettingEntityAllows.get(0).getTraderId(); + if(parseLong == tradeIdAllow) { + return Result.ok("获取成功"); + }else{ + return Result.fail("最多跟单一人"); + } + }else{ + return Result.fail("已经跟随多人,请修改"); + } + } + }else{ + Integer verifyStatus = followTraderInfoEntitys.get(0).getVerifyStatus(); + if(FollowTraderInfoEntity.VERIFYSTATUS_N == verifyStatus) { + if(CollUtil.isEmpty(followFollowerSettingEntityAllows)) { + return Result.ok("获取成功"); + }else { + if(followFollowerSettingEntityAllows.size() == 1) { + Long tradeIdAllow = followFollowerSettingEntityAllows.get(0).getTraderId(); + if(parseLong == tradeIdAllow) { + return Result.ok("获取成功"); + }else{ + return Result.fail("最多跟单一人"); + } + }else{ + return Result.fail("已经跟随多人,请修改"); + } + } + }else if(FollowTraderInfoEntity.VERIFYSTATUS_Y == verifyStatus){ + return Result.fail("交易员不允许跟单"); + }else { + return Result.fail("交易员审核中不允许跟单"); + } + } + } -- Gitblit v1.9.1