def order_handle(request): #保存一个事物点 tran_id = transaction.savepoint() #接受购物车编号 #cart_ids = request.POST.get('cart_ids') try: post = request.POST orderlist = post.getlist('id[]') total = post.get('total') address = post.get('address') order = OrderInfo() now = datetime.now() uid = request.session.get('user_id') order.oid = '%s%d' % (now.strftime('%Y%m%d%H%M%S'), uid) order.user_id = uid order.odate = now order.ototal = Decimal(total) order.oaddress = address order.save() # 遍历购物车中提交信息,创建订单详情表 for orderid in orderlist: cartinfo = CartInfo.objects.get(id=orderid) # good = GoodsInfo.objects.get(cartinfo__id=cartinfo.id) good = GoodsInfo.objects.get(pk=cartinfo.goods_id) # print '*'*10 # print cartinfo.goods_id # 判断库存是否够 if int(good.gkucun) >= int(cartinfo.count): # 库存够,移除购买数量并保存 good.gkucun -= int(cartinfo.count) good.save() goodinfo = GoodsInfo.objects.get(cartinfo__id=orderid) # 创建订单详情表 detailinfo = OrderDetailInfo() detailinfo.goods_id = int(goodinfo.id) detailinfo.order_id = int(order.oid) detailinfo.price = Decimal(int(goodinfo.gprice)) detailinfo.count = int(cartinfo.count) detailinfo.save() # 循环删除购物车对象 cartinfo.delete() else: # 库存不够出发事务回滚 transaction.savepoint_rollback(tran_id) # 返回json供前台提示失败 return JsonResponse({'status': 2}) transaction.savepoint_commit(tran_id) except Exception as e: print '==================%s' % e transaction.savepoint_rollback(tran_id) # 返回json供前台提示成功 return JsonResponse({'status': 1})
def post(self): # 1.接收参数 house_id = self.json_args.get('house_id') start_date = self.json_args.get('start_date') end_date = self.json_args.get('end_date') # 2.参数校验 s_date = datetime.strptime(start_date, "%Y-%m-%d") e_date = datetime.strptime(end_date, "%Y-%m-%d") # 3.查询数据 # 查询房屋信息 try: house = self.session_sql.query(HouseInfo).filter( HouseInfo.hi_house_id == house_id).first() except Exception as e: logging.error(e) return self.write({ "errno": RET.DBERR, "errmsg": "get house info error" }) # 查询客户提交的时间段内,该房间是否已有订单 try: h_order = self.session_sql.query(OrderInfo).filter( and_(OrderInfo.oi_house_id == house_id, OrderInfo.oi_begin_date <= e_date, OrderInfo.oi_end_date >= s_date)).first() except Exception as e: logging.error(e) return self.write({ "errno": RET.DBERR, "errmsg": "database query error!" }) # 4.数据处理 if h_order: return self.write({"errno": RET.DATAERR, "errmsg": "房间已经被预定"}) else: order_obj = OrderInfo(oi_user_id=self.session.data.get('id'), oi_house_id=house_id, oi_begin_date=s_date, oi_end_date=e_date, oi_days=(e_date - s_date).days + 1, oi_house_price=house.hi_price * 100, oi_amount=((e_date - s_date).days + 1) * house.hi_price * 100, oi_status=0, oi_comment="") self.session_sql.add(order_obj) try: self.session_sql.commit() except Exception as e: logging.error(e) return self.write({ "errno": RET.DBERR, "errmsg": "data upload error" }) # 5.返回结果 return self.write({"errno": RET.OK, "errmsg": "OK"})
def handle_order(request): ''' 处理订单 ''' # 定义事务id tran_id = transaction.savepoint() goods_ids1 = request.POST.get('goods_ids') total = request.POST.get('total') goods_ids = goods_ids1.split(',')[:-1] address = request.POST.get('address') try: # 创建订单对象 order = OrderInfo() # 定义创建订单时间对象 now = datetime.now() # 获取uid user_id = int(request.session['user_id']) # 赋值订单各信息 order.oid = '{}{}'.format(now.strftime('%Y%m%d%H%M%S'), user_id) order.user_id = user_id order.odate = now order.oTotal = Decimal(total) order.oaddress = address order.save() # 存入订单详情信息 for item in goods_ids: detail = OrderDetail() detail.order = order cart = CartInfo.objects.get(goods_id=item, user_id=user_id) detail.goods_id = item goods = GoodsInfo.objects.get(id=item) detail.price = goods.gprice detail.count = cart.number detail.save() transaction.savepoint_commit(tran_id) except Exception as e: print '==============', e transaction.savepoint_rollback(tran_id) return JsonResponse({'status': 'ok'})
def order_handle(request): tran_id = transaction.savepoint() try: post = request.POST orderlist = post.getlist('id[]') total = post.get('total') address = post.get('address') order = OrderInfo() now = datetime.now() uid = request.session.get('user_id') order.oid = '%s%d' % (now.strftime('%Y%m%d%H%M%S'), uid) order.user_id = uid order.odate = now order.ototal = Decimal(total) order.oaddress = address order.save() for orderid in orderlist: cartinfo = CartInfo.objects.get(id=orderid) good = GoodsInfo.objects.get(pk=cartinfo.goods_id) if int(good.gkucun) >= int(cartinfo.count): good.gkucun -= int(cartinfo.count) good.save() goodinfo = GoodsInfo.objects.get(cartinfo__id=orderid) detailinfo = OrderDetailInfo() detailinfo.goods_id = int(goodinfo.id) detailinfo.order_id = int(order.oid) detailinfo.price = Decimal(int(goodinfo.gprice)) detailinfo.count = int(cartinfo.count) detailinfo.save() cartinfo.delete() else: transaction.savepoint_rollback(tran_id) return JsonResponse({'status': 2}) except Exception as e: print '========================%s' % e transaction.savepoint_rollback(tran_id) return JsonResponse({'status': 1})
def order_handle(request): tran_id = transaction.savepoint() #接收购物车编号 cart_ids = request.POST.get('cart_ids') try: #创建订单对象 order = OrderInfo() now = datetime.now() uid = request.session['user_id'] order.oid = '%s%d' % (now.strftime('%Y%m%d%H%M%S'), uid) order.user_id = uid #print order.oid order.odate = now order.ototal = Decimal(request.POST.get('total')) order.save() #创建详单对象 cart_ids1 = [int(item) for item in cart_ids.split(',')] for id1 in cart_ids1: detail = OrderDetailInfo() detail.order = order #查询购物车信息 cart = CartInfo.objects.get(id=id1) #判断商品库存 goods = cart.goods if goods.gstocks >= cart.count: #减少商品库存 goods.gstocks = cart.goods.gstocks - cart.count goods.save() # 完善详单信息 detail.goods_id = goods.id detail.price = goods.gprice detail.count = cart.count detail.save() #删除购物车数据 cart.delete() else: #如果库存小于购买数量 transaction.savepoint_rollback(tran_id) return redirect('/cart/') transaction.savepoint_commit(tran_id) except Exception as e: print '====================%s' % e transaction.savepoint_rollback(tran_id) return redirect('/user/order/')