def set(): if request.method == 'GET': resp_data = {} req = request.args ids = req.get('id', '') id = int(ids) if ids.isdigit() else 0 food_info = Food.query.filter_by(id=id).first() if food_info and food_info.status != 1: return redirect(UrlManager.buildUrl('/food/index')) cat_list = FoodCat.query.all() resp_data['current'] = 'index' resp_data['cat_list'] = cat_list resp_data['food_info'] = food_info return ops_render('food/set.html', resp_data) resp = {'code': 200, 'msg': '操作成功', 'data': {}} req = request.values id = int(req['id']) if 'id' in req and req['id'].isdigit() else 0 cat_id = int( req['cat_id']) if 'cat_id' in req and req['cat_id'].isdigit() else 0 name = req['name'] if 'name' in req else '' price = req['price'] if 'price' in req else 0 main_image = req['main_image'] if 'main_image' in req else '' summary = req['summary'] if 'summary' in req else '' stock = int( req['stock']) if 'stock' in req and req['stock'].isdigit() else 0 tags = req['tags'] if 'tags' in req else '' price = Decimal(price).quantize(Decimal('0.00')) if cat_id < 1: resp['code'] = -1 resp['msg'] = '请选择分类' return jsonify(resp) if not name or len(name) < 1: resp['code'] = -1 resp['msg'] = '请输入符合规范的名字' return jsonify(resp) if price <= 0: resp['code'] = -1 resp['msg'] = '请输入符合规范的售卖价格' return jsonify(resp) if not main_image or len(main_image) < 3: resp['code'] = -1 resp['msg'] = '请上传封面图' return jsonify(resp) if not summary or len(summary) < 10: resp['code'] = -1 resp['msg'] = '请输入描述,并且不能少于10个字符' return jsonify(resp) if stock < 1: resp['code'] = -1 resp['msg'] = '请输入符合规范的库存量' return jsonify(resp) if not tags or len(tags) < 1: resp['code'] = -1 resp['msg'] = '请输入标签,便于搜索' return jsonify(resp) # has_food_name = Food.query.filter(Food.name==name).first() # if has_food_name: # resp['code'] = -1 # resp['msg'] = '菜名已存在,请重新输入' # return jsonify(resp) food_info = Food.query.filter_by(id=id).first() before_stock = 0 if food_info: model_food = food_info before_stock = model_food.stock else: model_food = Food() model_food.created_time = getCurrentDate() model_food.cat_id = cat_id model_food.name = name model_food.main_image = main_image model_food.stock = stock model_food.price = price model_food.summary = summary model_food.tags = tags model_food.updated_time = getCurrentDate() db.session.add(model_food) db.session.commit() # model_stock_change = FoodStockChangeLog() # model_stock_change.food_id = model_food.id # model_stock_change.unit = model_food.stock - before_stock # model_stock_change.total_stock = stock # model_stock_change.note = '' # model_stock_change.created_time = getCurrentDate() # # db.session.add(model_stock_change) # db.session.commit() FoodService.setFoodStockChangeLog(model_food.id, int(stock) - int(before_stock), '后台修改') return jsonify(resp)
def createOrder(self, member_id=0, items=None, params=None): resp = {'code': 200, 'msg': '操作成功', 'data': {}} pay_price = decimal.Decimal(0.00) continue_count = 0 food_ids = [] for item in items: if decimal.Decimal(item['price']) < 0: continue_count += 1 continue pay_price += decimal.Decimal(item['price']) * item['number'] food_ids.append(item['id']) if continue_count >= len(items): resp['code'] = -1 resp['msg'] = '部分或全部商品的价格有误' return resp yun_price = params[ 'yun_price'] if params and 'yun_price' in params else 0 note = params['note'] if params and 'note' in params else '' yun_price = decimal.Decimal(yun_price) total_price = pay_price + yun_price try: tmp_food_list = db.session.query(Food).filter( Food.id.in_(food_ids)).with_for_update().all() tmp_food_stock_mapping = {} for tmp_item in tmp_food_list: tmp_food_stock_mapping[tmp_item.id] = tmp_item.stock model_pay_order = PayOrder() model_pay_order.order_sn = self.geneOrderSn() model_pay_order.member_id = member_id model_pay_order.total_price = total_price model_pay_order.yun_price = yun_price model_pay_order.pay_price = pay_price model_pay_order.note = note model_pay_order.status = -8 model_pay_order.express_status = -8 model_pay_order.updated_time = getCurrentDate() db.session.add(model_pay_order) for item in items: tmp_left_stock = tmp_food_stock_mapping[item['id']] if decimal.Decimal(item['price']) < 0: continue if int(item['number']) > int(tmp_left_stock): raise Exception('你购买的这款美食太火爆了,剩余:%s,您购买:%s' % (tmp_left_stock, item['number'])) tmp_ret = Food.query.filter_by(id=item['id']).update( {'stock': tmp_left_stock - item['number']}) if not tmp_ret: raise Exception('下单失败,请重新下单') tmp_pay_item = PayOrderItem() tmp_pay_item.member_id = member_id tmp_pay_item.pay_order_id = model_pay_order.id tmp_pay_item.quantity = item['number'] tmp_pay_item.price = item['price'] tmp_pay_item.food_id = item['id'] tmp_pay_item.note = note tmp_pay_item.updated_time = tmp_pay_item.created_time = getCurrentDate( ) db.session.add(tmp_pay_item) # db.session.flush() FoodService.setFoodStockChangeLog(item['id'], -item['number'], '在线购买') db.session.commit() resp['data'] = { 'id': model_pay_order.id, 'order_sn': model_pay_order.order_sn, 'total_price': str(total_price) } except Exception as e: print('错误' + str(e)) db.session.rollback() resp['code'] = -1 resp['msg'] = '下单失败,请重新下单, 原因:' + str(e) return resp return resp