Пример #1
0
    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
Пример #2
0
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!')
Пример #3
0
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.')
Пример #4
0
 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
Пример #5
0
    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
Пример #6
0
    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())
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
    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
Пример #10
0
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
Пример #11
0
 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
Пример #12
0
    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
Пример #13
0
    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
Пример #14
0
 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
Пример #15
0
 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
Пример #16
0
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)
Пример #17
0
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 []
Пример #18
0
 def union_id(self):
     if self.__condition_list:
         return md5(str(self.__condition_list))
     return None
Пример #19
0
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())