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')
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')
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)
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})
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)
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)
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 })
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)
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)
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)
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})
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')
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)
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)
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')
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)
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)
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})
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)
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)
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)
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'])
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)
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)
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)
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)
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)
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)
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)
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)