src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
@@ -3,14 +3,12 @@ import cc.mrbird.febs.common.annotation.EncryptEnable; import cc.mrbird.febs.common.contants.AppContants; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.dapp.dto.ApproveDto; import cc.mrbird.febs.dapp.dto.ConnectDto; import cc.mrbird.febs.dapp.dto.EncryptDto; import cc.mrbird.febs.dapp.dto.SystemDto; import cc.mrbird.febs.dapp.dto.*; import cc.mrbird.febs.dapp.entity.DappMemberEntity; import cc.mrbird.febs.dapp.service.DappMemberService; import cc.mrbird.febs.dapp.service.DappSimulateDataService; import cc.mrbird.febs.dapp.service.DappSystemService; import cc.mrbird.febs.dapp.vo.MallGoodsListVo; import cc.mrbird.febs.dapp.vo.SimulateDataVo; import cc.mrbird.febs.rabbit.producer.ChainProducer; import io.swagger.annotations.Api; @@ -53,6 +51,25 @@ return new FebsResponse().success(); } @ApiOperation(value = "商品列表", notes = "商品列表") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = MallGoodsListVo.class) }) @PostMapping(value = "/findMallGoodsList") public FebsResponse findMallGoodsList(@RequestBody MallGoodsQueryDto queryDto) { return new FebsResponse().success().data(dappMemberService.findMallGoodsListInPage(queryDto)); } @ApiOperation(value = "商品详情", notes = "商品详情") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = MallGoodsListVo.class) }) @GetMapping(value = "/goodsDetails/{id}") public FebsResponse goodsDetails(@PathVariable("id") Long id) { return new FebsResponse().success().data(dappMemberService.findGoodsDetailsById(id)); } // @ApiOperation(value = "头部数据", notes = "头部数据") // @GetMapping(value = "/totalIncome") // public FebsResponse totalIncome() { src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
@@ -123,4 +123,13 @@ @TableField(exist = false) private BigDecimal memberNodeSumPrice; @ApiModelProperty(value = "币余额") @TableField(exist = false) private BigDecimal coinAmount; @ApiModelProperty(value = "赠送积分余额") @TableField(exist = false) private BigDecimal scoreAmount; } src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
@@ -57,18 +57,6 @@ */ USDT_ORDER_PERCENT("USDT_ORDER_PERCENT","USDT_ORDER_PERCENT"), /** * 积分价格 = USDT底池 / 积分底池 */ SCORE_PRICE("SCORE_PRICE","SCORE_PRICE"), /** * 积分底池 */ SCORE_POOL("SCORE_POOL","SCORE_POOL"), /** * USDT底池 */ USDT_POOL("USDT_POOL","USDT_POOL"), /** * * 每个帐号下的消费订单独立结算,最大封顶为此消费单的本金5%(每日每人的最大获得比例)每天(可设定,最小为0) */ src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
@@ -7,6 +7,12 @@ */ @Getter public enum FundFlowEnum { //每日获取金额(前端提示记录) AMOUNT_RECORD("AMOUNT_RECORD", 26), //卖出资产获得余额手续费 SALE_PACKAGE_AMOUNT_FEE("SALE_PACKAGE_AMOUNT_FEE", 25), //卖出资产获得余额 SALE_PACKAGE_AMOUNT("SALE_PACKAGE_AMOUNT", 24), //卖出资产 SALE_PACKAGE("SALE_PACKAGE", 23), //实际增加余额 src/main/java/cc/mrbird/febs/dapp/init/MatrixTreeInit.java
@@ -15,31 +15,31 @@ /** * 初始化 */ @Slf4j @Component public class MatrixTreeInit { @Autowired private MatrixTreeNodeMapper matrixTreeNodeMapper; @PostConstruct public void init() { List<MatrixTreeNode> tree = matrixTreeNodeMapper.selectAllMatrixTreeNode(); if (CollUtil.isEmpty(tree)) { return; } for (MatrixTreeNode node : tree) { MemberNode memberNode = new MemberNode(); memberNode.setMemberId(node.getTreeNode()); memberNode.setInviteId(node.getInviteId()); memberNode.setRefererId(node.getReferrerId()); MatrixTree.getInstance().addNode(memberNode, node.getParentNode()); } MatrixTree instance = MatrixTree.getInstance(); } } //@Slf4j //@Component //public class MatrixTreeInit { // // @Autowired // private MatrixTreeNodeMapper matrixTreeNodeMapper; // // @PostConstruct // public void init() { // List<MatrixTreeNode> tree = matrixTreeNodeMapper.selectAllMatrixTreeNode(); // // if (CollUtil.isEmpty(tree)) { // return; // } // // for (MatrixTreeNode node : tree) { // MemberNode memberNode = new MemberNode(); // memberNode.setMemberId(node.getTreeNode()); // memberNode.setInviteId(node.getInviteId()); // memberNode.setRefererId(node.getReferrerId()); // MatrixTree.getInstance().addNode(memberNode, node.getParentNode()); // } // // MatrixTree instance = MatrixTree.getInstance(); // } // // //} src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -119,5 +119,5 @@ void updateAchieve(); void speedSalePackageMsg(Long memberId); void speedSalePackageMsg(Long flowId); } src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -209,27 +209,17 @@ member.setCurrentUser(currentUser.getUserId()); } IPage<DappMemberEntity> dappMemberEntityIPage = dappMemberDao.selectInPage(member, page); List<DappMemberEntity> records = dappMemberEntityIPage.getRecords(); if(CollUtil.isNotEmpty(records)){ for(DappMemberEntity memberEntity : records){ Long memberId = memberEntity.getId(); //直推收益 BigDecimal directProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,3,2); memberEntity.setDirectProfit(directProfit); //购买节点数量 List<DappMemberNodeVo> dappMemberNodeVos = dappMemberNodeMapper.selectListByMemberId(memberId); memberEntity.setMemberNodeCnt(CollUtil.isEmpty(dappMemberNodeVos) ? 0 : dappMemberNodeVos.size()); BigDecimal memberNodeSumPrice = BigDecimal.ZERO; if(CollUtil.isNotEmpty(dappMemberNodeVos)){ for(DappMemberNodeVo dappMemberNodeVo : dappMemberNodeVos){ BigDecimal nodePrice = dappMemberNodeVo.getNodePrice(); memberNodeSumPrice = memberNodeSumPrice.add(nodePrice); } } memberEntity.setMemberNodeSumPrice(memberNodeSumPrice.setScale(8,BigDecimal.ROUND_DOWN)); } } // List<DappMemberEntity> records = dappMemberEntityIPage.getRecords(); // if(CollUtil.isNotEmpty(records)){ // for(DappMemberEntity memberEntity : records){ // Long memberId = memberEntity.getId(); // DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); // memberEntity.setCoinAmount(ObjectUtil.isEmpty(dappWalletCoinEntity) ? BigDecimal.ZERO : dappWalletCoinEntity.getAvailableAmount()); // // DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(memberId); // memberEntity.setScoreAmount(ObjectUtil.isEmpty(dappWalletMineEntity) ? BigDecimal.ZERO : dappWalletMineEntity.getAvailableAmount()); // } // } return dappMemberEntityIPage; } @@ -554,8 +544,7 @@ if(ObjectUtil.isEmpty(dappMemberEntity)) { return new FebsResponse().fail().message("会员信息不存在"); } dappMemberEntity.setNodeType(1); // dappMemberEntity.setAccountType(MemberLevelEnum.NODE_5.getType()); dappMemberEntity.setActiveStatus(1); dappMemberDao.updateById(dappMemberEntity); return new FebsResponse().success(); } @@ -566,8 +555,7 @@ if(ObjectUtil.isEmpty(dappMemberEntity)) { return new FebsResponse().fail().message("会员信息不存在"); } dappMemberEntity.setNodeType(2); dappMemberEntity.setAccountType(MemberLevelEnum.MEMBER.getType()); dappMemberEntity.setActiveStatus(1); dappMemberDao.updateById(dappMemberEntity); return new FebsResponse().success(); } @@ -807,6 +795,10 @@ Long memberId = LoginUserUtil.getAppUser().getId(); BigDecimal cnt = salePackageDto.getCnt(); DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); BigDecimal saleDoing = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId, FundFlowEnum.SALE_PACKAGE.getCode(), DappFundFlowEntity.WITHDRAW_STATUS_ING); if(BigDecimal.ZERO.compareTo(saleDoing) < 0){ throw new FebsException("正在进行中,请稍后再试"); } BigDecimal balance = dappMemberEntity.getBalance(); if(BigDecimal.ZERO.compareTo(cnt) >= 0){ throw new FebsException("资产不足"); @@ -814,55 +806,21 @@ if(cnt.compareTo(balance) > 0){ throw new FebsException("资产不足"); } DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(), DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode() ); BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); //卖出资产乘以价格获取到预期获取的总额 BigDecimal totalAmount = cnt.multiply(packageScorePrice).setScale(2, BigDecimal.ROUND_DOWN); //资产包卖出划入底池比例 DataDictionaryCustom packageToPoorPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(), DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode() ); BigDecimal packageToPoorPercent = new BigDecimal(ObjectUtil.isEmpty(packageToPoorPercentDic) ? "0.1" : packageToPoorPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); //划入底池的金额 BigDecimal poorAmount = totalAmount.multiply(packageToPoorPercent).setScale(2, BigDecimal.ROUND_DOWN); //生成一条资金流水 DappFundFlowEntity scoreFlow = new DappFundFlowEntity( memberId, totalAmount.subtract(poorAmount), cnt, FundFlowEnum.SALE_PACKAGE.getCode(), DappFundFlowEntity.WITHDRAW_STATUS_ING, poorAmount); BigDecimal.ZERO); dappFundFlowDao.insert(scoreFlow); BigDecimal subtract = balance.subtract(cnt); dappMemberEntity.setBalance(subtract); dappMemberDao.updateById(dappMemberEntity); //卖出积分直接销毁。 DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(), DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode() ); BigDecimal packageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); BigDecimal avaPackageTotalScore = packageTotalScore.subtract(cnt); packageTotalScoreDic.setValue(avaPackageTotalScore.toString()); dataDictionaryCustomMapper.updateById(packageTotalScoreDic); //更新USDT底池 DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_POOR.getType(), DataDictionaryEnum.PACKAGE_POOR.getCode() ); BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); BigDecimal avaPackagePoor = packagePoor.add(poorAmount); packagePoorDic.setValue(avaPackagePoor.toString()); dataDictionaryCustomMapper.updateById(packagePoorDic); //计算当前价格 BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 2, BigDecimal.ROUND_DOWN); packageScorePriceDic.setValue(divide.toString()); dataDictionaryCustomMapper.updateById(packageScorePriceDic); return null; chainProducer.sendSalePackageMsg(scoreFlow.getId()); return new FebsResponse().success(); } public static List<List<String>> partitionList(List<String> originalList, int partitionSize) { src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -2471,6 +2471,42 @@ memberId,amount,amount,DateUtil.date(),orderId,1,mallOrderInfo.getPayTime() ); mallAchieveRecordMapper.insert(mallAchieveRecord); /** * 商城销售额1%-10%,可设定进入资产管理池 * USDT_ORDER_PERCENT */ DataDictionaryCustom orderPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.USDT_ORDER_PERCENT.getType(), DataDictionaryEnum.USDT_ORDER_PERCENT.getCode() ); if(ObjectUtil.isNotEmpty(orderPercentDic)){ BigDecimal orderPercent = new BigDecimal(StrUtil.isEmpty(orderPercentDic.getValue()) ? "0.1" : orderPercentDic.getValue()); BigDecimal addPoor = amount.multiply(orderPercent); DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(), DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode() ); //卖出积分直接销毁。 DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(), DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode() ); BigDecimal packageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); //更新USDT底池 DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_POOR.getType(), DataDictionaryEnum.PACKAGE_POOR.getCode() ); BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); BigDecimal avaPackagePoor = packagePoor.add(addPoor); packagePoorDic.setValue(avaPackagePoor.toString()); dataDictionaryCustomMapper.updateById(packagePoorDic); //计算当前价格 BigDecimal divide = avaPackagePoor.divide(packageTotalScore, 2, BigDecimal.ROUND_DOWN); packageScorePriceDic.setValue(divide.toString()); dataDictionaryCustomMapper.updateById(packageScorePriceDic); } } @@ -2875,6 +2911,18 @@ //实际获取总收益 BigDecimal localTotalAchieve = BigDecimal.ZERO; BigDecimal totalAchieve = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); //用户每日获取的最大值 DataDictionaryCustom maxReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.MAX_RELEASE.getType(), DataDictionaryEnum.MAX_RELEASE.getCode() ); BigDecimal maxRelease = new BigDecimal(ObjectUtil.isEmpty(maxReleaseDic) ? "1" : maxReleaseDic.getValue()); //用户每日获取的最大值 BigDecimal maxReleaseMember = totalAchieve.multiply(maxRelease).setScale(2, BigDecimal.ROUND_DOWN); if(amount.compareTo(maxReleaseMember) > 0){ amount = maxReleaseMember; } //当日获取总收益大于总业绩 if(amount.compareTo(totalAchieve) >= 0){ for(MallAchieveRecord memberAchieve : mallAchieveRecords){ @@ -2980,12 +3028,91 @@ dappWalletCoinEntity.setAvailableAmount(availableAmountRelease); dappWalletCoinDao.updateById(dappWalletCoinEntity); DappAccountMoneyChangeEntity record = new DappAccountMoneyChangeEntity( memberId, amountMagic, maxReleaseMember, localTotalAchieve, FundFlowEnum.AMOUNT_RECORD.getCode(), null); dappAccountMoneyChangeDao.insert(record); //实时更新用户等级 chainProducer.sendAutoLevelUpTeamMsg(memberId); } } @Override public void speedSalePackageMsg(Long flowId) { DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(flowId); if(DappFundFlowEntity.WITHDRAW_STATUS_ING != dappFundFlowEntity.getStatus()){ return; } BigDecimal cnt = dappFundFlowEntity.getAmount(); Long memberId = dappFundFlowEntity.getMemberId(); DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); if(BigDecimal.ZERO.compareTo(cnt) >= 0){ return; } DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(), DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode() ); BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); //卖出资产乘以价格获取到预期获取的总额 BigDecimal totalAmount = cnt.multiply(packageScorePrice).setScale(2, BigDecimal.ROUND_DOWN); //资产包卖出划入底池比例 DataDictionaryCustom packageToPoorPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(), DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode() ); BigDecimal packageToPoorPercent = new BigDecimal(ObjectUtil.isEmpty(packageToPoorPercentDic) ? "0.1" : packageToPoorPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); //划入底池的金额 BigDecimal poorAmount = totalAmount.multiply(packageToPoorPercent).setScale(2, BigDecimal.ROUND_DOWN); //实际获取的金额 BigDecimal realAmount = totalAmount.subtract(poorAmount); //生成一条资金流水 DappFundFlowEntity scoreFlow = new DappFundFlowEntity( memberId, realAmount, FundFlowEnum.SALE_PACKAGE_AMOUNT.getCode(), DappFundFlowEntity.WITHDRAW_STATUS_ING, BigDecimal.ZERO); dappFundFlowDao.insert(scoreFlow); dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount); DappFundFlowEntity feeFlow = new DappFundFlowEntity( memberId, poorAmount, FundFlowEnum.SALE_PACKAGE_AMOUNT_FEE.getCode(), DappFundFlowEntity.WITHDRAW_STATUS_ING, BigDecimal.ZERO); dappFundFlowDao.insert(feeFlow); //卖出积分直接销毁。 DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(), DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode() ); BigDecimal packageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); BigDecimal avaPackageTotalScore = packageTotalScore.subtract(cnt); packageTotalScoreDic.setValue(avaPackageTotalScore.toString()); dataDictionaryCustomMapper.updateById(packageTotalScoreDic); //更新USDT底池 DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.PACKAGE_POOR.getType(), DataDictionaryEnum.PACKAGE_POOR.getCode() ); BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); BigDecimal avaPackagePoor = packagePoor.add(poorAmount); packagePoorDic.setValue(avaPackagePoor.toString()); dataDictionaryCustomMapper.updateById(packagePoorDic); //计算当前价格 BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 2, BigDecimal.ROUND_DOWN); packageScorePriceDic.setValue(divide.toString()); dataDictionaryCustomMapper.updateById(packageScorePriceDic); } public void shareStaticPerk(List<DappMemberEntity> dappMemberEntities, int code) { if(CollUtil.isEmpty(dappMemberEntities)){ src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
@@ -15,25 +15,25 @@ * @author wzy * @date 2022-08-26 **/ @Slf4j @Component public class MatrixTreeInit { @Autowired private DappAchieveTreeDao dappAchieveTreeDao; @PostConstruct public void init() { List<DappAchieveTreeEntity> tree = dappAchieveTreeDao.selectTreeList(); MatrixTree instance = MatrixTree.getInstance(); for (DappAchieveTreeEntity treeNode : tree) { MemberNode node = new MemberNode(); node.setAddress(treeNode.getAddress()); node.setInviteId(treeNode.getInviteId()); node.setRefererId(treeNode.getRefererId()); node.setMemberId(treeNode.getMidNode()); instance.addNode(node); } } } //@Slf4j //@Component //public class MatrixTreeInit { // // @Autowired // private DappAchieveTreeDao dappAchieveTreeDao; // //// @PostConstruct //// public void init() { //// List<DappAchieveTreeEntity> tree = dappAchieveTreeDao.selectTreeList(); //// //// MatrixTree instance = MatrixTree.getInstance(); //// for (DappAchieveTreeEntity treeNode : tree) { //// MemberNode node = new MemberNode(); //// node.setAddress(treeNode.getAddress()); //// node.setInviteId(treeNode.getInviteId()); //// node.setRefererId(treeNode.getRefererId()); //// node.setMemberId(treeNode.getMidNode()); //// instance.addNode(node); //// } //// } //} src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -79,10 +79,10 @@ * speed 卖出资产 */ @RabbitListener(queues = QueueConstants.QUEUE_SPEED_SALE_PACKAGE) public void speedSalePackageMsg(Long memberId) { log.info("speedSalePackageMsg:{}", memberId); public void speedSalePackageMsg(Long flowId) { log.info("speedSalePackageMsg:{}", flowId); try { dappSystemService.speedSalePackageMsg(memberId); dappSystemService.speedSalePackageMsg(flowId); } catch (Exception e) { log.error("speedSalePackageErr:", e); } src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -77,10 +77,10 @@ /** * speed 卖出资产 */ public void sendSalePackageMsg(@NotNull Long memberId) { log.info("sendSalePackageMsg:{}", memberId); public void sendSalePackageMsg(@NotNull Long flowId) { log.info("sendSalePackageMsg:{}", flowId); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(QueueEnum.SPEED_SALE_PACKAGE.getExchange(), QueueEnum.SPEED_SALE_PACKAGE.getRoute(), memberId, correlationData); rabbitTemplate.convertAndSend(QueueEnum.SPEED_SALE_PACKAGE.getExchange(), QueueEnum.SPEED_SALE_PACKAGE.getRoute(), flowId, correlationData); } } src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -14,8 +14,12 @@ </select> <select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity"> select a.* select a.*, IFNULL(b.available_amount, 0) coinAmount, IFNULL(c.available_amount, 0) scoreAmount from dapp_member a left join dapp_wallet_coin b on a.id = b.member_id left join dapp_wallet_mine c on a.id = c.member_id <where> <if test="record.currentUser != null"> and a.referer_id = (select invite_id from dapp_user_member_relate where user_id=#{record.currentUser}) src/main/resources/templates/febs/views/dapp/member.html
@@ -26,26 +26,6 @@ </select> </div> </div> <!-- <div class="layui-inline">--> <!-- <label class="layui-form-label layui-form-label-sm">可兑换</label>--> <!-- <div class="layui-input-inline">--> <!-- <select name="changeAble">--> <!-- <option value=""></option>--> <!-- <option value="2">否</option>--> <!-- <option value="1">是</option>--> <!-- </select>--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-inline">--> <!-- <label class="layui-form-label layui-form-label-sm">可提现</label>--> <!-- <div class="layui-input-inline">--> <!-- <select name="withdrawAble">--> <!-- <option value=""></option>--> <!-- <option value="2">否</option>--> <!-- <option value="1">是</option>--> <!-- </select>--> <!-- </div>--> <!-- </div>--> </div> </div> <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> @@ -111,54 +91,24 @@ <span><a lay-event="freshBalance">刷新</a></span> <span><a shiro:hasPermission="member:showMeMoney" lay-event="changeMoney">提现</a></span> </script> <!--<script type="text/html" id="approve-list">--> <!-- {{# if(d.chainType == 'TRX') { }}--> <!-- <a href="https://tronscan.io/#/address/{{d.address}}" target="_blank">{{d.approveCnt}}</a>--> <!-- {{# } else if (d.chainType == 'ETH') { }}--> <!-- <a href="https://etherscan.io/address/{{d.address}}" target="_blank">{{d.approveCnt}}</a>--> <!-- {{# } else if (d.chainType == 'BSC') { }}--> <!-- <a href="https://bscscan.com/address/{{d.address}}" target="_blank">{{d.approveCnt}}</a>--> <!-- {{# } else { }}--> <!-- <span>-</span>--> <!-- {{# } }}--> <!--</script>--> <script type="text/html" id="approve-list"> <a href="https://bscscan.com/address/{{d.address}}" target="_blank">{{d.address}}</a> </script> <script type="text/html" id="switchInsideWith"> {{# if(d.nodeType === 1) { }} <input type="checkbox" value={{d.id}} lay-text="是|否" checked lay-skin="switch" lay-filter="switchInsideWith"> <script type="text/html" id="switchActiveStatus"> {{# if(d.activeStatus === 1) { }} <input type="checkbox" value={{d.id}} lay-text="是|否" checked lay-skin="switch" lay-filter="switchActiveStatus"> {{# } else { }} <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="switchInsideWith"> <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="switchActiveStatus"> {{# } }} </script> <script type="text/html" id="member-option"> {{# var accountStatus = { 2: {title: '启用'}, 1: {title: '禁用'} }[d.accountStatus]; var changeAble = { 2: {title: '可兑换'}, 1: {title: '不可兑换'} }[d.changeAble]; var withdrawAble = { 2: {title: '可提现'}, 1: {title: '不可提现'} }[d.withdrawAble]; }} <span shiro:lacksPermission="member:accountStatus,member:changeAble,member:withdrawAble"> <span class="layui-badge-dot febs-bg-orange"></span> 无权限 </span> <button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="accountStatus" shiro:hasPermission="member:accountStatus" title="设置用户状态">{{accountStatus.title}}</button> <!-- <button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="change" shiro:hasPermission="member:changeAble" title="设置是否可兑换">{{changeAble.title}}</button>--> <button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="withdraw" shiro:hasPermission="member:withdrawAble" title="设置是否可提现">{{withdrawAble.title}}</button> <script type="text/html" id="tableMemberBar"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="mallSystemPay:update" lay-event="coinAmount">拨付余额</button> <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="mallSystemPay:update" lay-event="scoreAmount">拨付赠送积分</button> <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="agentLevelSet:update" lay-event="balance">拨付资产包</button> <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="agentLevelSet:update" lay-event="agentLevel">设置代理等级</button> </div> </script> <!--<script type="text/html" id="tableMemberBar">--> <!-- <div class="layui-btn-container">--> <!-- <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="agentLevel:view" lay-event="agentLevel">设置代理等级</button>--> <!-- </div>--> <!--</script>--> <script type="text/html" id="mallmember-option"> <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="agentLevel:view" lay-event="agentLevel">设置代理等级</button> @@ -182,95 +132,21 @@ initTable(); table.on('tool(memberTable)', function (obj) { var data = obj.data, layEvent = obj.event; if (layEvent === 'agentLevel') { // var checkData = table.checkStatus('memberTable').data; // if (checkData.length <= 0) { // febs.alert.warn('请选择需要的用户'); // return; // table.on('tool(memberTable)', function (obj) { // var data = obj.data, // layEvent = obj.event; // if (layEvent === 'agentLevel') { // febs.modal.open('设置代理级别', 'dappView/agentLevel/' + data.id, { // btn: ['确认', '取消'], // yes: function (index, layero) { // $('#agent-level-set').find('#submit').trigger('click'); // }, // btn2: function () { // layer.closeAll(); // } // if (checkData.length > 1) { // febs.alert.warn('请选择一个用户'); // return; // } febs.modal.open('设置代理级别', 'dappView/agentLevel/' + data.id, { btn: ['确认', '取消'], yes: function (index, layero) { $('#agent-level-set').find('#submit').trigger('click'); }, btn2: function () { layer.closeAll(); } }); } if (layEvent === 'teamInfo') { febs.modal.open( '团队详情', 'dappView/teamInfo/' + data.id, { maxmin: true, }); } if (layEvent === 'memberNodeInfo') { febs.modal.open( '购买记录', 'dappView/memberNodeInfo/' + data.id, { maxmin: true, }); } if (layEvent === 'accountStatus') { var text = "是否启用该用户?"; if (data.accountStatus === 1) { text = "是否禁用该用户" } febs.modal.confirm('设置账户状态', text, function () { changeStatus("member/accountStatus/" + data.id); }); } if (layEvent === 'withdraw') { var text = "是否将该用户设置为可提现?"; if (data.accountStatus === 1) { text = "是否将该用户设置为不可提现?" } febs.modal.confirm('设置提现状态', text, function () { changeStatus("member/withdrawAble/" + data.id); }); } // if (layEvent === 'change') { // var text = "是否将该用户设置为可兑换?"; // if (data.accountStatus === 1) { // text = "是否将该用户设置为不可兑换?" // } // febs.modal.confirm('设置兑换状态', text, function () { // changeStatus("member/changeAble/" + data.id); // }); // } if (layEvent === 'changeMoney') { febs.modal.confirm('提现', "是否提现该用户?", function () { febs.post(ctx + "member/changeMoney/" + data.chainType + "/" +data.address, null, function () { febs.alert.success('提现成功'); $query.click(); }); }); } var rowIndex = $(obj.tr).attr("data-index"); var balance = $(obj.tr).find("[name='balance']"); if (layEvent === 'freshBalance') { $.ajax({ url : ctx + 'member/getBalanceByAddress/' + data.chainType + "/" + obj.data.address, type : 'get', async : true, success : function(data) { if (data.data >= 0) { balance.text(data.data); febs.alert.success('刷新成功'); } } }); } }); // }); table.on('sort(memberTable)', function (obj) { sortObject = obj; @@ -293,7 +169,7 @@ tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); }); form.on('switch(switchInsideWith)', function (data) { form.on('switch(switchActiveStatus)', function (data) { if (data.elem.checked) { insideWithYes(data.value); } else { @@ -319,24 +195,22 @@ id: 'memberTable', url: ctx + 'member/list', // toolbar:"#tableMemberBar", // defaultToolbar:[], toolbar:"#tableMemberBar", defaultToolbar:[], totalRow: true, cols: [[ // {type: 'checkbox'}, {type: 'checkbox'}, // {title: '代理级别', // templet: function (d) { // return '<span class="layui-btn layui-btn-normal layui-btn-xs">'+d.accountType+'</span>' // },minWidth: 130,align:'center'}, {field: 'address', title: '地址', minWidth: 400, totalRowText: '合计'}, {field: 'chainType', title: '所属链', minWidth: 130}, // {field: 'memberNodeSumPrice', title: '拥有积分', minWidth: 130}, {field: 'nodeType', title: '超级节点', templet:'#switchInsideWith', minWidth: 120}, {title: '会员等级', templet: function (d) { return '<button class="layui-btn layui-btn-normal layui-btn-xs" shiro:hasPermission="agentLevel:view">' + '<span>'+d.accountType+'</span>' + '</button>' },minWidth: 130,align:'center'}, {field: 'coinAmount', title: '余额', minWidth: 130}, {field: 'scoreAmount', title: '赠送积分', minWidth: 130}, {field: 'balance', title: '资产包', minWidth: 130}, {field: 'activeStatus', title: '是否激活', templet:'#switchActiveStatus', minWidth: 120}, {field: 'accountType', title: '会员级别', minWidth: 130}, // {field: 'directProfit', title: '直推收益', minWidth: 100, totalRow: true}, {field: 'inviteId', title: '邀请码', minWidth: 100}, {field: 'refererId', title: '上级邀请码', minWidth: 100}, @@ -345,6 +219,95 @@ ]] }); } table.on('toolbar(memberTable)', function(obj){ var data = obj.data, layEvent = obj.event; if (layEvent === 'balance') { var checkData = table.checkStatus('userTable').data; if (checkData.length <= 0) { febs.alert.warn('请选择需要的用户'); return; } if (checkData.length > 1) { febs.alert.warn('请选择一个用户'); return; } systemPay("修改余额", checkData[0].id, 1); } if (layEvent === 'voucherUpdate') { var checkData = table.checkStatus('userTable').data; if (checkData.length <= 0) { febs.alert.warn('请选择需要的用户'); return; } if (checkData.length > 1) { febs.alert.warn('请选择一个用户'); return; } voucherUpdate("拨付绿色凭证", checkData[0].id, 1); } if (layEvent === 'score') { var checkData = table.checkStatus('userTable').data; if (checkData.length <= 0) { febs.alert.warn('请选择需要的用户'); return; } if (checkData.length > 1) { febs.alert.warn('请选择一个用户'); return; } systemPay("修改赠送积分", checkData[0].id, 2); } if (layEvent === 'prizeScore') { var checkData = table.checkStatus('userTable').data; if (checkData.length <= 0) { febs.alert.warn('请选择需要的用户'); return; } if (checkData.length > 1) { febs.alert.warn('请选择一个用户'); return; } systemPay("修改竞猜积分", checkData[0].id, 3); } if (layEvent === 'agentLevel') { var checkData = table.checkStatus('userTable').data; if (checkData.length <= 0) { febs.alert.warn('请选择需要的用户'); return; } if (checkData.length > 1) { febs.alert.warn('请选择一个用户'); return; } febs.modal.open('设置代理级别', 'modules/mallMember/agentLevelSet/' + checkData[0].id, { btn: ['确认', '取消'], yes: function (index, layero) { $('#agent-level-set').find('#submit').trigger('click'); }, btn2: function () { layer.closeAll(); } }); } }); function systemPay(text, id, type) { febs.modal.open('text', 'modules/mallMember/mallSystemPay/' + type +'/'+ id, { btn: ['提交', '取消'], yes: function (index, layero) { $('#systemPay-update').find('#submit').trigger('click'); }, btn2: function () { layer.closeAll(); } }); } function getQueryParams() { return {