Helius
2020-10-19 2fc20c17d69cee0653c5ff7cf22cefa4eca3d9cf
src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
@@ -355,39 +355,45 @@
        }
        // 需要先
        String phone = memberEntity.getPhone();
        if (!"13632989240".equals(phone) && !"15158130575".equals(phone)) {
            if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
                // 不能超过800个
//                if (amount != null && amount.compareTo(new BigDecimal("800")) > 0) {
//                    return Result.fail("买入额度受限");
//                }
//                BigDecimal bigDecimal = orderCoinDealDao.sumTodayBuyAmount(memberId, symbol);
//                if (bigDecimal == null) {
//                    bigDecimal = BigDecimal.ZERO;
//                }
//                amount = amount == null ? BigDecimal.ZERO : amount;
//                bigDecimal = bigDecimal.add(amount);
//                if (bigDecimal != null && bigDecimal.compareTo(new BigDecimal("800")) > 0) {
//                    return Result.fail("买入额度受限");
//                }
//                // 挂单不能超过800
//                BigDecimal bigDecimal1 = orderCoinDealDao.sumTodayEntrustCntBuyAmount(memberId, symbol);
//                if (bigDecimal1 == null) {
//                    bigDecimal1 = BigDecimal.ZERO;
//                }
//                bigDecimal1 = bigDecimal1.add(amount);
//                if (bigDecimal1 != null && bigDecimal1.compareTo(new BigDecimal("800")) > 0) {
//                    return Result.fail("买入额度受限");
//                }
            } else {
               return Result.fail("卖出受限");
            }
        }
//        if (!"13632989240".equals(phone) && !"15158130575".equals(phone)) {
//            if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) {
//                // 不能超过800个
//
////                if (amount != null && amount.compareTo(new BigDecimal("800")) > 0) {
////                    return Result.fail("买入额度受限");
////                }
////                BigDecimal bigDecimal = orderCoinDealDao.sumTodayBuyAmount(memberId, symbol);
////                if (bigDecimal == null) {
////                    bigDecimal = BigDecimal.ZERO;
////                }
////                amount = amount == null ? BigDecimal.ZERO : amount;
////                bigDecimal = bigDecimal.add(amount);
////                if (bigDecimal != null && bigDecimal.compareTo(new BigDecimal("800")) > 0) {
////                    return Result.fail("买入额度受限");
////                }
////                // 挂单不能超过800
////                BigDecimal bigDecimal1 = orderCoinDealDao.sumTodayEntrustCntBuyAmount(memberId, symbol);
////                if (bigDecimal1 == null) {
////                    bigDecimal1 = BigDecimal.ZERO;
////                }
////                bigDecimal1 = bigDecimal1.add(amount);
////                if (bigDecimal1 != null && bigDecimal1.compareTo(new BigDecimal("800")) > 0) {
////                    return Result.fail("买入额度受限");
////                }
//            } else {
//               return Result.fail("卖出受限");
//            }
//        }
        BigDecimal nowPriceinBigDecimal = price;
        //查询当前价
        BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol + "/USDT")));
        BigDecimal subPrice = nowPrice.multiply(BigDecimal.valueOf(0.2));
        BigDecimal minPrice = nowPrice.subtract(subPrice);
        BigDecimal maxPrice = nowPrice.add(subPrice);
        if (nowPriceinBigDecimal.compareTo(minPrice) < 0 || nowPriceinBigDecimal.compareTo(maxPrice) > 0) {
            return Result.fail("请输入合适的价格");
        }
        // 获取交易管理的杠杠倍率,手续费率等信息,由平台进行设置
        symbol = symbol.toUpperCase();
@@ -419,18 +425,15 @@
            totalPayPrice = price.multiply(amount).add(closingPrice);
            entrustAmount = price.multiply(amount);
            // 限价买不能高于当前10%
            if (OrderCoinsEntity.ORDERTYPE_BUY == type) {
                BigDecimal multiply = nowPrice.multiply(new BigDecimal("1.2"));
                if(price.compareTo(multiply)>0){
                    return Result.fail("不能高于当前价的120%");
                }
            }else{
                // 卖不能小于当前90
                BigDecimal multiply = nowPrice.multiply(new BigDecimal("0.8"));
                if(price.compareTo(multiply)<0){
                    return Result.fail("不能低于当前价的80%");
                }
            BigDecimal multiply = nowPrice.multiply(new BigDecimal("1.2"));
            if (price.compareTo(multiply) > 0) {
                return Result.fail("不能高于当前价的120%");
            }
            multiply=  nowPrice.multiply(new BigDecimal("0.8"));
            if (price.compareTo(multiply) < 0) {
                return Result.fail("不能低于当前价的80%");
            }
        } else {
            // 市价
            if (OrderCoinsEntity.ORDERTYPE_BUY == type) {
@@ -788,7 +791,7 @@
    @Override
    public Result findAllWalletCoinOrder() {
        List<OrderCoinsDealEntity> orderCoinsDealEntities = orderCoinDealDao.selectAllCoinDealsOrderBySymbol(CoinTypeEnum.ROC.toString());
        List<OrderCoinsDealEntity> orderCoinsDealEntities = orderCoinDealDao.selectAllCoinDealsOrderBySymbol(CoinTypeEnum.RFNC.toString());
        return Result.ok(orderCoinsDealEntities);
    }
@@ -907,7 +910,7 @@
    @Transactional(rollbackFor = Exception.class)
    public void dealEntrustCoinOrder() {
        List<String> ignoreTypes = new ArrayList<>();
        ignoreTypes.add(SymbolsConstats.ROC);
        ignoreTypes.add(SymbolsConstats.RFNC);
        List<OrderCoinsEntity> list = orderCoinsDao.selectAllEntrustingCoinOrderList(ignoreTypes);
        if (CollUtil.isNotEmpty(list)) {
            for (OrderCoinsEntity orderCoinsEntity : list) {
@@ -1095,19 +1098,19 @@
        if (CollectionUtils.isNotEmpty(trades)) {
            for (OrderCoinsEntity trade : trades) {
                if (trade != null) {
                    if (trade.getOrderType()==2 && trade.getEntrustCnt().compareTo(trade.getDealCnt())!=0){
                        System.out.println("问题卖单:"+ JSON.toJSONString(trade));
                    if (trade.getOrderType() == 2 && trade.getEntrustCnt().compareTo(trade.getDealCnt()) != 0) {
                        System.out.println("问题卖单:" + JSON.toJSONString(trade));
                    }
                    //orderCoinsDao.updateStatus(trade.getId(),OrderCoinsEntity.ORDERSTATUS_DONE);
                    ids.add(trade.getId());
                    // 买单 实际成交金额小于委托的 这一部分从冻结扣除
                    if(OrderCoinsEntity.ORDERTYPE_BUY==trade.getOrderType()){
                        if(trade.getEntrustAmount().compareTo(trade.getDealAmount())>0){
                    if (OrderCoinsEntity.ORDERTYPE_BUY == trade.getOrderType()) {
                        if (trade.getEntrustAmount().compareTo(trade.getDealAmount()) > 0) {
                            // 此时退回这部分的差额
                            BigDecimal subtract = trade.getEntrustAmount().subtract(trade.getDealAmount());
                            MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(trade.getMemberId(), CoinTypeEnum.USDT.name());
                            if(memberWalletCoinEntity!=null){
                                coinService.updateWalletBalance(memberWalletCoinEntity.getId(),subtract,null,subtract.negate());
                            if (memberWalletCoinEntity != null) {
                                coinService.updateWalletBalance(memberWalletCoinEntity.getId(), subtract, null, subtract.negate());
                            }
                        }
                    }