Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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