Esempio n. 1
0
    def get(self, request):
        """
        用户的品类订阅情况
        ---
        """
        if not request.user.id:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response()

        varieties = VarietiesRecord.objects.all()
        varieties = varieties.annotate(
            subscribed=Exists(
                VarietiesSubscription.objects.filter(
                    user_id=self.request.user.id,
                    varieties_id=OuterRef('id')
                )
            ),
            subscription_id=Subquery(
                VarietiesSubscription.objects.filter(
                    user_id=self.request.user.id,
                    varieties_id=OuterRef('id')
                ).values('id')[:1]
            ),
        ).order_by('-subscribed', 'short_name')
        for variety in varieties:
            variety.count = FormulaSubscription.objects.filter(user_id=request.user.id, varieties_id=variety.id).count()

        paginator = Paginator(varieties, request.GET.get('number', 100))
        page = paginator.page(request.GET.get('index', 1))
        serializer = VarietiesRecordSerializerWithSubscription(page, many=True)

        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=serializer.data,
            pageinfo=page
        ).to_response()
Esempio n. 2
0
    def post(self, request, *args, **kwargs):
        """
        订阅品类
        ---
        parameters:
            - name: varieties_id
              description: 品目 id
              type: string
              paramType: form
              required: true
        """
        if not request.user.id:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response()

        varieties_id = request.data.get('varieties_id', None)
        if not varieties_id:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS).to_response()

        varieties = VarietiesRecord.objects.filter(id=varieties_id).first()
        if not varieties:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND).to_response()

        subscription = VarietiesSubscription.objects.filter(user_id=request.user.id, varieties_id=varieties_id).first()
        if not subscription:
            subscription = VarietiesSubscription(
                user_id=request.user.id,
                varieties_id=varieties_id,
            )
            subscription.save()

        serializer = VarietiesSubscriptionSerializer(subscription)
        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=serializer.data,
        ).to_response()
Esempio n. 3
0
 def post(self, request, *args, **kwargs):
     """
     用户登录
     ---
     parameters:
         - name: username
           description: 用户名
           type: string
           paramType: form
           required: true
         - name: password
           description: 密码
           type: string
           paramType: form
           required: true
     """
     username = request.data.get('username', None)
     password = request.data.get('password', None)
     if not username or not password:
         return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_LOGIN_ERR).to_response()
     user = User.objects.filter(username=username).first()
     if not user:
         return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_LOGIN_ERR).to_response()
     if not user.check_password(password):
         return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_LOGIN_ERR).to_response()
     login(request, user)
     return BackstageHTTPResponse(
         code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
         data=UserSerializer(user).data
     ).to_response()
Esempio n. 4
0
    def delete(self, request, formula_id, varieties_id):
        """
        取消订阅公式
        ---
        parameters:
            - name: formula_id
              description: 公式 id
              type: integer
              paramType: path
              required: true
            - name: varieties_id
              description: 品类 id
              type: integer
              paramType: path
              required: true
        """
        if not request.user.id:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response()

        subscription = FormulaSubscription.objects.filter(
            user_id=request.user.id,
            formula_id=formula_id,
            varieties_id=varieties_id
        ).first()
        if subscription:
            subscription.delete()

        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
        ).to_response()
Esempio n. 5
0
    def post(self, request, *args, **kwargs):
        """
        提交意见反馈
        ---
        parameters:
            - name: content
              description: 反馈内容
              type: string
              paramType: form
              required: true
            - name: contact
              description: 联系方式
              type: string
              paramType: form
              required: false
        """
        content = request.data.get('content', None)
        contact = request.data.get('contact', None)
        if not content:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_FEEDBACK_CONTENT_NOT_EMPTY).to_response()

        feedback = UserFeedback(content=content, contact=contact)
        feedback.save()

        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=UserFeedbackSerializer(feedback).data
        ).to_response()
Esempio n. 6
0
 def get(self, request, classification, *args, **kwargs):
     """
     公式可用区分维度
     ---
     parameters:
         - name: classification
           description: 第几个区分维度
           type: integer
           paramType: path
           required: true
     """
     column_name = 'classification_%s' % classification
     if column_name not in [i.attname for i in Symbol._meta.fields]:
         return BackstageHTTPResponse(
             code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND,
             message='未找到数据'
         ).to_response()
     query_dict_1 = {'%s__isnull' % column_name: True}
     query_dict_2 = {column_name: ''}
     column_values = list(Symbol.objects.exclude(
         Q(**query_dict_1)|(Q(**query_dict_2))
     ).values_list(column_name, flat=True).order_by(column_name).distinct())
     return BackstageHTTPResponse(
         code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
         data=column_values,
     ).to_response()
Esempio n. 7
0
 def get(self, request, openid):
     """
     检查微信 openid 是否已注册
     ---
     parameters:
         - name: openid
           description: 微信 openid
           type: string
           paramType: path
           required: true
     responseMessages:
         - code: 200
           message: 已注册
         - code: 404
           message: 未注册
     """
     user = User.objects.filter(openid=openid).first()
     if not user:
         return BackstageHTTPResponse(
             code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND,
             message='用户未注册'
         ).to_response()
     return BackstageHTTPResponse(
         code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
         message='用户已注册'
     ).to_response()
Esempio n. 8
0
    def get(self, request, scene_str):
        """
        向微信请求带参数二维码,用于用户扫码登录
        ---
        parameters:
            - name: scene_str
              description: 注册时填用户手机号,登录时不用传
              type: string
              paramType: path
              required: true
        """
        qr = WechatQR.objects.filter(scene_str=scene_str).first()
        if not qr:
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND,
            ).to_response()

        serializer = WechatQRSerializer(qr)
        if qr.openid:
            user = User.objects.filter(openid=qr.openid,
                                       is_active=True).first()
            if user:
                user.update_wechat_mobile(logger=logger)
                login(request, user)
        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=serializer.data).to_response()
Esempio n. 9
0
    def post(self, request, *args, **kwargs):
        """
        新建公式
        ---
        parameters:
            - name: title
              description: 标题
              type: string
              paramType: form
              required: false
            - name: description
              description: 描述
              type: string
              paramType: form
              required: false
            - name: formula
              description: 公式内容
              type: string
              paramType: form
              required: false
            - name: comment
              description: 备注
              type: string
              paramType: form
              required: false
            - name: varieties_id
              description: 品目 id
              type: integer
              paramType: form
              required: false
        """
        if not request.user.id:
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR
            ).to_response()

        varieties_id = request.data.get('varieties_id', None)
        if varieties_id and not VarietiesRecord.objects.filter(
                id=varieties_id).first():
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS,
                message='没有该品目').to_response()

        serializer = FormulaSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        formula_serializer = serializer.save(user_id=self.request.user.id)

        if varieties_id:
            FormulaVarieties(formula_id=formula_serializer.id,
                             varieties_id=varieties_id).save()
            # 有品目的话自动订阅该 formula
            FormulaSubscription(user_id=request.user.id,
                                formula_id=formula_serializer.id,
                                varieties_id=varieties_id).save()

        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=serializer.data).to_response()
Esempio n. 10
0
    def get(self, request, chart_variety, sidebar):
        """
        主页图表下方数据表格接口,支持所有 chart_sidebar 表中的 variety-sidebar 组合
        ---
        parameters:
            - name: chart_variety
              description: 品类
              type: string
              paramType: path
              required: true
            - name: sidebar
              description: 侧边栏参数
              type: string
              paramType: path
              required: true
        """
        chart_sidebar = ChartSidebar.objects.filter(variety=chart_variety,
                                                    sidebar=sidebar).first()
        if not chart_sidebar:
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND,
                message='未找到对应数据').to_response()
        sidebar_tables = VarietiesSidebarTable.objects.filter(
            chart_sidebar_id=chart_sidebar.id)
        fields = ['timestamp', 'number']
        # 定义最终生成的 shape/column
        for sidebar_table in sidebar_tables:
            # extra 格式 {"field": "source", "name": "来源", "fetch_code": "xxx"}
            # fetch_code 是获取数据的方式, 比如获取 symbol 表的 title, 那么就是 title
            extras = json.loads(sidebar_table.extra)
            for extra in extras:
                if extra['field'] not in fields:
                    fields.append(extra['field'])
        data_list = [fields]
        for i, sidebar_table in enumerate(sidebar_tables):
            data = [None] * len(fields)
            table_data = ref_table(sidebar_table.data_code,
                                   sidebar_table.table,
                                   limit=1,
                                   timestamp=True)
            data[:2] = table_data[0] if table_data else [None] * 2

            if sidebar_table.table.lower() == 'symbol':
                symbol = Symbol.objects.filter(
                    symbol=sidebar_table.data_code.split('.')[0]).first()
                extras = json.loads(sidebar_table.extra)
                for extra in extras:
                    data[fields.index(extra['field'])] = getattr(
                        symbol, extra['fetch_code'],
                        '') if not extra.get('text', '') else extra['text']
            data_list.append(data)
        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data={
                'data': data_list
            },
        ).to_response()
Esempio n. 11
0
    def get(self, request, *args, **kwargs):
        """
        用户的公式订阅情况
        ---
        parameters:
            - name: varieties_id
              description: 品类 id
              type: integer
              paramType: query
              required: false
            - name: index
              description: 页数
              type: integer
              paramType: query
              required: false
            - name: number
              description: 每页条数
              type: integer
              paramType: query
              required: false
        """
        if not request.user.id:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response()

        varieties_id = request.GET.get('varieties_id', None)
        formulas = Formula.objects.filter(Q(user_id=None) | Q(user_id=request.user.id))
        if varieties_id:
            formulas = formulas.filter(
                id__in=FormulaVarieties.objects.filter(varieties_id=varieties_id).values_list('formula_id', flat=True))

        formulas = formulas.annotate(
            subscribed=Exists(
                FormulaSubscription.objects.filter(
                    user_id=self.request.user.id,
                    formula_id=OuterRef('id'),
                    varieties_id=varieties_id
                )
            ),
            subscription_id=Subquery(
                FormulaSubscription.objects.filter(
                    user_id=self.request.user.id,
                    formula_id=OuterRef('id'),
                    varieties_id=varieties_id
                ).values('id')[:1]
            ),
        ).order_by('-created_at')

        paginator = Paginator(formulas, request.GET.get('number', 100))
        page = paginator.page(request.GET.get('index', 1))
        serializer = FormulaSerializerWithSubscription(page, many=True)

        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=serializer.data,
            pageinfo=page
        ).to_response()
Esempio n. 12
0
    def get(self, request):
        u"""
        获取用户列表
        ---

        parameters:
            - name: index
              description: 分页显示第几页
              paramType: query
              required: false
            - name: number
              description: 每页显示几条数据
              paramType: query
              required: false
            - name: descent
              description: 需要倒序的字段,用逗号分开,默认通过ID 正序
              paramType: query
              required: false
            - name: is_page
              description: 是否需要分页,default=1 ('0', '不需要分页'),('1', '需要分页')
              paramType: query
              required: false

        """
        query_dict = request.query_params.dict().copy()
        index, number, sort_tuple, descent = gen_page_info(query_dict)
        is_page = query_dict.pop('is_page', '1')

        user_objs = User.objects.order_by(*sort_tuple).all()

        if is_page == '1':

            paginator = Paginator(user_objs, number)

            try:
                pg = paginator.page(index)
            except PageNotAnInteger:
                # If page is not an integer, deliver first page.
                index = 1
                pg = paginator.page(index)
            except EmptyPage:
                # If page is out of range (e.g. 9999), deliver last page of results.
                index = paginator.num_pages
                pg = paginator.page(index)
            serializer = UserSerializer(pg, many=True)
            res = serializer.data
            logger.info('正常返回分页:%s:' % (index))
            return BackstageHTTPResponse(data=res,
                                         message=u'正常返回分页').to_response()

        else:
            serializer = UserSerializer(user_objs, many=True)
            res = serializer.data
            logger.info('正常返回所有数据')
            return BackstageHTTPResponse(data=res,
                                         message=u'正常返回所有数据').to_response()
Esempio n. 13
0
 def post(self, request, *args, **kwargs):
     """
     和 qian.useonline.cn 同步手机信息
     ---
     """
     if not request.user.is_authenticated:
         return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response()
     request.user.update_wechat_mobile()
     serializer = UserSerializer(request.user)
     return BackstageHTTPResponse(
         code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
         data=serializer.data
     ).to_response()
Esempio n. 14
0
    def get(self, request, *args, **kwargs):
        """
        获取当前用户信息
        ---
        """
        if not request.user.id:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response()

        request.user.update_wechat_mobile()
        data = UserSerializer(request.user).data
        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=data,
        ).to_response()
Esempio n. 15
0
    def patch(self, request, *args, **kwargs):
        """
        修改当前用户
        ---
        parameters:
            - name: head_img
              description: 图片
              type: file
              paramType: form
              required: false
            - name: display_name
              description: 昵称
              type: string
              paramType: form
              required: false
            - name: introduction
              description: 简介
              type: string
              paramType: form
              required: false
        """
        if not request.user.id:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response()

        head_img = request.data.get('head_img', None)
        display_name = request.data.get('display_name', None)
        introduction = request.data.get('introduction', None)

        if head_img:
            auth = oss2.Auth(settings.ALI_OSS_ACCESS_KEY_ID, settings.ALI_OSS_ACCESS_KEY_SECRET)
            bucket = oss2.Bucket(auth, settings.ALI_OSS_ENDPOINT, settings.ALI_OSS_BUCKET_NAME)

            remote_file_name = '%s.%s' % (uuid.uuid4().hex, head_img.name.split('.')[-1])
            res = bucket.put_object(remote_file_name, head_img)
            logging.info('上传到阿里云, 文件名: %s, 请求id: %s, 返回状态: %s' % (remote_file_name, res.request_id, res.status))
            remote_url = ''.join([settings.FATHER_URL, remote_file_name])
            request.user.head_img = remote_url
        if display_name:
            request.user.display_name = display_name
        if introduction:
            request.user.introduction = introduction
        request.user.save()

        data = UserSerializer(request.user).data
        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=data,
        ).to_response()
Esempio n. 16
0
 def wrapper(self, request):
     if not request.user.id:
         return BackstageHTTPResponse(
             BackstageHTTPResponse.API_HTTP_CODE_NO_PERMISSION).to_response(
             )
     else:
         return func(self, request)
Esempio n. 17
0
 def get(self, request):
     u"""
     查看用户的预测结果
     ---
     parameters:
         - name: user_id
           description: 用户id
           paramType: query
           required: true
         - name: date
           description: 日期
           paramType: query
           required: true
         - name: varieties_id
           description: 品类id
           paramType: query
           required: true
     """
     query_dict = request.query_params.dict().copy()
     date = query_dict.get('date')
     varieties_id = query_dict.get('varieties_id')
     user_id = query_dict.get('user_id')
     pre_obj = PredictionRecord.objects.filter(user_id=user_id,
                                               varieties_id=varieties_id,
                                               date=date).first()
     if pre_obj:
         pre_obj.visit_number = pre_obj.visit_number + 1
         pre_obj.save()
     serializer = PredictionRecordSerializer(pre_obj)
     res = serializer.data
     logger.info('正常返回所有数据')
     return BackstageHTTPResponse(data=res,
                                  message=u'正常返回所有数据').to_response()
Esempio n. 18
0
 def get(self, request, *args, **kwargs):
     """
     公式可用方法列表
     ---
     parameters:
         - name: index
           description: 页数
           type: integer
           paramType: query
           required: false
         - name: number
           description: 每页条数
           type: integer
           paramType: query
           required: false
     """
     formula_functions = FormulaFunction.objects.all()
     paginator = Paginator(formula_functions,
                           request.GET.get('number', 100))
     page = paginator.page(request.GET.get('index', 1))
     serializer = FormulaFunctionSerializer(page, many=True)
     return BackstageHTTPResponse(
         code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
         data=serializer.data,
         pageinfo=page).to_response()
Esempio n. 19
0
    def get(self, request):
        u"""
        获取预警提示,主力合约,预警类别信息
        ---

        parameters:
            - name: alert_id
              description: 预警的id
              paramType: query
              required: true
            - name: index
              description: 分页显示第几页
              paramType: query
              required: false
            - name: number
              description: 每页显示几条数据
              paramType: query
              required: false

        """
        query_dict = request.query_params.dict().copy()
        alert_id = query_dict.get('alert_id', None)

        obj = DayKline.objects.filter(date_time, )

        return BackstageHTTPResponse(
            data=res,
            message=u'正常返回预警详细数据',
        ).to_response()
Esempio n. 20
0
 def get(self, request, *args, **kwargs):
     """
     数据表列表
     ---
     parameters:
         - name: index
           description: 页数
           type: integer
           paramType: query
           required: false
         - name: number
           description: 每页条数
           type: integer
           paramType: query
           required: false
         - name: name
           description: 名字
           type: string
           paramType: query
           required: false
         - name: type
           description: 类型
           type: integer
           paramType: query
           required: false
     """
     tables = Tables.objects.all()
     tables = TablesFilter(request.GET, queryset=tables).qs
     paginator = Paginator(tables, request.GET.get('number', 100))
     page = paginator.page(request.GET.get('index', 1))
     serializer = TableSerializer(page, many=True)
     return BackstageHTTPResponse(
         code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
         data=serializer.data,
         pageinfo=page).to_response()
Esempio n. 21
0
    def post(self, request):
        """
        新增一个标签
        ---
        parameters:
            - name: name
              description: 名称
              type: string
              paramType: form
              required: true
            - name: tag
              description: 标签
              type: string
              paramType: form
              required: true
            - name: type
              description: 类型
              type: string
              paramType: form
              required: true

        responseMessages:
            - code: 401
              message: Not authenticated
            - code: 403
              message: Insufficient rights to call this procedure
        """
        collection = self.db.tag_ware
        data = self.request_data(request)
        name = data['name']
        tag = data['tag']
        tag_type = data['type']
        if collection.find_one({'tag': tag}):
            logger.info('标签已存在')
            return BackstageHTTPResponse(message=u'标签已存在',
                                         data={}).to_response()
        else:
            total = '%s-%s-%s' % (name, tag, tag_type)
            document = {
                'tag': tag,
                'name': name,
                'type': tag_type,
                'total': total
            }
            collection.insert_one(document)
            return BackstageHTTPResponse(message=u'添加标签成功',
                                         data=document).to_response()
Esempio n. 22
0
    def post(self, request):
        u"""
        提交预测
        ---

        parameters:
            - name: date
              description: 时间
              paramType: form
              required: true
            - name: varieties_id
              description: 品类
              paramType: form
              required: true
            - name: prediction
              description: 预测涨跌(up:涨,down:跌,c:不变)
              paramType: form
              required: true
        """
        post_data = self.request_data(request)
        # user_id = request.user.id
        user_obj = User.objects.filter(username='******').first()
        user_id = user_obj.id
        date = post_data.get('date', None)
        varieties_id = post_data.get('varieties_id', None)
        prediction = post_data.get('prediction', None)
        p_objs = PredictionRecord.objects.filter(date=date, varieties_id=varieties_id, user_id=user_id).all()
        if p_objs:
            logger.info('已经预测')
            res = PredictionRecordSerializer(p_objs[0]).data
            # res.update(get_predict_number(date))
            return BackstageHTTPResponse(
                data=res,
                message=u'已经预测').to_response()
        else:
            quo_obj = QuotesRecords.objects.filter(varieties_id=varieties_id, date=date).first()
            quo_obj.ai_prediction = True
            quo_obj.save()
            obj = PredictionRecord(date=date, varieties_id=varieties_id, user_id=user_id, prediction=prediction)
            obj.save()
            res = PredictionRecordSerializer(obj).data
            logger.info('提交预测成功')
            # res.update(get_predict_number(date))
            return BackstageHTTPResponse(
                data=res,
                message=u'提交预测成功').to_response()
Esempio n. 23
0
    def get(self, request):
        u"""
        获取实时最新行情
        ---
        parameters:
            - name: varieties_id
              description: 品类id
              paramType: query
              required: True
        """
        today = datetime.datetime.today()
        date = str(today)[:10]
        query_dict = request.query_params.dict().copy()
        varieties_id = query_dict.get('varieties_id', None)
        if not varieties_id:
            return BackstageHTTPResponse(
                BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS,
                message=u'品类id必填').to_response()
        var_obj = AiVarieties.objects.get(pk=varieties_id)
        varieties = var_obj.varieties
        res = get_quotes(varieties, date)
        high = ref_ship(varieties, 'HIGH', limit=2, start=today, end=today)
        low = ref_ship(varieties, 'LOW', limit=2, start=today, end=today)
        open = ref_ship(varieties, 'OPEN', limit=2, start=today, end=today)
        opi = ref_ship(varieties, 'OPI', limit=2, start=today, end=today)
        vol = ref_ship(varieties, 'VOL', limit=2, start=today, end=today)
        dk_objs = DayKline.objects.filter(contract=varieties + '9999',
                                          date_time=date + ' 00:00:00').all()
        if dk_objs:
            obj = dk_objs[0]
            if obj.settlement_price:
                res['settlement_price'] = obj.settlement_price
                res['price'] = obj.price_close
            else:
                res['settlement_price'] = None
        res['varieties'] = varieties
        res['high'] = high and high[0] or None
        res['low'] = low and low[0] or None
        res['open'] = open and open[0] or None
        res['opi'] = opi and opi[0] or None
        res['vol'] = vol and vol[0] or None

        logger.info('正常返回品类对应关系')
        return BackstageHTTPResponse(data=res,
                                     message=u'正常返回品类对应关系').to_response()
Esempio n. 24
0
 def get(self, request, *args, **kwargs):
     """
     用户登出
     ---
     """
     logout(request)
     return BackstageHTTPResponse(
         code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
     ).to_response()
Esempio n. 25
0
    def delete(self, request):
        """
        通过主键批量删除咨询
        ---

        parameters:

            - name: id_lists
              description: 数据id列表,用逗号隔开
              type: string
              paramType: form
              required: true

        responseMessages:
            - code: 401
              message: Not authenticated
            - code: 403
              message: Insufficient rights to call this procedure
        """
        # post_data = self.request_data(request)
        post_data = request.data.copy()
        msg = u"NewsView:delete request.data is:%s" % str(post_data)
        logger.info(msg)
        id_list = post_data.get('id_lists', '')
        if not id_list:
            return BackstageHTTPResponse(
                BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS,
                message=u"数据_id列表为必填项").to_response()
        # col = self.db.news
        res = []
        for i in id_list.split(','):
            _id = get_mongo_id(i)
            key = self.col.find_one({'_id': _id})
            if key:
                # key['_id'] = str(key['_id'])
                self.col.find_one_and_delete({"_id": _id})
                res.append(key)
            else:
                logger.info('_id:%s, 对应的数据不存在' % _id)
        return BackstageHTTPResponse(
            BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=res,
            message=u'批量删除成功').to_response()
Esempio n. 26
0
    def post(self, request):
        u"""
        上传文件
        ---

        parameters:
            - name: up_file
              description: 用户名
              type: file
              paramType: form
              required: true
        :param request:
        :return:
        """
        post_data = self.request_data(request)
        up_f = post_data.get('up_file', None)
        # f_name = post_data.get('file_name', '')
        f_name = up_f.name
        logger.info(u'上传文件, 文件名:%s' % f_name)
        if not up_f:
            msg = u"文件不存在"
            logger.info(msg)
            return BackstageHTTPResponse(
                BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS,
                message=msg).to_response()
        if not f_name:
            msg = u"文件名为必填"
            logger.info(msg)
            return BackstageHTTPResponse(
                BackstageHTTPResponse.API_HTTP_CODE_INVILID_PARAMS,
                message=msg).to_response()
        new_name = str(uuid.uuid1())[:8] + f_name
        auth = oss2.Auth(settings.ALI_OSS_ACCESS_KEY_ID,
                         settings.ALI_OSS_ACCESS_KEY_SECRET)
        bucket = oss2.Bucket(auth, settings.ALI_OSS_ENDPOINT,
                             settings.ALI_OSS_BUCKET_NAME)
        res = bucket.put_object(new_name, up_f.read())
        logger.info(u'上传文件, 文件名:%s, 请求id: %s, 返回状态: %s' %
                    (new_name, res.request_id, res.status))
        url = ''.join([settings.FATHER_URL, new_name])
        return BackstageHTTPResponse(message=u'上传成功',
                                     data=dict(url=url)).to_response()
Esempio n. 27
0
    def delete(self, request, id, varieties_id):
        """
        删除公式和品目的对应关系
        ---
        parameters:
            - name: id
              description: 公式 id
              type: integer
              paramType: path
              required: true
            - name: varieties_id
              description: 品类 id
              type: integer
              paramType: path
              required: true
        """
        if not request.user.id:
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR
            ).to_response()

        formula = Formula.objects.filter(id=id).first()
        if not formula:
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND
            ).to_response()
        if not formula.user_id:
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_NO_PERMISSION,
                message='公有公式不允许删除').to_response()
        if formula.user_id != request.user.id:
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_NO_PERMISSION,
                message='该公式不属于您').to_response()

        formula_varieties = FormulaVarieties.objects.filter(
            formula_id=id, varieties_id=varieties_id).first()
        if formula_varieties:
            formula_varieties.delete()

        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL, ).to_response()
Esempio n. 28
0
    def get(self, request):
        """
        获取用户默认邀请码
        ---
        """
        if not request.user.id:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_LOGIN_ERR).to_response()

        ic = InvitationCode.objects.filter(user_id=request.user.id, default=True).first()
        if not ic:
            return BackstageHTTPResponse(
                code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND,
                message='用户没有默认邀请码'
            ).to_response()

        serializer = InvitationCodeSerializer(ic)
        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=serializer.data
        ).to_response()
Esempio n. 29
0
 def get(self, request, id):
     """
     品类详情
     ---
     parameters:
         - name: id
           description: 品类id
           type: string
           paramType: path
           required: true
     """
     varieties = VarietiesRecord.objects.filter(id=id).first()
     if not varieties:
         return BackstageHTTPResponse(
             code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND,
         ).to_response()
     serializer = VarietiesRecordSerializer(varieties)
     return BackstageHTTPResponse(
         code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
         data=serializer.data).to_response()
Esempio n. 30
0
    def get(self, request, code, *args, **kwargs):
        """
        邀请码信息
        ---
        parameters:
            - name: code
              description: 邀请码
              type: string
              paramType: path
              required: true
        """
        invitation_code = InvitationCode.objects.filter(code=code).first()
        if not invitation_code:
            return BackstageHTTPResponse(code=BackstageHTTPResponse.API_HTTP_CODE_NOT_FOUND).to_response()

        serializer = InvitationCodeWithUserSerializer(invitation_code)
        return BackstageHTTPResponse(
            code=BackstageHTTPResponse.API_HTTP_CODE_NORMAL,
            data=serializer.data
        ).to_response()