Exemple #1
0
    def coupons(uid):
        current_time = current_timestamp()

        q = Coupon.query.\
                filter(Coupon.uid == uid).\
                filter(Coupon.is_valid == 1).\
                filter(Coupon.begin_time <= current_time).\
                filter(Coupon.end_time >= current_time)
        valid_count = get_count(q)
        valid_coupons = q.order_by(Coupon.coupon_id.desc()).all()

        q = Coupon.query.\
                filter(Coupon.uid == uid).\
                filter(or_(and_(Coupon.is_valid == 0, Coupon.order_id == 0), Coupon.end_time < current_time))
        invalid_count = get_count(q)
        invalid_coupons = q.order_by(Coupon.coupon_id.desc()).all()

        q = Coupon.query.\
                filter(Coupon.uid == uid).\
                filter(Coupon.order_id > 0)
        used_count = get_count(q)
        used_coupons = q.order_by(Coupon.coupon_id.desc()).all()

        data = {
            'valid_coupons': valid_coupons,
            'invalid_coupons': invalid_coupons,
            'used_coupons': used_coupons,
            'valid_count': valid_count,
            'invalid_count': invalid_count,
            'used_count': used_count
        }

        return data
Exemple #2
0
def index():
    """pc站 - 个人中心"""

    if not check_login():
        session['weixin_login_url'] = request.url
        return redirect(url_for('api.weixin.login_qrcode'))
    uid = get_uid()

    data = MeStaticMethodsService.detail(uid)
    #用户信息
    user = User.query.get(uid)

    # 收藏商品
    q = db.session.query(Like.like_id).\
            filter(Like.uid == uid).\
            filter(Like.like_type == 2).\
            filter(Like.ttype == 1)
    collect_count = get_count(q)

    wtf_form = ProfileForm()

    data['user'] = user
    data['collect_count'] = collect_count
    data['wtf_form'] = wtf_form

    return render_template('pc/me/index.html.j2', **data)
Exemple #3
0
 def get_rating_count(self, rating):
     """获取评价总数
     :param int rating 1:差评 2:中评 3:好评
     """
     if rating in (1, 2, 3):
         q = self.cs.query.filter(Comment.rating == rating)
         return get_count(q)
     return 0
Exemple #4
0
    def order_comments(uid, params, is_pagination=False):
        """ 订单评价中心 """

        p = toint(params.get('p', '1'))
        ps = toint(params.get('ps', '10'))
        is_pending = toint(params.get('is_pending', '0'))

        completed = db.session.query(Order.order_id).\
            filter(Order.uid == uid).\
            filter(Order.is_remove == 0).\
            filter(Order.order_status == 2).\
            filter(Order.pay_status == 2).\
            filter(Order.deliver_status == 2).all()
        completed = [order.order_id for order in completed]

        q = db.session.query(
            OrderGoods.og_id, OrderGoods.goods_id, OrderGoods.goods_name,
            OrderGoods.goods_img, OrderGoods.goods_desc,
            OrderGoods.goods_price, OrderGoods.comment_id).\
            filter(OrderGoods.order_id.in_(completed))
        pending_count = get_count(q.filter(OrderGoods.comment_id == 0))
        unpending_count = get_count(q.filter(OrderGoods.comment_id > 0))

        if is_pending == 1:
            q = q.filter(OrderGoods.comment_id == 0)
        else:
            q = q.filter(OrderGoods.comment_id > 0)

        comments = None
        pagination = None
        if is_pagination:
            comments = q.order_by(OrderGoods.og_id.desc()).offset(
                (p-1)*ps).limit(ps).all()
            pagination = Pagination(None, p, ps, q.count(), None)
        else:
            comments = q.order_by(OrderGoods.og_id.desc()).all()

        data = {'is_pending': is_pending, 'pending_count': pending_count,
                'unpending_count': unpending_count, 'comments': comments,
                'pagination': pagination}

        return data
Exemple #5
0
    def check(self):
        """检查"""

        # 检查 - 支付订单ID列表数据
        self.order_id_list = [toint(order_id)
                              for order_id in self.order_id_list]
        if len(self.order_id_list) <= 0:
            self.msg = _(u'支付订单ID列表不能为空')
            return False

        # 格式化支付订单ID列表数据
        self.order_id_list.sort()
        self.order_id_json = json.dumps(self.order_id_list)

        # 支付订单列表
        q = db.session.query(Order.order_id,
                             Order.order_sn,
                             Order.pay_amount,
                             Order.order_type,
                             Order.uid).\
            filter(Order.uid == self.uid).\
            filter(Order.pay_status == 1).\
            filter(Order.order_id.in_(self.order_id_list))

        # 检查 - 支付订单列表是否有非法的订单
        if len(self.order_id_list) != get_count(q):
            self.msg = _(u'创建支付失败')
            return False

        # 支付订单列表
        self.pay_order_list = q.all()

        # 支付订单列表对应的交易
        self.tran = OrderTran.query.filter(OrderTran.uid == self.uid).\
            filter(OrderTran.order_id_list == self.order_id_json).first()
        if self.tran:
            # 检查交易是否已经支付
            if self.tran.pay_status == 2:
                self.msg = _(u'该订单已经支付过了')
                return False

            # 检查 - 支付订单列表
            if not self.check_order_list():
                return False

            return True

        # 检查 - 支付订单列表
        if not self.check_order_list():
            return False

        return True
Exemple #6
0
 def get_image_rating_count(self):
     """获取有图评价总数"""
     q = self.cs.query.filter(Comment.img_data != '[]')
     return get_count(q)
Exemple #7
0
 def pagination(self):
     """分页对象"""
     q = self._query()
     return Pagination(None, self.page, self.page_size, get_count(q), None)
Exemple #8
0
def dashboard():
    """dashboard页"""
    g.page_title = _(u'首页')

    admin_uid = session.get('admin_uid', None)
    if not admin_uid:
        return_url = request.args.get('return_url', '/admin/dashboard')
        return redirect(url_for('admin.auth.login', return_url=return_url))

    # 今天0点0时0分时间戳
    today_time_stamp = some_day_timestamp(current_timestamp(), 0)

    # 用户数
    q = db.session.query(User.uid)
    sum_user = get_count(q)

    q = db.session.query(User.uid).\
        filter(User.add_time >= today_time_stamp)
    day_user = get_count(q)

    # 订单数
    q = db.session.query(Order.order_id).\
        filter(Order.order_type == 1)
    sum_order = get_count(q)

    q = q.filter(Order.add_time >= today_time_stamp)
    day_order = get_count(q)

    # 订单交易总额
    _sum_order_amount = db.session.query(
        func.sum(Order.order_amount).label('sum_order_amount')).\
        filter(Order.order_type == 1).\
        filter(Order.pay_status == 2).first()
    sum_order_amount = _sum_order_amount.sum_order_amount if _sum_order_amount else Decimal(
        '0.00')

    _day_order_amount = db.session.query(
        func.sum(Order.order_amount).label('day_order_amount')).\
        filter(Order.order_type == 1).\
        filter(Order.pay_status == 2).\
        filter(Order.add_time >= today_time_stamp).first()
    day_order_amount = _day_order_amount.day_order_amount if _day_order_amount else Decimal(
        '0.00')

    # 售后数
    q = db.session.query(Aftersales.order_id)
    sum_aftersales = get_count(q)

    q = db.session.query(Aftersales.aftersales_id).\
        filter(Aftersales.add_time >= today_time_stamp)
    day_aftersales = get_count(q)

    # 会员充值(连表查,3条数据)
    funds_orders = []
    # funds_orders       = db.session.query(Order.order_id, Order.order_amount, Order.add_time,
    #                                     User.nickname, User.avatar).\
    #                                 filter(Order.uid == User.uid).\
    #                                 filter(Order.order_type == 2).\
    #                                 filter(Order.pay_status == 2).\
    #                                 order_by(Order.order_id.desc()).limit(4).all()
    fund_orders_amount = 0
    # for funds_order in funds_orders:
    #     fund_orders_amount += funds_order.order_amount

    # 最近订单
    goods_orders = db.session.query(
        Order.order_id, Order.order_sn,
        Order.order_amount, Order.order_status,
        Order.pay_status, Order.shipping_status,
        Order.deliver_status, Order.aftersale_status,
        Order.add_time, User.nickname,
        Order.pay_method, User.avatar).\
        filter(Order.uid == User.uid).\
        filter(Order.order_type == 1).\
        filter(Order.pay_status == 2).\
        order_by(Order.order_id.desc()).limit(10).all()

    orders = []
    goods_orders_amount = 0
    for order in goods_orders:
        goods_orders_amount += order.order_amount
        status_text, action_code = OrderStaticMethodsService.\
            order_status_text_and_action_code(order)
        order = kt_to_dict(order)
        order['status_text'] = status_text
        orders.append(order)

    # 最近评论
    comments = db.session.query(
        Comment.nickname, Comment.avatar,
        Comment.add_time, Comment.rating,
        Comment.content, Comment.img_data).\
        order_by(Comment.comment_id.desc()).limit(3).all()

    # 今天限制时间
    start = some_day_timestamp(current_timestamp(), 0)
    end = some_day_timestamp(current_timestamp(), 1)
    today_date_rang = timestamp2str(
        start, 'YYYY-MM-DD') + ' - ' + timestamp2str(end, 'YYYY-MM-DD')

    data = {
        'sum_user': sum_user,
        'day_user': day_user,
        'sum_order': sum_order,
        'day_order': day_order,
        'sum_order_amount': sum_order_amount,
        'day_order_amount': day_order_amount,
        'sum_aftersales': sum_aftersales,
        'day_aftersales': day_aftersales,
        'fund_orders_amount': fund_orders_amount,
        'funds_orders': funds_orders,
        'orders': orders,
        'orders_amount': goods_orders_amount,
        'comments': comments,
        'today_date_rang': today_date_rang
    }

    return render_template('admin/dashboard/index.html.j2', **data)
Exemple #9
0
    def detail(uid):
        nickname = get_nickname()
        avatar = get_avatar()
        current_time = current_timestamp()

        # 优惠券
        q = Coupon.query.\
                filter(Coupon.uid == uid).\
                filter(Coupon.is_valid == 1).\
                filter(Coupon.begin_time <= current_time).\
                filter(Coupon.end_time >= current_time)
        coupon_count = get_count(q)

        # 未付款订单
        q = db.session.query(Order.order_id).\
                filter(Order.uid == uid).\
                filter(Order.order_type == 1).\
                filter(Order.is_remove == 0).\
                filter(Order.order_status == 1).\
                filter(Order.pay_status == 1)
        unpaid_count = get_count(q)

        # 待收货订单
        q = db.session.query(Order.order_id).\
                filter(Order.uid == uid).\
                filter(Order.order_type == 1).\
                filter(Order.is_remove == 0).\
                filter(Order.order_status == 1).\
                filter(Order.pay_status == 2).\
                filter(Order.deliver_status.in_([0,1]))
        undeliver_count = get_count(q)

        completed = db.session.query(Order.order_id).\
                        filter(Order.uid == uid).\
                        filter(Order.order_type == 1).\
                        filter(Order.is_remove == 0).\
                        filter(Order.order_status == 2).\
                        filter(Order.pay_status == 2).\
                        filter(Order.deliver_status == 2).all()
        completed = [order.order_id for order in completed]

        # 待评价
        q = db.session.query(OrderGoods.og_id).\
                filter(OrderGoods.order_id.in_(completed)).\
                filter(OrderGoods.comment_id == 0)
        uncomment_count = get_count(q)

        # 退款售后
        q = db.session.query(Aftersales.aftersales_id).\
                filter(Aftersales.status.in_([1,2])).\
                filter(Aftersales.uid == uid)
        aftersales_count = get_count(q)

        funds = Funds.query.filter(Funds.uid == uid).first()

        data = {
            'uid': uid,
            'nickname': nickname,
            'avatar': avatar,
            'coupon_count': coupon_count,
            'unpaid_count': unpaid_count,
            'undeliver_count': undeliver_count,
            'uncomment_count': uncomment_count,
            'aftersales_count': aftersales_count,
            'funds': funds
        }

        return data
    def before_request():
        endpoint = request.endpoint
        if endpoint is None:
            return

        # 管理后台权限判断
        if (endpoint.find('admin.') == 0 and
            (endpoint not in ('admin.index.root', 'admin.auth.login'))):
            admin_uid = session.get('admin_uid', 0)
            if admin_uid <= 0:
                return abort(403)

        # 移动设备 Android|iPhone|iPod|iPad
        is_mobile = is_mobile_device(request.headers.get('User-Agent', ''))
        if is_mobile and endpoint.find('pc.') == 0:
            return redirect(u'/mobile' + request.full_path)
        elif not is_mobile and endpoint.find('mobile.') == 0:
            full_path = request.full_path
            full_path = full_path.replace('/mobile', '')
            return redirect(full_path)

        # pc
        if endpoint.find('pc.') == 0:
            from app.models.item import GoodsCategories

            # nav推荐分类列表
            categories = db.session.query(GoodsCategories.cat_id, GoodsCategories.cat_name).\
                                filter(GoodsCategories.is_recommend == 1).\
                                order_by(GoodsCategories.sorting.desc()).\
                                order_by(GoodsCategories.cat_id.desc()).all()
            g.pc_nav_categories = categories

        if (endpoint.find('pc.') == 0) or (endpoint.find('mobile.') == 0):
            from app.services.api.user import UserStaticMethodsService

            uid = session.get('uid', 0)
            g.unread_count = 0

            if uid:
                # 未读消息数
                g.unread_count = UserStaticMethodsService.unread_count(uid)

        # PC待评价数
        if (endpoint.find('pc.order')
                == 0) or (endpoint.find('pc.aftersales')
                          == 0) or (endpoint.find('pc.me')
                                    == 0) or (endpoint.find('pc.wallet') == 0):

            from app.models.order import (Order, OrderGoods)
            from app.helpers import get_count

            uid = session.get('uid', 0)
            g.uncomment_count = 0

            if uid:
                completed = db.session.query(Order.order_id).\
                                    filter(Order.uid == uid).\
                                    filter(Order.is_remove == 0).\
                                    filter(Order.order_status == 2).\
                                    filter(Order.pay_status == 2).\
                                    filter(Order.deliver_status == 2).all()
                completed = [order.order_id for order in completed]

                q         = db.session.query(OrderGoods.og_id).\
                                    filter(OrderGoods.order_id.in_(completed)).\
                                    filter(OrderGoods.comment_id == 0)

                g.uncomment_count = get_count(q)