From 6c75b0c0fd6862b0d10793821db7017341a6a771 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 18 Aug 2023 16:48:31 +0800
Subject: [PATCH] 后台修改

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java |  606 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 533 insertions(+), 73 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
index 0d10774..5a28953 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -11,16 +11,14 @@
 import cc.mrbird.febs.dapp.contract.andao.AndaoContractMain;
 import cc.mrbird.febs.dapp.dto.*;
 import cc.mrbird.febs.dapp.entity.*;
-import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
-import cc.mrbird.febs.dapp.enumerate.FundFlowEnum;
-import cc.mrbird.febs.dapp.enumerate.MemberLevelEnum;
-import cc.mrbird.febs.dapp.enumerate.PoolEnum;
+import cc.mrbird.febs.dapp.enumerate.*;
 import cc.mrbird.febs.dapp.mapper.*;
 import cc.mrbird.febs.dapp.service.DappMemberService;
 import cc.mrbird.febs.dapp.vo.*;
 import cc.mrbird.febs.rabbit.producer.ChainProducer;
 import cc.mrbird.febs.system.entity.User;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -69,6 +67,11 @@
     private final MallOrderInfoMapper mallOrderInfoMapper;
     private final MallOrderItemMapper mallOrderItemMapper;
     private final MallAchieveRecordMapper mallAchieveRecordMapper;
+    private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
+    private final MallAddressInfoMapper mallAddressInfoMapper;
+    private final MallGoodsCategoryMapper mallGoodsCategoryMapper;
+    private final PlatformBannerMapper platformBannerMapper;
+    private final MallGoodsImagesMapper goodsImagesMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -149,7 +152,7 @@
             int nodeType = 0;
             //
             if (!"asdf4321".equals(connectDto.getInviteId())) {
-                DappMemberEntity parent = dappMemberDao.selectByAddress(connectDto.getInviteId(), null);
+                DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
                 if (parent == null) {
                     throw new FebsException("recommender is not exist");
                 }
@@ -209,27 +212,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;
     }
 
@@ -409,6 +402,7 @@
                     teamChildListVo.setOrderCnt(mallAchieveRecords.size());
                 }
             }
+            myTeamVo.setTeam(list);
         }
         return myTeamVo;
     }
@@ -532,6 +526,12 @@
 
         DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(member.getId());
         dappMemberInfoVo.setScore(ObjectUtil.isEmpty(dappWalletMineEntity) ? BigDecimal.ZERO : dappWalletMineEntity.getTotalAmount());
+        Integer waitPayCnt = dappMemberDao.selectOrderCntByMemberIdAndStatus(member.getId(),1);
+        Integer payCnt = dappMemberDao.selectOrderCntByMemberIdAndStatus(member.getId(),2);
+        Integer cancelCnt = dappMemberDao.selectOrderCntByMemberIdAndStatus(member.getId(),3);
+        dappMemberInfoVo.setWaitPayCnt(waitPayCnt);
+        dappMemberInfoVo.setPayCnt(payCnt);
+        dappMemberInfoVo.setCancelCnt(cancelCnt);
         return new FebsResponse().success().data(dappMemberInfoVo);
     }
 
@@ -554,8 +554,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 +565,7 @@
         if(ObjectUtil.isEmpty(dappMemberEntity)) {
             return new FebsResponse().fail().message("会员信息不存在");
         }
-        dappMemberEntity.setNodeType(2);
-        dappMemberEntity.setAccountType(MemberLevelEnum.MEMBER.getType());
+        dappMemberEntity.setActiveStatus(2);
         dappMemberDao.updateById(dappMemberEntity);
         return new FebsResponse().success();
     }
@@ -609,6 +607,14 @@
         MallOrderListVo mallOrderListVo = dappMemberDao.selectMallOrderListVoById(id);
         List<MallOrderItemVo> mallOrderItemVoList = dappMemberDao.selectMallOrderItemVoByOrderId(id);
         mallOrderListVo.setItems(mallOrderItemVoList);
+        long addressId = ObjectUtil.isEmpty(mallOrderListVo.getAddressId()) ? 0L : mallOrderListVo.getAddressId();
+        MallAddressInfo mallAddressInfo = mallAddressInfoMapper.selectById(addressId);
+        if(ObjectUtil.isNotEmpty(mallAddressInfo)){
+            mallOrderListVo.setName(mallAddressInfo.getName());
+            mallOrderListVo.setPhone(mallAddressInfo.getPhone());
+            mallOrderListVo.setArea(mallAddressInfo.getArea());
+            mallOrderListVo.setAddress(mallAddressInfo.getAddress());
+        }
         return mallOrderListVo;
     }
 
@@ -616,6 +622,9 @@
     public MallGoodsListVo findGoodsDetailsById(Long id) {
         DappMemberEntity member = LoginUserUtil.getAppUser();
         MallGoodsListVo mallGoodsListVo = dappMemberDao.selectMallGoodsListVoById(id);
+
+        List<String> images = goodsImagesMapper.selectGoodsImagesByGoodsId(id);
+        mallGoodsListVo.setImages(images);
         return mallGoodsListVo;
     }
 
@@ -623,6 +632,7 @@
     @Transactional
     public Long createOrder(AddOrderDto addOrderDto) {
         DappMemberEntity member = LoginUserUtil.getAppUser();
+//        DappMemberEntity member = dappMemberDao.selectById(1L);
         /**
          * 1、商品是否上架
          * 2、用户余额是否足够
@@ -658,6 +668,11 @@
         mallOrderInfo.setOrderTime(DateUtil.date());
         mallOrderInfo.setAmount(totalAmount);
         mallOrderInfo.setStatus(MallOrderInfo.STATUS_WAIT);
+        mallOrderInfo.setDeliverType(addOrderDto.getDeliverType());
+        mallOrderInfo.setAddressId(addOrderDto.getAddressId());
+//        if(1 == addOrderDto.getDeliverType()){
+//            mallOrderInfo.setAddressId(addOrderDto.getAddressId());
+//        }
         mallOrderInfo.setOrderType(1);
         mallOrderInfoMapper.insert(mallOrderInfo);
         MallOrderItem mallOrderItem = new MallOrderItem();
@@ -674,7 +689,8 @@
     @Override
     @Transactional
     public void cancelOrder(Long id) {
-        DappMemberEntity member = LoginUserUtil.getAppUser();
+//        DappMemberEntity member = LoginUserUtil.getAppUser();
+        DappMemberEntity member = dappMemberDao.selectById(1L);
         MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id);
         if (ObjectUtil.isEmpty(orderInfo)) {
             throw new FebsException("订单异常");
@@ -693,6 +709,7 @@
     @Transactional
     public void payOrder(Long id) {
         DappMemberEntity member = LoginUserUtil.getAppUser();
+//        DappMemberEntity member = dappMemberDao.selectById(1L);
         MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id);
         if (ObjectUtil.isEmpty(orderInfo)) {
             throw new FebsException("订单异常");
@@ -748,14 +765,16 @@
         String payOrderNo = MallUtils.getOrderNum("PAY");
         orderInfo.setPayOrderNo(payOrderNo);
         orderInfo.setPayMethod("余额支付");
-        orderInfo.setPayResult("成功");
+        orderInfo.setPayResult(1);
         orderInfo.setStatus(MallOrderInfo.STATUS_PAY);
+        orderInfo.setDeliverState(MallOrderInfo.DELIVER_STATUS_WAIT);
         mallOrderInfoMapper.updateById(orderInfo);
         /**
          * 更新用户余额
          */
         dappWalletCoinDao.reduceTotalAndAvailableByMemberId(member.getId(),totalAmount);
         DappFundFlowEntity donateScoreFlow = new DappFundFlowEntity(
+                AccountFlowEnum.AMOUNT.getCode(),
                 member.getId(),
                 totalAmount.negate(),
                 FundFlowEnum.PAY_ORDER.getCode(),
@@ -763,6 +782,7 @@
                 BigDecimal.ZERO,
                 payOrderNo,
                 id);
+        dappFundFlowDao.insert(donateScoreFlow);
 
         /**
          * 支付成功,消费后成有效账户后可分享(有效用户可推广)
@@ -793,7 +813,7 @@
                 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 packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(8, BigDecimal.ROUND_DOWN);
         packageInfoVo.setPackageScorePrice(packageScorePrice);
 
         DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
@@ -806,7 +826,14 @@
     public FebsResponse salePackage(SalePackageDto salePackageDto) {
         Long memberId = LoginUserUtil.getAppUser().getId();
         BigDecimal cnt = salePackageDto.getCnt();
+        if(ObjectUtil.isEmpty(salePackageDto.getCnt())){
+            throw new FebsException("请输入正确的数量");
+        }
         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 +841,488 @@
         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);
+        chainProducer.sendSalePackageMsg(scoreFlow.getId());
+        return new FebsResponse().success();
+    }
 
-        return null;
+    @Override
+    public FebsResponse updateSystemPay(MallSystemPayDto mallSystemPayDto) {
+        Long memberId = mallSystemPayDto.getId();
+        DappMemberEntity mallMember = dappMemberDao.selectById(memberId);
+        if(ObjectUtil.isEmpty(mallMember)){
+            return new FebsResponse().fail().message("系统繁忙,请刷新页面重试");
+        }
+
+        BigDecimal bigDecimal = mallSystemPayDto.getAddBalance();
+
+        Integer type = mallSystemPayDto.getType();
+        if (type == 1) {
+            dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,bigDecimal);
+            //插入流水
+            DappFundFlowEntity amountFlow = new DappFundFlowEntity(
+                    memberId,
+                    bigDecimal,
+                    FundFlowEnum.SYSTEM_AMOUNT.getCode(),
+                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                    BigDecimal.ZERO);
+            dappFundFlowDao.insert(amountFlow);
+        } else if (type == 2) {
+            dappWalletMineDao.addTotalAndaddAvailableById(bigDecimal,memberId);
+            //插入流水
+            DappFundFlowEntity amountFlow = new DappFundFlowEntity(
+                    memberId,
+                    bigDecimal,
+                    FundFlowEnum.SYSTEM_SCORE.getCode(),
+                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                    BigDecimal.ZERO);
+            dappFundFlowDao.insert(amountFlow);
+        } else if (type == 3) {
+            BigDecimal balance = mallMember.getBalance();
+            balance = balance.add(bigDecimal);
+            mallMember.setBalance(balance);
+            dappMemberDao.updateById(mallMember);
+            //插入流水
+            DappFundFlowEntity amountFlow = new DappFundFlowEntity(
+                    memberId,
+                    bigDecimal,
+                    FundFlowEnum.SYSTEM_PACKAGE.getCode(),
+                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                    BigDecimal.ZERO);
+            dappFundFlowDao.insert(amountFlow);
+        } else {
+            throw new FebsException("参数错误");
+        }
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public IPage<MemberMoneyFlowVo> memberMoneyFlow(QueryRequest request, DappMemberEntity dappMemberEntity) {
+        Page<MemberMoneyFlowVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<MemberMoneyFlowVo> memberMoneyFlowVos = dappAccountMoneyChangeDao.selectMemberMoneyFlowInPage(page, dappMemberEntity);
+        return memberMoneyFlowVos;
+    }
+
+    @Override
+    public void delOrder(Long id) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(id);
+        if(MallOrderInfo.STATUS_PAY == mallOrderInfo.getStatus()){
+            throw new FebsException("当前订单不允许删除");
+        }
+
+        mallOrderInfoMapper.deleteById(id);
+        QueryWrapper<MallOrderItem> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("order_id", id);
+        List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectList(objectQueryWrapper);
+        if(CollUtil.isNotEmpty(mallOrderItems)){
+            for(MallOrderItem mallOrderItem : mallOrderItems){
+                mallOrderItemMapper.deleteById(mallOrderItem.getId());
+            }
+        }
+    }
+
+    @Override
+    public void createAddress(CreateAddressDto createAddressDto) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        MallAddressInfo mallAddressInfo = new MallAddressInfo();
+        mallAddressInfo.setMemberId(memberId);
+        mallAddressInfo.setName(createAddressDto.getName());
+        mallAddressInfo.setPhone(createAddressDto.getPhone());
+        mallAddressInfo.setArea(createAddressDto.getArea());
+        mallAddressInfo.setAddress(createAddressDto.getAddress());
+        mallAddressInfo.setIsDefault(1);
+        mallAddressInfoMapper.insert(mallAddressInfo);
+    }
+
+    @Override
+    public void delAddress(Long id) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        MallAddressInfo mallAddressInfo = mallAddressInfoMapper.selectById(id);
+        if(ObjectUtil.isEmpty(mallAddressInfo)){
+            throw new FebsException("地址不存在");
+        }
+        mallAddressInfo.setIsDefault(2);
+        mallAddressInfoMapper.updateById(mallAddressInfo);
+    }
+
+    @Override
+    public IPage<MallAddressInfo> findAddressList(MallGoodsQueryDto queryDto) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        Page<MallAddressInfo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
+        queryDto.setMemberId(memberId);
+        return dappMemberDao.selectAddressListInPage(queryDto, page);
+    }
+
+    @Override
+    public MallAddressInfo addressDetails(Long id) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        MallAddressInfo mallAddressInfo = mallAddressInfoMapper.selectById(id);
+        return mallAddressInfo;
+    }
+
+    @Override
+    public void updateAddress(CreateAddressDto createAddressDto) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+
+        MallAddressInfo mallAddressInfo = mallAddressInfoMapper.selectById(createAddressDto.getId());
+        if(ObjectUtil.isEmpty(mallAddressInfo)){
+            throw new FebsException("地址不存在");
+        }
+        mallAddressInfo.setName(createAddressDto.getName());
+        mallAddressInfo.setPhone(createAddressDto.getPhone());
+        mallAddressInfo.setArea(createAddressDto.getArea());
+        mallAddressInfo.setAddress(createAddressDto.getAddress());
+        mallAddressInfoMapper.updateById(mallAddressInfo);
+    }
+
+    @Override
+    public List<MallGoodsCategory> categoryList() {
+        return mallGoodsCategoryMapper.selectRecommendCategoryList();
+    }
+
+    @Override
+    public FebsResponse balanceSystem() {
+
+        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectAllMemberForInCome();
+        if(CollUtil.isNotEmpty(dappMemberEntities)){
+            if(dappMemberEntities.size() <= 100){
+                for(DappMemberEntity dappMemberEntity : dappMemberEntities){
+                    Long memberId = dappMemberEntity.getId();
+                    BigDecimal balance = dappMemberEntity.getBalance();
+
+                    BigDecimal cnt = balance.divide(new BigDecimal(2) , 2 ,BigDecimal.ROUND_DOWN);
+                    dappMemberEntity.setBalance(balance.subtract(cnt));
+                    dappMemberDao.updateById(dappMemberEntity);
+
+                    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.SYSTEM_PACKAGE_SALE.getCode(),
+                            DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                            BigDecimal.ZERO);
+                    dappFundFlowDao.insert(scoreFlow);
+                    dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount);
+                    DappFundFlowEntity feeFlow = new DappFundFlowEntity(
+                            memberId,
+                            poorAmount.negate(),
+                            FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
+                            DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                            BigDecimal.ZERO);
+                    dappFundFlowDao.insert(feeFlow);
+
+                    //卖出积分直接销毁。
+                    DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                            DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
+                            DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
+                    );
+                    BigDecimal avaPackageTotalScore = 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(poorAmount);
+                    packagePoorDic.setValue(avaPackagePoor.toString());
+                    dataDictionaryCustomMapper.updateById(packagePoorDic);
+                    //计算当前价格
+                    BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 8, BigDecimal.ROUND_DOWN);
+                    packageScorePriceDic.setValue(divide.toString());
+                    dataDictionaryCustomMapper.updateById(packageScorePriceDic);
+                }
+                return new FebsResponse().success();
+            }
+            List<MallAchieveRecord> mallAchieveRecordList = new ArrayList<>();
+            for(DappMemberEntity dappMemberEntity : dappMemberEntities){
+                //获取每个人的业绩
+                //业绩集合
+                List<BigDecimal> list = new ArrayList<>();
+                //所有直推团队,就是这个会员的所有区域的业绩。
+
+                BigDecimal teamIncomeMax = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(dappMemberEntity.getId(),
+                        FundFlowEnum.ADD_AMOUNT_REAL.getCode(),
+                        DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
+                if(BigDecimal.ZERO.compareTo(teamIncomeMax) >= 0){
+                    continue;
+                }
+
+                MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
+                mallAchieveRecord.setMemberId(dappMemberEntity.getId());
+                mallAchieveRecord.setAmount(teamIncomeMax);
+                mallAchieveRecordList.add(mallAchieveRecord);
+//                // 直推用户
+//                List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(dappMemberEntity.getInviteId());
+//                List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
+//                if(CollUtil.isNotEmpty(childsInviteIds)){
+//                    for(String inviteId : childsInviteIds){
+//                        BigDecimal totalIncomeMember = dappMemberDao.selectAchieveRecordByInviteId(inviteId);
+//                        teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
+//                        list.add(totalIncomeMember);
+//                    }
+//                    //去掉一个最大区的业绩
+//                    BigDecimal bigMax = list.stream().max(BigDecimal::compareTo).get();
+//                    teamIncomeMax = teamIncomeMax.subtract(bigMax);
+//                }
+            }
+            if(CollUtil.isNotEmpty(mallAchieveRecordList)){
+                //按照小区业绩的多少排名
+                List<MallAchieveRecord> collect = mallAchieveRecordList
+                        .stream()
+                        .sorted(Comparator.comparing(MallAchieveRecord::getAmount))
+                        .collect(Collectors.toList());
+
+                List<MallAchieveRecord> top100Performances = collect.stream()
+                        .limit(100)
+                        .collect(Collectors.toList());
+                if(CollUtil.isNotEmpty(top100Performances)){
+                    for(MallAchieveRecord mallAchieveRecord : top100Performances){
+                        Long memberId = mallAchieveRecord.getMemberId();
+                        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+                        BigDecimal balance = dappMemberEntity.getBalance();
+
+                        BigDecimal cnt = balance.divide(new BigDecimal(2) , 2 ,BigDecimal.ROUND_DOWN);
+                        dappMemberEntity.setBalance(balance.subtract(cnt));
+                        dappMemberDao.updateById(dappMemberEntity);
+                        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.SYSTEM_PACKAGE_SALE.getCode(),
+                                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                                BigDecimal.ZERO);
+                        dappFundFlowDao.insert(scoreFlow);
+                        dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount);
+                        DappFundFlowEntity feeFlow = new DappFundFlowEntity(
+                                memberId,
+                                poorAmount.negate(),
+                                FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
+                                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                                BigDecimal.ZERO);
+                        dappFundFlowDao.insert(feeFlow);
+
+                        //卖出积分直接销毁。
+                        DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
+                                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
+                        );
+                        BigDecimal avaPackageTotalScore = 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(poorAmount);
+                        packagePoorDic.setValue(avaPackagePoor.toString());
+                        dataDictionaryCustomMapper.updateById(packagePoorDic);
+                        //计算当前价格
+                        BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 8, BigDecimal.ROUND_DOWN);
+                        packageScorePriceDic.setValue(divide.toString());
+                        dataDictionaryCustomMapper.updateById(packageScorePriceDic);
+                    }
+                }
+
+                List<MallAchieveRecord> remainingUsers = mallAchieveRecordList
+                        .stream()
+                        .sorted(Comparator.comparing(MallAchieveRecord::getAmount).reversed())
+                        .skip(100)
+                        .collect(Collectors.toList());
+                if(CollUtil.isNotEmpty(remainingUsers)){
+                    for(MallAchieveRecord mallAchieveRecord : remainingUsers){
+                        Long memberId = mallAchieveRecord.getMemberId();
+                        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+                        BigDecimal balance = dappMemberEntity.getBalance();
+
+                        BigDecimal cnt = balance;
+                        dappMemberEntity.setBalance(balance.subtract(cnt));
+                        dappMemberDao.updateById(dappMemberEntity);
+                        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.SYSTEM_PACKAGE_SALE.getCode(),
+                                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                                BigDecimal.ZERO);
+                        dappFundFlowDao.insert(scoreFlow);
+                        dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount);
+                        DappFundFlowEntity feeFlow = new DappFundFlowEntity(
+                                memberId,
+                                poorAmount.negate(),
+                                FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
+                                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                                BigDecimal.ZERO);
+                        dappFundFlowDao.insert(feeFlow);
+
+                        //卖出积分回收。
+                        DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
+                                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
+                        );
+                        BigDecimal avaPackageTotalScore = 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(poorAmount);
+                        packagePoorDic.setValue(avaPackagePoor.toString());
+                        dataDictionaryCustomMapper.updateById(packagePoorDic);
+                        //计算当前价格
+                        BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 8, BigDecimal.ROUND_DOWN);
+                        packageScorePriceDic.setValue(divide.toString());
+                        dataDictionaryCustomMapper.updateById(packageScorePriceDic);
+                    }
+                }
+            }
+
+        }
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public IPage<MallAddressInfo> shopAddressList(MallGoodsQueryDto queryDto) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        Page<MallAddressInfo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
+        queryDto.setMemberId(1L);
+        return dappMemberDao.selectShopAddressListInPage(queryDto, page);
+    }
+
+    @Override
+    public FebsResponse findAllBanner() {
+        QueryWrapper<PlatformBanner> queryWrapper = new QueryWrapper<>();
+        queryWrapper.orderByAsc("is_top");
+        List<PlatformBanner> paymentMethodList = platformBannerMapper.selectList(queryWrapper);
+        return new FebsResponse().success().data(paymentMethodList);
+    }
+
+    @Override
+    public void setDefaultAddress(Long id) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        MallAddressInfo addressInfo = mallAddressInfoMapper.selectById(id);
+        if (addressInfo == null) {
+            throw new FebsException("地址不存在");
+        }
+        this.baseMapper.updateIsDefault(MallAddressInfo.IS_YOUR_N, memberId, null);
+
+        this.baseMapper.updateIsDefault(MallAddressInfo.IS_YOUR_Y, memberId, id);
+    }
+
+    @Override
+    public void confirmOrder(Long id) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id);
+        if (ObjectUtil.isEmpty(orderInfo)) {
+            throw new FebsException("订单不存在");
+        }
+
+        if (orderInfo.getStatus() != MallOrderInfo.STATUS_PAY) {
+            throw new FebsException("该状态不能确认收货");
+        }
+        if (orderInfo.getDeliverState() != MallOrderInfo.DELIVER_STATUS_DONE) {
+            throw new FebsException("该状态不能确认收货");
+        }
+
+        orderInfo.setDeliverState(MallOrderInfo.DELIVER_STATUS_OVER);
+        mallOrderInfoMapper.updateById(orderInfo);
+    }
+
+    @Override
+    public MallAddressInfo findAddress() {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        MallAddressInfo mallAddressInfo = dappMemberDao.selectAddressOneByMemberId(memberId);
+        return mallAddressInfo;
+    }
+
+    @Override
+    public List<PackageRecordVo> packageRecord(PackageRecordDto packageRecordDto) {
+        List<PackageRecordVo> packageRecordVos = new ArrayList<>();
+        Integer type = packageRecordDto.getType();
+        if(2 == type){
+            packageRecordVos = dappMemberDao.selectPackageRecordWeekInPage(DateUtil.beginOfWeek(DateUtil.date()));
+        }else if(3 == type){
+            packageRecordVos = dappMemberDao.selectPackageRecordMonthInPage(DateUtil.date());
+        }else{
+            packageRecordVos = dappMemberDao.selectPackageRecordDayInPage(DateUtil.date());
+        }
+        if(CollUtil.isNotEmpty(packageRecordVos)){
+            Integer packageNum = 0;
+            for(PackageRecordVo packageRecordVo : packageRecordVos){
+                packageNum = packageNum + 1;
+                packageRecordVo.setPackageNum(packageNum);
+            }
+        }
+        return packageRecordVos;
+    }
+
+    @Override
+    public List<AKLineLimitVo> packageKline() {
+        return dappAKlineMapper.selectListByTypeAndLimit(2, 30);
     }
 
     public static List<List<String>> partitionList(List<String> originalList, int partitionSize) {

--
Gitblit v1.9.1