示例#1
0
 def get(self):
     currency = Currency.get_currency()
     if currency is None:
         abort(400,
               code=1001,
               message={'currency': 'currency does not exist'})
     return currency
示例#2
0
文件: order.py 项目: q25979/tdb99
def query_payment_amount(order):
    if order.match_order is None:
        option = Setting.get_json('general_option')
        dollar2rmb = decimal.Decimal(option['dollar2rmb'])
        dollar = Currency.get_price() * order.amount
        price = dollar * dollar2rmb
    else:
        price = order.match_order.payment_amount
    return '{}'.format(price)
示例#3
0
文件: user.py 项目: q25979/tdb99
    def update_recommend_reward(self):
        option = Setting.get_json('general_option')
        recommend_reward_amount = [
            decimal.Decimal(x) for x in option['recommend_reward_amount']
        ]
        evaluation_reward_amount = decimal.Decimal(
            option['evaluation_reward_amount'])

        # 先赠送本用户
        usd_price = Currency.get_price()
        if usd_price == 0:
            abort(400,
                  code=1002,
                  message={'usd_price': 'usd_price is invaild'})

        # amount = evaluation_reward_amount / usd_price
        amount = 1000

        assets = Assets.get_assets(self.id)
        details = {'message': u'完成评测奖励'}
        assets.update_total_balance(amount, g_assets_record_type.EVALUATION,
                                    details)

        # 再赠送每一代推荐
        layer = 0
        layer_max = len(recommend_reward_amount)
        sponsor = self.sponsor

        while sponsor and layer < layer_max:

            details = {
                'message': '被推荐人:{}, 第几代:{}'.format(self.uid, layer + 1)
            }
            if sponsor.state == g_user_state_type.EVALUATION:
                assets = Assets.get_assets(sponsor.id)
                assets.update_total_balance(recommend_reward_amount[layer],
                                            g_assets_record_type.SPONSOR,
                                            details)
            layer += 1
            sponsor = sponsor.sponsor
示例#4
0
文件: order.py 项目: q25979/tdb99
    def confirm_order_process():
        order_list = ConfirmOrder.query.filter(ConfirmOrder.status == g_confirm_order_status.UNPROCESSED).all()

        for order in order_list:
            change = ConfirmOrder.query.filter(
                ConfirmOrder.id == order.id, ConfirmOrder.status == g_confirm_order_status.UNPROCESSED).update(
                dict(status=g_confirm_order_status.PROCESSED))
            if not change:
                continue

            detail = {'message': '挂单交易'}
            assets = Assets.get_assets(order.buy_user_id)
            assets.update_community_today_balance(order.amount, g_assets_record_type.BUY, detail)

            # 用于计算一个买卖周期
            order.buy_user.buy_order_cnt += 1

            if order.sell_user.buy_order_cnt > 0:
                order.sell_user.buy_order_cnt -= 1
                option = Setting.get_json('general_option')
                buy_sell_free_amount = option['buy_sell_free_amount']
                buy_sell_rate = decimal.Decimal(option['buy_sell_rate'])
                fee = order.amount * buy_sell_rate
                amount = buy_sell_free_amount - fee
                detail = {
                    'message': '成功买卖各一单,释放数量:{}, 单数量:{}, 扣除手续费:{}'.format(
                        buy_sell_free_amount, order.amount, fee)
                }
                assets = Assets.get_assets(order.sell_user_id)
                if assets.update_total_balance(-buy_sell_free_amount, g_assets_record_type.BUY_SELL_FREE, detail):
                    assets.update_transaction_balance(amount, g_assets_record_type.BUY_SELL_FREE, detail)

                sell_user = order.sell_user
                sell_user.update_today_have_transaction()
                sell_user.update_transaction_free()

            currency = Currency.get_currency()
            currency.update_transaction_cnt()

            db.session.commit()
示例#5
0
文件: order.py 项目: q25979/tdb99
def query_current_price(order):
    if order.match_order is None:
        price = Currency.get_price()
    else:
        price = order.match_order.current_price
    return '{}'.format(price)
示例#6
0
文件: order.py 项目: q25979/tdb99
    def match_order_process():
        option = Setting.get_json('general_option')
        # match_order_cnt = option['match_order_cnt']
        dollar2rmb = decimal.Decimal(option['dollar2rmb'])

        task = MatchOrderTask.query.filter(MatchOrderTask.status == g_match_order_task_status.UNPROCESSED).first()
        if task is None:
            return

        change = MatchOrderTask.query.filter(MatchOrderTask.status == g_match_order_task_status.UNPROCESSED).update(
            dict(status=g_match_order_task_status.PROCESSED))
        if not change:
            return

        sell_list = Order.query.filter(
            Order.side == g_order_side.SELL, Order.status == g_order_status.PENDING)

        sell_list = sell_list.order_by(Order.priority.desc(), Order.created_at.asc())

        i = 0
        for item in sell_list:
            if i >= task.order_cnt:
                break

            buy_order = Order.query.filter(
                Order.side == g_order_side.BUY, Order.user_id != item.user_id,
                Order.status == g_order_status.PENDING).order_by(Order.priority.desc(), Order.created_at.asc()).first()

            if buy_order is None:
                continue

            change = Order.query.filter(Order.id == item.id, Order.status == g_order_status.PENDING).update(
                dict(status=g_order_status.MATCH))
            if not change:
                continue
            change = Order.query.filter(Order.id == buy_order.id, Order.status == g_order_status.PENDING).update(
                dict(status=g_order_status.MATCH))
            if not change:
                item.status = g_order_status.PENDING
                db.session.commit()
                continue

            usd_price = CryptoCurrency.query.filter(CryptoCurrency.currency_code == 'USDT').first().usd_price
            dollar = Currency.get_price() * item.amount
            usdt = dollar / usd_price

            order = MatchOrder(sell_user_id=item.user_id,
                               buy_user_id=buy_order.user_id,
                               sell_order_id=item.id,
                               buy_order_id=buy_order.id,
                               sell_number=item.number,
                               buy_number=buy_order.number,
                               payment_amount=dollar * dollar2rmb,
                               payment_amount_usdt=usdt,
                               current_price=Currency.get_price())
            db.session.add(order)
            db.session.flush()
            item.match_order_id = order.id
            buy_order.match_order_id = order.id
            db.session.commit()
            try:
                if order.buy_user.order_mobile:
                    clnt = YunpianClient('fcf725316cbb8ff1438c90ff76c6cebe')
                    param = {YC.MOBILE: '+' + order.buy_user.order_mobile.replace(' ', ''),
                             YC.TEXT: "【乐宝】您的订单{}已匹配成功,请尽快安排处理。".format('')}
                    clnt.sms().single_send(param)
            except:
                pass

            i += 1
        db.session.commit()
示例#7
0
    def settlement_handler():
        option = Setting.get_json('general_option')
        community_node_cnt = option['community_node_cnt']
        community_total_balance = option['community_total_balance']
        community_transaction_day_cnt = option['community_transaction_day_cnt']
        community_sponsor_cnt = option['community_sponsor_cnt']
        community_line_cnt = option['community_line_cnt']
        community_line_people_cnt = option['community_line_people_cnt']

        # 更新连续购买天数
        User.update_continuous_buy_cnt()
        User.query.update(dict(team_qualified_cnt=0))

        # TODO 测试是否可以写成一个update
        Assets.query.filter(Assets.community_today_balance > 0).update(
            dict(community_balance=Assets.community_balance +
                 Assets.community_today_balance))
        Assets.query.update(dict(community_today_balance=0))

        # 筛选出合格用户,并更新每个团队合格用户人数
        q = User.query.filter(
            User.continuous_buy_cnt >= community_transaction_day_cnt,
            User.active == 1).all()
        for user in q:
            user.update_team_qualified_cnt()

        count = db.session.query(db.func.count(User.id)).filter(
            User.is_community_node == 1, User.active == 1).first()[0]

        user_q = db.session.query(User).filter(
            User.id == Assets.user_id,
            Assets.grand_total_balance >= community_total_balance[0],
            User.is_community_node == 0).all()

        for user in user_q:
            ret = 0
            if count < community_node_cnt[0]:
                ret = DailySettlement.community_check_user(
                    user, community_total_balance[0],
                    community_transaction_day_cnt, community_sponsor_cnt[0],
                    community_line_cnt[0], community_line_people_cnt)
            elif count < community_node_cnt[1]:
                ret = DailySettlement.community_check_user(
                    user, community_total_balance[1],
                    community_transaction_day_cnt, community_sponsor_cnt[1],
                    community_line_cnt[1], community_line_people_cnt)
            elif count < community_node_cnt[2]:
                ret = DailySettlement.community_check_user(
                    user, community_total_balance[2],
                    community_transaction_day_cnt, community_sponsor_cnt[2],
                    community_line_cnt[2], community_line_people_cnt)
            else:
                pass

            if ret:
                user.update_is_community_node()
                count += 1

        if not count:
            return

        # 计算节点分红
        community_dividend_rate = decimal.Decimal(
            option['community_dividend_rate'])
        currency = Currency.get_currency()
        amount = currency.today_transaction_amount * community_dividend_rate / count
        q = User.query.filter(User.is_community_node == 1,
                              User.active == 1).all()
        detail = {
            'message':
            '社区节点分红, 当天交易量:{}, 分红比例:{}, 社区节点数量:{}'.format(
                currency.today_transaction_amount, community_dividend_rate,
                count)
        }
        for user in q:
            assets = Assets.get_assets(user.id)
            assets.update_total_balance(amount, g_assets_record_type.DIVIDEND,
                                        detail)

        currency.clear_today_transaction_amount()