Beispiel #1
0
def to_collection_model(user_id, book_id, is_clear=False):
    """添加、取消收藏"""
    conn = ToMongo()
    if is_clear:
        result = False
        query = {'_id': str(user_id), 'book_ids.book_id': {'$in': [book_id]}}
        ret = conn.update('favorites', query,
                          {'$pull': {
                              'book_ids': {
                                  'book_id': book_id
                              }
                          }})
        if ret.modified_count:
            result = True
    else:
        result = False
        query = {'_id': str(user_id), 'book_ids.book_id': {'$nin': [book_id]}}
        ret = conn.update('favorites', query, {
            '$push': {
                'book_ids': {
                    'book_id': book_id,
                    'create_time': get_now()
                }
            }
        })
        if ret.modified_count:
            result = True
    conn.close_conn()
    return result
Beispiel #2
0
def add_visits(user_id):
    """访问量加1函数"""
    db_conn = ToMongo()
    dawn_timestamp = get_dawn_timestamp()
    last_date = db_conn.get_col('visits').aggregate([{
        '$group': {
            '_id': '$_id',
            'day': {
                '$last': '$date'
            }
        }
    }])
    date_list = list(last_date)
    # 不为空
    if date_list:
        # 同一天加入
        if date_list[0]['day'] == get_dawn_timestamp():
            db_conn.update('visits', {'_id': date_list[0]['_id']},
                           {'$addToSet': {
                               'users_id': user_id
                           }})
        else:
            # 不是同一天,插入新的文档
            db_conn.insert('visits', {
                'date': dawn_timestamp,
                'users_id': [user_id]
            })
    else:
        # 为空也插入
        db_conn.insert('visits', {
            'date': dawn_timestamp,
            'users_id': [user_id]
        })
Beispiel #3
0
def get_book(id, query_off_shelf=True):
    """获取图书信息"""
    mydb = ToMongo()
    mycol = mydb.get_col('books')
    if query_off_shelf:
        book = mycol.find_one({'_id': ObjectId(id), 'is_off_shelf': 0})
    else:
        book = mycol.find_one({'_id': ObjectId(id)})
    # 添加点击量
    mydb.update('books', {'_id': ObjectId(id)}, {'$inc': {'hits': 1}})
    mydb.close_conn()
    return book
Beispiel #4
0
def add_history(user_id, book_id):
    """添加浏览历史"""
    conn = ToMongo()
    query = {'_id': str(user_id), 'book_ids': {'$nin': [book_id]}}
    ret = conn.update('history', query, {'$push': {'book_ids': book_id}})
    conn.close_conn()
    if ret:
        return ret.modified_count
Beispiel #5
0
def evaluate_model(user_id, user_name, request, book_ids):
    """用户评论模型"""
    rlt = {}
    order_no = request.get('order_no')
    star = int(request.get('star'))
    context = request.get('context')
    anonymous = request.get('anonymous')
    if not star:
        rlt['error'] = '评分不能为空'
        return rlt
    img_path = ''
    create_time = get_now()
    if anonymous:
        user_name = user_name[0] + '**'
    else:
        user_name = user_name[0] + '*' + user_name[-1]
    id_list = []
    mydb = ToMongo()
    for book_id in book_ids:
        value = {'$addToSet':
                     {'comment':
                          {'order_no': order_no,
                           'star': star,
                           'context': context,
                           'user_id': user_id,
                           'user_name': user_name,
                           'img_path': img_path,
                           'create_time': create_time
                           }
                      }
                 }
        result = mydb.update('evaluate', {'_id': ObjectId(book_id)}, value)
        if result.modified_count:
            id_list.append(result.modified_count)
        else:
            # 无评论时,直接插入
            rel = mydb.insert('evaluate',
                              {'_id': ObjectId(book_id),
                               'comment':
                                   [
                                       {'order_no': order_no,
                                        'star': star,
                                        'context': context,
                                        'user_id': user_id,
                                        'user_name': user_name,
                                        'img_path': img_path,
                                        'create_time': create_time
                                        }
                                   ]
                               })
            id_list.append(rel.inserted_id)
        # print(id_list)
    if len(id_list) != len(book_ids):
        # print(id_list)
        rlt['error'] = '评论失败,请重试!'
    mydb.close_conn()
    return rlt
Beispiel #6
0
def refund_model(order_no, user_id):
    """用户申请退款"""
    mydb = ToMongo()
    query = {'order_no': order_no, 'user_id': user_id}
    new = {'$set': {'orders_status': 6}}
    rel = mydb.update('order', query, new)
    mydb.close_conn()
    if rel and rel.modified_count:
        return rel.modified_count
Beispiel #7
0
def update_status(order_no):
    """更新订单状态为交易完成"""
    mydb = ToMongo()
    result = mydb.update('order', {'order_no': order_no},
                         {'$set': {
                             'orders_status': 4
                         }})
    mydb.close_conn()
    return result.modified_count
Beispiel #8
0
def clear_history_model(user_id):
    """清除浏览记录"""
    conn = ToMongo()
    result = False
    query = {'_id': str(user_id)}
    ret = conn.update('history', query, {'$set': {'book_ids': []}})
    if ret.modified_count:
        result = True
    conn.close_conn()
    return result
Beispiel #9
0
def add_hits_cf(user_id, book_id):
    conn = ToMongo()
    result = conn.update('hits_data', {
        '_id': str(user_id),
        'book_ids': {
            '$nin': [book_id]
        }
    }, {'$push': {
        'book_ids': book_id
    }})
    conn.close_conn()
Beispiel #10
0
def update_status_user_id(order_no, user_id):
    """更新订单状态为待评论"""
    mydb = ToMongo()
    result = mydb.update('order', {
        'order_no': order_no,
        'user_id': user_id
    }, {'$set': {
        'orders_status': 3
    }})
    mydb.close_conn()
    return result.modified_count
Beispiel #11
0
def cancel_model(order_no, user_id):
    """用户取消订单"""
    mydb = ToMongo()
    # 还原物品库存
    query = {'order_no': order_no, 'user_id': user_id}
    restore_stock(query, mydb)
    # 更改订单状态
    query = {'order_no': order_no, 'user_id': user_id}
    new = {'$set': {'orders_status': 5}}
    rel = mydb.update('order', query, new)
    mydb.close_conn()
    return rel.modified_count
Beispiel #12
0
def admin_login_model(email, password):
    result = {}
    conn = ToMongo()
    admin = conn.get_col('admin').find_one({'email': email, 'is_effective': 1})
    if admin:
        # 用户名正确
        if admin['sign_count'] >= 5 and get_now() - admin['last_signIn_time'] < FROZEN_TIME:
            result['error'] = '请 {}秒 后再重试'.format(FROZEN_TIME - (get_now() - admin['last_signIn_time']))
            conn.close_conn()
            return result
        else:
            if check_password_hash(admin['password'], password):  # 成功
                conn.update('admin',
                            {'email': admin.get('email')},
                            {'$set': {'sign_count': 0, 'last_signIn_time': get_now()}})
                result['admin'] = admin
                conn.close_conn()
                return result
            else:  # 失败
                conn.update('admin',
                            {'email': admin.get('email')},
                            {'$inc': {'sign_count': 1}})
                conn.update('admin',
                            {'email': admin.get('email')},
                            {'$set': {'last_signIn_time': get_now()}})
                error = '邮箱地址或密码错误!剩余 {} 次'.format(5 - (admin['sign_count'] + 1))
                result['error'] = error
                conn.close_conn()
                return result
    else:  # 用户名错误
        result['error'] = '邮箱地址或密码错误!'
        conn.close_conn()
        return result
Beispiel #13
0
def search_book_model(word, page, page_size):
    """搜索图书"""
    db_conn = ToMongo()
    # 如果输入不为空
    if word:
        first_type = db_conn.get_col('books').find().distinct('first_type')
        if word in first_type:
            books, count = get_like_books(word,
                                          page,
                                          page_size,
                                          book_type=True)
        else:
            # 添加关键字数据到数据库,用与绘制词云图
            db_conn.update('keyword', {'_id': 'keyword'}, {'$inc': {word: 1}})
            books, count = get_like_books(word, page, page_size)
    # 如果输入为空,则显示点击量前十的
    else:
        books = db_conn.get_col('books').find({
            'is_off_shelf': 0
        }).sort('hits', -1).skip((page - 1) * page_size).limit(page_size)
        count = db_conn.get_col('books').find({'is_off_shelf': 0}).count()
    db_conn.close_conn()
    return books, count
Beispiel #14
0
def user_delete_order(user_id, order_no):
    """用户删除单个订单"""
    rel = False
    db_conn = ToMongo()
    result = db_conn.update('order', {
        'order_no': order_no,
        'user_id': user_id
    }, {'$set': {
        'is_effective': 0
    }})
    if result.modified_count:
        # 删除成功
        rel = True
    db_conn.close_conn()
    return rel
Beispiel #15
0
def to_delete_collection(user_id, ids):
    conn = ToMongo()
    result = False
    query = {'_id': str(user_id)}
    ret = conn.update('favorites', query,
                      {'$pull': {
                          'book_ids': {
                              'book_id': {
                                  '$in': ids
                              }
                          }
                      }})
    if ret.modified_count:
        result = True
    conn.close_conn()
    return result
Beispiel #16
0
def update_status_to_5():
    """将过期订单,状态更新为失效"""
    mydb = ToMongo()
    query = {
        'orders_status': 0,
        'create_time': {
            '$lt': get_now() - ORDER_EFFECTIVE_TIME
        },
    }
    # 恢复库存
    orders = mydb.get_col('order').find(query)
    for order in orders:
        order_no = order.get('order_no')
        query = {'order_no': order_no}
        restore_stock(query, mydb)
    # 更新订单状态
    new = {'$set': {'orders_status': 5}}
    result = mydb.update('order', query, new, is_one=False)
    mydb.close_conn()
    return result.modified_count
Beispiel #17
0
def edit_addr_model(user_id, request):
    rel = False
    name = request.form.get('name')
    tel = request.form.get('tel')
    address_list = request.form.get('address').strip().split(' ')
    details = request.form.get('details')
    _id = request.form.get('_id')
    db_conn = ToMongo()
    result = db_conn.update('address', {'_id': ObjectId(_id)}, {
        "$set": {
            'name': name,
            'tel': tel,
            'province': address_list[0],
            'city': address_list[1],
            'district': address_list[2],
            'details': details
        }
    })
    if result.modified_count:
        rel = True
        result = db_conn.get_col('address').find({'user_id': user_id})
    db_conn.close_conn()
    return rel, result
Beispiel #18
0
def clear_user_count(admin):
    conn = ToMongo()
    result = conn.update('admin', {'email': admin.get('email')}, {'$set': {'sign_count': 0}})
    conn.close_conn()
    return result.modified_count
Beispiel #19
0
def to_pay_model(user_id, book_ids, addr_id, is_buy_now):
    """去支付"""
    DISCOUNT = 1.01
    create_time = int(time.time())
    order_no = create_orders()
    books = []
    amount = .0
    # 获取收货地址,写入订单号详情
    db_conn = ToMongo()
    address = db_conn.get_col('address').find_one({
        'user_id': user_id,
        '_id': ObjectId(addr_id)
    })
    for book_id in book_ids:
        book = get_book(book_id, False)
        if not is_buy_now:
            db = ToConn()
            sql = 'select book_num from cart where user_id=%s and book_id=%s and is_effe=1'
            book_num = db.get_db(sql, (user_id, book_id)).fetchone()
            if book_num:
                books.append({
                    'book_num': int(book_num['book_num']),
                    'book_id': book_id
                })
                amount += (float(book.get('price')) *
                           int(book_num['book_num']))
            else:
                books.append({'book_num': 1, 'book_id': book_id})
                amount += (float(book.get('price')) * 1)
        else:
            books.append({'book_num': 1, 'book_id': book_id})
            amount += (float(book.get('price')) * 1)

    v = {
        "amount": amount - DISCOUNT,
        "books": books,
        "order_no": order_no,
        "is_processed": 0,
        "user_id": user_id,
        "create_time": create_time,
        "is_effective": 1,
        "address": address,
        "orders_status": 0,
        "pay_status": 0,
        "exp_status": 0,
        "logistics": [],  # 物流信息
    }
    result = db_conn.insert('order', v)
    if result and not is_buy_now:
        db = ToConn()
        conn = db.to_execute()
        cursor = conn.cursor()
        try:
            for book_id in book_ids:
                sql = 'delete from cart where user_id=%s and book_id=%s'
                cursor.execute(sql, (user_id, book_id))
        except Exception as e:
            print('========to_pay=========事务处理失败:', e)
            conn.rollback()  # 事务回滚
        else:
            conn.commit()  # 事务提交

            for book in books:
                # 销量加
                db_conn.update('books', {'_id': ObjectId(book.get('book_id'))},
                               {'$inc': {
                                   'sales': book.get('book_num')
                               }})
                # 库存减
                db_conn.update('books', {'_id': ObjectId(book.get('book_id'))},
                               {'$inc': {
                                   'stock': -book.get('book_num')
                               }})
        db.to_close()
    elif is_buy_now:
        for book in books:
            # 销量加
            db_conn.update('books', {'_id': ObjectId(book.get('book_id'))},
                           {'$inc': {
                               'sales': book.get('book_num')
                           }})
            # 库存减
            db_conn.update('books', {'_id': ObjectId(book.get('book_id'))},
                           {'$inc': {
                               'stock': -book.get('book_num')
                           }})

    db_conn.close_conn()
    return order_no
Beispiel #20
0
def evaluate_model(user_id, user_name, request):
    """用户评论模型"""
    rlt = {}
    order_no = request.form.get('order_no')
    if int(get_order_status(order_no)) == 4:
        rlt['error'] = '已评论!'
        return rlt
    star = int(request.form.get('star'))
    context = request.form.get('context')
    anonymous = request.form.get('anonymous')
    img = request.files.get('img')
    if not star:
        rlt['error'] = '评分不能为空'
        return rlt
    if img:
        img_path = save_img(order_no, img)
    else:
        img_path = ''
    create_time = get_now()
    book_ids = get_book_id(order_no)
    if anonymous:
        user_name = user_name[0] + '**'
    elif user_name is None:
        user_name = '***'
    else:
        user_name = user_name[0] + '*' + user_name[-1]
    id_list = []
    mydb = ToMongo()
    for book_id in book_ids:
        evaluates = mydb.get_col('evaluate').find_one(
            {'_id': ObjectId(book_id)})
        if evaluates:
            value = {
                '$addToSet': {
                    'comment': {
                        'order_no': order_no,
                        'star': star,
                        'context': context,
                        'user_id': user_id,
                        'user_name': user_name,
                        'img_path': img_path,
                        'create_time': create_time
                    }
                }
            }
            result = mydb.update('evaluate', {'_id': ObjectId(book_id)}, value)
            if result and result.modified_count:
                id_list.append(result.modified_count)
        else:
            # 无评论时,直接插入
            rel = mydb.insert(
                'evaluate', {
                    '_id':
                    ObjectId(book_id),
                    'comment': [{
                        'order_no': order_no,
                        'star': star,
                        'context': context,
                        'user_id': user_id,
                        'user_name': user_name,
                        'img_path': img_path,
                        'create_time': create_time
                    }]
                })
            if rel:
                id_list.append(rel.inserted_id)
    if len(id_list) != len(book_ids):
        # print(id_list)
        rlt['error'] = '评论失败,请重试!'
    mydb.close_conn()
    return rlt