Пример #1
0
class JobPost(db.Model):
    __tablename__ = 'jobpost'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), db.ForeignKey('user.email'))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    title = db.Column(db.String(64))
    organization = db.Column(db.String(32))
    description = db.Column(db.String(1000))
    pay = db.Column(db.FLOAT(precision=10, scale=2))
    pay_frequency = db.Column(db.String(32))
    impressions = db.Column(db.Text(), default='')
    keywords = db.Column(db.Text(), nullable=True)

    # start_date = db.Column(db.Date,nullable=True)
    # end_date = db.Column(db.Date,nullable=True)

    def __repr__(self):
        return '<Job {}>'.format(self.title, self.email)

    def serialize(self):
        return {
            'id': self.id,
            'email': self.email,
            'title': self.title,
            'timestamp': self.timestamp,
            'organization': self.organization,
            'description': self.description,
            'pay': self.pay,
            'pay_frequency': self.pay_frequency,
            'impressions': self.impressions,
            'keywords': self.keywords
            #'applications': [a.serialize() for a in self.applications]}
        }
Пример #2
0
class BuyCar(db.Model):
    __tablename__ = 'buycar'
    id = db.Column(db.Integer, primary_key=True)
    add_time = db.Column(db.DATETIME, default=datetime.now())  # 加入购物车时间
    num = db.Column(db.Integer, default=1)  # 商品数量 默认只购买一件 应该禁止修改
    price = db.Column(db.FLOAT(16))
    course_id = db.Column(db.Integer,
                          db.ForeignKey('course.course_id'))  # 购物车商品名称
    user_car = db.Column(db.Integer, db.ForeignKey('user.id'))  # 哪个用户购物车里的商品
Пример #3
0
class Stations(db.Model):
    ID = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.VARCHAR(255))
    address = db.Column(db.VARCHAR(255))
    p_latitude = db.Column(db.FLOAT())
    p_longitude = db.Column(db.FLOAT())
    banking = db.Column(db.VARCHAR(255))
    bonus = db.Column(db.VARCHAR(255))
    bike_stands = db.Column(db.Integer())

    def __init__(self, ID, name, address, bonus, latitude, longitude,
                 bike_stands, banking):
        self.ID = ID
        self.name = name
        self.address = address
        self.bonus = bonus
        self.p_latitude = latitude
        self.p_longitude = longitude
        self.bike_stands = bike_stands
        self.banking = banking
Пример #4
0
class Course(db.Model):
    __tablename__ = 'course'
    id = db.Column(db.Integer, primary_key=True)  # 序号
    course_id = db.Column(db.Integer, unique=True)  # 商品id
    course_name = db.Column(db.String(512), unique=True)  # 商品名称
    introduce = db.Column(db.String(512))  # 课程简介
    image = db.Column(db.String(256), unique=True)  # 商品图片 文件名唯一
    good_tag = db.Column(db.String(128), db.ForeignKey('tag.name'))  # 商品所属分类

    long_time = db.Column(db.String(128))  # 课程时长
    study_num = db.Column(db.Integer)  # 学习人数  购买人数
    teacher_name = db.Column(db.String(512),
                             db.ForeignKey('teacher.teacher_name'))  # 该课程对应讲师
    school_id = db.Column(db.Integer,
                          db.ForeignKey('school.id'))  # 该课程对应的机构/学校
    difficulty = db.Column(db.Integer)  # 难度
    # 1 入门 2 初级 3 中级 4 高级
    chap_num = db.Column(db.Integer)  # 该课程章节数
    price = db.Column(db.FLOAT(16))  # 现价
    old_price = db.Column(db.FLOAT(16))  # 原价
    start = db.Column(db.Integer)  # 星级>>>1-5星
    discount = db.Column(db.FLOAT(32))  # 折扣
    add_time = db.Column(db.DATETIME, default=datetime.now())  # 上架时间
    skull_num = db.Column(db.Integer, default=0)  # 库存
    sales = db.Column(db.Integer, default=0)  # 销量
    view_num = db.Column(db.Integer, default=1)  # 浏览次数
    comment_num = db.Column(db.Integer, default=0)  # 评论数量
    course_info = db.Column(db.Text)  # 商品介绍
    share_link = db.Column(db.String(256))  # 分享链接
    get_secure = db.Column(db.String(256))  # 提取密码
    target = db.Column(db.Integer, default=1)  # 商品是否上架 0表示未上架 1表示已经上架 默认直接上架商品
    detail = db.Column(db.Text)  # 课程详情介绍
    # 外键关联第二步
    comment_good = db.relationship('Comment', backref='course')
    course_ids = db.relationship('Detail', backref='course')
    # course_orders = db.relationship('Orders', backref='course')
    car_id = db.relationship('BuyCar', backref='course')
    good_course = db.relationship('SchoolCourse', backref='course')
    course_chapter = db.relationship('CourseChapters')
Пример #5
0
class Weather(db.Model):
    ID = db.Column(db.Integer(), primary_key=True)
    temp = db.Column(db.FLOAT())
    weather = db.Column(db.VARCHAR(255))
    w_description = db.Column(db.VARCHAR(255))
    visibility = db.Column(db.Integer())
    wind_speed = db.Column(db.Integer())
    datetime = db.Column(db.BigInteger())
    day = db.Column(db.TIMESTAMP())
    week = db.Column(db.Integer())

    def __init__(self, ID, temp, weather, w_description, visibility,
                 wind_speed, datetime, day, week):
        self.ID = ID
        self.temp = temp
        self.weather = weather
        self.w_description = w_description
        self.visibility = visibility
        self.wind_speed = wind_speed
        self.datetime = datetime
        self.day = day
        self.week = week
Пример #6
0
class Questionnaire(db.Model):
    __tablename__ = 'Questionnaire'
    Tube_ID = db.Column(db.VARCHAR(30), primary_key=True, nullable=False)
    Sample_ID = db.Column(db.VARCHAR(30))
    Living_city = db.Column(db.VARCHAR(20))
    Gender = db.Column(db.SMALLINT())
    Age = db.Column(db.FLOAT())
    Height = db.Column(db.FLOAT())
    Weight = db.Column(db.FLOAT())
    Sampling_date = db.Column(db.DATETIME())
    Questionnaire_date = db.Column(db.DATETIME())
    Questionnaire_status = db.Column(db.SMALLINT(), default=0)
    Stool_shape = db.Column(db.SMALLINT())
    Defecation_pattern = db.Column(db.SMALLINT())
    Defecation_regular = db.Column(db.SMALLINT())
    Defecation_period = db.Column(db.SMALLINT())
    Alcohol = db.Column(db.SMALLINT())
    Smoking = db.Column(db.SMALLINT())
    Meat_product = db.Column(db.SMALLINT())
    Fresh_vegetables = db.Column(db.SMALLINT())
    Dietary_preference = db.Column(db.SMALLINT())
    Dietary_preference_text = db.Column(db.VARCHAR(30))
    Past_medical_history = db.Column(db.VARCHAR(60))
    Family_history = db.Column(db.VARCHAR(40))
    Subhealth_state = db.Column(db.SMALLINT())
    Subhealth_state_text = db.Column(db.VARCHAR(200))
    Breakfasts_weekly = db.Column(db.SMALLINT())
    Supper_weekly = db.Column(db.SMALLINT())
    Water_daily = db.Column(db.SMALLINT())
    Drinks_preference = db.Column(db.VARCHAR(20))
    Sleeping_time = db.Column(db.SMALLINT())
    Insomnia_pattern = db.Column(db.SMALLINT())
    Nap_pattern = db.Column(db.SMALLINT())
    Fasting_blood_glucose = db.Column(db.FLOAT())
    Medicine = db.Column(db.VARCHAR(40))
    Health_product = db.Column(db.VARCHAR(40))
    Triglyceride = db.Column(db.FLOAT())
    Total_cholesterol = db.Column(db.FLOAT())
    High_density_lipoprotein = db.Column(db.FLOAT())
    Low_density_lipoprotein = db.Column(db.FLOAT())
    Way_of_birth = db.Column(db.SMALLINT())
    Breastfeeding = db.Column(db.SMALLINT())
    Medical_examination = db.Column(db.SMALLINT())
    Spend_on_MH = db.Column(db.SMALLINT())
    Remarks = db.Column(db.VARCHAR(30))
    BMI = db.Column(db.FLOAT())
    Status = db.Column(db.SMALLINT(), default=2)

    def Questionnaire2dict(self):
        data = {
            'Sample_ID': self.Sample_ID,
            'Tube_ID': self.Tube_ID,
            'Living_city': self.Living_city,
            'Gender': self.Gender,
            'Age': self.Age,
            'Height': self.Height,
            'Weight': self.Weight,
            'Sampling_date': self.Sampling_date,
            'Questionnaire_date': self.Questionnaire_date,
            'Questionnaire_status': self.Questionnaire_status,
            'Stool_shape': self.Stool_shape,
            'Defecation_pattern': self.Defecation_pattern,
            'Defecation_regular': self.Defecation_regular,
            'Defecation_period': self.Defecation_period,
            'Alcohol': self.Alcohol,
            'Smoking': self.Smoking,
            'Meat_product': self.Meat_product,
            'Fresh_vegetables': self.Fresh_vegetables,
            'Dietary_preference': self.Dietary_preference,
            'Dietary_preference_text': self.Dietary_preference_text,
            'Past_medical_history': self.Past_medical_history,
            'Family_history': self.Family_history,
            'Subhealth_state_text': self.Subhealth_state_text,
            'Breakfasts_weekly': self.Breakfasts_weekly,
            'Supper_weekly': self.Supper_weekly,
            'Water_daily': self.Water_daily,
            'Drinks_preference': self.Drinks_preference,
            'Sleeping_time': self.Sleeping_time,
            'Insomnia_pattern': self.Insomnia_pattern,
            'Nap_pattern': self.Nap_pattern,
            'Fasting_blood_glucose': self.Fasting_blood_glucose,
            'Medicine': self.Medicine,
            'Health_product': self.Health_product,
            'Triglyceride': self.Triglyceride,
            'Total_cholesterol': self.Total_cholesterol,
            'High_density_lipoprotein': self.High_density_lipoprotein,
            'Low_density_lipoprotein': self.Low_density_lipoprotein,
            'Way_of_birth': self.Way_of_birth,
            'Breastfeeding': self.Breastfeeding,
            'Medical_examination': self.Medical_examination,
            'Spend_on_MH': self.Spend_on_MH,
            'Remarks': self.Remarks,
            'BMI': self.BMI,
            'Status': self.Status
        }
        if None != data['Sampling_date']:
            data['Sampling_date'] = data['Sampling_date'].strftime(
                "%Y-%m-%d %H:%M:%S")
        if None != data['Questionnaire_date']:
            data['Questionnaire_date'] = data['Questionnaire_date'].strftime(
                "%Y-%m-%d %H:%M:%S")
        return data

    def Questionnaire2insert(self, data):
        if 'Tube_ID' in data:
            self.Tube_ID = data['Tube_ID']
        if 'Sample_ID' in data:
            self.Sample_ID = data['Sample_ID']

    def Questionnaire2update(self, data):
        if 'Sample_ID' in data:
            self.Sample_ID = data['Sample_ID']
        if 'Living_city' in data:
            self.Living_city = data['Living_city']
        if 'Gender' in data:
            self.Gender = data['Gender']
        if 'Age' in data:
            self.Age = data['Age']
        if 'Height' in data:
            self.Height = data['Height']
        if 'Weight' in data:
            self.Weight = data['Weight']
        if 'Sampling_date' in data:
            self.Sampling_date = data['Sampling_date']
        if 'Questionnaire_date' in data:
            self.Questionnaire_date = data['Questionnaire_date']
        if 'Stool_shape' in data:
            self.Stool_shape = data['Stool_shape']
        if 'Defecation_pattern' in data:
            self.Defecation_pattern = data['Defecation_pattern']
        if 'Defecation_regular' in data:
            self.Defecation_regular = data['Defecation_regular']
        if 'Defecation_period' in data and data['Defecation_period'] != '':
            self.Defecation_period = data['Defecation_period']
        if 'Alcohol' in data:
            self.Alcohol = data['Alcohol']
        if 'Smoking' in data:
            self.Smoking = data['Smoking']
        if 'Meat_product' in data:
            self.Meat_product = data['Meat_product']
        if 'Fresh_vegetables' in data:
            self.Fresh_vegetables = data['Fresh_vegetables']
        if 'Dietary_preference' in data:
            self.Dietary_preference = data['Dietary_preference']
        if 'Dietary_preference_text' in data:
            self.Dietary_preference_text = data['Dietary_preference_text']
        if 'Past_medical_history' in data:
            self.Past_medical_history = data['Past_medical_history']
        if 'Family_history' in data:
            self.Family_history = data['Family_history']
        if 'Subhealth_state_text' in data:
            self.Subhealth_state_text = data['Subhealth_state_text']
        if 'Breakfasts_weekly' in data:
            self.Breakfasts_weekly = data['Breakfasts_weekly']
        if 'Supper_weekly' in data:
            self.Supper_weekly = data['Supper_weekly']
        if 'Water_daily' in data:
            self.Water_daily = data['Water_daily']
        if 'Drinks_preference' in data:
            self.Drinks_preference = data['Drinks_preference']
        if 'Sleeping_time' in data:
            self.Sleeping_time = data['Sleeping_time']
        if 'Insomnia_pattern' in data:
            self.Insomnia_pattern = data['Insomnia_pattern']
        if 'Nap_pattern' in data:
            self.Nap_pattern = data['Nap_pattern']
        if 'Fasting_blood_glucose' in data and data[
                'Fasting_blood_glucose'] != '':
            self.Fasting_blood_glucose = data['Fasting_blood_glucose']
        if 'Medicine' in data:
            self.Medicine = data['Medicine']
        if 'Health_product' in data:
            self.Health_product = data['Health_product']
        if 'Triglyceride' in data and data['Triglyceride'] != '':
            self.Triglyceride = data['Triglyceride']
        if 'Total_cholesterol' in data and data['Total_cholesterol'] != '':
            self.Total_cholesterol = data['Total_cholesterol']
        if 'High_density_lipoprotein' in data and data[
                'High_density_lipoprotein'] != '':
            self.High_density_lipoprotein = data['High_density_lipoprotein']
        if 'Low_density_lipoprotein' in data and data[
                'Low_density_lipoprotein'] != '':
            self.Low_density_lipoprotein = data['Low_density_lipoprotein']
        if 'Way_of_birth' in data:
            self.Way_of_birth = data['Way_of_birth']
        if 'Breastfeeding' in data:
            self.Breastfeeding = data['Breastfeeding']
        if 'Medical_examination' in data:
            self.Medical_examination = data['Medical_examination']
        if 'Spend_on_MH' in data:
            self.Spend_on_MH = data['Spend_on_MH']
        if 'Remarks' in data:
            self.Remarks = data['Remarks']
        if 'BMI' in data:
            self.BMI = data['BMI']

        if 'Status' in data:
            # self.Status = data['Status']
            pass
        else:
            self.Status = 2
        if 0 == self.Questionnaire_status:
            self.Questionnaire_status = 1

    def __repr__(self):
        return "<Questionnaire %r>" % self.__tablename__
Пример #7
0
class Route(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    # creator = db.Column(db.String(64))
    departure_time = db.Column(db.DateTime,
                               index=True,
                               default=datetime.utcnow)
    departure_location_lat = db.Column(db.Float(precision=53))
    departure_location_long = db.Column(db.Float(precision=53))
    departure_location_string = db.Column(db.String(256))
    arrival_location_lat = db.Column(db.Float(precision=53))
    arrival_location_long = db.Column(db.Float(precision=53))
    arrival_location_string = db.Column(db.String(256))
    driver_id = db.Column(db.Integer,
                          db.ForeignKey('user.id', ondelete='CASCADE'))
    passenger_places = db.Column(db.Integer)
    maximum_deviation = db.Column(db.FLOAT(precision=3))

    playlist = db.Column(db.String(32))  # Should be the spotify playlist id

    def __repr__(self):
        return '<Route from {}, {} to {}, {}>'.format(
            self.departure_location_lat, self.departure_location_long,
            self.arrival_location_lat, self.arrival_location_long)

    @hybrid_method
    def arrival_distance(self, location, allowed):
        return distance(
            (self.arrival_location_lat, self.arrival_location_long),
            location).km <= allowed

    @arrival_distance.expression
    def arrival_distance(cls, location, allowed):
        return distance((cls.arrival_location_lat, cls.arrival_location_long),
                        location).km <= allowed

    def to_dict(self):
        data = {
            "id": self.id,
            "driver-id": self.driver_id,
            "passenger-ids":
            self.passengers(),  # TODO: test whether this works
            "passenger-places": self.passenger_places,
            "from":
            [self.departure_location_lat, self.departure_location_long],
            "to": [self.arrival_location_lat, self.arrival_location_long],
            "arrive-by":
            self.departure_time.isoformat() + ".00"  # include milliseconds
        }
        return data

    def from_dict(self, data):
        if "from" in data:
            self.departure_location_lat, self.departure_location_long = data[
                "from"]
            self.departure_location_string = addr(self.departure_location_lat,
                                                  self.departure_location_long)
        if "to" in data:
            self.arrival_location_lat, self.arrival_location_long = data["to"]
            self.arrival_location_string = addr(self.arrival_location_lat,
                                                self.arrival_location_long)
        if "passenger-places" in data:
            self.passenger_places = data["passenger-places"]
        if "arrive-by" in data:
            # src: https://stackoverflow.com/questions/969285/how-do-i-translate-an-iso-8601-datetime-string-into-a-python-datetime-object
            self.departure_time = dateutil.parser.parse(data["arrive-by"])
        self.maximum_deviation = 15

    def text_from(self):
        if self.departure_location_string:
            return self.departure_location_string
        else:
            self.departure_location_string = addr(self.departure_location_lat,
                                                  self.departure_location_long)
            return self.departure_location_string
        # return addr(self.departure_location_lat, self.departure_location_long)

    def text_to(self):
        if self.arrival_location_string:
            return self.arrival_location_string
        else:
            self.arrival_location_string = addr(self.arrival_location_lat,
                                                self.arrival_location_long)
            return self.arrival_location_string
        # return addr(self.arrival_location_lat, self.arrival_location_long)

    def driver(self):
        return User.query.get(self.driver_id)

    def places_left(self):
        try:
            current_passengers = self.passengers()
            return self.passenger_places - len(current_passengers)
        except:
            return 0

    # Returns a list of the passenger id's
    def passengers(self):
        # return RouteRequest.query(RouteRequest.user_id).filter_by(route_id=self.id, status=RequestStatus.accepted).all()
        passengers = RouteRequest.query.filter_by(
            route_id=self.id, status=RequestStatus.accepted).all()
        passenger_ids = []
        for passenger in passengers:
            passenger_ids.append(passenger.user_id)
        return passenger_ids

    def stops(self, sorted=False, passengerNames=False):
        route = RouteRequest.query.filter_by(
            route_id=self.id, status=RequestStatus.accepted).all()
        stops = []
        for stop in route:
            newstop = (stop.departure_location_lat,
                       stop.departure_location_long, stop.pickup_text())
            if passengerNames:
                newstop += (stop.user().name(), )
            stops.append(newstop)
        if sorted:
            stops.sort(key=lambda x: distance(x[0], x[1]), reverse=True)
        return stops

    def google_calendar_link(self):
        start_time = self.departure_time.isoformat()  # "20180512T230000Z"
        end_time = (self.departure_time + timedelta(hours=1)).isoformat()

        # Remove the '-' and ':' from the time
        translation_table = dict.fromkeys(
            map(ord, '-:'),
            None)  # We want to replace the '-' and ':' with Nothing)
        start_time = start_time.translate(translation_table)
        end_time = end_time.translate(translation_table)

        base_url = "https://calendar.google.com/calendar/r/eventedit"

        description = "Your trip from {from_} to {to_}. For details, link here: {route_url}" \
            .format(from_=self.text_from(),
                    to_=self.text_to(),
                    route_url=url_for('routes_drive.drive', drive_id=self.id, _external=True))

        parameters = "?text={event_name}&dates={start_time}/{end_time}&details={description}&location={location}"

        parameters = parameters.format(event_name="[PlaceHolder] Trip",
                                       start_time=start_time,
                                       end_time=end_time,
                                       description=quote(description),
                                       location=quote(self.text_from()))
        # quote encodes the special characters in a string to e.g. %20

        return base_url + parameters