async def post(self): res = {'code': 0} account_id = self.get_argument('account_id', '') origin_pwd = self.get_argument('origin_pwd', '') new_pwd = self.get_argument('new_pwd', '') new_pwd_confirm = self.get_argument('new_pwd_confirm', '') # avatar = self.request.files['avatar'] # 头像暂时空 if account_id and new_pwd and origin_pwd and new_pwd_confirm: if new_pwd_confirm != new_pwd: res['code'] = -2 else: account = await User.get_by_id(account_id) if not account or account.get('password') != md5(origin_pwd): res['code'] = -3 elif account.get('password') == md5(new_pwd): res['code'] = -4 else: account.login_password = md5(new_pwd) account.updated_dt = datetime.now() account.updated_id = self.current_user.oid await account.save() res['code'] = 1 else: res['code'] = -1 return res
async def init_users(): """ 初始化用户信息 :return: """ user = await User.find_one(dict(login_name='admin')) if user: await user.delete() user = User() user.code = common_utils.get_increase_code(KEY_INCREASE_USER) user.name = '超级管理员' user.email = '*****@*****.**' # 邮箱 user.mobile = '15106139173' # 手机 user.superuser = True # 是否为超管 user.login_name = 'ycf' # 用户名 user.login_password = md5('123456') # 密码 user.status = STATUS_USER_ACTIVE # 状态 user.content = '超级管理员,无所不能' # 备注 user.permission_code_list = ALL_PERMISSION_TYPE_LIST oid = await user.save() if oid: print('Initialize user [', user.name, '] succeed!')
async def init_source(): """固化初始来源""" try: for k, v in SOURCE_TYPE_MEMBER_DICT.items(): source = GameMemberSource(code=str(k), title=v) name = md5(v) + '.png' # 前三个有二维码 if k <= 3: qr_path = ss.STATIC_PATH + '/files/' + name await download_qr_image(name, scene=str(k)) qr_file = UploadFiles() qr_file.code = 'qr_' + source.code qr_file.title = name qr_file.source_title = source.title qr_file.category = CATEGORY_UPLOAD_FILE_IMG_GAME_MEMBER_SOURCE_QR qr_file.size = os.path.getsize(qr_path) await qr_file.save() source.qr_code_cid = qr_file.oid source.need_qr_code = True await source.save() print('init member source success.') except Exception: import traceback print(traceback.format_exc()) print('init member source failed.')
async def post(self): r_dict = {'code': 0} try: username = self.get_argument('username', '') password = self.get_argument('password', '') if username and password: user = await User.find_one({'login_name': username}) if not user: r_dict['code'] = -1 # 没有用户 return r_dict if PERMISSION_TYPE_MINIAPP_RACE_REPORT_SITUATION not in user.permission_code_list: r_dict['code'] = -2 # 该用户没有查看权限 return r_dict if md5(password) != user.login_password: r_dict['code'] = -3 # 密码不正确 return r_dict if not (user.province or user.city): r_dict['code'] = -5 return r_dict self.session.put(KEY_SESSION_USER, user) self.session.save() r_dict['code'] = 1 else: r_dict['code'] = -4 except Exception: logger.error(traceback.format_exc()) return r_dict
async def post(self): res = {'code': 0} title = self.get_argument('title') content = self.get_argument('content') q_code = self.get_argument('q_code') if title and q_code: questionnaire = await Questionnaire.find_one({'code': q_code, 'record_flag': 1}) if not questionnaire: res['code'] = -3 else: try: # 保存活动 survey_activity = SurveyActivity(code=md5(uuid.uuid1().hex), q_cid=questionnaire.cid, title=title) survey_activity.content = content # 问卷 survey_activity.needless = {'q_title': questionnaire.title} activity_id = await survey_activity.save() res['code'] = 1 res['activity_id'] = activity_id except Exception: logger.error(traceback.format_exc()) else: res['code'] = -1 return res
async def get(self, source_oid): try: source = await GameMemberSource.get_by_id(source_oid) name = md5(source.code) + '.png' qr_path = STATIC_PATH + '/files/' + name if not os.path.exists(qr_path): await download_qr_image(name, scene=source.code) qr_code = 'qr_' + source.code qr_file = await UploadFiles.find_one({'code': qr_code}) if not qr_file: qr_file = UploadFiles(code=qr_code) qr_file.title = name qr_file.source_title = source.title qr_file.category = CATEGORY_UPLOAD_FILE_IMG_GAME_MEMBER_SOURCE_QR qr_file.size = os.path.getsize(qr_path) await qr_file.save() source.qr_code_cid = qr_file.oid await source.save() self.set_header('Content-Type', 'image/png') self.set_header('Content-Disposition', 'attachment; filename=' + name) with open(qr_path, 'rb') as qr: self.write(qr.read()) self.finish() except Exception: logger.error(traceback.format_exc())
def __get_access_token(self): token = self.get_argument('token') if not token: token = self.get_body_argument('token') if token: val = RedisCache.get(md5(token)) if val: return token return None
def __get_signature(self): v_sign = self.get_argument('vsign') args = { 'token': self.__get_access_token(), 'timestamp': self.__get_timestamp(), 'i': self.get_argument('i') } value = '&'.join([ '='.join((key, str(args.get(key)))) for key in sorted(args.keys()) ]) if md5(value).upper() == v_sign: return v_sign return None
async def post(self): r_dict = {} login_name = self.get_argument('login_name') login_password = self.get_argument('login_password') if login_name and login_password: user = await User.find_one( dict(login_name=login_name, status=STATUS_USER_ACTIVE)) if user: if md5(login_password) == user.login_password: # 用户放入Session self.session.put(KEY_SESSION_USER, user) user_menu = await menu_utils.get_user_menu(self) redirect_url = menu_utils.get_first_valid_path(user_menu) if not redirect_url: # 没有权限访问 # 跳到个人信息页面 redirect_url = '/backoffice/account/' user.login_datetime = datetime.now() user.login_times = user.login_times + 1 await user.save() self.session.save() # 国际化 lang = self.get_argument('lang', None) if lang == 'en': lang = "en" else: lang = 'cn' redirect_url = redirect_url + "?lang=" + lang r_dict['code'] = 1 r_dict['url'] = redirect_url else: # 用户密码有误 r_dict['code'] = -4 else: # 用户不存在 r_dict['code'] = -3 else: if not login_name: # 用户名未输入 r_dict['code'] = -1 elif not login_password: # 用户密码未输入 r_dict['code'] = -2 return r_dict
def do_generate_cache_key(prefix: str, **kwargs): """ 生成缓存key :param prefix: :param kwargs: :return: """ if prefix: v_list, v_str = [], '' if kwargs: for k, v in kwargs.items(): v_list.append('(%s:%s)' % (k, v)) if v_list: v_str = ''.join(v_list) return '%s_%s' % (prefix, md5(v_str)) return prefix
async def generate_new_token(self, access_id, access_secret): """ 生成新的TOKEN :param access_id: ACCESS KEY ID :param access_secret: ACCESS KEY SECRET :return: """ if access_id and access_secret: count = await User.count( dict(access_secret_id=access_id, access_secret_key=access_secret, status=STATUS_USER_ACTIVE)) if count > 0: token = get_random_str(32) key = md5(token) RedisCache.set(key, token, 60 * 60 * 2) return token return None
async def post(self): r_dict = {'code': 0} try: username = self.get_argument('username', '') password = self.get_argument('password', '') if username and password: user = await User.find_one({'login_name': username}) if not user: r_dict['code'] = -1 # 没有用户 return r_dict if PERMISSION_TYPE_MINIAPP_RACE_REPORT_SITUATION not in user.permission_code_list: r_dict['code'] = -2 # 该用户没有查看权限 return r_dict if md5(password) != user.login_password: r_dict['code'] = -3 # 密码不正确 return r_dict if not (user.province or user.city): r_dict['code'] = -5 return r_dict # 可管理地区 region_code_list = user.manage_region_code_list is_enter = False for region_code in region_code_list: city_list = await AdministrativeDivision.find({ 'parent_code': '340000' }).to_list(None) total_code_list = [city.code for city in city_list] total_code_list.append("340000") if region_code in total_code_list: is_enter = True if not is_enter: r_dict['code'] = -6 return r_dict self.session.put(KEY_SESSION_USER, user) self.session.save() r_dict['code'] = 1 else: r_dict['code'] = -4 except Exception: logger.error(traceback.format_exc()) return r_dict
async def post(self): res = dict(code=0) user_name = self.get_argument('user_name') name = self.get_argument('name') mobile = self.get_argument('mobile') email = self.get_argument('email') password = self.get_argument('password') repassword = self.get_argument('repassword') content = self.get_argument('content') status = int(self.get_argument('status', STATUS_USER_ACTIVE)) city = self.get_argument("city", '') province = self.get_argument("province", "") if user_name and name and mobile and email and password and repassword: if password == repassword: # 校验用户名 exist_count = await User.count(dict(login_name=user_name)) if exist_count: res['code'] = -2 else: user = User(name=name, login_name=user_name.lower(), login_password=md5(password), status=status) user.code = get_increase_code(KEY_INCREASE_USER) user.mobile = mobile user.email = email user.content = content user.created_id = self.current_user.oid user.updated_id = self.current_user.oid if city: user.city = city if province: user.province = province user_id = await user.save() res['code'] = 1 res['manager_id'] = user_id else: res['code'] = -1 else: res['code'] = -3 return res
async def assign_color(conditions: dict, module): subject_category_cid = '18114DC7C31B17AE35841CAE833161A2' all_next_condition = [] if conditions: used_color = {} for index, item in enumerate(conditions.values()): if item is not None: name = item['name'] if name and index < len(CHART_COLOR_LIST): item['color'] = CHART_COLOR_LIST[index] used_color[md5(name)] = CHART_COLOR_LIST[index] if module == 803: for i in range(8): next_condition = copy.deepcopy(conditions) for key, val in next_condition.items(): if 'condition' in val.keys( ) and 'dimension' in val['condition']: dimension_str = val['condition']['dimension'] dimension = json.loads(dimension_str) if dimension and subject_category_cid in dimension.keys( ): dimension_cursor = SubjectDimension.find( dict(parent_cid=subject_category_cid)) while await dimension_cursor.fetch_next: dimension_o = dimension_cursor.next_object( ) if dimension_o: c_name: str = val['name'] c_name = c_name.replace( '%s,' % dimension_o.title, '').replace(dimension_o.title, '') val['name'] = c_name del dimension[subject_category_cid] val['condition']['dimension'] = json.dumps( dimension, ensure_ascii=False) all_next_condition.append(next_condition) return conditions, all_next_condition
async def upload_scrawl(self): """ 上传涂鸦 :return: 新文件名,原始文件名 """ scrawl_name = '' base64_img_data = self.get_argument( self.ue_config.get('scrawlFieldName')) if base64_img_data: img_data = base64decode(base64_img_data) if img_data: try: scrawl_name = '%s.png' % md5( datetime2str(datetime.datetime.now(), '%Y%m%d%H%M%S%f')) img_path = os.path.join(settings.STATIC_PATH, 'files', scrawl_name) with open(img_path, 'wb') as img: img.write(img_data) except Exception: logger.error(traceback.format_exc()) finally: if img: img.close() if scrawl_name: file_code = get_increase_code(KEY_INCREASE_UPLOAD_FILE) uf = UploadFiles(code=file_code, title=scrawl_name, source_title=scrawl_name, category=CATEGORY_CERTIFICATE_UE, content_type='image/png') uf.size = os.path.getsize( os.path.join(settings.STATIC_PATH, 'files', scrawl_name)) await uf.save() return scrawl_name
def init_race_stat_data(): """ 初始该活动数据 :return: """ cp_map = get_all_race_checkpoint_map() last_map = get_all_last_checkpoint() cursor = MemberCheckPointHistory.sync_find( { 'check_point_cid': { '$in': list(cp_map.keys()) } }, read_preference=ReadPreference.PRIMARY).sort('created_dt').limit( 600000) cache_key = 'race_report_script' RedisCache.delete(cache_key) index = 1 while True: try: his = cursor.next() mapping = RaceMapping.sync_find_one({ 'member_cid': his.member_cid, 'race_cid': cp_map.get(his.check_point_cid) }) member = Member.sync_find_one({'cid': his.member_cid}) auth_address = mapping.auth_address if mapping else None # if not auth_address: # auth_address = member.auth_address # if not auth_address: continue race_cid = cp_map[his.check_point_cid] daily_code = __get_daily_code(his.created_dt) param = { 'race_cid': race_cid, 'province': auth_address.get('province'), 'city': auth_address.get('city'), 'district': auth_address.get('district'), 'sex': member.sex, 'education': member.education, 'category': member.category, 'daily_code': daily_code } stat = ReportRacePeopleStatistics.sync_find_one( param, read_preference=ReadPreference.PRIMARY) if not stat: stat = ReportRacePeopleStatistics(**param) stat.created_dt = his.created_dt stat.total_num += 1 # 初次通关 if his.check_point_cid == last_map[ race_cid] and his.status == STATUS_RESULT_CHECK_POINT_WIN and RedisCache.hget( cache_key, member.cid) is None: stat.pass_num += 1 RedisCache.hset(cache_key, member.cid, 1) # 当日人数 day_member_string = md5(daily_code + member.cid) if RedisCache.hget(cache_key, day_member_string) is None: RedisCache.hset(cache_key, day_member_string, 1) stat.people_num += 1 # # 当日新增人数 # old_his = MemberCheckPointHistory.sync_find_one({'member_cid': member.cid, 'created_dt': { # '$lt': his.updated_dt.replace(hour=0, minute=0, second=0, microsecond=0)}}) # if not old_his: # stat.incre_people += 1 stat.updated_dt = his.updated_dt stat.sync_save() print('has exec %s' % index) index += 1 except StopIteration: break except CursorNotFound: cursor = MemberCheckPointHistory.sync_find({'check_point_cid': {'$in': list(cp_map.keys())}}, read_preference=ReadPreference.PRIMARY). \ sort('created_dt').skip(index).limit(600000 - index) RedisCache.delete(cache_key)
async def save_upload_file(request_handler, field_name, category=CATEGORY_UPLOAD_FILE_OTHER, file_cid=None): """ 保存上传的文件 :param request_handler: 请求句柄 :param field_name: 请求表单中文件域名称 :param category: 文件类别 :param file_code: 文件编码, 不为空时则更新文件 :return: """ if not isinstance(request_handler, RequestHandler): raise ValueError('Parameter request_handler must be a instance of RequestHandler.') if not isinstance(field_name, (bytes, str, list)): raise ValueError('Parameter request_field_name must be a type of str or unicode or list.') field_list = [] if isinstance(field_name, (bytes, str)): field_list.append(field_name) else: field_list.extend(field_name) files_request = request_handler.request.files if files_request: file_cid_list = [] for field_name in field_list: if field_name: f_metas = files_request.get(field_name) if f_metas: title = md5(uuid.uuid1().hex) source_title = None content_type = None f_buffers = [] for f_meta in f_metas: f_buffers.append(f_meta['body']) source_title = f_meta['filename'] content_type = f_meta['content_type'] if f_buffers: e_name = get_file_extension_name(source_title) title = u'%s%s' % (title, e_name) final_name = os.path.join(settings.UPLOAD_FILES_PATH, title) upload_file = None uf = None if file_cid: uf = await UploadFiles.find_one(dict(cid=file_cid)) if uf: await drop_disk_file(os.path.join(settings.UPLOAD_FILES_PATH, uf.title)) try: upload_file = open(final_name, 'wb') with upload_file: upload_file.write((''.encode('utf-8')).join(f_buffers)) finally: if upload_file: upload_file.close() if not uf: uf = UploadFiles() file_code = get_increase_code(KEY_INCREASE_UPLOAD_FILE) uf.code = file_code uf.title = title uf.source_title = source_title uf.size = os.path.getsize(final_name) uf.category = category if request_handler.current_user: uf.updated_id = request_handler.current_user.oid uf.created_id = request_handler.current_user.oid uf.content_type = content_type await uf.save() file_cid_list.append(uf.cid) return file_cid_list return []
def union_id(self): if self.__condition_list: return md5(str(self.__condition_list)) return None
def do_init(): """ 初始该活动数据 :return: """ cache_key = 'race_report_script' RedisCache.delete(cache_key) cp_map = get_all_race_checkpoint_map() last_map = get_all_last_checkpoint() with open('./chekpt_history.csv', encoding='utf-8') as f: csv_reader = csv.reader(f) for index, line in enumerate(csv_reader): try: if index == 0: continue # member_cid,check_point_cid,status,created_dt his = MemberCheckPointHistory() his.member_cid = line[0] his.check_point_cid = line[1] his.status = line[2] line3 = line[3].replace('T', ' ').split('.')[0] c_dt = str2datetime(line3) his.created_dt = c_dt mapping = RaceMapping.sync_find_one({ 'member_cid': his.member_cid, 'race_cid': cp_map.get(his.check_point_cid) }) member = Member.sync_get_by_cid(his.member_cid) auth_address = mapping.auth_address if mapping else None if not auth_address: continue race_cid = cp_map[his.check_point_cid] daily_code = __get_daily_code(his.created_dt) param = { 'race_cid': race_cid, 'province': auth_address.get('province'), 'city': auth_address.get('city'), 'district': auth_address.get('district'), 'town': auth_address.get('town'), 'sex': member.sex, 'education': member.education, 'category': member.category, 'daily_code': daily_code, 'company_cid': mapping.company_cid } stat = ReportRacePeopleStatisticsTemp.sync_find_one( param, read_preference=ReadPreference.PRIMARY) if not stat: stat = ReportRacePeopleStatisticsTemp(**param) stat.created_dt = his.created_dt stat.total_num += 1 # 初次通关 if his.check_point_cid == last_map[ race_cid] and his.status == STATUS_RESULT_CHECK_POINT_WIN and RedisCache.hget( cache_key, member.cid) is None: stat.pass_num += 1 RedisCache.hset(cache_key, member.cid, 1) # 当日人数 day_member_string = md5(daily_code + member.cid) if RedisCache.hget(cache_key, day_member_string) is None: RedisCache.hset(cache_key, day_member_string, 1) stat.people_num += 1 # # 当日新增人数 # old_his = MemberCheckPointHistory.sync_find_one({'member_cid': member.cid, 'created_dt': { # '$lt': his.updated_dt.replace(hour=0, minute=0, second=0, microsecond=0)}}) # if not old_his: # stat.incre_people += 1 stat.updated_dt = his.created_dt stat.sync_save() print('has exec %s' % index) except Exception: print(traceback.format_exc())