Exemplo n.º 1
0
    def process(args):

        session = Session()

        o_id = args['O_ID']

        message = 'success'

        try:
            order = session.query(Order).with_for_update().filter(
                Order.id == o_id).first()

            if order.status == Order.OrderStatusPending or \
                order.status == Order.OrderStatusCommitted:
                order.status = Order.OrderStatusClosed
            elif order.status == Order.OrderStatusPartialFinished:
                order.status = Order.OrderStatusPartialClosed
            else:
                return 'fail to close status:{} for order:{}'.format(
                    order.status, o_id)

            session.commit()
        except DBAPIError as e:
            print(e.args[0])
            message = 'DBAPI Error occured!'
            session.rollback()
        except DatabaseError as e:
            print(e.args[0])
            message = 'Lock wait timeout exceeded'
            session.rollback()
        finally:
            session.close()

        return message
Exemplo n.º 2
0
    def process(args, redis):

        session = Session()

        order = Order()
        order.user_id = args['USER_ID']
        order.p_no = args['P_NO']
        order.direction = Order.OrderDirectionBuy
        order.volume = args['VOLUME']
        order.price = args['PRICE']
        order.status = Order.OrderStatusCommitted
        order.created_at = time.time()

        session.add(order)

        #TODO need to check user's total money
        max_volume = args['MAX_VOLUME']
        money = args['MONEY']

        try:
            session.commit()
        except DBAPIError as e:
            session.rollback()
            session.close()
            return 'failed'
        else:
            redis.publish_json('chan:matching', args)
            redis.publish('chan:updates', 'CMD_GET_DELEGATE_BUY:{}'.format(args['P_NO']))
            return {'ID':order.id,'USER_ID':order.user_id,'P_NO':order.p_no,'DIRECTION':order.direction,'VOLUME':order.volume,'PRICE':order.price,'STATUS':order.status}
Exemplo n.º 3
0
    def do_cancel(user_id, order_id):

        session = Session()

        order = session.query(Order).with_for_update().filter(
            Order.id == order_id,
            Order.user_id == user_id).limit(1).one_or_none()

        if not order:
            return False, '委托订单无效'

        if not ProductHandler.is_in_exchange(order.p_no):
            return False, '非交易时间不允许委托'

        if order.status == Order.OrderStatusCommitted or Order.status == Order.OrderStatusPending:
            order.status = Order.OrderStatusClosed
        elif order.status == Order.OrderStatusPartialFinished:
            order.status = Order.OrderStatusPartialClosed

        p_no = order.p_no

        try:
            session.commit()
        except:
            session.rollback()
            session.close()
            return False, '系统出错', p_no
        else:
            session.close()
            return True, 'success', p_no
Exemplo n.º 4
0
    def insert_sale_order(user_id, p_no, volume, price):

        if not ProductHandler.is_in_exchange(p_no):
            return False, '非交易时间不允许委托'

        ups = ProductHandler.get_up_stop_price(p_no)
        dps = ProductHandler.get_down_stop_price(p_no)

        if operator.lt(float(price), dps) or operator.gt(float(price), ups):
            return False, '委托价格有误'

        #assets = UserHandler.get_can_sold_assets(user_id, p_no)
        assets = UserHandler.get_can_sale_asset_volume(user_id, p_no)
        if operator.gt(int(volume), assets) or operator.le(int(volume), 0):
            return False, '委托数量有误'

        order = Order()
        order.user_id = user_id
        order.p_no = p_no
        order.direction = Order.OrderDirectionSale
        order.volume = volume
        order.price = price
        order.status = Order.OrderStatusCommitted
        order.created_at = time.time()

        session = Session()
        session.add(order)

        try:
            session.commit()
        except:
            session.rollback()
            session.close()
            return False, '系统出错'
        else:
            session.close()
            return True, 'success'
Exemplo n.º 5
0
        product.turn_qty = product.turn_qty * 100

    sub = session.query(OrderSub).filter_by(p_no='FMQK').update({
        OrderSub.price:
        OrderSub.price / 100.00,
        OrderSub.qty:
        OrderSub.qty * 100,
        OrderSub.unit:
        'h'
    })

    #ph = session.query(ProductHistory).filter_by(p_no='FMQK').update({ProductHistory.last_price:ProductHistory.last_price/100.00,ProductHistory.current_price:ProductHistory.current_price/100.00})

    ua = session.query(UserAssets).filter_by(p_no='FMQK').update({
        UserAssets.qty:
        UserAssets.qty * 100,
        UserAssets.price:
        UserAssets.price / 100.00,
        UserAssets.cost_price:
        UserAssets.cost_price / 100.00,
        UserAssets.unit:
        'h'
    })

    try:
        session.commit()
    except Exception as e:
        print(e.args[0])
        session.rollback()
    finally:
        session.close()