Example #1
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!')
Example #2
0
    async def post(self):
        r_dict = {'code': 0}
        try:
            args_dict = json.loads(self.request.body)
            uuid = args_dict.get('uuid', None)
            member_cid = args_dict.get('member_cid', None)
            if member_cid:

                member = await find_app_member_by_cid(member_cid)
                if not member:
                    r_dict['code'] = 1001  # app传递用户cid不对
                else:
                    r_dict['member_cid'] = member_cid
                    if member.is_register and member.is_login:
                        r_dict['is_login'] = 1
                    else:
                        r_dict['is_login'] = 0
                    r_dict['m_type'] = member.m_type if member.m_type else ''
                    r_dict['code'] = 1000
            else:
                # app端没有登陆信息
                if uuid:
                    count = await AppMember.count(dict(uuid=uuid))
                    if count > 0:
                        member = await AppMember.find_one(
                            dict(uuid=uuid, is_register=0))
                        if member:
                            r_dict['member_cid'] = member.cid
                            r_dict['is_login'] = 0
                            r_dict['code'] = 1000
                        else:
                            r_dict['code'] = 1003  # 有注册用户,但是没有虚拟用户
                    else:
                        member = AppMember(
                            id=ObjectId(),
                            code=get_increase_code(KEY_INCREASE_MEMBER_CODE),
                            uuid=uuid,
                        )
                        await member.save()
                        r_dict['member_cid'] = member.cid
                        r_dict['is_login'] = 0
                        r_dict['code'] = 1000

                else:
                    r_dict['code'] = 1002  # uuid或者device_id为空

        except Exception:
            logger.error(traceback.format_exc())
        return r_dict
Example #3
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
Example #4
0
    async def post(self):
        r_dict = {'code': 0}
        member_cid = self.get_i_argument('member_cid', None)
        mobile = self.get_i_argument('mobile', None)
        v_code = self.get_i_argument('v_code', '')
        if not member_cid:
            r_dict['code'] = 1001
            return r_dict

        member = await find_app_member_by_cid(member_cid)
        if not member:
            r_dict['code'] = 1002
        if not mobile:
            r_dict['code'] = 1003
            return r_dict
        try:
            if not msg_utils.check_digit_verify_code(mobile, v_code):
                r_dict['code'] = 1004
                return r_dict
            phone_member = await AppMember.find_one({'mobile': mobile})
            if not phone_member:
                new_member = AppMember(
                    id=ObjectId(),
                    code=get_increase_code(KEY_INCREASE_MEMBER_CODE),
                    uuid=member.uuid,
                    mobile=mobile,
                )
                new_member.is_register = 1
                new_member.is_login = 1
                await new_member.save()
                r_dict[
                    'm_type'] = new_member.m_type if new_member.m_type else ''
                r_dict['member_cid'] = new_member.cid
            else:
                r_dict['member_cid'] = phone_member.cid
                r_dict[
                    'm_type'] = phone_member.m_type if phone_member.m_type else ''

            r_dict['code'] = 1000
        except Exception:
            logger.error(traceback.format_exc())
        return r_dict
Example #5
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
Example #6
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 []
Example #7
0
    async def post(self):
        res = dict(code=0)

        name = self.get_argument('name')
        sex = int(self.get_argument('sex', 1))
        email = self.get_argument('email')
        mobile = self.get_argument('mobile')
        birthday = self.get_argument('birthday')
        province_code = self.get_argument('province_code')  # 省份编码
        city_code = self.get_argument('city_code')  # 城市编码
        vehicle_code = self.get_argument('vehicle_code')  # 车型编号
        purchase_datetime = self.get_argument('purchase_datetime')  # 车辆购买时间
        content = self.get_argument('content')  # 备注
        status = int(self.get_argument('status', STATUS_USER_ACTIVE))

        if name and mobile and email:
            # 校验用户名
            if mobile:
                exist_count = await Member.count(dict(mobile=mobile))
                if exist_count:
                    res['code'] = -2
                    return res
            if email:
                email_valid = re.match(
                    r"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", email)
                exist_count = await Member.count(dict(email=email))
                if exist_count:
                    res['code'] = -3
                    return res
                if not email_valid:
                    res['code'] = -4
                    return res
            if mobile:
                member = Member()
                member.mobile = mobile
                member.code = get_increase_code(KEY_INCREASE_MEMBER_CODE)
                if email:
                    member.email = email
            else:
                member = Member()
                member.email = email
                member.code = get_increase_code(KEY_INCREASE_MEMBER_CODE)

            if name:
                member.name = name
            member.sex = sex
            if birthday:
                member.birthday = str2datetime(birthday, '%Y-%m-%d')

            if vehicle_code:
                vehicle = await Vehicle.find_one(
                    dict(code=vehicle_code, record_flag=1))
                if vehicle:
                    member.needless['vehicle_title'] = vehicle.title
                    member.needless['vehicle_brand'] = vehicle.needless.get(
                        'brand')
                    member.needless['vehicle_category'] = vehicle.needless.get(
                        'category')
                    member.needless['vehicle_series'] = vehicle.needless.get(
                        'series')
                    member.needless['vehicle_config'] = vehicle.needless.get(
                        'config')
                    member.needless['vehicle_colour'] = vehicle.needless.get(
                        'colour')
                    member.needless['vehicle_displace'] = vehicle.needless.get(
                        'displace')
            else:
                for attr in [
                        'vehicle_brand', 'vehicle_category', 'vehicle_series',
                        'vehicle_config', 'vehicle_colour', 'vehicle_displace',
                        'vehicle_title'
                ]:
                    try:
                        member.needless.pop(attr)
                    except KeyError:
                        pass

            member.content = content
            member.status = status

            # 冗余信息
            if province_code:
                province = await AdministrativeDivision.find_one(
                    dict(parent_code=None, code=province_code))
                if province:
                    member.needless['province'] = province.title
                    city = await AdministrativeDivision.find_one(
                        dict(parent_code=province_code, code=city_code))
                    if city:
                        member.needless['city'] = city.title

            member.province_code = province_code
            member.city_code = city_code
            member.source = SOURCE_TYPE_MEMBER_SYSTEM

            if vehicle_code:
                if vehicle_code:
                    vehicle = await Vehicle.find_one(
                        dict(code=vehicle_code, record_flag=1))
                    if vehicle:
                        member.needless['vehicle_title'] = vehicle.title
                        member.needless[
                            'vehicle_brand'] = vehicle.needless.get('brand')
                        member.needless[
                            'vehicle_category'] = vehicle.needless.get(
                                'category')
                        member.needless[
                            'vehicle_series'] = vehicle.needless.get('series')
                        member.needless[
                            'vehicle_config'] = vehicle.needless.get('config')
                        member.needless[
                            'vehicle_colour'] = vehicle.needless.get('colour')
                        member.needless[
                            'vehicle_displace'] = vehicle.needless.get(
                                'displace')
                member.vehicle_code = vehicle_code

            if purchase_datetime:
                member.purchase_datetime = str2datetime(
                    purchase_datetime, '%Y-%m')

            member.status = status
            member_id = await member.save()

            res['code'] = 1
            res['member_id'] = member_id
        else:
            res['code'] = -1
        return res
Example #8
0
    async def post(self):
        r_dict = {'code': 0}
        try:
            args_dict = json.loads(self.request.body)
            auth_code = args_dict.get('auth_code', None)
            user_info = args_dict.get('userInfo', {})
            if not user_info:
                user_info = {}

            source = args_dict.get('source', None)
            if auth_code:
                params_dict = {
                    'app_id': MINI_APP_ID,
                    'app_secret': MINI_APP_SECRET,
                    'code': auth_code
                }
                exchange_url = API_CODE_EXCHANGE_SESSION_URL.format(
                    **params_dict)
                http_client = AsyncHTTPClient()
                response = await http_client.fetch(exchange_url,
                                                   validate_cert=False)
                if response.code == 200:
                    rep_dict = json.loads(response.body)
                    open_id = rep_dict.get('openid')
                    friend_open_id = args_dict.get('friend_open_id', None)
                    session_key = rep_dict.get('session_key')
                    if open_id:
                        member = await find_member_by_open_id(open_id)
                        if not member:
                            if source is not None:
                                source_type = str(source)
                            else:
                                source_type = str(SOURCE_TYPE_MEMBER_SYSTEM)
                            # 创建用户
                            member = Member(id=ObjectId(),
                                            code=get_increase_code(
                                                KEY_INCREASE_MEMBER_CODE),
                                            open_id=open_id,
                                            source=source_type,
                                            status=STATUS_USER_ACTIVE)
                            wechat_info = await parse_wechat_info(user_info)
                            member.sex = int(
                                user_info.get('gender')) if user_info.get(
                                    'gender') else SEX_NONE

                            member.avatar = wechat_info.get(
                                'avatar'
                            ) if wechat_info.get('avatar') else '%s://%s%s' % (
                                SERVER_PROTOCOL, SERVER_HOST,
                                self.static_url('images/default/visitor.png'))
                            member.nick_name = wechat_info.get(
                                'nick_name') if wechat_info.get(
                                    'nick_name') else '游客'

                            if wechat_info:
                                member.province_code = wechat_info.get(
                                    'province_code')
                                member.city_code = wechat_info.get('city_code')
                                member.district_code = wechat_info.get(
                                    'district_code')

                                member.needless['province'] = wechat_info.get(
                                    'province_name')
                                member.needless['city'] = wechat_info.get(
                                    'city_name')
                                member.needless['district'] = wechat_info.get(
                                    'district_name')

                                member.wechat_info = user_info

                            member.register_datetime = datetime.datetime.now()
                            member.login_datetime = datetime.datetime.now()
                            member.login_times += 1

                            await member.save()

                            # 会员属性统计
                            await start_task_member_property_statistics(member)

                            r_dict['open_id'] = open_id
                            r_dict['session_key'] = session_key
                            r_dict['code'] = 1000
                        else:
                            if member.status == STATUS_USER_INACTIVE:
                                r_dict['code'] = 1002
                            else:
                                member.login_datetime = datetime.datetime.now()
                                member.login_times += 1
                                await member.save()

                                r_dict['open_id'] = open_id
                                r_dict['session_key'] = session_key
                                r_dict['code'] = 1000
                        if friend_open_id:
                            friend = await find_member_by_open_id(
                                friend_open_id)
                            if friend:
                                friend_member = MemberFriend(
                                    member_cid=member.cid,
                                    friend_cid=friend.cid)
                                await friend_member.save()
                                member_friend = MemberFriend(
                                    member_cid=friend.cid,
                                    friend_cid=member.cid)
                                await member_friend.save()
                else:
                    r_dict['code'] = 1003
            else:
                r_dict['code'] = 1001
        except Exception:
            logger.error(traceback.format_exc())
        return r_dict
Example #9
0
    async def post(self):
        res = {'code': 1}

        present_id = self.get_argument('present_id')
        receiver_name = self.get_argument('receiver_name')
        receive_address = self.get_argument('receiver_address')
        receiver_mobile = self.get_argument('receiver_mobile')
        receiver_area_codes = self.get_argument('receiver_area_codes')
        member_id = self.current_user.oid

        if present_id and member_id:
            try:
                present = await Present.get_by_id(present_id)
                member = await Member.get_by_id(member_id)
                if present and member and present.category == CATEGORY_PRESENT_REAL_GIFT:
                    # 校验积分
                    if present.ex_integral > member.integral:
                        res['code'] = -1
                    # 校验库存
                    elif present.inventory < 1:
                        res['code'] = -2
                    else:
                        # 新建订单
                        order = ExchangeOrder(
                            present_cid=present.code,
                            member_cid=member.cid,
                            code=get_increase_code(
                                KEY_INCREASE_EXCHANGE_ORDER_CODE),
                            order_datetime=datetime.now(),
                            receiver_name=receiver_name,
                            receiver_mobile=receiver_mobile)
                        if receiver_area_codes:
                            area_codes_list = receiver_area_codes.split(',')
                            # 省
                            try:
                                province_code = area_codes_list[0]
                                province = await AdministrativeDivision.find_one(
                                    dict(code=province_code))
                                order.needless['province'] = province.title
                                order.province_code = province.code
                            except IndexError:
                                pass

                            try:
                                city_code = area_codes_list[1]
                                city = await AdministrativeDivision.find_one(
                                    dict(code=city_code))
                                order.needless['city'] = city.title
                                order.city_code = city.code
                            except IndexError:
                                pass

                            try:
                                district_code = area_codes_list[2]
                                district = await AdministrativeDivision.find_one(
                                    dict(code=district_code))
                                order.needless['district'] = district.title
                                order.district_code = district.code
                            except IndexError:
                                pass

                        order.receive_address = receive_address
                        order.ex_integral = present.ex_integral
                        order.status = STATUS_EXCHANGE_ORDER_UNSHIPPED
                        order.updated_id = self.current_user.oid
                        order.created_id = self.current_user.oid

                        await order.save()

                        # present 库存减少
                        present.update_dt = datetime.now()
                        present.updated_id = self.current_user.oid
                        present.inventory = present.inventory - 1

                        await present.save()

                        # 用户积分减少
                        member.update_dt = datetime.now()
                        member.updated_id = self.current_user.oid
                        member.integral = member.integral - present.ex_integral
                        await member.save()
                else:
                    res['code'] = 0
            except Exception:
                logger.error(traceback.format_exc())
                res['code'] = 0
        else:
            res['code'] = 0

        return res
Example #10
0
    async def __subject_import_excel(self, excel_file_content):
        result_code = 1
        custom_code_list = await Subject.distinct('custom_code', {'record_flag': 1})
        book = xlrd.open_workbook(file_contents=excel_file_content)
        sheet = book.sheet_by_index(0)
        subject_list = []
        subject_option_list = []
        row_list = []
        k_first_dict = dict(zip(KNOWLEDGE_FIRST_LEVEL_DICT.values(), KNOWLEDGE_FIRST_LEVEL_DICT.keys()))
        k_second_dict = dict(zip(KNOWLEDGE_SECOND_LEVEL_DICT.values(), KNOWLEDGE_SECOND_LEVEL_DICT.keys()))

        # 维度信息
        field_dict = {'record_flag': 1, 'status': STATUS_SUBJECT_DIMENSION_ACTIVE, 'parent_cid': {'$in': ['', None]}}
        all_dimension_list = await SubjectDimension.find(field_dict).to_list(None)
        sub_dict = dict(record_flag=1, status=STATUS_SUBJECT_DIMENSION_ACTIVE)
        subject_dimension_dict = {}
        for subject_dimension in all_dimension_list:
            sub_dict['parent_cid'] = subject_dimension.cid
            sub_dimension_list = await SubjectDimension.find(sub_dict).to_list(None)
            if sub_dimension_list:
                subject_dimension_dict[subject_dimension.cid] = sub_dimension_list

        # 按顺序得到表头对应的维度cid(如果题目表头除维度之外有增减,3就随之改变)
        cid_list = []
        title_list = []
        is_empty = 0
        for ind, col in enumerate(sheet.row_values(0)):
            if col:
                title_list.append(col)
            if 3 < ind < (len(all_dimension_list) + 4):
                if not col:
                    is_empty = 1
                flag = 1
                for dimension in all_dimension_list:
                    if dimension.title == str(self.__get_replace_data(col, 2)):
                        flag = 2
                        cid_list.append(dimension.cid)
                        break
                if flag == 1:
                    continue
            if (ind < len(cid_list) + 8) and not col:
                is_empty = 1

        # 判断表头是否正确(如果题目表头除维度之外有增减,8就随之改变)
        if not (len(cid_list) + 8) == len(title_list) or len(cid_list) < 1 or is_empty:
            result_code = 2
            return result_code

        for rownum in range(1, sheet.nrows):
            row_list.append([col for col in sheet.row_values(rownum)])

        if row_list:
            for i, row_data in enumerate(row_list):
                is_exist = 0

                # 题目ID
                custom_code = str(self.__get_replace_data(row_data[1], 2))
                if not custom_code or len(custom_code) > 20 or len(custom_code) < 5:
                    continue
                else:
                    reg = re.compile(r'^[a-zA-Z0-9]*$')
                    if not bool(reg.match(custom_code)):
                        continue
                    if custom_code not in custom_code_list:
                        subject = Subject()
                        subject_code = str(get_increase_code(KEY_INCREASE_SUBJECT_CODE))
                        subject.code = subject_code
                        subject.custom_code = custom_code
                        subject.status = STATUS_SUBJECT_ACTIVE
                        custom_code_list.append(custom_code)
                    else:
                        subject = await Subject.find_one(dict(custom_code=custom_code))
                        # await SubjectOption.delete_many({'subject_cid': subject.cid})
                        subject.updated_dt = datetime.datetime.now()
                        is_exist = 1

                # 一级知识点
                subject.knowledge_first = self.__get_replace_data(row_data[2], 1, data_dict=k_first_dict)

                # 二级知识点
                subject.knowledge_second = self.__get_replace_data(row_data[3], 1, data_dict=k_second_dict)

                # 知识维度
                dimension_dict = {}
                is_wrong = 0
                end_dimension_len = 4 + len(cid_list)
                for index in range(4, end_dimension_len):
                    c_code = self.__get_replace_data(row_data[index], 2)
                    cid = cid_list[index - 4]
                    if cid and c_code:
                        sub_list = subject_dimension_dict.get(cid)
                        if sub_list:
                            is_wrong = 0
                            for sub_dimension in sub_list:
                                if sub_dimension.code == c_code:
                                    is_wrong = 1
                                    dimension_dict[cid] = sub_dimension.cid
                                    break
                            if not is_wrong:
                                result_code = 3
                                is_wrong = 0
                                break
                if dimension_dict and is_wrong:
                    subject.dimension_dict = dimension_dict
                else:
                    continue

                # 答案解析
                resolving = self.__get_replace_data(row_data[end_dimension_len], 2)
                if not resolving:
                    continue
                else:
                    subject.resolving = resolving

                # 题目
                title = self.__get_replace_data(row_data[end_dimension_len + 1], 2)
                if not title:
                    continue
                else:
                    subject.title = title

                # 答案
                count = 0
                if not row_data[end_dimension_len + 2]:
                    continue
                else:
                    if not row_data[end_dimension_len + 2].strip().isalpha() or len(
                            row_data[end_dimension_len + 2].strip()) > 1:
                        continue
                    count = ord(row_data[end_dimension_len + 2].strip().upper()) - 64

                if (count + end_dimension_len + 2) > len(row_data):
                    continue
                else:
                    if not row_data[count + end_dimension_len + 2]:
                        continue
                # 选项
                num = 0
                tmp_option_list = await SubjectOption.find({'subject_cid': subject.cid}).sort([('sort', ASC)]).to_list(
                    None)
                for index in range(end_dimension_len + 3, len(row_data)):
                    if row_data[index]:
                        option_title = self.__get_replace_data(row_data[index], 2)
                        if not option_title:
                            continue
                        else:
                            sort = index - (end_dimension_len + 2)
                            a_index = sort - 1
                            update, subject_option = False, None
                            if tmp_option_list:
                                if len(tmp_option_list) > a_index:
                                    subject_option = tmp_option_list[a_index]
                                    update = True
                            if subject_option is None:
                                subject_option = SubjectOption(
                                    code=str(get_increase_code(KEY_INCREASE_SUBJECT_OPTION_CODE)))

                            if isinstance(option_title, (float, int)):
                                option_title = str(option_title)

                            subject_option.title = option_title
                            subject_option.sort = sort
                            if sort == count:
                                subject_option.correct = True
                            else:
                                subject_option.correct = False
                            subject_option.subject_code = subject.code
                            subject_option.subject_cid = subject.cid
                            if update:
                                subject_option.updated_dt = datetime.datetime.now()
                                subject_option.updated_id = self.current_user.oid
                                subject_option.needless = {}
                                await subject_option.save()
                            else:
                                subject_option_list.append(subject_option)
                            num += 1
                subject.needless = {'option_quantity': num}
                if is_exist:
                    await subject.save()
                else:
                    subject_list.append(subject)
                    if len(subject_list) == 500:
                        await  Subject.insert_many(subject_list)
                        subject_list = []
                    if len(subject_option_list) == 500:
                        await SubjectOption.insert_many(subject_option_list)
                        subject_option_list = []
            if subject_list:
                await Subject.insert_many(subject_list)
            if subject_option_list:
                await SubjectOption.insert_many(subject_option_list)
        return result_code
Example #11
0
    async def post(self):
        r_dict = {'code': 0}
        subject_id = None
        try:
            title = self.get_argument('title', None)
            option_str = self.get_argument('option_list', None)
            option_list = json.loads(option_str) if option_str else []
            # difficulty = self.get_argument('difficulty', None)
            # category = self.get_argument('category', None)
            content = self.get_argument('content', None)
            status = self.get_argument('status', None)  # 状态
            knowledge_first = self.get_argument('knowledge_first', None)
            knowledge_second = self.get_argument('knowledge_second', None)
            category_use = self.get_argument('category_use', None)
            resolving = self.get_argument('resolving', None)
            subject_dimension_list = self.get_arguments('subject_dimension')
            custom_code = self.get_argument('custom_code', None)
            if title and len(option_list) >= 2 and resolving and custom_code:
                c_count = await Subject.count(dict(custom_code=custom_code))
                if c_count > 0:
                    r_dict['code'] = -10
                else:
                    if status == 'on':
                        status = STATUS_SUBJECT_ACTIVE
                    else:
                        status = STATUS_SUBJECT_INACTIVE
                    image_cid = None
                    image_cid_list = await save_upload_file(self, 'image', category=CATEGORY_UPLOAD_FILE_IMG_SUBJECT)
                    if image_cid_list:
                        image_cid = image_cid_list[0]

                    code = get_increase_code(KEY_INCREASE_SUBJECT_CODE)
                    # subject = Subject(code=code, title=title, difficulty=int(difficulty), category=int(category))
                    subject = Subject(code=code, title=title)
                    subject.custom_code = custom_code
                    subject.image_cid = image_cid
                    subject.status = status
                    subject.content = content
                    subject.created_id = self.current_user.oid
                    subject.updated_id = self.current_user.oid
                    subject.resolving = resolving
                    knowledge_first = int(knowledge_first) if knowledge_first else None
                    knowledge_second = int(knowledge_second) if knowledge_second else None
                    subject.knowledge_first = knowledge_first
                    subject.knowledge_second = knowledge_second
                    subject.category_use = int(category_use) if category_use else None
                    subject_dimension_dict = {}
                    if subject_dimension_list:
                        for subject_dimension in subject_dimension_list:
                            try:
                                subject_dimension_cid, sub_subject_dimension_cid = subject_dimension.split('_')
                                subject_dimension_dict[subject_dimension_cid] = sub_subject_dimension_cid
                            except ValueError as e:
                                if subject_dimension != 'DFKX':
                                    raise e

                    subject.dimension_dict = subject_dimension_dict
                    # 冗余信息
                    if not isinstance(subject.needless, dict):
                        subject.needless = {}
                    subject.needless['option_quantity'] = len(option_list)

                    if option_list:
                        subject_id = await subject.save()
                        for index, option_dict in enumerate(option_list):
                            if option_dict:
                                so = SubjectOption(subject_cid=subject.cid, code=str(index + 1),
                                                   title=option_dict.get('content'),
                                                   correct=option_dict.get('is_correct'))
                                so.sort = str(index + 1)
                                so.created_id = self.current_user.oid
                                so.updated_id = self.current_user.oid
                                await so.save()

                        await set_subject_choice_rules_redis_value(1)
                        r_dict['code'] = 1
            else:
                if not title:
                    r_dict['code'] = -1
                # if not difficulty:
                #     r_dict['code'] = -4
                # if not category:
                #     r_dict['code'] = -5
                if not resolving:
                    r_dict['code'] = -8
                if not option_list and len(option_list) < 2:
                    r_dict['code'] = -6
                if not custom_code:
                    r_dict['code'] = -9
                if not category_use:
                    r_dict['code'] = -11
        except Exception as e:
            if subject_id:
                subject = await Subject.get_by_id(subject_id)
                if subject:
                    await Subject.delete_by_ids([subject.oid])
                    await Subject.delete_many({'code': subject.code})
            logger.error(traceback.format_exc())
        return r_dict