コード例 #1
0
ファイル: movie.py プロジェクト: txywswj/flaskproject
class Movie(db.Model, Model):
    mid = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String(64), nullable=False)

    language = db.Column(db.String(32))
    subtitle = db.Column(db.String(32))
    show_date = db.Column(db.Date)
    vision = db.Column(db.String(16))
    model = db.Column(db.String(16))
    screen_size = db.Column(db.String(16))
    introduction = db.Column(db.Text)
    status = db.Column(db.Integer, default=0, nullable=False, index=True)

    @classmethod
    def create_test_data(cls, num=10):
        for i in range(1, num + 1):
            m = Movie()
            m.mid = i
            m.sn = str(i).zfill(10)
            m.name = '电影名称%s' % i
            m.language = '英文'
            m.subtitle = '中文'
            # m.show_date =
            m.mode = '数字'
            m.vision = '2D'
            m.screen_size = 'IMAX'
            m.introduction = 'blahblah哈哈'
            m.status = 1
            db.session.add(m)
        db.session.commit()
        print('movie test data done!')
コード例 #2
0
ファイル: hall.py プロジェクト: txywswj/flaskproject
class Hall(db.Model, Model):
    hid = db.Column(db.Integer, primary_key=True)
    cid = db.Column(db.Integer)
    name = db.Column(db.String(64), nullable=False)
    screen_type = db.Column(db.String(32))
    audio_type = db.Column(db.String(32))
    seats_num = db.Column(db.Integer, default=0, nullable=False)
    status = db.Column(db.Integer, nullable=False, index=True)
コード例 #3
0
class Cinema(db.Model, Model):
    #cid 影院id,主键
    cid = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, nullable=False)
    address = db.Column(db.String(128), nullable=False)
    halls = db.Column(db.Integer, default=0, nullable=False)
    handle_fee = db.Column(db.INTEGER, default=0, nullable=False)
    buy_limit = db.Column(db.INTEGER, default=0, nullable=False)
    status = db.Column(db.INTEGER, default=0, nullable=False, index=True)
コード例 #4
0
class Movie(db.Model, Model):
    #电影主键ID
    mid = db.Column(db.Integer, primary_key=True)
    #电影名字
    name = db.Column(db.String(64), nullable=False)
    #语言种类
    language = db.Column(db.String(32))
    #字幕
    subtitle = db.Column(db.String(32))
    #上映时间
    show_date = db.Column(db.Date)
    #电影格式
    mode = db.Column(db.String(16))
    #放映类型3D,4D
    vision = db.Column(db.String(16))
    #屏幕尺寸
    screen_size = db.Column(db.String(16))
    #内容简介
    introduction = db.Column(db.Text)
    #状态
    status = db.Column(db.Integer, default=0, nullable=False, index=True)
コード例 #5
0
class Movie(db.Model, Model):
    """电影信息表"""
    """电影ID,主键"""
    mid = db.Column(db.Integer, primary_key=True)
    """电影名称"""
    name = db.Column(db.String(64), nullable=False)
    """语言"""
    language = db.Column(db.String(32))
    """字幕"""
    subtitle = db.Column(db.String(32))
    """上映时间"""
    show_date = db.Column(db.Date)
    """电影格式,比如胶字、数字"""
    mode = db.Column(db.String(16))
    """放映类型,3D 2D"""
    vision = db.Column(db.String(16))
    """屏幕尺寸"""
    screen_size = db.Column(db.String(16))
    """内容简介"""
    introduction = db.Column(db.Text)
    """状态"""
    status = db.Column(db.Integer, default=0, nullable=False, index=True)
コード例 #6
0
ファイル: movie.py プロジェクト: Elegant-Smile/flask
class Movie(db.Model, Model):
    mid = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(200), unique=True, nullable=False)
    language = db.Column(db.String(32))
    subtitle = db.Column(db.String(32))
    show_date = db.Column(db.Date)
    vision = db.Column(db.String(16))
    model = db.Column(db.String(16))
    screen_size = db.Column(db.String(16))
    introduction = db.Column(db.Text)
    status = db.Column(db.Integer, default=0, index=True, nullable=False)

    def __json__(self):
        keys = vars(self).keys()
        data = {}
        for key in keys:
            if not key.startswith('_'):
                data[key] = getattr(self, key)
        return data

    @classmethod
    def create_test_data(cls, num=10):
        for i in range(1, num + 1):
            m = Movie()
            m.mid = i
            m.sn = str(i).zfill(10)
            m.name = '电影名称%s' % i
            m.language = '英文'
            m.subtitle = '中文'
            # m.show_date =
            m.mode = '数字'
            m.vision = '2D'
            m.screen_size = 'IMAX'
            m.introduction = 'blahblah哈哈'
            m.status = 1
            db.session.add(m)
        db.session.commit()
        print('movie test data done!')
コード例 #7
0
class Hall(db.Model, Model):
    """影厅表"""
    """影厅ID,主键"""
    hid = db.Column(db.Integer, primary_key=True)
    """cid,影院ID"""
    cid = db.Column(db.Integer)
    """影厅名称"""
    name = db.Column(db.String(64), nullable=False)
    """屏幕的类型"""
    screen_type = db.Column(db.String(32))
    """音响类型"""
    audio_type = db.Column(db.String(32))
    """座位数量"""
    seats_num = db.Column(db.Integer, default=0, nullable=False)
    """状态"""
    status = db.Column(db.Integer, default=0, nullable=False, index=True)
コード例 #8
0
class Cinema(db.Model, Model):
    cid = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, nullable=False)
    address = db.Column(db.String(256), nullable=False)
    halls = db.Column(db.Integer, default=0, nullable=False)
    handle_fee = db.Column(db.Integer, default=0, nullable=False)
    buy_limit = db.Column(db.Integer, default=0, nullable=False)
    status = db.Column(db.Integer, nullable=False, index=True)

    @classmethod
    def create_test_data(cls, cinema_num=10, hall_num=10, play_num=10):
        HALL_SEATS_NUM = 25
        start_time = time.time()
        from tigereye.models.hall import Hall
        from tigereye.models.movie import Movie
        from tigereye.models.play import Play
        from tigereye.models.seat import Seat, PlaySeat
        from tigereye.models.order import Order
        f = faker.Faker('zh_CN')
        screen_types = ['普通', 'IMAX']
        audio_types = ['普通', '杜比环绕']
        cinemas = []
        for i in range(1, cinema_num + 1):
            cinema = Cinema()
            cinema.cid = i
            cinema.name = '%s影城' % f.name()
            cinema.address = f.address()
            cinema.status = 1
            cinema.put()
            cinemas.append(cinema)
        Cinema.commit()

        halls = []
        plays = []
        seats = []
        for cinema in cinemas:
            for n in range(1, hall_num + 1):
                hall = Hall()
                hall.cid = cinema.cid
                hall.name = '%s号厅' % n
                hall.screen_type = random.choice(screen_types)
                hall.audio_type = random.choice(audio_types)
                hall.seats_num = HALL_SEATS_NUM
                hall.status = 1
                hall.put()
                halls.append(hall)
            Hall.commit()

        for hall in halls:
            hall.seats = []
            for s in range(1, hall.seats_num + 1):
                seat = Seat()
                seat.cid = hall.cid
                seat.hid = hall.hid
                seat.x = s % 5 or 5
                seat.y = math.ceil(s / 5)
                seat.row = seat.x
                seat.column = seat.y
                seat.seat_type = 1
                seat.put()
                hall.seats.append(seat)
            Seat.commit()

            for p in range(1, play_num + 1):
                play = Play()
                play.cid = cinema.cid
                play.hid = hall.hid
                play.mid = p
                play.start_time = datetime.now()
                play.duration = 3600
                play.price_type = 1
                play.price = 7000
                play.market_price = 5000
                play.lowest_price = 3000
                play.status = 1
                play.put()
                play.hall = hall
                plays.append(play)
            Play.commit()

        for play in plays:
            for seat in play.hall.seats:
                ps = PlaySeat()
                ps.pid = play.pid
                ps.copy(seat)
                ps.put()
            PlaySeat.commit()
        current_app.logger.info('create test data done! cost %.2f seconds' %
                                (time.time() - start_time))
コード例 #9
0
class Play(db.Model, Model):
    __tablename__ = "play"
    pid = db.Column(db.Integer, primary_key=True)
    cid = db.Column(db.Integer)
    hid = db.Column(db.Integer)
    mid = db.Column(db.Integer)

    start_time = db.Column(db.DATETIME, nullable=False)
    # 时长
    duration = db.Column(db.Integer, default=0, nullable=False)

    price_type = db.Column(db.Integer)
    price = db.Column(db.Integer)
    market_price = db.Column(db.Integer)
    lowest_price = db.Column(db.Integer)
    # 在服务器段进行时间的定义
    created_time = db.Column(db.DATETIME, server_default=text("CURRENT_TIMESTAMP"))
    # 当修改的时候获取时间
    updated_time = db.Column(db.DATETIME, onupdate=func.now())
    status = db.Column(db.Integer, nullable=False, default=0, index=True)
コード例 #10
0
ファイル: seat.py プロジェクト: Elegant-Smile/flask
class PlaySeat(db.Model, Model):
    psid = db.Column(db.Integer, primary_key=True)
    orderno = db.Column(db.String(32), index=True)
    cid = db.Column(db.Integer)
    hid = db.Column(db.Integer)
    sid = db.Column(db.Integer)
    pid = db.Column(db.Integer)

    seat_type = db.Column(db.String(16))
    love_seats = db.Column(db.String(16))

    x = db.Column(db.Integer)
    y = db.Column(db.Integer)
    row = db.Column(db.String(16))
    column = db.Column(db.String(16))
    area = db.Column(db.String(16))

    status = db.Column(db.Integer, default=0, index=True, nullable=False)

    lock_time = db.Column(db.DateTime)
    created_time = db.Column(db.DateTime,
                             server_default=text('CURRENT_TIMESTAMP'))

    def copy(self, seat):
        self.sid = seat.sid
        self.cid = seat.cid
        self.hid = seat.hid
        self.x = seat.x
        self.y = seat.y
        self.row = seat.row
        self.column = seat.column
        self.area = seat.area
        self.seat_type = seat.seat_type
        self.love_seats = seat.love_seats
        self.status = seat.status

    @classmethod
    # 类方法,能直接被类. 调用
    def lock(cls, orderno, pid, sid_list):
        # 事物
        session = db.create_scoped_session()
        # query能直接放对象吗?<sql:query>标签用来运行SQL SELECT语句,
        # filter用类名.属性名,比较用==,filter_by直接用属性名,比较用=
        # rows 是链式调用返回的修改数
        rows = session.query(PlaySeat).filter(
            PlaySeat.pid == pid,
            # Seatstatus 自定义类方法
            PlaySeat.status == SeatStatus.ok.value,
            # sqlalchemy in语法查询,查询id 在一个list里的所有集合
            PlaySeat.sid.in_(sid_list)
        ).update(
            {
                'orderno': orderno,
                'status': SeatStatus.locked.value,
                'lock_time': datetime.now()
                # 属于 update 的参数 synchronize_session用于query在进行delete or update操作时,对session的同步策略。
                # False - 不对session进行同步,直接进行delete or update操作。
            },
            synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()
        return rows

    @classmethod
    def unlock(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.locked.value).update(
                {
                    'orderno': None,
                    'status': SeatStatus.ok.value,
                },
                synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            # 返回的是0,
            return 0
        session.commit()
        return rows

    @classmethod
    def buy(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.locked.value).update(
                {
                    'status': SeatStatus.sold.value,
                }, synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            # 返回的是0,
            return 0
        session.commit()
        return rows

    @classmethod
    def refund(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.sold.value
            # 把座位的状态码改了,订单号改为无
        ).update({
            'status': SeatStatus.ok.value,
            'orderno': None,
        },
                 synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            # 返回的是0,
            return 0
        session.commit()
        return rows

    @classmethod
    def print_tickets(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.sold.value
            # 把座位的状态码改了,订单号改为无
        ).update({
            'status': SeatStatus.ok.value,
            'orderno': None,
        },
                 synchronize_session=False)
        # 如果操作数和 座位数长度不一样就回滚
        if rows != len(sid_list):
            session.rollback()
            # 返回的是0,
            return 0
        session.commit()
        return rows

    @classmethod
    def getby_orderno(cls, orderno):
        # filter的时候条件之间是使用“==",fitler_by使用的是"="
        return cls.query.filter_by(orderno=orderno).all()
コード例 #11
0
ファイル: cinema.py プロジェクト: Jiaqi0109/tigereye
class Cinema(db.Model, Model):
    cid = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, nullable=False)
    address = db.Column(db.String(256), nullable=False)
    halls = db.Column(db.Integer, default=0, nullable=False)
    handle_fee = db.Column(db.Integer, default=0, nullable=False)
    buy_limit = db.Column(db.Integer, default=0, nullable=False)
    status = db.Column(db.Integer, nullable=False, index=True)

    @classmethod
    def create_test_data(cls, cinema_num=10, hall_num=10, play_num=10):
        from tigereye.models.hall import Hall
        from tigereye.models.movie import Movie
        from tigereye.models.order import Order
        from tigereye.models.seat import Seat, PlaySeat
        from tigereye.models.play import Play

        time1 = time.time()

        f = faker.Faker('zh_CN')
        screen_types = ['普通', 'IMAX']
        audio_types = ['普通', '杜比环绕']
        cm_name = ['影院', '影城', '国际影城', '国际影院']
        for i in range(1, cinema_num + 1):
            cinema = Cinema()
            cinema.cid = i
            cinema.name = f.company()[:-6] + random.choice(cm_name)
            cinema.address = f.address()
            cinema.status = 1
            print(cinema.name)
            cinema.save()

            for n in range(1, hall_num + 1):
                hall = Hall()
                hall.cid = cinema.cid
                hall.name = '%s号厅' % n
                hall.screen_type = random.choice(screen_types)
                hall.audio_type = random.choice(audio_types)
                hall.seats_num = 25
                hall.status = 1
                hall.save()

                seats = []
                for s in range(1, hall.seats_num + 1):
                    seat = Seat()
                    seat.cid = cinema.cid
                    seat.hid = hall.hid
                    seat.x = s % 5 or 5
                    seat.y = ceil(s / 5)
                    seat.row = seat.x
                    seat.column = seat.y
                    seat.seat_type = 1
                    seat.put()
                    seats.append(seat)
                Seat.commit()

                for p in range(1, play_num + 1):
                    play = Play()
                    play.cid = cinema.cid
                    play.hid = hall.hid
                    play.mid = p
                    play.start_time = datetime.now()
                    play.duration = 3600
                    play.price_type = 1
                    play.price = 7000
                    play.market_price = 5000
                    play.lowest_price = 3000
                    play.status = 1
                    play.save()

                    for seat in seats:
                        ps = PlaySeat()
                        ps.pid = play.pid
                        ps.copy(seat)
                        ps.put()
                    PlaySeat.commit()
        current_app.logger.info('create test data done! %.2f s' %
                                (time.time() - time1))
コード例 #12
0
class Order(db.Model, Model):
    #订单表名称
    __tablename__ = "orders"
    # 订单id 主键
    oid = db.Column(db.String(32), primary_key=True)
    # 排期id
    pid = db.Column(db.Integer)
    # 影院id
    cid = db.Column(db.Integer, default=0, nullable=False)
    # 座位id
    sid = db.Column(db.String(32), nullable=False)
    # 取票码
    ticket_flag = db.Column(db.String(64))
    # 订单总金融
    amount = db.Column(db.Integer, default=0, nullable=False)
    # 销售房订单好
    seller_order_no = db.Column(db.String(32), unique=True)
    # 支付时间
    paid_time = db.Column(db.DateTime)
    # 取票时间
    printed_time = db.Column(db.DateTime)
    # 创建时间
    created_time = db.Column(db.DateTime,
                             server_default=text("CURRENT_TIMESTAMP"))
    # 最后更新时间
    updated_time = db.Column(db.DateTime, onupdate=func.now())
    # 订单状态
    status = db.Column(db.Integer, default=0, nullable=False)

    @classmethod
    def create(cls, cid, pid, sid):
        '''根据影院ID,排期ID和座位ID,创建订单对象'''
        order = cls()
        order.oid = "%s%s%s" % (tetime.now(), randint(100000, 999999), pid)
        order.cid = cid
        order.pid = pid
        order.sid = ",".join(str(i) for i in sid)
        return order

    @classmethod
    def getby_orderno(cls, orderno):
        """根据销售方订单号获取order记录"""
        return Order.query.filter_by(seller_order_no=orderno).first()

    def gen_ticket_flag(self):
        """生成取票码"""
        self.ticket_flag = ''.join(
            [str(randint(1000, 9999)) for i in range(8)])

    def validate(self, ticket_flag):
        """验证取票码的有效性"""
        return self.ticket_flag == ticket_flag
コード例 #13
0
class Order(db.Model, Model):
    __tablename__ = "orders"
    # 自己的订单号
    oid = db.Column(db.String(32), primary_key=True)
    # 第三方订单号
    sell_order_no = db.Column(db.String(32), index=True)

    cid = db.Column(db.Integer)
    pid = db.Column(db.Integer)
    sid = db.Column(db.String(32))

    # 取票码
    ticket_flag = db.Column(db.String(64))
    # 票数
    ticket_num = db.Column(db.Integer)
    # 金额
    amount = db.Column(db.Integer)
    # 支付时间
    paid_time = db.Column(db.DATETIME)
    # 取票时间
    print_time = db.Column(db.DATETIME)
    # 退款时间
    refund_time = db.Column(db.DATETIME)
    created_time = db.Column(db.DATETIME,
                             server_default=text("CURRENT_TIMESTAMP"))
    updated_time = db.Column(db.DATETIME, onupdate=func.now())

    status = db.Column(db.Integer, default=0, index=True, nullable=False)

    # 定义类方法
    @classmethod
    # 创建订单表
    def create(cls, cid, pid, sid):
        order = cls()
        # 购买时间+随机6位数字+排期id
        order.oid = "%s%s%s" % (tetime.now(), randint(100000, 999999), pid)

        order.pid = pid
        order.cid = cid

        # 对sid进行组合,以便进行保存
        if type(sid) == list:
            order.sid = ",".join(str(i) for i in sid)
        else:
            order.sid = sid

        return order

    @classmethod
    # 通过orderno获取order对象
    def getby_orderno(cls, orderno):
        return Order.query.filter_by(sell_order_no=orderno).first()

    # 生成取票码
    def gen_ticket_flag(self):
        self.ticket_flag = "".join(
            [str(randint(1000, 9999)) for i in range(8)])

    # 判断取票码
    def validate(self, ticket_flag):
        return self.ticket_flag == ticket_flag

    # 通过取票码获取order对象
    @classmethod
    def getby_ticket_flag(cls, ticket_flag):
        return cls.query.filter_by(ticket_flag=ticket_flag).first()
コード例 #14
0
class Play(db.Model, Model):
    '''排期表,存储排期相关信息'''
    '''排期id,主键'''

    pid = db.Column(db.Integer, primary_key=True)
    '''电影院id'''
    cid = db.Column(db.Integer, default=0, nullable=False)
    '''影厅id'''
    hid = db.Column(db.Integer, default=0, nullable=False)
    '''电影id'''
    mid = db.Column(db.Integer, default=0, nullable=False)
    '''放映开始时间'''
    start_time = db.Column(db.DateTime, nullable=False)
    '''放映时长'''
    duration = db.Column(db.Integer, default=0, nullable=False)
    '''价格类型'''
    price_type = db.Column(db.Integer)
    '''价格'''
    price = db.Column(db.Integer)
    '''销售价格'''
    market_price = db.Column(db.Integer)
    '''最低价格'''
    lowest_price = db.Column(db.Integer)
    '''创建时间'''
    created_time = db.Column(db.DateTime)
    '''最后更新时间'''
    updated_time = db.Column(db.DateTime)
    '''状态'''
    status = db.Column(db.Integer, default=0, nullable=False, index=True)
コード例 #15
0
class Order(db.Model, Model):
    """订单表"""

    __tablename__ = 'orders'
    """订单ID,主键"""
    oid = db.Column(db.String(32), primary_key=True)
    """排期ID,主键"""
    pid = db.Column(db.Integer)
    """电影院ID"""
    cid = db.Column(db.Integer, default=0, nullable=False)
    """座位ID"""
    sid = db.Column(db.String(32), nullable=False)
    """取票码"""
    ticket_flag = db.Column(db.String(64))
    """订单总金额"""
    amount = db.Column(db.Integer, default=0, nullable=False)
    """销售方订单号"""
    seller_order_no = db.Column(db.String(32), unique=True)
    """支付时间"""
    paid_time = db.Column(db.DateTime)
    """取票时间"""
    printed_time = db.Column(db.DateTime)
    """创建时间"""
    created_time = db.Column(db.DateTime,
                             server_default=text('CURRENT_TIMESTAMP'))
    """最后更新时间"""
    updated_time = db.Column(db.DateTime, onupdate=func.now())
    """订单状态"""
    status = db.Column(db.Integer, default=0, nullable=False)

    @classmethod
    def create(cls, cid, pid, sid):
        """根据影院ID,排期ID和座位ID,创建订单对象"""
        order = cls()
        order.oid = '%s%s%s' % (tetime.now(), randint(100000, 999999), pid)
        order.cid = cid
        order.pid = pid
        order.sid = ','.join(str(i) for i in sid)
        return order

    @classmethod
    def getby_orderno(cls, orderno):
        """根据销售方订单号获取order记录"""
        return Order.query.filter_by(seller_order_no=orderno).first()

    def gen_ticket_flag(self):
        """生成取票码"""
        self.ticket_flag = ''.join(
            [str(randint(1000, 9999)) for i in range(8)])

    def validate(self, ticket_flag):
        """验证取票码的有效性"""
        return self.ticket_flag == ticket_flag
コード例 #16
0
ファイル: order.py プロジェクト: ljxproject/tigereye
class Order(db.Model, Model):
    __tablename__ = 'orders'
    # 订单ID,我们自己的订单号
    oid = db.Column(db.String(32), primary_key=True)
    # 销售方订单号
    seller_order_no = db.Column(db.String(32), index=True)
    cid = db.Column(db.Integer)
    pid = db.Column(db.Integer)
    sid = db.Column(db.String(32))
    # 取票码
    ticket_flag = db.Column(db.String(64))

    tickets_num = db.Column(db.Integer)
    amount = db.Column(db.Integer)

    paid_time = db.Column(db.DateTime)
    printed_time = db.Column(db.DateTime)
    refund_time = db.Column(db.DateTime)
    created_time = db.Column(db.DateTime,
                             server_default=text('CURRENT_TIMESTAMP'))
    updated_time = db.Column(db.DateTime, onupdate=func.now())
    status = db.Column(db.Integer, default=0, nullable=False, index=True)

    @classmethod
    def create(cls, cid, pid, sid):
        order = cls()
        order.oid = '%s%s%s' % (tetime.now(), randint(100000, 999999), pid)
        order.cid = cid
        order.pid = pid
        if type(sid) == list:
            order.sid = ','.join(str(i) for i in sid)
        else:
            order.sid = sid
        return order

    @classmethod
    def getby_orderno(cls, orderno):
        return Order.query.filter_by(seller_order_no=orderno).first()

    def gen_ticket_flag(self):
        self.ticket_flag = ''.join(
            [str(randint(1000, 9999)) for i in range(8)])

    def validate(self, ticket_flag):
        return self.ticket_flag == ticket_flag

    @classmethod
    def getby_ticket_flag(cls, ticket_flag):
        return cls.query.filter_by(ticket_flag=ticket_flag).first()
コード例 #17
0
class PlaySeat(db.Model, Model):
    '''排期座位主键'''
    psid = db.Column(db.Integer, primary_key=True)
    '''第三方订单号'''
    orderno = db.Column(db.String(32), index=True)
    '''座位id'''
    sid = db.Column(db.Integer, nullable=False)
    '''排期id'''
    pid = db.Column(db.Integer, nullable=False)
    '''影院id'''
    cid = db.Column(db.Integer, nullable=False)
    '''影厅id'''
    hid = db.Column(db.Integer, nullable=False)

    x = db.Column(db.INTEGER, default=0, nullable=False)
    y = db.Column(db.INTEGER, default=0, nullable=False)
    """显示行名称"""
    row = db.Column(db.String(8))
    """显示列名称"""
    column = db.Column(db.String(8))
    """区域"""
    area = db.Column(db.String(16))
    """座位类型"""
    seat_type = db.Column(db.String(16))
    """是否是情侣座"""
    love_seats = db.Column(db.String(32))
    """座位锁定时间"""
    locked_time = db.Column(db.DateTime)
    """创建时间"""
    created_time = db.Column(db.DateTime,
                             server_default=text("CURRENT_TIMESTAMP"))
    '''状态'''
    status = db.Column(db.INTEGER, default=0, nullable=False, index=True)

    def copy(self, seat):
        """将一个Seat对象中的信息拷贝到PlaySeat对象中"""
        self.sid = seat.sid
        self.cid = seat.cid
        self.hid = seat.hid
        self.x = seat.x
        self.y = seat.y
        self.row = seat.row
        self.column = seat.column
        self.area = seat.area
        self.seat_type = seat.seat_type
        self.love_seats = seat.love_seats
        self.status = seat.status

    @classmethod
    def lock(cls, orderno, pid, sid_list):
        #创建数据库session
        session = db.create_scoped_session()
        # 查询出pid,status,sid符合锁定条件的座位
        rows = session.query(PlaySeat).filter(
            PlaySeat.pid == pid, PlaySeat.status == SeatStatus.ok.value,
            PlaySeat.sid.in_(sid_list)
            # 然后更新这些座位的信息
        ).update(
            {
                'orderno': orderno,
                'status': SeatStatus.locked.value,
                'locked_time': datetime.now()
            },
            synchronize_session=False)
        # 如果更新的行数量与我们传入的座位数量不符,则回滚,并返回0
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()

        return rows

    @classmethod
    def unlock(cls, orderno, pid, sid_list):
        """解锁play_seat表的锁座信息"""
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno,
            status=SeatStatus.locked.value,
        ).update({
            'orderno': None,
            'status': SeatStatus.ok.value,
        },
                 synchronize_session=False)
        # 如果更新的行数量与我们传入的座位数量不符,则回滚,并返回0
        if rows != len(sid_list):
            session.rollback()
            return 0
        # 如果数量符合,则提交,并返回锁定的座位数量
        session.commit()

        return rows

    @classmethod
    def buy(cls, orderno, pid, sid_list):
        """购买座位"""
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno,
            status=SeatStatus.locked.value,
        ).update({
            'status': SeatStatus.sold.value,
        },
                 synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()

        return rows

    @classmethod
    def refund(cls, orderno, pid, sid_list):
        """退款,修改座位状态"""
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno,
            status=SeatStatus.sold.value,
        ).update(
            {
                # 修改座位状态为正常,并将订单号设为空
                'status': SeatStatus.ok.value,
                'orderno': None,
            },
            synchronize_session=False)
        # 如果更新的行数量与我们传入的座位数量不符,则回滚,并返回0
        if rows != len(sid_list):
            session.rollback()
            return 0
        # 如果数量符合,则提交,并返回锁定的座位数量
        session.commit()

        return rows

    @classmethod
    def print_tickets(cls, orderno, pid, sid_list):
        """执行取票操作,修改座位状态"""
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno,
            status=SeatStatus.sold.value,
        ).update(
            {
                'status': SeatStatus.printed.value,
                # 'orderno':None,
            },
            synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()

        return rows
コード例 #18
0
class Seat(db.Model, Model):
    """座位id"""
    sid = db.Column(db.INTEGER, primary_key=True)
    """影厅id"""
    hid = db.Column(db.INTEGER)
    """影院id"""
    cid = db.Column(db.INTEGER)

    x = db.Column(db.INTEGER, default=0, nullable=False)
    y = db.Column(db.INTEGER, default=0, nullable=False)
    """显示行名称"""
    row = db.Column(db.String(8))
    """显示列名称"""
    column = db.Column(db.String(8))
    '''区域'''
    area = db.Column(db.String(16))
    '''座位类型'''
    seat_type = db.Column(db.String(16))
    '''是否是情侣座'''
    love_seats = db.Column(db.String(32))
    '''状态'''
    status = db.Column(db.INTEGER, default=0, nullable=False, index=True)
コード例 #19
0
class Seat(db.Model, Model):
    sid = db.Column(db.Integer, primary_key=True)
    cid = db.Column(db.Integer)
    hid = db.Column(db.Integer)
    x = db.Column(db.Integer)
    y = db.Column(db.Integer)

    row = db.Column(db.String(16))
    column = db.Column(db.String(16))

    area = db.Column(db.String(16))
    seat_type = db.Column(db.String(16))
    love_seats = db.Column(db.String(16))

    status = db.Column(db.Integer, default=0, nullable=False, index=True)
コード例 #20
0
ファイル: play.py プロジェクト: simimasa/TigerEye
class Play(db.Model, Model):
    """排期表,存储排期相关信息"""

    """排期ID,主键"""
    pid = db.Column(db.Integer, primary_key=True)
    """电影院ID"""
    cid = db.Column(db.Integer, default=0, nullable=False)
    """影厅ID"""
    hid = db.Column(db.Integer, default=0, nullable=False)
    """电影ID"""
    mid = db.Column(db.Integer, default=0, nullable=False)
    """放映开始时间"""
    start_time = db.Column(db.DateTime, nullable=False)
    """放映时长"""
    duration = db.Column(db.Integer, default=0, nullable=False)
    """价格类型"""
    price_type = db.Column(db.Integer)
    """价格"""
    price = db.Column(db.Integer)
    """销售价格"""
    market_price = db.Column(db.Integer)
    """最低价格"""
    lowest_price = db.Column(db.Integer)
    """创建时间"""
    created_time = db.Column(db.DateTime)
    """最后更新时间"""
    updated_time = db.Column(db.DateTime)
    """状态"""
    status = db.Column(db.Integer, default=0, nullable=False, index=True)
コード例 #21
0
class PlaySeat(db.Model, Model):
    psid = db.Column(db.Integer, primary_key=True)
    orderno = db.Column(db.String(32), index=True)
    pid = db.Column(db.Integer)

    sid = db.Column(db.Integer)
    cid = db.Column(db.Integer)
    hid = db.Column(db.Integer)
    x = db.Column(db.Integer)
    y = db.Column(db.Integer)

    row = db.Column(db.String(16))
    column = db.Column(db.String(16))

    area = db.Column(db.String(16))
    seat_type = db.Column(db.String(16))
    love_seats = db.Column(db.String(16))

    status = db.Column(db.Integer, default=0, nullable=False, index=True)

    lock_time = db.Column(db.DateTime)
    create_time = db.Column(db.DateTime,
                            server_default=text('CURRENT_TIMESTAMP'))

    def copy(self, seat):
        self.sid = seat.sid
        self.cid = seat.cid
        self.hid = seat.hid
        self.x = seat.x
        self.y = seat.y
        self.row = seat.row
        self.column = seat.column
        self.area = seat.area
        self.seat_type = seat.seat_type
        self.love_seats = seat.love_seats
        self.status = seat.status

    @classmethod
    def lock(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter(
            PlaySeat.pid == pid, PlaySeat.status == SeatStatus.ok.value,
            PlaySeat.sid.in_(sid_list)).update(
                {
                    'orderno': orderno,
                    'status': SeatStatus.locked.value,
                    'lock_time': datetime.now()
                },
                synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()
        return rows

    @classmethod
    def unlock(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.locked.value).update(
                {
                    'orderno': None,
                    'status': SeatStatus.ok.value
                },
                synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()
        return rows

    @classmethod
    def buy(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.locked.value).update(
                {'status': SeatStatus.sold.value}, synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()
        return rows

    @classmethod
    def refund(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.sold.value).update(
                {
                    'status': SeatStatus.ok.value,
                    'orderno': None
                },
                synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()
        return rows

    @classmethod
    def print_tickets(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.sold.value).update(
                {'status': SeatStatus.printed.value},
                synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()
        return rows

    @classmethod
    def getby_orderno(cls, orderno):
        return cls.query.filter_by(orderno=orderno).all()
コード例 #22
0
class Cinema(db.Model,Model):
    #cid 影院id,主键
    cid = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(64),unique=True,nullable=False)
    address = db.Column(db.String(128),nullable=False)
    halls = db.Column(db.Integer,default=0,nullable=False)
    handle_fee = db.Column(db.INTEGER,default=0,nullable=False)
    buy_limit = db.Column(db.INTEGER,default=0,nullable=False)
    status = db.Column(db.INTEGER,default=0,nullable=False,index=True)

    @classmethod
    def create_test_data(cls,cinema_num = 3,hall_num = 3,play_num = 10):
            import  time


            from tigereye.models.hall import Hall
            from tigereye.models.seat import Seat,PlaySeat,SeatType
            from tigereye.models.movie import Movie
            from tigereye.models.cinema import Cinema
            from tigereye.models.play import Play
            from faker import Faker
            import math
            from datetime import datetime
            start_time = time.time()
            HALL_SEATS_NUM = 25
            faker = Faker('zh_CN')
            cinemas = []
            for i in range(1,cinema_num+1):
                cinema = Cinema()
                cinema.name = '%s影城' % faker.name()
                cinema.address = faker.address()
                cinema.status = 1
                cinema.put()
                cinemas.append(cinema)
            Cinema.commit()
            halls = []
            plays = []

            for cinema in cinemas:
                for n in range(1,hall_num+1):
                    hall = Hall()
                    hall.cid = cinema.cid
                    hall.name = '%s 号厅' % n
                    hall.screen_type = "IMAX"
                    hall.audio_type = '杜比环绕'
                    hall.seats_num = HALL_SEATS_NUM
                    hall.status = 1
                    hall.put()
                    halls.append(hall)
                Hall.commit()

            for hall in halls:
                hall.seats = []


                for x in range(1,HALL_SEATS_NUM+1):
                    seat = Seat()
                    seat.cid = hall.cid
                    seat.hid = hall.hid
                    seat.x = x % 5 or 5
                    seat.y = math.ceil(x / 5)
                    seat.row = '%s 排' % seat.x
                    seat.column = '%s 列' % seat.y
                    seat.seat_type = SeatType.single.value

                    seat.status = SeatStatus.ok.value
                    seat.put()
                    hall.seats.append(seat)
                Seat.commit()



                for p in range(1,play_num+1):
                     play = Play()
                     play.cid = hall.cid
                     play.hid = hall.hid
                     play.mid = p
                     play.start_time = datetime.now()
                     play.duration = 3600
                     play.price_type = 1
                     play.price = 70000
                     play.market_price = 5000
                     play.lowest_price = 3000
                     play.status = 1
                     play.put()
                     play.hall = hall
                     plays.append(play)
                Play.commit()
            for play in plays:


                for seat in play.hall.seats:
                     ps = PlaySeat()
                     ps.pid = play.pid
                     ps.copy(seat)
                     ps.put()


                PlaySeat.commit()


            for i in range(10):
                m = Movie()
                m.name = '电影名称 %s' % (i +1)
                m.language = '英文'
                m.subtitle = '中文'
                m.mode = '数字'
                m.vision = '3D'
                m.screen_size = 'IMAX'
                m.introduction = '哈哈哈'
                m.status = 1
                m.save()
            print('create test data done! cost %s seconds' % (time.time() - start_time))
コード例 #23
0
class Cinema(db.Model, Model):
    __tablename__ = "cinema"
    cid = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    address = db.Column(db.String(256), nullable=False)
    halls = db.Column(db.Integer, default=0, nullable=False)
    # 手续费
    handle_fee = db.Column(db.Integer, default=0, nullable=False)
    buy_limit = db.Column(db.Integer, default=0, nullable=False)
    status = db.Column(db.Integer, nullable=False, index=True)

    @classmethod
    def create_test_data(cls, cinema_num=10, hall_num=10, play_num=10):
        start_time = time.time()
        from tigereye.models.seat import Seat, PlaySeat
        from tigereye.models.play import Play
        from tigereye.models.hall import Hall
        f = faker.Faker("zh_CN")
        screen_types = ["普通", "IMAX"]
        audio_types = ["普通", "杜比音效"]

        cinemas = []
        for i in range(1, cinema_num + 1):
            cinema = Cinema()
            cinema.cid = i
            cinema.name = "%s影院" % f.name()
            cinema.address = f.address()
            cinema.status = 1
            cinema.put()
            cinemas.append(cinema)
        Cinema.commit()

        halls = []
        for cinema in cinemas:
            for n in range(1, hall_num + 1):
                hall = Hall()
                hall.cid = cinema.cid
                hall.name = "%s号厅" % n
                hall.screen_type = random.choice(screen_types)
                hall.audio_type = random.choice(audio_types)
                hall.seats_num = 25
                hall.status = 1
                hall.put()
                halls.append(hall)
        Hall.commit()

        plays = []
        for hall in halls:
            hall.seats = []
            for s in range(1, hall.seats_num + 1):
                seat = Seat()
                seat.cid = hall.cid
                seat.hid = hall.hid
                seat.x = s % 5 or 5
                seat.y = ceil(s / 5)
                seat.row = seat.x
                seat.column = seat.y
                seat.seat_type = 1
                seat.put()
                hall.seats.append(seat)
            Seat.commit()

            for p in range(1, play_num + 1):
                play = Play()
                play.cid = cinema.cid
                play.hid = hall.hid
                play.mid = p
                play.start_time = datetime.now()
                play.duration = 3600
                play.price_type = 1
                play.price = 7000
                play.market_price = 5000
                play.lowest_price = 3000
                play.status = 1
                play.hall = hall
                play.put()
                plays.append(play)
            Play.commit()

        for play in plays:
            for seat in play.hall.seats:
                ps = PlaySeat()
                ps.pid = play.pid
                ps.copy(seat)
                ps.put()
            PlaySeat.commit()
        current_app.logger.info("screate test data done: %f" %
                                (time.time() - start_time))
コード例 #24
0
class Play(db.Model, Model):

    pid = db.Column(db.Integer, primary_key=True)
    cid = db.Column(db.Integer)
    hid = db.Column(db.Integer)
    mid = db.Column(db.Integer)

    start_time = db.Column(db.DateTime, nullable=False)
    duration = db.Column(db.Integer, default=0, nullable=False)

    price_type = db.Column(db.Integer)
    price = db.Column(db.Integer)
    market_price = db.Column(db.Integer)
    lowest_price = db.Column(db.Integer)

    created_time = db.Column(db.DateTime,
                             server_default=text('CURRENT_TIMESTAMP'))
    updated_time = db.Column(db.DateTime, onupdate=func.now())
    status = db.Column(db.Integer, default=0, nullable=False, index=True)
コード例 #25
0
class PlaySeat(db.Model, Model):
    __tablename__ = "playseat"
    psid = db.Column(db.Integer, primary_key=True)
    orderno = db.Column(db.String(32), index=True)
    cid = db.Column(db.Integer)
    hid = db.Column(db.Integer)

    pid = db.Column(db.Integer)
    sid = db.Column(db.Integer)
    x = db.Column(db.Integer)
    y = db.Column(db.Integer)

    row = db.Column(db.String(16))
    column = db.Column(db.String(16))

    area = db.Column(db.String(16))
    seat_type = db.Column(db.String(16))
    lova_seat = db.Column(db.String(16))

    status = db.Column(db.Integer, nullable=False, default=0, index=True)

    lock_time = db.Column(db.DATETIME)
    create_time = db.Column(db.DATETIME,
                            server_default=text("CURRENT_TIMESTAMP"))

    # 执行复制操作
    def copy(self, seat):
        self.sid = seat.sid
        self.cid = seat.cid
        self.hid = seat.hid
        self.x = seat.x
        self.y = seat.y
        self.row = seat.row
        self.column = seat.column
        self.area = seat.area
        self.seat_type = seat.seat_type
        self.love_seat = seat.lova_seat
        self.status = seat.status

    @classmethod
    # 进行锁定操作
    def lock(cls, orderno, pid, sid_list):
        # 创建session
        session = db.create_scoped_session()
        # 直接对PlaySeat进行操作
        # 进行锁定操作,修改订单号和状态
        rows = session.query(PlaySeat).filter(
            PlaySeat.pid == pid,
            PlaySeat.status == SeatStatus.ok.value,
            PlaySeat.sid.in_(sid_list),
            #     进行修改
        ).update(
            {
                "orderno": orderno,
                "status": SeatStatus.locked.value,
                "lock_time": datetime.now()
                #    关闭同步session操作
            },
            synchronize_session=False)
        # 如果操作没有成功,执行rollback回滚
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()
        return rows

    # 进行解锁操作
    @classmethod
    def unlock(cls, orderno, pid, sid_list):
        # 创建一个db.session对象
        session = db.create_scoped_session()
        # 完成解锁操作
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.locked.value).update(
                {
                    "orderno": None,
                    "status": SeatStatus.ok.value,
                },
                synchronize_session=False)
        # 判断是否进行了解锁
        if rows != len(sid_list):
            session.rollback()
            return 0
        # 进行提交
        session.commit()
        return rows

    # 购买操作
    @classmethod
    def buy(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno,
            status=SeatStatus.locked.value,
        ).update({
            "status": SeatStatus.sold.value,
        },
                 synchronize_session=False)
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()
        return rows

    # 退票
    @classmethod
    def refund(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno,
            status=SeatStatus.sold.value,
        ).update({
            "status": SeatStatus.ok.value,
            "orderno": None,
        },
                 synchronize_session=False)

        if rows != len(sid_list):
            session.rollback()
            return 0

        session.commit()
        return rows

    # 出票
    @classmethod
    def print_ticket(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno,
            status=SeatStatus.sold.value,
        ).update({
            "status": SeatStatus.printed.value,
        },
                 synchronize_session=False)

        if rows != len(sid_list):
            session.rollback()
            return 0

        session.commit()
        return rows

    # 获取数据
    @classmethod
    def getby_orderno(cls, orderno):
        return cls.query.filter_by(orderno=orderno).all()
コード例 #26
0
ファイル: seat.py プロジェクト: simimasa/TigerEye
class Seat(db.Model, Model):
    """物理座位表"""
    """座位ID,主键"""
    sid = db.Column(db.Integer, primary_key=True)
    """影厅ID"""
    hid = db.Column(db.Integer)
    """影院ID"""
    cid = db.Column(db.Integer)
    """x座标"""
    x = db.Column(db.Integer, default=0, nullable=False)
    """y座标"""
    y = db.Column(db.Integer, default=0, nullable=False)
    """显示的行名称"""
    row = db.Column(db.String(8))
    """显示的列名称"""
    column = db.Column(db.String(8))
    """区域"""
    area = db.Column(db.String(16))
    """座位类型"""
    seat_type = db.Column(db.String(16))
    """是否是情侣座"""
    love_seats = db.Column(db.String(32))
    """状态"""
    status = db.Column(db.Integer, default=0, nullable=False, index=True)