示例#1
0
def save_comment():
    """评价订单商品"""
    resjson.action_code = 17

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()
    nickname = get_nickname()
    avatar = get_avatar()

    wtf_form = CommentOrderGoodsForm()
    current_time = current_timestamp()

    if not wtf_form.validate_on_submit():
        for key, value in wtf_form.errors.items():
            msg = value[0]
        return resjson.print_json(11, msg)

    og_id = wtf_form.og_id.data
    order_goods = OrderGoods.query.get(og_id)
    if not order_goods:
        return resjson.print_json(12, _(u'订单商品不存在'))

    order = Order.query.filter(Order.order_id == order_goods.order_id).filter(
        Order.uid == uid).first()
    if not order:
        return resjson.print_json(13, _(u'订单商品不存在'))

    data = {'uid': uid, 'nickname': nickname, 'avatar': avatar, 'ttype': 1, 'tid': order_goods.goods_id,
            'rating': wtf_form.rating.data, 'content': wtf_form.content.data,
            'img_data': wtf_form.img_data.data, 'add_time': current_time}
    comment = model_create(Comment, data, commit=True)

    item = Goods.query.get(order_goods.goods_id)
    if item:
        comment_count = Comment.query.\
            filter(Comment.ttype == 1).\
            filter(Comment.tid == order_goods.goods_id).count()
        good_count = Comment.query.\
            filter(Comment.ttype == 1).\
            filter(Comment.tid == order_goods.goods_id).\
            filter(Comment.rating == 3).count()
        comment_good_rate = round(
            (Decimal(good_count)/Decimal(comment_count)) * 100)
        model_update(item, {'comment_count': comment_count,
                            'comment_good_rate': comment_good_rate})

    model_update(order_goods, {'comment_id': comment.comment_id}, commit=True)

    # 站内消息
    content = _(u'您已评价“%s”。' % order_goods.goods_name)
    mcs = MessageCreateService(
        1, uid, -1, content, ttype=2, tid=og_id, current_time=current_time)
    if not mcs.check():
        log_error('[ErrorViewApiOrderSaveComment][MessageCreateError]  og_id:%s msg:%s' % (
            og_id, mcs.msg))
    else:
        mcs.do()

    return resjson.print_json(0, u'ok')
示例#2
0
def remove():
    """ 删除订单 """
    resjson.action_code = 16

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    order_id = toint(request.args.get('order_id', 0))

    if order_id <= 0:
        return resjson.print_json(resjson.PARAM_ERROR)

    order = Order.query.filter(Order.order_id == order_id).filter(
        Order.uid == uid).first()

    if not order:
        return resjson.print_json(10, _(u'订单不存在'))

    if order.order_status not in (2, 3):
        return resjson.print_json(11, _(u'当前订单状态不允许删除订单'))

    model_update(order, {'is_remove': 1}, commit=True)

    return resjson.print_json(0, u'ok')
示例#3
0
def comment():
    """ 评价中心 """
    resjson.action_code = 21

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    params = request.args.to_dict()

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

    if p <= 0 or ps <= 0:
        return resjson.print_json(resjson.PARAM_ERROR)

    if is_pending not in [0, 1]:
        return resjson.print_json(resjson.PARAM_ERROR)

    data_temp = OrderStaticMethodsService.order_comments(uid, params, True)

    data = {'is_pending': data_temp['is_pending'], 'pending_count': data_temp['pending_count'],
            'unpending_count': data_temp['unpending_count'], 'comments': data_temp['comments']}

    return resjson.print_json(0, u'ok', data)
示例#4
0
def create():
    """创建订单"""
    resjson.action_code = 12

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    form = request.form
    carts_id = form.get('carts_id', '[]').strip()
    ua_id = toint(form.get('ua_id', '0'))
    shipping_id = toint(form.get('shipping_id', '0'))
    coupon_id = toint(form.get('coupon_id', '0'))
    log_info(form)

    try:
        carts_id = json.loads(carts_id)
    except Exception as e:
        return resjson.print_json(resjson.PARAM_ERROR)

    try:
        order_service = OrderService(
            uid,
            1,
            user_address_id=ua_id,
            cart_id_list=carts_id,
            coupon_id=coupon_id,
            shipping_id=shipping_id)
        orderinfo = order_service.create()
    except TheonestoreException as e:
        resjson.print_json(30, e.msg)
    return resjson.print_json(0, u'ok', {'order_id': orderinfo.order_id})
示例#5
0
def checkout_amounts():
    """结算金额"""
    resjson.action_code = 15

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    args = request.args
    carts_id = args.get('carts_id', '[]').strip()
    shipping_id = toint(args.get('shipping_id', '0'))
    coupon_id = toint(args.get('coupon_id', '0'))

    try:
        carts_id = json.loads(carts_id)
        carts_id = [toint(cart_id) for cart_id in carts_id]
    except Exception as e:
        return resjson.print_json(resjson.PARAM_ERROR)

    cs = CheckoutService(uid, carts_id, shipping_id, coupon_id)
    if not cs.check():
        return resjson.print_json(11, cs.msg)

    data = {
        'items_amount': cs.items_amount,
        'shipping_amount': cs.shipping_amount,
        'discount_amount': cs.discount_amount,
        'pay_amount': cs.pay_amount
    }
    return resjson.print_json(0, u'ok', data)
示例#6
0
def root():
    """手机站 - 售后服务列表"""

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

    params = request.args.to_dict()
    params['uid'] = uid
    _data = AfterSalesStaticMethodsService.aftersales(params)
    paging_url = url_for('mobile.aftersales.paging', **request.args)

    aftersales_status_text = {}
    for aftersale in _data['aftersales']:
        status_text, action_code = AfterSalesStaticMethodsService.aftersale_status_text_and_action_code(
            aftersale)
        aftersales_status_text[aftersale.aftersales_id] = status_text

    data = {
        'aftersales': _data['aftersales'],
        'paging_url': paging_url,
        'aftersales_status_text': aftersales_status_text
    }
    return render_template('mobile/aftersales/index.html.j2', **data)
示例#7
0
def profile_count():
    """ 用户统计信息 """

    resjson.action_code = 19

    uid = get_uid()
    cart_total = session.get('cart_total', 0)

    unread_count = 0
    if uid > 0:
        unread_count = UserStaticMethodsService.unread_count(get_uid())

    return resjson.print_json(0, u'ok', {
        'cart_total': cart_total,
        'unread_count': unread_count
    })
示例#8
0
def index():
    """ 售后服务列表 """

    resjson.action_code = 13

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    args = request.args
    p = toint(args.get('p', '1'))
    ps = toint(args.get('ps', '10'))

    if p <= 0 or ps <= 0:
        return resjson.print_json(resjson.PARAM_ERROR)

    params = {'uid': uid, 'p': p, 'ps': ps}
    _data = AfterSalesStaticMethodsService.aftersales(params)

    aftersales_status_text = {}
    for aftersale in _data['aftersales']:
        status_text, action_code = AfterSalesStaticMethodsService.aftersale_status_text_and_action_code(
            aftersale)
        aftersales_status_text[aftersale.aftersales_id] = status_text

    data = {
        'aftersales': _data['aftersales'],
        'aftersales_status_text': aftersales_status_text
    }
    return resjson.print_json(0, u'ok', data)
示例#9
0
def pay(order_id):
    """支付订单"""

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

    ret, msg, data, url = CartStaticMethodsService.pay_page(
        order_id, uid, 'pc')
    if not ret:
        return redirect(url)

    # 创建支付
    ps = PayService(uid, [order_id])
    if not ps.check():
        return redirect(url_for('pc.order.index', msg=ps.msg))

    if not ps.tran:
        ps.create_tran()

    tran = ps.tran
    tran_id = tran.tran_id
    subject = u'交易号:%d' % tran_id
    nonce_str = str(tran_id)
    pay_amount = Decimal(tran.pay_amount).quantize(Decimal('0.00'))*100

    # 支付二维码
    ns = NativeService(nonce_str, subject, tran_id,
                       pay_amount, request.remote_addr)
    if not ns.create_qrcode():
        return redirect(url_for('pc.order.index', msg=ns.msg))
    data['qrcode'] = ns.qrcode

    return render_template('pc/cart/pay.html.j2', **data)
示例#10
0
def deliver():
    """确认收货"""

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

    args = request.args
    order_id = toint(args.get('order_id', 0))

    if order_id <= 0:
        return ''

    ods = OrderDeliverService(order_id, uid)
    try:
        ods.deliver()
    except OrderException as e:
        msg = u'%s' % e.msg
        log_error(msg)
        return ''

    text, code = OrderStaticMethodsService.order_status_text_and_action_code(
        ods.order)

    return render_template('mobile/order/order.html.j2',
                           order=ods.order,
                           text=text,
                           code=code)
示例#11
0
def refunds_amount():
    """获取退款金额"""
    resjson.action_code = 11

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    og_id = toint(request.args.get('og_id', '0'))
    quantity = toint(request.args.get('quantity', '0'))
    if og_id <= 0 or quantity <= 0:
        return resjson.print_json(resjson.PARAM_ERROR)

    order_goods = OrderGoods.query.get(og_id)
    if not order_goods:
        return resjson.print_json(resjson.PARAM_ERROR)

    order = Order.query.filter(Order.order_id == order_goods.order_id).filter(
        Order.uid == uid).first()
    if not order:
        return resjson.print_json(resjson.PARAM_ERROR)

    refunds_amount = AfterSalesStaticMethodsService.refunds_amount(
        order_goods=order_goods, quantity=quantity)

    return resjson.print_json(0, u'ok', {'refunds_amount': refunds_amount})
示例#12
0
def update():
    """更新个人资料"""
    resjson.action_code = 11

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    wtf_form = ProfileForm()
    current_time = current_timestamp()

    if not wtf_form.validate_on_submit():
        for key, value in wtf_form.errors.items():
            msg = value[0]
        return resjson.print_json(11, msg)

    data = {
        'nickname': wtf_form.nickname.data,
        'avatar': wtf_form.avatar.data,
        'gender': wtf_form.gender.data,
        'update_time': current_time
    }

    user = User.query.get(uid)
    model_update(user, data, commit=True)

    set_user_session(user)

    return resjson.print_json(0, u'ok')
示例#13
0
def cancel():
    """取消订单"""

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

    args = request.args
    order_id = toint(args.get('order_id', 0))
    cancel_desc = args.get('cancel_desc', '').strip()

    if order_id <= 0:
        return ''

    ocs = OrderCancelService(order_id, uid, cancel_desc)
    try:
        ocs.cancel()
    except OrderException as e:
        msg = u'%s' % e.msg
        log_error(msg)
        return ''

    text, code = OrderStaticMethodsService.order_status_text_and_action_code(
        ocs.order)

    return render_template('mobile/order/order.html.j2',
                           order=ocs.order,
                           text=text,
                           code=code)
示例#14
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)
示例#15
0
def recharge():
    """pc站 - 钱包充值"""

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

    return render_template('pc/wallet/recharge.html.j2')
示例#16
0
def index():
    """手机站 - 个人中心"""

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

    data = MeStaticMethodsService.detail(uid)
    return render_template('mobile/me/index.html.j2', **data)
示例#17
0
def detail(order_id):
    """订单详情"""

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

    data = OrderStaticMethodsService.detail_page(order_id, uid)

    return render_template('mobile/order/detail.html.j2', **data)
示例#18
0
def address_save():
    """保存地址"""
    resjson.action_code = 12

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    wtf_form = AddressForm()
    current_time = current_timestamp()

    if not wtf_form.validate_on_submit():
        for key, value in wtf_form.errors.items():
            msg = value[0]
        return resjson.print_json(11, msg)

    is_default = toint(request.form.get('is_default', '-1'))
    if is_default not in [-1, 0, 1]:
        return resjson.print_json(resjson.PARAM_ERROR)

    ua_id = wtf_form.ua_id.data
    if ua_id:
        user_address = UserAddress.query.filter(
            UserAddress.ua_id == ua_id).filter(UserAddress.uid == uid).first()
        if not user_address:
            return resjson.print_json(12, _(u'收货地址不存在'))
    else:
        data = {'uid': uid, 'is_default': 1, 'add_time': current_time}
        user_address = model_create(UserAddress, data)

    if is_default == -1:
        is_default = user_address.is_default

    data = {
        'name': wtf_form.name.data,
        'mobile': wtf_form.mobile.data,
        'province': wtf_form.province.data,
        'city': wtf_form.city.data,
        'district': wtf_form.district.data,
        'address': wtf_form.address.data,
        'is_default': is_default,
        'update_time': current_time
    }

    if is_default == 1:
        default = UserAddress.query.filter(UserAddress.uid == uid).filter(
            UserAddress.is_default == 1).first()
        if default and default.ua_id != ua_id:
            default.is_default = 0

    user_address = model_update(user_address, data)
    db.session.commit()

    return resjson.print_json(0, u'ok', {'ua_id': user_address.ua_id})
示例#19
0
def paging():
    """加载分页"""

    if not check_login():
        session['weixin_login_url'] = url_for('mobile.order.index')
        return redirect(url_for('api.weixin.login'))
    uid = get_uid()

    data = OrderStaticMethodsService.orders(uid, request.args.to_dict())

    return render_template('mobile/order/paging.html.j2', **data)
示例#20
0
def coupon():
    """pc站 - 我的优惠券"""

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

    data = MeStaticMethodsService.coupons(uid)

    return render_template('pc/me/coupon.html.j2', **data)
示例#21
0
def detail(aftersales_id):
    """pc站 - 售后服务详情"""

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

    aftersales = Aftersales.query.filter(
        Aftersales.aftersales_id == aftersales_id).filter(
            Aftersales.uid == uid).first()
    if not aftersales:
        return redirect(url_for('pc.index.pagenotfound'))

    logs       = AftersalesLogs.query.\
                            filter(AftersalesLogs.aftersales_id == aftersales.aftersales_id).\
                            order_by(AftersalesLogs.al_id.desc()).all()

    logs_time = {}
    for log in logs:
        logs_time[log.al_type] = log.add_time

    status_text, action_code = AfterSalesStaticMethodsService.aftersale_status_text_and_action_code(
        aftersales)
    #回寄地址信息
    aftersales_service = {}
    if aftersales.check_status == 2:
        ss = SysSetting.query.filter(
            SysSetting.key == 'config_aftersales_service').first()
        if not ss:
            return redirect(url_for('pc.index.servererror'))

        try:
            aftersales_service = json.loads(ss.value)
        except Exception as e:
            return redirect(url_for('pc.index.servererror'))
    #换货收货地址
    address = None
    if aftersales.aftersales_type == 3:
        address = AftersalesAddress.query.filter(
            AftersalesAddress.aftersales_id == aftersales_id).first()

    data = {
        'aftersales': aftersales,
        'logs': logs,
        'logs_time': logs_time,
        'status_text': status_text,
        'action_code': action_code,
        'aftersales_service': aftersales_service,
        'aftersales_address': address
    }

    return render_template('pc/aftersales/detail.html.j2', **data)
示例#22
0
def paging():
    """加载分页"""

    if not check_login():
        session['weixin_login_url'] = url_for('mobile.wallet.root')
        return redirect(url_for('api.weixin.login'))
    uid = get_uid()

    _data = FundsStaticMethodsService.details(uid, request.args.to_dict())

    return render_template('mobile/wallet/paging.html.j2',
                           details=_data['details'])
示例#23
0
def coupon():
    """ 我的优惠券 """

    resjson.action_code = 15

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    data = MeStaticMethodsService.coupons(uid)

    return resjson.print_json(0, u'ok', data)
示例#24
0
def update():
    """更新购物车"""
    resjson.action_code = 12

    uid = get_uid()
    session_id = session.sid

    args = request.args
    cart_id = toint(args.get('cart_id', 0))
    quantity = toint(args.get('quantity', 0))
    current_time = current_timestamp()

    # 检查
    if cart_id <= 0 or quantity <= 0:
        return resjson.print_json(resjson.PARAM_ERROR)

    # 获取购物车商品
    q = Cart.query.filter(Cart.cart_id == cart_id).filter(
        Cart.checkout_type == 1)
    if uid:
        q = q.filter(Cart.uid == uid)
    else:
        q = q.filter(Cart.session_id == session_id)
    cart = q.first()
    if cart is None:
        return resjson.print_json(10, _(u'购物车里找不到商品'))

    # 更新购物车商品
    data = {'quantity': quantity, 'update_time': current_time}
    model_update(cart, data, commit=True)

    cs = CartService(uid, session_id)
    cs.check()
    session['cart_total'] = cs.cart_total

    for _cart in cs.carts:
        if _cart['cart'].cart_id == cart_id:
            _items_amount = _cart['items_amount']

    # 商品状态
    item = Goods.query.get(cart.goods_id)
    is_valid, valid_status = CartStaticMethodsService.check_item_statue(
        item, cart)

    data = {
        'cart_total': cs.cart_total,
        'items_quantity': cs.items_quantity,
        'items_amount': cs.items_amount,
        '_items_amount': _items_amount,
        'is_valid': is_valid,
        'valid_status': valid_status
    }
    return resjson.print_json(0, u'ok', data)
示例#25
0
def addresses():
    """手机站 - 收货地址管理"""

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

    addresses = UserAddress.query.filter(UserAddress.uid == uid).order_by(
        UserAddress.is_default.desc()).all()

    return render_template('mobile/me/addresses.html.j2', addresses=addresses)
示例#26
0
def index():
    """订单列表页"""
    resjson.action_code = 10

    if not check_login():
        return resjson.print_json(resjson.NOT_LOGIN)
    uid = get_uid()

    data = OrderStaticMethodsService.orders(uid, request.args.to_dict())
    data['tab_status'] = request.args.get('tab_status', '0')

    return resjson.print_json(0, u'ok', data)
示例#27
0
def root():
    """pc站 - 我的钱包"""

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

    funds = Funds.query.filter(Funds.uid == uid).first()
    data = FundsStaticMethodsService.details(uid, request.args.to_dict(), True)
    data['funds'] = funds

    return render_template('pc/wallet/index.html.j2', **data)
示例#28
0
def detail(order_id):
    """订单详情"""

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

    data = OrderStaticMethodsService.detail_page(order_id, uid)
    # pc端订单详情不支持再次购买,排除掉指令[5]
    data['code'] = list(set(data['code']) - set([5]))

    return render_template('pc/order/detail.html.j2', **data)
示例#29
0
def comment(is_pagination=True):
    """pc站 - 评价中心"""

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

    data = OrderStaticMethodsService.order_comments(uid,
                                                    request.args.to_dict(),
                                                    True)

    return render_template('pc/order/comment.html.j2', **data)
示例#30
0
def index():
    """订单列表页"""

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

    data = OrderStaticMethodsService.orders(uid, request.args.to_dict())
    data['paging_url'] = url_for('mobile.order.paging', **request.args)
    data['tab_status'] = request.args.get('tab_status', '0')

    return render_template('mobile/order/index.html.j2', **data)