Exemple #1
0
class OrderDetail(BaseModel):
    __tablename__ = "order_detail"
    order_id = db.Column(db.String(64),
                         db.ForeignKey('orders.order_id'),
                         nullable=False)
    goods_id = db.Column(db.Integer,
                         db.ForeignKey("s_goods.id"),
                         nullable=False)
    passport_id = db.Column(db.Integer,
                            db.ForeignKey('s_user_account.id'),
                            nullable=False)
    goods_count = db.Column(db.Integer, default=1)
    goods_price = db.Column(db.DECIMAL(10, 2))

    @classmethod
    def add_order_detail_info(cls, order_id, goods_id, passport_id,
                              goods_count, goods_price):
        info = cls(order_id=order_id,
                   goods_id=goods_id,
                   passport_id=passport_id,
                   goods_count=goods_count,
                   goods_price=goods_price)
        db.session.add(info)
        db.session.commit()

    @classmethod
    def get_goods(cls, order_id):
        info = cls.query.filter_by(order_id=order_id).all()
        return info
Exemple #2
0
class Area(db.Model):
    __tablename__ = "areas"
    aid = db.Column(db.Integer, primary_key=True)    # 邮编
    atitle = db.Column(db.String(20))    # 地名
    pid = db.Column(db.Integer)

    @classmethod
    def get_province(cls):
        province = cls.query.filter_by(pid=None).all()
        print(province)
        return province

    @classmethod
    def get_addr_info(cls, province_id=None, city=None):
        if province_id:
            res = []
            info = db.session.query(Area).filter(Area.pid == province_id).all()
            for shi in info:
                res.append([str(shi.aid), str(shi.atitle)])
            return res
        if city:
            res = []
            info = db.session.query(Area).filter(Area.pid == city).all()
            for shi in info:
                res.append([str(shi.aid), str(shi.atitle)])
            return res
Exemple #3
0
class Base(db.Model):
    __abstract__ = True
    is_delete = db.Column(db.Boolean, default=False)
    create_time = db.Column(db.DateTime, default=datetime.now)
    update_time = db.Column(db.DateTime,
                            default=datetime.now,
                            onupdate=datetime.now)
Exemple #4
0
class HeadImage(BaseModel):
    __tablename__ = "head_image"
    passport_id = db.Column(db.Integer, db.ForeignKey("s_user_account.id"), nullable=False)
    user_image = db.Column(db.String(60), default="/static/images/people.png")

    @classmethod
    def add_first_image(cls, passport_id):
        info = cls(passport_id=passport_id,
                   user_image="/static/images/people.png")
        db.session.add(info)
        db.session.commit()
Exemple #5
0
class Browsing(BaseModel):
    __tablename__ = "browsing_history"
    passport_id = db.Column(db.Integer,
                            db.ForeignKey("s_user_account.id"),
                            nullable=False)
    goods_id = db.Column(db.Integer,
                         db.ForeignKey("s_goods.id"),
                         nullable=False)

    @classmethod
    def add_browsing(cls, passport_id, goods_id):
        browsing = Browsing(passport_id=passport_id, goods_id=goods_id)
        db.session.add(browsing)
        db.session.commit()
Exemple #6
0
class Passport(BaseModel):
    """用户模型类"""
    __tablename__ = "s_user_account"
    username = db.Column(db.String(20))
    password = db.Column(db.String(40))
    email = db.Column(db.String(30))
    gender = db.Column(db.String(3), default="保密")  # 默认为保密,1为男,2为女
    phone = db.Column(db.String(20), default=None)  # 默认为空
    balance = db.Column(db.Integer, default=2000)       # 用户余额
    integral = db.Column(db.Integer, default=1000)    # 积分

    @classmethod
    def add_one_passport(cls, username, password, email):
        obj = cls(
            username=username,
            password=get_hash(password),
            email=email
        )
        db.session.add(obj)
        db.session.commit()
        return obj

    @classmethod
    def get_one_passport(cls, username, password=None):
        """根据用户名查询信息"""
        query_dict = dict(
            username=username
        )
        if password:
            query_dict.update(password=get_hash(password))
        obj = cls.query.filter_by(**query_dict).first()
        return obj
Exemple #7
0
class Address(BaseModel):
    """地址模型类"""
    __tablename__ = "s_user_address"
    recipient_name = db.Column(db.String(24))
    recipient_addr = db.Column(db.String(256))
    recipient_phone = db.Column(db.String(11))
    zip_code = db.Column(db.String(6))  # 邮编地址
    is_default = db.Column(db.Boolean, default=False)  # 是否为默认地址
    passport_id = db.Column(db.Integer, db.ForeignKey("s_user_account.id"), nullable=False)

    @classmethod
    def add_one_address(cls, passport_id, recipient_name, recipient_addr, recipient_phone, zip_code):
        """添加应该收货地址"""
        addr = cls.get_one_address(passport_id=passport_id)
        obj = cls(
            passport_id=passport_id,
            recipient_name=recipient_name,
            recipient_addr=recipient_addr,
            recipient_phone=recipient_phone,
            zip_code=zip_code,
            is_default=not bool(addr)
        )
        db.session.add(obj)
        db.session.commit()
        return obj

    @classmethod
    def get_one_address(cls, passport_id):
        addr = Address.query.filter_by(passport_id=passport_id).first()
        print(addr)
        return addr
Exemple #8
0
class Collect(BaseModel):
    __tablename__ = "collect"
    passport_id = db.Column(db.Integer,
                            db.ForeignKey("s_user_account.id"),
                            nullable=False)
    goods_id = db.Column(db.Integer,
                         db.ForeignKey("s_goods.id"),
                         nullable=False)
    goods_count = db.Column(db.Integer, default=1)

    @classmethod
    def get_collect(cls, goods_id):
        obj = Collect.query.filter_by(goods_id=goods_id).first()
        # print(obj)
        return obj

    @classmethod
    def add_collect(cls, passport_id, goods_id):
        collect = Collect(passport_id=passport_id, goods_id=goods_id)
        db.session.add(collect)
        db.session.commit()
        return True
Exemple #9
0
class Orders(Base):
    __tablename__ = "orders"
    order_id = db.Column(db.String(64), primary_key=True)
    passport_id = db.Column(db.Integer,
                            db.ForeignKey('s_user_account.id'),
                            nullable=False)
    addr_id = db.Column(db.Integer,
                        db.ForeignKey("s_user_address.id"),
                        nullable=False)
    total_count = db.Column(db.Integer, default=1)
    total_price = db.Column(db.DECIMAL(10, 2))
    freight_price = db.Column(db.DECIMAL(10, 2))  # 商品运费
    pay_method = db.Column(db.String(10), default="余额支付")
    order_status = db.Column(db.String(10), default="待发货")
    express = db.Column(db.String(10), default="中通快递")  # 快递方式
    leave_message = db.Column(db.String(60))  # 留言
    order_details = db.relationship("OrderDetail", backref="orders")

    @classmethod
    def add_oreder_info(cls, order_id, passport_id, addr_id, total_count,
                        total_price, freight_price, pay_method, express,
                        leave_message):
        info = cls(order_id=order_id,
                   passport_id=passport_id,
                   addr_id=addr_id,
                   total_count=total_count,
                   total_price=total_price,
                   freight_price=freight_price,
                   pay_method=pay_method,
                   express=express,
                   leave_message=leave_message)
        db.session.add(info)
        db.session.commit()

    @classmethod
    def search_orders_all(cls, passport_id):
        orders = cls.query.filter_by(passport_id=passport_id).all()
        return orders
Exemple #10
0
class Goods(BaseModel):
    __tablename__ = "s_goods"
    goods_type_id = db.Column(db.SmallInteger)  # 商品类型id
    product_title = db.Column(db.String(50), nullable=False)  # 产品名称
    product_subhead = db.Column(db.String(200), default="无")  # 产品副标题
    product_price = db.Column(db.DECIMAL(10, 2), nullable=False)  # 产品价格
    index_image = db.Column(db.String(60))  # 首页商品图片
    product_original = db.Column(db.DECIMAL(10, 2))  # 原价
    product_sales = db.Column(db.Integer, default=0)  # 产品销量
    product_image = db.Column(db.String(60))  # 产品图片
    goods_stock = db.Column(db.Integer, default=0)  # 商品库存
    product_weight = db.Column(db.Integer, default=0)  # 产品重量
    detail_image = db.Column(db.String(60))  # 详情图片
    detail_parameter = db.Column(db.Text)  # 产品参数
    colt = db.relationship("Collect", backref="col_goods")
    carts = db.relationship("Cart", backref="goods")
    order = db.relationship("OrderDetail", backref="order_goods")
    browsing = db.relationship("Browsing", backref="browsing_goods")

    @classmethod
    def get_goods_by_id(cls, goods_id):
        goods = Goods.query.get(goods_id)
        return goods

    @classmethod
    def get_goods_by_type(cls, goods_type_id, limit=None, sort="default"):
        """根据商品类型id查询商品信息"""
        from chengse_project.goods.enum import sort_map
        goods_list = cls.query.filter_by(goods_type_id=goods_type_id).order_by(
            sort_map[sort].desc()).all()
        # goods_list = cls.query.filter_by(goods_type_id=goods_type_id).all()
        if limit:
            goods_list = goods_list[:limit]
        return goods_list

    @classmethod
    def goods_paging(cls, goods_type_id, per_page, pindex=1, sort="default"):
        from chengse_project.goods.enum import sort_map
        pagination = Goods.query.filter_by(
            goods_type_id=goods_type_id).order_by(
                sort_map[sort].desc()).paginate(page=pindex,
                                                per_page=per_page,
                                                error_out=False)
        return pagination

    @classmethod
    def search_list_paging(cls,
                           search_text,
                           per_page,
                           pindex=1,
                           sort="default"):
        from chengse_project.goods.enum import sort_map
        # print(db.session.query(Goods).filter(Goods.product_title.like(f"%{search_text}%")).order_by(sort_map[sort].desc()).all())
        pagination = db.session.query(Goods).filter(
            Goods.product_title.like(f"%{search_text}%")).order_by(
                sort_map[sort].desc()).paginate(page=pindex,
                                                per_page=per_page,
                                                error_out=False)
        # print(pagination)
        return pagination
Exemple #11
0
class BaseModel(Base):
    __abstract__ = True
    id = db.Column(db.Integer, primary_key=True)
Exemple #12
0
class Cart(BaseModel):
    __tablename__ = "carts"
    passport_id = db.Column(db.Integer,
                            db.ForeignKey("s_user_account.id"),
                            nullable=False)
    goods_id = db.Column(db.Integer,
                         db.ForeignKey("s_goods.id"),
                         nullable=False)
    goods_count = db.Column(db.Integer, default=1)

    @classmethod
    def get_one_cart_info(cls, passport_id, goods_id):
        cart_info = cls.query.filter_by(passport_id=passport_id,
                                        goods_id=goods_id).first()
        print(cart_info)
        return cart_info

    @classmethod
    def add_one_cart_info(cls, passport_id, goods_id, goods_count):
        cart_info = cls.get_one_cart_info(passport_id=passport_id,
                                          goods_id=goods_id)
        # 判断库存

        if cart_info:
            total_count = cart_info.goods_count + goods_count
            if total_count <= cart_info.goods.goods_stock:
                cart_info.goods_count = total_count
                db.session.add(cart_info)
                db.session.commit()
                return True
            else:
                return False
        else:
            # total_count = cart_info.goods_count + goods_count
            goods = Goods.query.get(goods_id)
            if goods_count <= goods.goods_stock:
                cart_info = Cart(passport_id=passport_id,
                                 goods_id=goods_id,
                                 goods_count=goods_count)
                db.session.add(cart_info)
                db.session.commit()
                return True
            else:
                return False
        # if cart_info:
        #     total_count = cart_info.goods_count+goods_count
        #     cart_info.goods_count = total_count
        #     db.session.add(cart_info)
        #     db.session.commit()
        #     return True
        # else:
        #     goods = Goods.query.get(goods_id)
        #     cart_info = Cart(
        #         passport_id=passport_id,
        #         goods_id=goods_id,
        #         goods_count=goods_count
        #     )
        #     db.session.add(cart_info)
        #     db.session.commit()
        #     return True

    @classmethod
    def update_one_cart_info(cls, passport_id, goods_id, goods_count):
        cart_info = cls.get_one_cart_info(passport_id=passport_id,
                                          goods_id=goods_id)
        if goods_count <= cart_info.goods.goods_stock:
            cart_info.goods_count = goods_count
            db.session.add(cart_info)
            db.session.commit()
            return True
        else:
            return False

    @classmethod
    def delete_cart_info(cls, passport_id, goods_id):
        try:
            cart_info = cls.get_one_cart_info(passport_id=passport_id,
                                              goods_id=goods_id)
            db.session.delete(cart_info)
            db.session.commit()
            return True
        except:
            return False

    @classmethod
    def get_cart_list_by_id_list(cls, cart_id_list):
        """获取id在cart_id_list中的购物车记录"""
        cart_list = Cart.query.filter(Cart.id.in_(cart_id_list)).all()
        return cart_list