Пример #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
Пример #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}
Пример #3
0
 def save_to_mysql_by_sql_alchemy(self, prod, status):
     #print('open sqlalchrmy session...')
     db_session = Session()
     try:
         tm = Timer()
         tm.start()
         db_session.add(
             DarenGoodInfo(createTime=prod['createTime'],
                           darenId=prod['userId'],
                           darenNoteId=prod['darenNoteId'],
                           darenNoteUrl=prod['darenNoteUrl'],
                           darenNoteTitle=prod['darenNoteTitle'],
                           darenNoteReason=prod['darenNoteReason'],
                           darenNoteCover=prod['darenNoteCover'],
                           darenNotePubDate=prod['darenNotePubDate'],
                           goodId=prod['goodId'],
                           goodUrl=prod['goodUrl'],
                           goodNoteDetailStep=3))
         db_session.commit()
         self.insert_cot += 1
         tm.end()
         print('{}\tSave {} to mysql: OK. spent {} / {} s'\
               .format(status,prod['darenNoteId'],
               round(tm.gap,2),round(self.db_time/self.thread_cot,2),
               ))
         self.db_time += tm.gap
     except Exception as e:
         print('{}\tSave to mysql ERROR: {}'\
               .format(status,str(e)))
     del tm
     db_session.close()
Пример #4
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
Пример #5
0
    def update_prodoct_history(p_no, current_price):

        session = Session()
        ph = session.query(PH).filter_by(p_no=p_no,
                                         work_date=datetime.date.today(),
                                         deleted=0).one_or_none()

        if not ph:
            ph = PH()

            ph.work_date = datetime.date.today()
            ph.p_no = p_no
            ph.last_price = Common.get_last_price(session, p_no)
            ph.open_price = current_price  #Common.get_open_price(session, p_no)

            if not operator.eq(current_price, 0):
                ph.current_price = current_price
            else:
                ph.current_price = ph.last_price

            max_price, min_price, total_volume, total_amount = ProductHandler.get_statistic_total(
                p_no)  #Common.get_statistic_total(session, p_no)
            ph.max_price = max_price
            ph.min_price = min_price
            ph.total_volume = total_volume
            ph.total_amount = total_amount

            session.add(ph)
        else:
            if operator.eq(ph.open_price, 0):
                ph.open_price = current_price

            if not operator.eq(current_price, 0):
                ph.current_price = current_price
            elif operator.eq(ph.current_price, 0):
                ph.current_price = ph.last_price

            max_price, min_price, total_volume, total_amount = ProductHandler.get_statistic_total(
                p_no)  #Common.get_statistic_total(session, p_no)
            ph.max_price = max_price
            ph.min_price = min_price
            ph.total_volume = total_volume
            ph.total_amount = total_amount

        try:
            session.commit()
        except DBAPIError as e:
            print(e.arg[0])
        finally:
            session.close()
Пример #6
0
def raw_data():

    session = Session()

    user = User()
    user.login_name = 'caoxuewei'
    user.login_pass = User.encrypt_pass('123456')
    user.display_name = 'caoxuewei'
    user.status = User.UserStatusActive
    user.real_name = '曹学玮'
    user.mobile = '15050593772'
    user.id_no = '321084199305020824'

    session.add(user)
    session.commit()

    '''
    publisher = Publisher()
    publisher.name = '吾品玉艺'.encode('utf-8')
    publisher.bank_no = '8888888888888'
    publisher.status = Publisher.PublisherStatusActive

    session.add(publisher)
    session.commit()

    catalog = Catalog()
    catalog.name = 'Jade'
    catalog.status = Catalog.ProductCatalogStatusPublished

    session.add(catalog)

    product = Product()
    product.name = '万盟玉栈3号'.encode('utf-8')
    product.pub_id = publisher.id
    product.p_no = '720003'
    product.issue_price = 500.00
    product.unit = 'g'
    product.qty = 100000
    product.turn_qty = 70000
    product.status = Product.ProductStatusActive

    session.add(product)
    session.commit()
    '''

    '''
Пример #7
0
def raw_data():

    session = Session()

    user = User()
    user.login_name = 'victor299'
    user.login_pass = User.encrypt_pass('123456')
    user.display_name = 'lizhensheng'
    user.status = User.UserStatusActive
    user.real_name = '王大可'
    user.mobile = '18112605920'
    user.id_no = '963258741'

    session.add(user)
    session.commit()
    '''
    publisher = Publisher()
    publisher.name = '吾品玉艺'.encode('utf-8')
    publisher.bank_no = '8888888888888'
    publisher.status = Publisher.PublisherStatusActive

    session.add(publisher)
    session.commit()

    catalog = Catalog()
    catalog.name = 'Jade'
    catalog.status = Catalog.ProductCatalogStatusPublished

    session.add(catalog)

    product = Product()
    product.name = '万盟玉栈3号'.encode('utf-8')
    product.pub_id = publisher.id
    product.p_no = '720003'
    product.issue_price = 500.00
    product.unit = 'g'
    product.qty = 100000
    product.turn_qty = 70000
    product.status = Product.ProductStatusActive

    session.add(product)
    session.commit()
    '''
    '''
Пример #8
0
def update_prodoct_history(p_no, current_price, max_price, min_price,
                           total_volume, total_amount):
    session = Session()
    ph = session.query(ProductHistory).filter_by(
        p_no=p_no, work_date=datetime.date.today()).order_by(
            ProductHistory.id.desc()).first()

    print(ph)

    if not ph:
        ph = ProductHistory()

        ph.work_date = datetime.date.today()
        ph.p_no = p_no
        ph.last_price = OrderDeal.get_last_price(p_no)
        ph.open_price = OrderDeal.get_open_price(p_no)

        ph.current_price = current_price
        ph.max_price = max_price
        ph.min_price = min_price
        ph.total_volume = total_volume
        ph.total_amount = total_amount

        session.add(ph)
    else:
        ph.current_price = current_price
        ph.max_price = max_price
        ph.min_price = min_price
        ph.total_volume = total_volume
        ph.total_amount = total_amount

    try:
        session.commit()
    except DBAPIError as e:
        print(e.args[0])
    finally:
        session.close()
Пример #9
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'
Пример #10
0
    #UserWithdraw.install(engine)

    p = Product()
    p.p_no = 'CZQH'
    p.name = '启航'
    p.pub_id = 1
    p.issue_price = 5.00
    p.unit = 'h'
    p.qty = 10000000
    p.turn_qty = 8000000
    p.status = Product.ProductStatusCreated
    p.ex_from = '2017-12-01'
    p.ex_end = '2018-12-31'

    session = Session()
    session.add(p)
    session.commit()
    session.close()
    '''
    UserMeta.install(engine)
    Publisher.install(engine)
    Catalog.install(engine)
    Product.install(engine)
    Order.install(engine)
    OrderDeal.install(engine)
    UserMoney.install(engine)
    UserAssets.install(engine)

    '''
    ##raw_data()