def create_by_one2one(send_id, rec_ids, content, message_type, group): """ 创建一条私密消息,用于少量用户的流程通知 :param send_id: 发送者 :param rec_ids: 接收者 :param content: 内容 :param message_type: 类型 :param group: 用户组 :return: code """ rec_ids = list(set(rec_ids)) if not message_type: message_type = Content.PRIVATE if not group: group = 'public' if send_id is not None and content: with db.auto_commit(): content = Content(send_id=send_id, content=content, type=message_type, group=group) db.session.add(content) db.session.flush() content_id = content.id if content_id: with db.auto_commit(): for i in rec_ids: db.session.add( Message(rec_id=int(i), content_id=content_id, status=Message.UNREAD)) # for i in rec_ids: # push2redis(i) return 0 raise SaveObjectException()
def change_status(user, message_ids=None, isall=None): if message_ids: with db.auto_commit(): query = f"UPDATE message SET status={Message.READ} WHERE rec_id={user} and id in ({message_ids})" db.engine.execute(query) # push2redis(user) return 0, '' elif isall: with db.auto_commit(): query = f"UPDATE message SET status={Message.READ} WHERE rec_id={user}" db.engine.execute(query) # push2redis(user) return 0, '' else: raise SaveObjectException()
def get_statistics_route(): # 待修改成缓存类型接口 # 接口调用次数 routes = t_redis.keys(f'{ROUTE_STATISTICS}*') data = {} for r in routes: r_info = t_redis.hgetall(r) r_name = r.replace(ROUTE_STATISTICS, '') data[r_name] = r_info add_list = [] for k, v in r_info.items(): k_info = k.split(']') method = k_info[0].replace('[', '') route = k_info[1] ret = RouteStatistics.query.filter_by(service=r_name, route=route, method=method).first() if ret: ret.count = v else: ret = RouteStatistics(service=r_name, route=route, method=method, count=int(v)) add_list.append(ret) with db.auto_commit(): db.session.add_all(add_list) return 0, data
def user_bind_roles(cls, userid, roleids, project_id): roles_list_without_pid = [ i['name'] for i in UserBusiness.query_json_by_id(userid)[0]['role'] ] modify_roles_row = UserBusiness.query_json_by_id_and_project( g.userid, project_id) modify_roles = modify_roles_row[0]['role'] if modify_roles_row else [] modify_roles_list = [] if modify_roles: modify_roles_list = [ modify_role['name'] for modify_role in modify_roles ] admin_id = Role.query.filter(Role.status == Role.ACTIVE, Role.name == 'admin').first().id if not g.is_admin: # 如果你不是admin,那你必须是owner,且你不能修改Admin if not modify_roles_list or 'owner' not in modify_roles_list: raise OperationPermissionDeniedException() if admin_id in roleids: raise OperationPermissionDeniedException() if 'admin' in roles_list_without_pid: raise OperationPermissionDeniedException() with db.auto_commit(): for item in UserBindRole.query.filter_by( user_id=userid, project_id=project_id).all(): db.session.delete(item) for roleid in roleids: db.session.add( UserBindRole(user_id=userid, role_id=roleid, project_id=project_id)) return 0, None
def create(cls, tag, project_id, description): try: creator = g.userid if g.userid else None ret = Tag.query.filter(Tag.tag == tag).first() if ret: if ret.status == Tag.DISABLE: with db.auto_commit(): ret.status = Tag.ACTIVE ret.creator = creator db.session.add(ret) return 0 else: raise SaveObjectException('存在相同名称的标签') else: task = Tag( tag=tag, project_id=project_id, description=description, creator=creator ) db.session.add(task) db.session.commit() return 0 except Exception as e: current_app.logger.error(str(e)) raise SaveObjectException
def record_statistics_route(): routes = t_redis.keys(f'{ROUTE_STATISTICS}*') for r in routes: server_info = {'name': '', 'routes': [], 'count': 0} r_info = t_redis.hgetall(r) r_name = r.replace(ROUTE_STATISTICS, '') server_info['name'] = r_name add_list = [] for k, v in r_info.items(): v = int(v) k_info = k.split(']') method = k_info[0].replace('[', '') route = k_info[1] ret = RouteStatistics.query.filter_by(service=r_name, route=route, method=method).first() if ret: ret.count = v else: ret = RouteStatistics(service=r_name, route=route, method=method, count=v) add_list.append(ret) with db.auto_commit(): db.session.add_all(add_list) return 'success'
def update_config(config_id, module, module_type, content, description, project_id): config = Config.query.get(config_id) if not config: raise CannotFindObjectException(f'config {config_id} not found in system!') module = module if module else config.module module_type = module_type if module_type else config.module_type if config.projectid in ['0', 0, None, 'null']: config_check = Config.query.filter(Config.module == module, Config.module_type == module_type, Config.projectid == project_id).first() if not config_check: current_app.logger.info('should create a new config with this project!') return create_config( module=module if module is not None else config.module, module_type=module_type if module_type is not None else config.module_type, content=content if content is not None else config.content, description=description if description is not None else config.description, project_id=project_id) else: config = config_check with db.auto_commit(): config.module = module if module is not None else config.module config.module_type = module_type if module_type is not None else config.module_type config.content = json.dumps(content) if content is not None else config.content config.description = description if description is not None else config.description db.session.add(config) return 0
def record_guest(ip, user_agent): # ip = request.remote_addr # user_agent = request.user_agent platform = user_agent.platform browser = user_agent.browser string = user_agent.string version = user_agent.version ret = Guest.query.filter(Guest.ip == ip, Guest.platform == platform, Guest.browser == browser, Guest.version == version, ).first() with db.auto_commit(): if ret: ret.count += 1 else: ret = Guest( ip=ip, platform=platform, browser=browser, string=string, version=version ) db.session.add(ret)
def add_reference(cls, tags): if tags: tag_list = tags.split(',') for tagid in tag_list: tag = Tag.query.get(tagid) with db.auto_commit(): tag.reference_nums += 1 db.session.add(tag)
def delete_status(user, message_ids=None, isall=None): """ 修改通知的状态,已读改为1,删除改为2 :return: 修改成功 """ if message_ids: with db.auto_commit(): query = f"UPDATE message SET status={Message.DISABLE} WHERE rec_id={user} and id in ({message_ids})" db.engine.execute(query) # push2redis(user) return 0, '' elif isall: with db.auto_commit(): query = f"UPDATE message SET status={Message.DISABLE} WHERE rec_id={user}" db.engine.execute(query) # push2redis(user) return 0, '' else: raise SaveObjectException()
def create_config(module, module_type, content, description, project_id): if isinstance(content, dict): content = json.dumps(content) config = Config(module=module, module_type=module_type, content=content, description=description, projectid=project_id) with db.auto_commit(): db.session.add(config) return 0
def project_add_users(cls, project_id, user_list): with db.auto_commit(): ret = UserBindProject.query.filter( UserBindProject.user_id.in_(user_list), UserBindProject.project_id == project_id).all() if ret: for r in ret: db.session.delete(r) for uid in user_list: db.session.add( UserBindProject(user_id=uid, project_id=project_id)) return 0, None
def update(cls, tag_id, tag_name, description): tag = Tag.query.get(tag_id) if not tag: raise CannotFindObjectException ret = Tag.query.filter(Tag.tag == tag_name, Tag.project_id == g.projectid, Tag.id != tag_id).first() if ret: raise SaveObjectException('存在相同名称的标签') tag.tag = tag_name tag.description = description tag.modifier = g.userid with db.auto_commit(): db.session.add(tag) return 0
def project_detach_user(cls, project_id, user_id): user_bind_project = UserBindProject.query.filter_by( project_id=project_id, user_id=user_id).first() if user_bind_project: with db.auto_commit(): db.session.delete(user_bind_project) list_user_bind_role = UserBindRole.query.filter_by( project_id=project_id, user_id=user_id).all() [ db.session.delete(user_bind_role) for user_bind_role in list_user_bind_role ] return 0, None raise CannotFindObjectException()