def project_tag(): from model import CATEGORY, TYPE, PROJECT try: category_model_list = list(CATEGORY.objects.raw({'delete': False})) except Exception as e: logging.error('Request Error: {}\nStack: {}\n'.format( e, traceback.format_exc())) return raise_status(500, '后台异常') tag_list = [] for model in category_model_list: category = {'id': str(model._id), 'category': model.name} try: type_list = list( TYPE.objects.raw({ 'category': model._id, 'delete': False })) except Exception as e: logging.error('Request Error: {}\nStack: {}\n'.format( e, traceback.format_exc())) return raise_status(500, '后台异常') tag = [] for type_model in type_list: count = PROJECT.objects.raw({ 'tag': type_model._id, 'delete': False }).count() tag.append({ 'id': str(type_model._id), 'name': type_model.name, 'count': count }) category['type'] = tag tag_list.append(category) return jsonify(tag_list)
def tenant_create(): from application.tenant_app import tenant_app requestObj = request.get_json() fields = request.args.get('fields') needed = ['name', 'remark', 'activated', 'namespace'] query_list = [ 'name', 'logo', 'remark', 'resources', 'activated', 'namespace' ] requestObj = filter(query_list=query_list, updateObj=requestObj) for i in needed: if i not in requestObj.keys(): return raise_status(400, '信息有缺失') try: TENANT.objects.get({'name': requestObj['name'], 'delete': False}) return raise_status(400, '租户名已存在') except TENANT.DoesNotExist: if not requestObj.get('resources'): requestObj['resources'] = {} if 'logo' not in requestObj.keys(): requestObj['logo'] = None try: tenant = tenant_app(requestObj=requestObj).tenant_insert() re = tenant_app(fields=fields).get_return_by_fields(tenant=tenant) return jsonify(re) except Exception as e: logging.error('Request Error: {}\nStack: {}\n'.format( e, traceback.format_exc())) return raise_status(400, '租户创建失败')
def book_delete(): from app import db returnObj = {} try: book_list = request.json.get('book_list') action_list = [] for book_id in book_list: db.t_books.update({'_id': ObjectId(book_id)}, {'$set': { 'change_status': '2' }}) action_list.append({ 'userid': session['id'], 'username': session['username'], 'action': 'delete', 'type': '1', 'aid': book_id, 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) db.mg_action_record.insert_many(action_list) returnObj['info'] = '操作成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- book_delete error as: ', e) raise_status(500, str(e))
def book_image(book_id): returnObj = {} try: type = request.args.get('type') allowed_extensions = set(['png', 'jpg', 'JPG', 'PNG', 'gif', 'GIF']) file = request.files.get('avatar') extension = file.filename.rsplit('.', 1)[1] if extension in allowed_extensions: message = img_bulk(file, extension) print(message) if type == '0': session['insert'] = message returnObj['message'] = message returnObj['info'] = '操作成功' elif type == '1': session[book_id] = message returnObj['message'] = message returnObj['info'] = '操作成功' else: info = '图片格式不对' return raise_status(400, info) return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- book_image error as: ', e) raise_status(500, str(e))
def project_change(projectId): from application.project_app import project_app from model import PROJECT from bson import ObjectId try: projectId = ObjectId(projectId) project_app().projectId_check(projectId=projectId) except PROJECT.DoesNotExist: return jsonify({'error': raise_status(400, 'projectIdError')}) except Exception as e: logging.error('Request Error: {}\nStack: {}\n'.format( e, traceback.format_exc())) return jsonify({'error': raise_status(400, 'ObjectIdError')}) requestObj = {'_id': projectId} updateObj = request.json query_list = [ 'creator', 'title', 'description', 'requirement', 'timeConsume', 'material', 'reference', 'image', 'base', 'spec', 'tag' ] updateObj = filter(query_list=query_list, updateObj=updateObj) if updateObj.get('id'): del updateObj['id'] try: if updateObj.get('base') and updateObj.get('base') != projectId: updateObj['base'] = ObjectId(updateObj['base']) project_app().project_reference_check(reference=updateObj['base']) except PROJECT.DoesNotExist: return jsonify({'error': raise_status(400, 'referenceError')}) try: project_app(requestObj=requestObj, updateObj=request.json).project_update_set() project = project_app(requestObj=requestObj).project_find_one() except Exception as e: logging.error('Request Error: {}\nStack: {}\n'.format( e, traceback.format_exc())) return '后台异常', 500 if project._id == project.base: baseId = None else: baseId = str(project.base._id) returnObj = { 'id': str(project._id), 'creator': str(project.creator), 'title': project.title, 'description': project.description, 'requirement': project.requirement, 'material': project.material, 'reference': project.reference, 'tag': project.tag.name, 'labs': project.labs, 'timeConsume': project.timeConsume, 'image': project.image, 'base': baseId, 'spec': project.spec, 'createdAt': project.createdAt, 'updatedAt': project.updatedAt } return jsonify(returnObj)
def tenant_delete(tenant_id): from application.tenant_app import tenant_app try: TENANT.objects.get({'_id': ObjectId(tenant_id), 'delete': False}) except TENANT.DoesNotExist: return raise_status(400, '无效的租户id') requestObj = {'_id': tenant_id} tenant_app(requestObj=requestObj).tenant_delete() return raise_status(200)
def user_update_by_set(userId): from bson import ObjectId requestObj = {'_id': ObjectId(userId)} updateObj = request.json() try: user_app(requestObj=requestObj, updateObj=updateObj).user_update() except Exception as e: print('user_update_totally error:', e) return raise_status(500, '后台异常') return raise_status(200)
def login(): from app import db from datetime import datetime returnObj = {} try: username = request.json.get('username') password = request.json.get('password') data_check = db.mg_user.find_one({ 'username': username, 'password': password }) if data_check: session['username'] = username session['id'] = str(data_check['_id']) role_list = data_check['role_list'] role = [] collection = {'1': '书摘模块', '2': '书籍模块', '3': '用户模块'} icon_list = {'1': 'home', '2': 'yonghu', '3': 'yonghu'} # 数据库中取出该用户权限列表,判断并生成基础菜单和进阶菜单 for single in role_list: key = 0 for menu in role: if single['id'][0] == menu.get('id'): menu['children'].append(single) key = 1 if key == 0: menu_id = single['id'][0] menu = { 'id': menu_id, 'name': collection[menu_id], 'icon': icon_list[menu_id], 'children': [single] } role.append(menu) LoginTime = datetime.now().strftime('%Y-%m-%d %H:%M:%S') db.mg_user.update({'_id': data_check['_id']}, {'$set': { 'RecentLogin': LoginTime }}) returnObj['data'] = {'username': username, 'role': role} returnObj['info'] = '登录成功' return jsonify(returnObj) else: check_username = db.mg_user.find_one({'username': username}) if check_username: info = '密码错误' return raise_status(400, info) else: info = '不存在该用户' return raise_status(400, info) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- login error as: ', e) return raise_status(500, str(e))
def login(self): try: user = USER.objects.get(self.requestObj) except USER.DoesNotExist: try: USER.objects.get({'name': self.requestObj['name']}) return raise_status(400, '密码错误') except USER.DoesNotExist: return raise_status(400, '用户名错误') session = {'id': str(user._id), 'name': user.name, 'role': user.role} return session
def tenant_get_by_id(tenant_id): from application.tenant_app import tenant_app try: TENANT.objects.get({'_id': ObjectId(tenant_id), 'delete': False}) except TENANT.DoesNotExist: return raise_status(400, '无效的租户id') requestObj = {'_id': tenant_id} fields = request.args.get('fields') tenant = tenant_app(requestObj=requestObj, collection='tenant').tenant_find_one() if tenant == 'DoesNotExist': return raise_status(400, '错误的id') re = tenant_app(fields=fields).get_return_by_fields(tenant=tenant) return jsonify(re)
def user_count(self): try: count = USER.objects.raw(self.requestObj).count() return count except Exception as e: print('user_count error:', e) return raise_status(500, '后台异常')
def excerpt_delete(): from app import db returnObj = {} try: excerpt_list = request.json.get('excerpt_list') action_list = [] count = 0 for excerpt in excerpt_list: data_excerpt = db.t_excerpts.find_one_and_update( {'_id': ObjectId(excerpt)}, {'$set': { 'change_status': '2' }}) action_list.append({ 'userid': session['id'], 'username': session['username'], 'action': 'delete', 'type': '2', 'aid': excerpt, 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) count += 1 data_book = db.t_books.find_one( {'_id': ObjectId(data_excerpt['bookid'])}) if data_book.get('digest_ck'): digest_ck = [ data_book['digest_ck'][0] - count, data_book['digest_ck'][1] ] else: digest_count = db.t_excerpts.count( {'bookid': data_excerpt['bookid']}) ck_count = db.t_excerpts.count({ 'bookid': data_excerpt['bookid'], '$or': [{ 'change_status': '1' }, { 'change_status': '2' }] }) digest_ck = [digest_count - ck_count, digest_count] db.t_books.update_one({'_id': ObjectId(data_excerpt['bookid'])}, {'$set': { 'digest_ck': digest_ck }}) db.mg_action_record.insert_many(action_list) returnObj['info'] = '操作成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- excerpt_delete error as: ', e) return raise_status(500, str(e))
def project_delete(projectId): from application.project_app import project_app from model import PROJECT from auth import raise_status from bson import ObjectId try: projectId = ObjectId(projectId) project_app().projectId_check(projectId=projectId) requestObj = {'_id': projectId} project_app(requestObj=requestObj).project_delete() except PROJECT.DoesNotExist: return raise_status(400, '无效的项目') except Exception as e: logging.error('Request Error: {}\nStack: {}\n'.format( e, traceback.format_exc())) return jsonify({'error': raise_status(400, '错误的ObjectId')}) return raise_status(200)
def user_update_totally(userId): from bson import ObjectId requestObj = {'_id': ObjectId(userId)} updateObj = request.json() fields_list = [ 'name', 'key', 'role', 'mobile', 'email', 'remark', 'certification', 'thumb' ] for i in fields_list: if i not in updateObj.keys(): return raise_status(400, '信息不全') try: user_app(requestObj=requestObj, updateObj=updateObj).user_update() except Exception as e: print('user_update_totally error:', e) return raise_status(500, '后台异常') return raise_status(200)
def user_get_by_id(userId): from bson import ObjectId requestObj = {'_id': ObjectId(userId)} try: user = user_app(requestObj=requestObj).user_find_one() except Exception: return raise_status(400, '无效的Id') re = user_app().get_return(user=user) return jsonify(re)
def user_delete(): from app import db returnObj = {} try: user_list = request.json.get('user_list') for User in user_list: db.mg_user.remove({'username': User}) returnObj['info'] = '操作成功' except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- user_delete error as: ', e) return raise_status(500, str(e))
def tenant_update_totally(tenant_id): from application.tenant_app import tenant_app try: TENANT.objects.get({'_id': ObjectId(tenant_id), 'delete': False}) except TENANT.DoesNotExist: return raise_status(400, '无效的租户id') requestObj = {'_id': tenant_id} updateObj = request.get_json() fields = request.args.get('fields') query_list = [ 'name', 'logo', 'remark', 'resources', 'activated', 'namespace' ] needed = ['name', 'remark', 'activated', 'namespace', 'resources', 'logo'] for i in needed: if i not in updateObj.keys(): return raise_status(400, '信息有缺失') updateObj = filter(query_list=query_list, updateObj=updateObj) tenant_app(requestObj=requestObj, updateObj=updateObj).tenant_update_set() tenant = tenant_app(requestObj=requestObj, collection='tenant').tenant_find_one() re = tenant_app(fields=fields).get_return_by_fields(tenant=tenant) return jsonify(re)
def user_manage(): from app import db returnObj = {} try: start = int(request.args.get('start', 0)) end = int(request.args.get('end', 20)) lmt = end - start data_user = db.mg_user.find().limit(lmt).skip(start).sort([('username', 1)]) count = db.mg_user.find().count() returnObj['data'] = [] for User in data_user: username = User['username'] role_list = User['role_list'] role = [] collection = {'1': '书摘模块', '2': '书籍模块', '3': '用户模块'} # 数据库中取出该用户权限列表,判断并生成基础菜单和进阶菜单 for single in role_list: key = 0 for menu in role: if single['id'][0] == menu.get('id'): menu['children'].append(single) key = 1 if key == 0: menu_id = single['id'][0] menu = { 'id': menu_id, 'name': collection[menu_id], 'children': [single] } role.append(menu) email = User['email'] mobile = User['mobile'] remark = User['remark'] uid = str(User['_id']) returnObj['data'].append({ 'uid': uid, 'username': username, 'mobile': mobile, 'email': email, 'role_list': role, 'remark': remark }) returnObj['count'] = count return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- user_manage error as: ', e) return raise_status(500, str(e))
def change_password(): from app import db returnObj = {} try: password = request.json.get('password') db.mg_user.update({'_id': ObjectId(session['id'])}, {'$set': { 'password': password }}) returnObj['info'] = '修改成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- change_password error as: ', e) return raise_status(500, str(e))
def user_sign(): requestObj = request.json returnObj = {} try: if type(requestObj) == list: returnObj['users'] = [] for insertObj in requestObj: user_model = user_app(requestObj=insertObj).user_insert() returnObj['users'].append(user_app().get_return(user_model)) elif type(requestObj) == dict: user_model = user_app(requestObj, 'user').user_insert() returnObj['users'] = user_app().get_return(user_model) return jsonify(returnObj) except Exception as e: print(e) return jsonify(raise_status(400, '创建失败'))
def users_list(): requestObj = {} page = int(request.args.get('page', '1')) pageSize = int(request.args.get('pageSize', '20')) queries = ['name', 'role', 'certification'] for query in queries: value = request.args.get(query) if value: if query == 'role': requestObj[query] = int(value) else: requestObj[query] = value if request.args.get('all'): page = pageSize = None else: count = user_app(requestObj=requestObj).user_count() if count % pageSize == 0: totalPage = count // pageSize else: totalPage = (count // pageSize) + 1 if page > totalPage: return raise_status(400, '页数超出范围') users_list = user_app(requestObj=requestObj).user_find_all(page, pageSize) user_ln_list = [] for user in users_list: re = user_app().get_return(user=user) user_ln_list.append(re) returnObj = {} if not request.args.get('all'): returnObj['meta'] = { 'page': page, 'pageSize': pageSize, 'total': count, 'totalPage': totalPage } returnObj['users'] = user_ln_list return jsonify(returnObj)
def excerpt_update(): from app import db returnObj = {} try: excerpt_list = request.json.get('excerpt_list') for data_book in excerpt_list: excerpt_id = data_book.get('excerpt_id') ck_exp_chp_id = data_book.get('ck_exp_chp_id') ck_exp_chp_title = data_book.get('ck_exp_chp_title') ck_exp_text = data_book.get('ck_exp_text') ck_is_hot_exp = data_book.get('ck_is_hot_exp') # if not ck_is_hot_exp and not ck_exp_text and not ck_exp_chp_title and not ck_exp_chp_id: # info = '没有修改信息' # return raise_status(400, info) db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, { '$set': { 'ck_exp_chp_id': ck_exp_chp_id, 'ck_exp_chp_title': ck_exp_chp_title, 'ck_exp_text': ck_exp_text, 'ck_is_hot_exp': ck_is_hot_exp, 'change_status': '1' } }) operation = { session['id']: [ session['username'], 'update', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$push': { 'operation': operation }}) db.mg_action_record.insert({ 'userid': session['id'], 'username': session['username'], 'action': 'change', 'type': '2', 'aid': excerpt_id, 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) summary = db.t_excerpts.find_one({'_id': ObjectId(excerpt_id)}) book_id = summary['bookid'] data_count = db.t_books.find_one({'_id': ObjectId(book_id)}) if data_count.get('digest_ck'): digest_ck = data_count['digest_ck'] digest_ck[0] = digest_ck[0] - 1 else: digest_count = db.t_excerpts.count({'bookid': book_id}) ck_count = db.t_excerpts.count({ 'bookid': book_id, '$or': [{ 'change_status': '1' }, { 'change_status': '2' }] }) digest_ck = [digest_count - ck_count, digest_count] db.t_books.update({'_id': ObjectId(book_id)}, {'$set': { 'digest_ck': digest_ck }}) # data['ck_exp_chp_id'] = ck_exp_chp_id # data['ck_exp_chp_title'] = ck_exp_chp_title # data['ck_exp_text'] = ck_exp_text # data['ck_is_hot_exp'] = ck_is_hot_exp # data['change_status'] = '1' # operation = data.get('operation', []) # operation.append({session['id']: [session['username'],'update',\ # datetime.now().strftime('%Y-%m-%d %H:%M:%S')]}) # data['operation'] = operation # db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$set': data}) returnObj['info'] = '修改成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- excerpt_update error as: ', e) return raise_status(500, str(e))
def excerpt_search(): from app import db returnObj = {} try: data_search = {} book_name = request.json.get('book_name') exp_text = request.json.get('exp_text') exp_chp_id = request.json.get('exp_chp_id') exp_chp_title = request.json.get('exp_chp_title') is_hot_exp = request.json.get('is_hot_exp') shelf_status = request.json.get('shelf_status') check_status = request.json.get('check_status') change_status = request.json.get('change_status') recommend_status = request.json.get('recommend_status') # 查询均采用模糊查询 if book_name: data_search['book_name'] = {'$regex': book_name} if exp_text: data_search['exp_text'] = {'$regex': exp_text} if exp_chp_id: data_search['exp_chp_id'] = {'$regex': exp_chp_id} if exp_chp_title: data_search['exp_chp_title'] = {'$regex': exp_chp_title} if is_hot_exp: data_search['is_hot_exp'] = {'$regex': is_hot_exp} if shelf_status or change_status or check_status or recommend_status: if shelf_status == '0' or check_status == '0' or change_status == '0' or recommend_status == '0': data_search['$and'] = [] if shelf_status == '1': data_search['shelf_status'] = shelf_status elif shelf_status == '0': shelf = { '$or': [{ 'shelf_status': '0' }, { 'shelf_status': { '$exists': 0 } }] } data_search['$and'].append(shelf) # data_search['$or'] = [{'shelf_status': '0'}, {'shelf_status': {'$exists': 0}}] if check_status == '1': data_search['check_status'] = check_status elif check_status == '0': check = { '$or': [{ 'check_status': '0' }, { 'check_status': { '$exists': 0 } }] } data_search['$and'].append(check) # data_search['$or'] = [{'check_status': '0'}, {'check_status': {'$exists': 0}}] if change_status == '1': data_search['change_status'] = change_status elif change_status == '0': change = { '$or': [{ 'change_status': '0' }, { 'change_status': { '$exists': 0 } }] } data_search['$and'].append(change) # data_search['$or'] = [{'change_status': '0'}, {'change_status': {'$exists': 0}}] elif change_status == '2': data_search['change_status'] = change_status elif change_status == '11': change = { '$or': [{ 'change_status': '0' }, { 'change_status': { '$exists': 0 } }] } data_search['$and'].append(change) elif change_status == '12': change = { '$or': [{ 'change_status': '1' }, { 'change_status': '2' }] } data_search['$and'].append(change) if recommend_status == '1': data_search['recommend_status'] = recommend_status elif recommend_status == '0': recommend = { '$or': [{ 'recommend_status': '0' }, { 'recommend_status': { '$exists': 0 } }] } data_search['$and'].append(recommend) key_status = 0 if change_status == '11' and check_status == '0': key_status = 1 elif change_status == '0' and check_status == '0': key_status = 1 elif not change_status and not check_status: key_status = 1 if book_name or exp_text or is_hot_exp: key_status = 0 start = int(request.args.get('start', '0')) end = int(request.args.get('end', '30')) length = end - start # print(change_status, check_status) if start > 10000 or key_status == 0: count_excerpt = db.t_excerpts.find(data_search).count() elif start == 0: count_excerpt = start + 150 else: count_excerpt = start + 45 data = db.t_excerpts.find(data_search).limit(length).skip(start).sort([ ('book_name', 1), ('exp_text', 1) ]) dataObj = [] # 查询出的文档可能没有ck字段,即没有修改内容,所以采用get方法,修改内容取原始内容 for digest in data: excerptObj = {} excerptObj['excerpt_id'] = str(digest['_id']) excerptObj['exp_chp_id'] = digest['exp_chp_id'] excerptObj['exp_chp_title'] = digest['exp_chp_title'] excerptObj['exp_text'] = digest['exp_text'] excerptObj['book_name'] = digest['book_name'] excerptObj['is_hot_exp'] = digest['is_hot_exp'] excerptObj['ck_exp_chp_id'] = digest.get('ck_exp_chp_id', digest['exp_chp_id']) excerptObj['ck_exp_chp_title'] = digest.get( 'ck_exp_chp_title', digest['exp_chp_title']) excerptObj['ck_exp_text'] = digest.get('ck_exp_text', digest['exp_text']) excerptObj['ck_is_hot_exp'] = digest.get('ck_is_hot_exp', digest['is_hot_exp']) excerptObj['shelf_status'] = digest.get('shelf_status', '0') excerptObj['check_status'] = digest.get('check_status', '0') excerptObj['change_status'] = digest.get('change_status', '0') excerptObj['recommend_status'] = digest.get( 'recommend_status', '0') dataObj.append(excerptObj) returnObj['data'] = dataObj returnObj['count'] = count_excerpt returnObj['info'] = '查询成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- excerpt_search error as: ', e) return raise_status(500, str(e))
def book_insert(): from app import db returnObj = {} try: # 13个字段 tags = request.json.get('tags') score = request.json.get('score') subtitle = request.json.get('sbutitle') author_list = request.json.get('author_list') all_version = request.json.get('all_version') summary = request.json.get('summary') original_name = request.json.get('original_name') category_list = request.json.get('category') cover_thumbnail = session.get('insert') publish_info = request.json.get('publish_info') catalog_info = request.json.get('catalog_info') series = request.json.get('series') book_name = request.json.get('book_name') if not tags or not score or not author_list or not summary\ or not category_list or not publish_info or not catalog_info or not book_name or not cover_thumbnail: info = '有未填信息' return raise_status(400, info) dataObj = {} dataObj['book_name'] = book_name dataObj['tags'] = tags dataObj['score'] = score if not subtitle: subtitle = '' dataObj['subtitle'] = subtitle list = [] for author in author_list: simple = {'id': 100000, 'author_name': author} list.append(simple) dataObj['author_list'] = list if not all_version: all_version = [] dataObj['all_version'] = all_version dataObj['summary'] = summary if not original_name: original_name = '' dataObj['original_name'] = original_name list = [] for category in category_list: simple = {'id': 100, 'name': category} list.append(simple) dataObj['category'] = list if not cover_thumbnail: cover_thumbnail = "http://wfqqreader-1252317822.image.myqcloud.com/cover/873/21031873/s_21031873.jpg" dataObj['cover_thumbnail'] = cover_thumbnail dataObj['publish_info'] = publish_info if ',' in catalog_info[0]: catalog_info = catalog_info[0].split(',') dataObj['catalog_info'] = catalog_info if not series: series = [] dataObj['series'] = series operation = { session['id']: [ session['username'], 'insert', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } dataObj['operation'] = [operation] dataObj['change_status'] = '1' dataObj['shelf_status'] = '0' dataObj['check_status'] = '0' result = db.t_books.insert_one(dataObj) db.mg_action_record.insert_one({ 'userid': session['id'], 'username': session['username'], 'action': 'insert', 'type': '1', 'aid': str(result.inserted_id), 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) returnObj['info'] = '录入成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- book_insert error as: ', e) return raise_status(500, str(e))
def excerpt_insert(): from app import db returnObj = {} try: bookid = request.json.get('bookid') # book_name = request.json.get('book_name') exp_text = request.json.get('exp_text') # exp_chp_id = request.json.get('exp_chp_id') # exp_chp_title = request.json.get('exp_chp_title') is_hot_exp = request.json.get('is_hot_exp') if not bookid or not exp_text or not is_hot_exp: info = '有未填信息' return raise_status(400, info) data = db.t_books.find_one({'_id': ObjectId(bookid)}) book_name = data['book_name'] operation = { session['id']: [ session['username'], 'insert', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } data_insert = [] exp_count = 0 for content in exp_text: excerpt = { 'bookid': bookid, 'book_name': book_name, 'exp_text': content, 'exp_chp_id': '', 'exp_chp_title': '', 'is_hot_exp': is_hot_exp, 'operation': [operation], 'check_status': '0', 'shelf_status': '0', 'change_status': '1', 'recommend_status': '0' } data_insert.append(excerpt) exp_count += 1 data_book = db.t_books.find_one({'_id': ObjectId(bookid)}) if data_book.get('digest_ck'): digest_ck = [ data_book['digest_ck'][0], data_book['digest_ck'][1] + exp_count ] else: digest_count = db.t_excerpts.count({'bookid': bookid}) ck_count = db.t_excerpts.count({ 'bookid': bookid, '$or': [{ 'change_status': '1' }, { 'change_status': '2' }] }) digest_ck = [digest_count - ck_count, digest_count + exp_count] db.t_books.update_one({'_id': ObjectId(bookid)}, {'$set': { 'digest_ck': digest_ck }}) results = db.t_excerpts.insert_many(data_insert) action_list = [] for excerpt_id in results.inserted_ids: action_list.append({ 'userid': session['id'], 'username': session['username'], 'action': 'insert', 'type': '2', 'aid': str(excerpt_id), 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) db.mg_action_record.insert_many(action_list) returnObj['info'] = '录入成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- excerpt_insert error as: ', e) return raise_status(500, str(e))
def book_operation(): from app import db returnObj = {} try: list = request.json.get('list') action = request.args.get('action') key_status = 0 if action == 'up': book_doc = [] category_list = [] for book_id in list: data_insert = db.t_books.find_one({'_id': ObjectId(book_id)}) if data_insert.get('shelf_status') == '1': info = '已有上架书籍' key_status = 1 continue operation = { session['id']: [ session['username'], 'up', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } db.t_books.update({'_id': ObjectId(book_id)}, {'$push': { 'operation': operation }}) db.t_books.update({'_id': ObjectId(book_id)}, {'$set': { 'shelf_status': '1' }}) del data_insert['_id'] doc = { 'index': { '_index': 't_books', '_type': 'digest', '_id': book_id } } book_doc.append(doc) book_doc.append(data_insert) for single in data_insert['category']: category_list.append(single) if book_doc == []: info = '书籍均已上架' return raise_status(400, info) es_bulk('t_books', book_doc) redis_zincrby(category_list, 1) elif action == 'down': category_list = [] for book_id in list: operation = { session['id']: [ session['username'], 'down', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } db.t_books.update({'_id': ObjectId(book_id)}, {'$push': { 'operation': operation }}) db.t_books.update({'_id': ObjectId(book_id)}, { '$set': { 'shelf_status': '0', 'change_status': '0', 'check_status': '0' } }) # 书籍下架时,书籍下的书摘也都下架,下架后修改状态为未修改、审核状态为未审核 # db.t_excerpts.update({'bookid': book_id}, {'$push': {'operation': operation}}) # db.t_excerpts.update({'bookid': book_id}, {'$set': {'shelf_status': '0', # 'change_status': '0', 'check_status': '0'}}) try: es_delete('t_books', book_id) except Exception as e: info = '有书籍存在异常,请重新点击查询' key_status = 1 data_down = db.t_books.find_one({'_id': ObjectId(book_id)}) for single in data_down['category']: category_list.append(single) redis_zincrby(category_list, -1) elif action == 'pass': for book_id in list: operation = { session['id']: [ session['username'], 'pass', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } data = db.t_books.find_one({'_id': ObjectId(book_id)}) if data.get('change_status') == '2': db.t_excerpt.remove({'bookid': ObjectId(book_id)}) db.t_books.remove({'_id': ObjectId(book_id)}) if data.get('ck_book_name'): data['book_name'] = data['ck_book_name'] db.t_excerpts.update_many( {'bookid': book_id}, {'$set': { 'book_name': data['ck_book_name'] }}) if data.get('ck_author_list'): data['author_list'] = data['ck_author_list'] if data.get('ck_category'): data['category'] = data['ck_category'] if data.get('ck_catalog_info'): data['catalog_info'] = data['ck_catalog_info'] if data.get('ck_tags'): data['tags'] = data['ck_tags'] if data.get('ck_summary'): data['summary'] = data['ck_summary'] if data.get('ck_cover_thumbnail'): data['cover_thumbnail'] = data['ck_cover_thumbnail'] if data.get('ck_score'): data['score'] = data['ck_score'] if data.get('ck_publish_info'): data['publish_info'] = data['ck_publish_info'] data['check_status'] = '1' db.t_books.update({'_id': ObjectId(book_id)}, {'$push': { 'operation': operation }}) db.t_books.update({'_id': ObjectId(book_id)}, data) elif action == 'refuse': for book_id in list: operation = { session['id']: [ session['username'], 'refuse', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } db.t_books.update({'_id': ObjectId(book_id)}, {'$push': { 'operation': operation }}) db.t_books.update( {'_id': ObjectId(book_id)}, {'$set': { 'check_status': '0', 'change_status': '0' }}) returnObj['info'] = '操作成功' if key_status == 1: return raise_status(400, info) action_list = [] for book_id in list: action_list.append({ 'userid': session['id'], 'username': session['username'], 'action': action, 'type': '1', 'aid': book_id, 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- book_operation error as: ', e) return raise_status(500, str(e))
def excerpt_operation(): from app import db returnObj = {} try: key_status = 0 list = request.json.get('list') action = request.args.get('action') if action == 'up': excerpt_doc = [] for excerpt_id in list: data_excerpt = db.t_excerpts.find_one( {'_id': ObjectId(excerpt_id)}) if data_excerpt.get('shelf_status') == '1': info = '有书摘已上架' key_status = 1 continue data_check = db.t_books.find_one( {'_id': ObjectId(data_excerpt['bookid'])}) if data_check.get('shelf_status') == '1': operation = { session['id']: [ session['username'], 'up', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$push': { 'operation': operation }}) db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$set': { 'shelf_status': '1' }}) del data_excerpt['_id'] doc = { 'index': { '_index': 't_excerpts', '_type': 'digest', '_id': excerpt_id } } excerpt_doc.append(doc) excerpt_doc.append(data_excerpt) # 书摘上架将书籍的category加入redis redis_zincrby(data_check['category'], 1) else: info = '有书籍未上架' key_status = 1 if key_status == 0: es_bulk('t_excerpts', excerpt_doc) elif excerpt_doc == []: info = '书摘均已上架或有书籍未上架' return raise_status(400, info) elif action == 'down': for excerpt_id in list: dg = db.t_excerpts.find_one({'_id': ObjectId(excerpt_id)}) book = db.t_books.find_one({'_id': ObjectId(dg['bookid'])}) digest_ck = [book['digest_ck'][0] + 1, book['digest_ck'][1]] operation = { session['id']: [ session['username'], 'down', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$push': { 'operation': operation }}) db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$set': {'shelf_status': '0',\ 'check_status': '0',\ 'change_status': '0'}}) db.t_books.update({'_id': ObjectId(dg['bookid'])}, {'$set': { 'digest_ck': digest_ck }}) # 书摘下架将书籍的category从redis中-1 redis_zincrby(book['category'], -1) try: es_delete('t_excerpts', excerpt_id) except Exception as e: print(e) info = '有书摘已下架或不存在,请重新点击查询' key_status = 1 elif action == 'pass': for excerpt_id in list: operation = { session['id']: [ session['username'], 'pass', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } data = db.t_excerpts.find_one({'_id': ObjectId(excerpt_id)}) # data['exp_chp_id'] = data['ck_exp_chp_id'] # data['exp_chp_title'] = data['ck_exp_chp_title'] if data.get('change_status') == '2': data_book = db.t_books.find_one( {'_id': ObjectId(data['bookid'])}) if data_book.get('digest_ck'): digest_ck = [ data_book['digest_ck'][0], data_book['digest_ck'][1] - 1 ] db.t_books.update_one( {'_id': ObjectId(data['bookid'])}, {'$set': { 'digest_ck': digest_ck }}) db.t_excerpts.remove({'_id': ObjectId(excerpt_id)}) if data.get('ck_exp_text'): data['exp_text'] = data['ck_exp_text'] if data.get('ck_is_hot_exp'): data['is_hot_exp'] = data['ck_is_hot_exp'] data['check_status'] = "1" db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$push': { 'operation': operation }}) db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, data) elif action == 'refuse': for excerpt_id in list: dg = db.t_excerpts.find_one({'_id': ObjectId(excerpt_id)}) book = db.t_books.find_one({'_id': ObjectId(dg['bookid'])}) digest_ck = [book['digest_ck'][0] + 1, book['digest_ck'][1]] operation = { session['id']: [ session['username'], 'refuse', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$push': { 'operation': operation }}) db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$set': {'check_status': '0', 'change_status': '0',\ 'digest_ck': digest_ck}}) db.t_books.update({'_id': ObjectId(dg['bookid'])}, {'$set': { 'digest_ck': digest_ck }}) elif action == 'recommend': for excerpt_id in list: data_check = db.t_excerpts.find_one( {'_id': ObjectId(excerpt_id)}) if data_check.get('shelf_status') == '1': operation = {session['id']: [session['username'], 'recommend',\ datetime.now().strftime('%Y-%m-%d %H:%M:%S')]} db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$push': { 'operation': operation }}) db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$set': { 'recommend_status': '1' }}) else: info = '有未上架书摘' key_status = 1 elif action == 'deprecated': for excerpt_id in list: operation = {session['id']: [session['username'], 'deprecated',\ datetime.now().strftime('%Y-%m-%d %H:%M:%S')]} db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$push': { 'operation': operation }}) db.t_excerpts.update({'_id': ObjectId(excerpt_id)}, {'$set': { 'recommend_status': '0' }}) if key_status == 1: return raise_status(400, info) action_list = [] for excerpt_id in list: action_list.append({ 'userid': session['id'], 'username': session['username'], 'action': action, 'type': '2', 'aid': excerpt_id, 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) db.mg_action_record.insert_many(action_list) returnObj['info'] = '操作成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- excerpt_operation error as: ', e) if action == 'pass': try: for excerpt_id in list: db.t_excerpts.update_one({'_id': ObjectId(excerpt_id)}, {'$set': { 'shelf_status': '0' }}) except Exception as err: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "- excerpt_operation's except error as: ", err) return raise_status(500, str(e))
def book_search(): from app import db returnObj = {} try: book_name = request.json.get('book_name') author_list = request.json.get('author_list') tags = request.json.get('tags') score = request.json.get('score') summary = request.json.get('summary') category = request.json.get('category') catalog_info = request.json.get('catalog_info') publish_info = request.json.get('publish_info') shelf_status = request.json.get('shelf_status') check_status = request.json.get('check_status') change_status = request.json.get('change_status') digest_status = request.json.get('digest_ck') data_search = {} if publish_info: publish_date = publish_info.get('publish_date') ISBN = publish_info.get('ISBN') binding = publish_info.get('binding') price = publish_info.get('price') pages = publish_info.get('pages') words = publish_info.get('words') publisher = publish_info.get('publisher') if publish_date: data_search['publish_info.publish_date'] = { '$regex': publish_date } if ISBN: data_search['publish_info.ISBN'] = {'$regex': ISBN} if binding: data_search['publish_info.binding'] = {'$regex': binding} if price: data_search['publish_info.price'] = {'$regex': price} if pages: data_search['publish_info.pages'] = {'$regex': pages} if words: data_search['publish_info.words'] = {'$regex': words} if publisher: data_search['publish_info.publisher'] = {'$regex': publisher} if book_name: data_search['book_name'] = {'$regex': book_name} if author_list: if not change_status or change_status == '11': data_search['author_list.author_name'] = {'$all': author_list} else: data_search['author_list.author_name'] = { '$all': author_list.split(',') } if tags: data_search['tags'] = {'$all': tags} if score: data_search['score'] = {'$regex': score} if summary: data_search['summary'] = {'$regex': summary} if category: if type(category) == str: category = category.split(',') data_search['category.name'] = {'$all': category} if catalog_info: data_search['catalog_info'] = {'$all': catalog_info} if digest_status == '0': data_search['digest_ck.0'] = 0 elif digest_status == '1': data_search['digest_ck.0'] = {'$gt': 0} if shelf_status or change_status or check_status: if shelf_status == '0' or check_status == '0' or change_status == '0': data_search['$and'] = [] if shelf_status == '1': data_search['shelf_status'] = shelf_status elif shelf_status == '0': shelf = { '$or': [{ 'shelf_status': '0' }, { 'shelf_status': { '$exists': 0 } }] } data_search['$and'].append(shelf) # data_search['$or'] = [{'shelf_status': '0'}, {'shelf_status': {'$exists': 0}}] if check_status == '1': data_search['check_status'] = check_status elif check_status == '0': check = { '$or': [{ 'check_status': '0' }, { 'check_status': { '$exists': 0 } }] } data_search['$and'].append(check) # data_search['$or'] = [{'check_status': '0'}, {'check_status': {'$exists': 0}}] if change_status == '1': data_search['change_status'] = change_status elif change_status == '0': change = { '$or': [{ 'change_status': '0' }, { 'change_status': { '$exists': 0 } }] } data_search['$and'].append(change) # data_search['$or'] = [{'change_status': '0'}, {'change_status': {'$exists': 0}}] elif change_status == '2': data_search['change_status'] = change_status elif change_status == '11': change = { '$or': [{ 'change_status': '0' }, { 'change_status': { '$exists': 0 } }, { 'change_status': '1' }] } data_search['$and'].append(change) elif change_status == '12': change = { '$or': [{ 'change_status': '1' }, { 'change_status': '2' }] } data_search['$and'].append(change) key_status = 0 if change_status == '11' and check_status == '0': key_status = 1 elif change_status == '0' and check_status == '0': key_status = 1 elif not change_status and not check_status: key_status = 1 if book_name or author_list or tags or publish_info or category or digest_status: key_status = 0 start = int(request.args.get('start', '0')) end = int(request.args.get('end', '30')) length = end - start # count_book = 8000000 # print(data_search) # print(change_status, check_status) if start > 10000 or key_status == 0: count_book = db.t_books.count(data_search) elif start == 0: count_book = start + 150 else: count_book = start + 45 books = db.t_books.find(data_search).limit(length).skip(start).sort([ ('score', -1) ]) data_list = [] for data in books: dataObj = {} dataObj['book_id'] = str(data['_id']) dataObj['book_name'] = data['book_name'] dataObj['author_list'] = [] # dataObj['author_list'] = data['author_list'] for author in data['author_list']: dataObj['author_list'].append(author['author_name']) dataObj['category'] = [] for cate in data['category']: dataObj['category'].append((cate['name'])) dataObj['catalog_info'] = data['catalog_info'] dataObj['tags'] = data['tags'] dataObj['summary'] = data['summary'] dataObj['cover_thumbnail'] = data['cover_thumbnail'] dataObj['score'] = data['score'] dataObj['publish_info'] = data['publish_info'] dataObj['ck_book_name'] = data.get('ck_book_name', data['book_name']) dataObj['ck_author_list'] = [] # dataObj['ck_author_list'] = data.get('ck_author_list', data['author_list']) for author in data.get('ck_author_list', data['author_list']): dataObj['ck_author_list'].append(author['author_name']) dataObj['ck_category'] = [] for ck_cate in data.get('ck_category', data['category']): dataObj['ck_category'].append(ck_cate['name']) dataObj['ck_catalog_info'] = data.get('ck_catalog_info', data['catalog_info']) dataObj['ck_tags'] = data.get('ck_tags', data['tags']) dataObj['ck_summary'] = data.get('ck_summary', data['summary']) dataObj['ck_cover_thumbnail'] = data.get('ck_cover_thumbnail', data['cover_thumbnail']) dataObj['ck_score'] = data.get('ck_score', data['score']) dataObj['ck_publish_info'] = data.get('ck_publish_info', data['publish_info']) dataObj['check_status'] = data.get('check_status', '0') dataObj['shelf_status'] = data.get('shelf_status', '0') dataObj['change_status'] = data.get('change_status', '0') digest_ck = data.get('digest_ck', ['-', '-']) ck_count = str(digest_ck[0]) + '/' + str(digest_ck[1]) dataObj['digest_ck'] = ck_count data_list.append(dataObj) returnObj['data'] = data_list returnObj['count'] = count_book returnObj['info'] = '查询成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- book_search error as: ', e) return raise_status(500, str(e))
def index(): from auth import raise_status return raise_status(200)
def book_update(): from app import db returnObj = {} try: book_list = request.json.get('book_list') for data_book in book_list: book_id = data_book.get('book_id') ck_book_name = data_book.get('ck_book_name') author_list = data_book.get('ck_author_list') if type(author_list) == str: author_list = author_list.replace(' ', '') author_list = author_list.replace(',', ',') author_list = author_list.split(',') ck_author_list = [] for author in author_list: ck_author_list.append({'id': 1000000, 'author_name': author}) category_list = data_book.get('ck_category') if type(category_list) == str: category_list = category_list.replace(' ', '') category_list = category_list.replace(',', ',') category_list = category_list.split(',') ck_category_list = [] for category in category_list: ck_category_list.append({'id': 100, 'name': category}) ck_catalog_info = data_book.get('ck_catalog_info') ck_tags = data_book.get('ck_tags') ck_summary = data_book.get('ck_summary') ck_cover_thumbnail = session.get(book_id) ck_score = data_book.get('ck_score') ck_publish_info = data_book.get('ck_publish_info') # if not ck_book_name and not ck_author_list and not ck_category and not ck_catalog_info and not ck_tags\ # and not ck_summary and not ck_cover_thumbnail and not ck_score and not ck_publish_info: # info = '没有修改信息' # return raise_status(400, info) data_update = {} data_update['ck_book_name'] = ck_book_name data_update['ck_author_list'] = ck_author_list data_update['ck_category'] = ck_category_list data_update['ck_catalog_info'] = ck_catalog_info data_update['ck_tags'] = ck_tags data_update['ck_summary'] = ck_summary data_update['ck_cover_thumbnail'] = ck_cover_thumbnail data_update['ck_score'] = ck_score data_update['ck_publish_info'] = ck_publish_info data_update['change_status'] = '1' operation = { session['id']: [ session['username'], 'update', datetime.now().strftime('%Y-%m-%d %H:%M:%S') ] } db.t_books.update({'_id': ObjectId(book_id)}, {'$set': data_update}) db.t_books.update({'_id': ObjectId(book_id)}, {'$push': { 'operation': operation }}) db.mg_action_record.insert_one({ 'userid': session['id'], 'username': session['username'], 'action': 'change', 'type': '1', 'aid': book_id, 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) returnObj['info'] = '修改成功' return jsonify(returnObj) except Exception as e: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '- book_update error as: ', e) return raise_status(500, str(e))