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
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}
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
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'
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()