Exemplo n.º 1
0
    async def _get_items(self):
        index_s = (self.__current_page - 1) * self.__items_per_page

        if self.__use_pipeline:
            pipelines = []
            if self.__query_params:
                pipelines.append(MatchStage(self.__query_params))
            if self.__stages:
                pipelines.extend(self.__stages)
            if self.__sort:
                sort_stage = SortStage(self.__sort)
                pipelines.append(sort_stage)

            skip_stage = SkipStage(index_s if index_s >= 0 else 0)
            pipelines.append(skip_stage)
            limit_stage = LimitStage(self.__items_per_page)
            pipelines.append(limit_stage)

            if self.__left_stages:
                pipelines.extend(self.__left_stages)

            return await self.__document.aggregate(pipelines).to_list(self.__items_per_page)
        else:
            return await self.__document.find(self.__query_params).skip(index_s).limit(self.__items_per_page).sort(
                self.__sort).to_list(self.__items_per_page)
Exemplo n.º 2
0
    async def post(self):
        res = {'code': 1}

        pageNum = int(self.get_argument('pageNum', 1))
        size = int(self.get_argument('size', 10))
        skip = (pageNum - 1) * size if (pageNum - 1) * size > 0 else 0
        filter_dict = {'member_cid': self.current_user.cid, 'record_flag': 1}

        match = MatchStage(filter_dict)
        lookup = LookupStage(Present,
                             local_field='present_cid',
                             foreign_field='cid',
                             as_list_name='present')
        skip = SkipStage(skip)
        sort = SortStage([('updated_dt', DESC)])
        limit = LimitStage(int(size))

        coupon_list = await DiscountCoupon.aggregate(
            [match, lookup, skip, sort, limit]).to_list(None)
        if coupon_list:
            html = self.render_string('wechat/integral/coupon_data_list.html',
                                      coupon_list=coupon_list)
        else:
            html = ''

        res['html'] = html
        res['current_length'] = len(coupon_list)
        res['totalSize'] = await DiscountCoupon.count(filter_dict)

        return res
Exemplo n.º 3
0
    async def post(self):
        r_dict = {'code': 0}
        try:
            pageNum = int(self.get_i_argument('pageNum', 1))
            size = int(self.get_i_argument('size', 10))
            skip = (pageNum - 1) * size if (pageNum - 1) * size > 0 else 0
            filter_dict = {'db_mark': {'$ne': ''}, 'release_time': {'$ne': ''}}

            match = MatchStage(filter_dict)
            skip = SkipStage(skip)
            sort = SortStage([('release_time', DESC)])
            limit = LimitStage(int(size))
            count = await Tvs.count({
                'db_mark': {
                    '$ne': ''
                },
                'release_time': {
                    '$ne': ''
                }
            })
            tvs = await Tvs.aggregate([match, sort, skip, limit]).to_list(None)
            new_tvs = []
            for tv in tvs:
                new_tvs.append({
                    'id':
                    str(tv.id),
                    'name':
                    tv.name,
                    'pic_url':
                    tv.pic_url,
                    'db_mark':
                    tv.db_mark,
                    'actor':
                    tv.actor,
                    'source_nums':
                    len(tv.download),
                    'release_time':
                    tv.release_time.strftime('%Y-%m-%d'),
                    'label':
                    api_utils.get_show_source_label(tv),
                    'recommend_info':
                    '这部神剧值得一看。',
                    'set_num':
                    tv.set_num if tv.set_num else '',
                    's_type':
                    'tv'
                })
            r_dict['tvs'] = new_tvs
            r_dict['count'] = count
            r_dict['code'] = 1000
        except Exception:
            logger.error(traceback.format_exc())
        print('latest')
        print(r_dict)
        return r_dict
Exemplo n.º 4
0
 async def post(self):
     r_dict = {'code': 0}
     try:
         search_name = self.get_i_argument('search_name', None)
         member_cid = self.get_i_argument('member_cid', None)
         if not member_cid:
             r_dict['code'] = 1001  # member_cid为空
             return r_dict
         if not search_name:
             r_dict['code'] = 1002  # 检索名称为空
             return r_dict
         pageNum = int(self.get_i_argument('pageNum', 1))
         size = int(self.get_i_argument('size', 20))
         skip = (pageNum - 1) * size if (pageNum - 1) * size > 0 else 0
         filter_dict = {
             'db_mark': {
                 '$ne': ''
             },
             'release_time': {
                 '$ne': ''
             },
             'status': 1,
             'name': {
                 '$regex': '^%s' % search_name
             }
         }
         match = MatchStage(filter_dict)
         skip = SkipStage(skip)
         sort = SortStage([('db_mark', DESC)])
         limit = LimitStage(int(size))
         films = await Films.aggregate([match, sort, skip,
                                        limit]).to_list(None)
         sources = []
         for film in films:
             sources.append(film.name)
         tvs = await Tvs.aggregate([match, sort, skip, limit]).to_list(None)
         for tv in tvs:
             sources.append(tv.name)
         r_dict['names'] = sources[:20]
         r_dict['code'] = 1000
     except Exception:
         logger.error(traceback.format_exc())
     return r_dict
Exemplo n.º 5
0
async def _get_survey_url(open_id, survey_action_cid):
    if open_id and survey_action_cid:
        current_datetime = datetime.datetime.now()
        match = MatchStage({
            '$and': [{
                'cid': survey_action_cid
            }, {
                'push_datetime': {
                    '$lte': current_datetime
                }
            }, {
                'pull_types': {
                    '$in': [PUSH_RECEIVE_WECHAT]
                }
            }, {
                '$or': [{
                    'start_datetime': None
                }, {
                    'start_datetime': {
                        '$lte': current_datetime
                    }
                }]
            }, {
                '$or': [{
                    'end_datetime': None
                }, {
                    'end_datetime': {
                        '$gte': current_datetime
                    }
                }]
            }]
        })
        lookup = LookupStage(Questionnaire, 'q_cid', 'cid', 'q_docs')
        sort = SortStage([('push_datetime', DESC)])
        limit = LimitStage(1)
        survey_action_list = await SurveyPushAction.aggregate(
            [match, lookup, sort, limit]).to_list(1)
        if survey_action_list:
            survey_action = survey_action_list[0]
            if survey_action:
                q_doc_list = survey_action.q_docs
                if q_doc_list:
                    questionnaire = q_doc_list[0]
                    if questionnaire:
                        member = await Member.find_one(
                            dict(open_id=open_id, status=STATUS_USER_ACTIVE))
                        if member:
                            history_status_list = [
                                STATUS_MEMBER_SURVEY_NORMAL,
                                STATUS_MEMBER_SURVEY_FILTERED,
                                STATUS_MEMBER_SURVEY_QUOTA_FULLED
                            ]
                            history_count = await MemberSurveyHistory.count({
                                'member_cid':
                                member.cid,
                                'action_cid':
                                survey_action_cid,
                                'status': {
                                    '$in': history_status_list
                                }
                            })
                            if history_count > 0:
                                return '/wechat/operation/message/?message=%s' % '抱歉,您已经参与过本次调查,您可以点击服务号"我是车主>>最新问卷"参与其他活动。'
                            else:
                                survey_history = await MemberSurveyHistory.get_or_create(
                                    dict(member_cid=member.cid,
                                         action_cid=survey_action.cid))
                                survey_history.start_datetime = datetime.datetime.now(
                                )
                                survey_history.status = STATUS_MEMBER_SURVEY_STARTED
                                survey_history.needless = {
                                    'sa_title':
                                    survey_action.title,
                                    'sa_cover':
                                    survey_action.needless.get('cover_title')
                                    if survey_action.needless else None,
                                    'q_cid':
                                    questionnaire.get('cid'),
                                    'q_title':
                                    questionnaire.get('title')
                                }
                                await survey_history.save()
                                return questionnaire.get(
                                    'url') + '?code=%s&sid=%s' % (
                                        member.code, survey_action_cid)
                return '/wechat/operation/message/?message=%s' % '错误!'
        return '/wechat/operation/message/?message=%s' % '亲,活动已结束啦,欢迎下次再来!'
Exemplo n.º 6
0
    async def post(self):
        r_dict = {'code': 0}
        try:
            search_name = self.get_i_argument('search_name', None)
            member_cid = self.get_i_argument('member_cid', None)
            s_type = self.get_i_argument('s_type', None)
            if not member_cid:
                r_dict['code'] = 1001  # member_cid为空
                return r_dict
            if not search_name:
                r_dict['code'] = 1002  # 检索名称为空
                return r_dict
            if not s_type:
                r_dict['code'] = 1003  # 资源类型为空
                return r_dict
            pageNum = int(self.get_i_argument('pageNum', 1))
            size = int(self.get_i_argument('size', 10))
            skip = (pageNum - 1) * size if (pageNum - 1) * size > 0 else 0
            filter_dict = {
                'db_mark': {
                    '$ne': ''
                },
                'release_time': {
                    '$ne': ''
                },
                'status':
                1,
                '$or': [
                    {
                        'name': {
                            '$regex': search_name
                        }
                    },
                    {
                        'actor': {
                            '$regex': search_name
                        }
                    },
                    {
                        'director': {
                            '$regex': search_name
                        }
                    },
                    {
                        'label': {
                            '$regex': search_name
                        }
                    },
                ]
            }
            match = MatchStage(filter_dict)
            skip = SkipStage(skip)
            sort = SortStage([('db_mark', DESC)])
            limit = LimitStage(int(size))
            if s_type == 'film':
                films = await Films.aggregate([match, sort, skip,
                                               limit]).to_list(None)
                new_films = []
                for film in films:
                    new_films.append({
                        'id':
                        str(film.id),
                        'name':
                        film.name,
                        'pic_url':
                        film.pic_url,
                        'stage_photo':
                        [k['img_url'] for k in film.stage_photo][0:4]
                        if film.stage_photo else [],
                        's_type':
                        'film',
                        'label':
                        api_utils.get_show_source_label(film),
                        'articulation':
                        api_utils.get_show_source_articulation(film),
                        'db_mark':
                        film.db_mark,
                        'actor':
                        film.actor,
                        'source_nums':
                        len(film.download),
                        'release_time':
                        film.release_time.strftime('%Y-%m-%d'),
                        'recommend_info':
                        film.recommend_info
                        if film.recommend_info else '这部神片值得一看。'
                    })
                r_dict['sources'] = new_films
            elif s_type == 'tv':
                tvs = await Tvs.aggregate([match, sort, skip,
                                           limit]).to_list(None)
                new_tvs = []
                for tv in tvs:
                    new_tvs.append({
                        'id':
                        str(tv.id),
                        'name':
                        tv.name,
                        'pic_url':
                        tv.pic_url,
                        'stage_photo': [k['img_url'] for k in tv.stage_photo
                                        ][0:4] if tv.stage_photo else [],
                        's_type':
                        'tv',
                        'label':
                        api_utils.get_show_source_label(tv),
                        'articulation':
                        api_utils.get_show_source_articulation(tv),
                        'db_mark':
                        tv.db_mark,
                        'actor':
                        tv.actor,
                        'source_nums':
                        len(tv.download),
                        'release_time':
                        tv.release_time.strftime('%Y-%m-%d'),
                        'recommend_info':
                        '这部神剧值得一看。'
                    })
                r_dict['sources'] = new_tvs

            r_dict['code'] = 1000
        except Exception:
            logger.error(traceback.format_exc())
        return r_dict
Exemplo n.º 7
0
 async def post(self):
     r_dict = {'code': 0}
     try:
         member_cid = self.get_i_argument('member_cid', None)
         pageNum = int(self.get_i_argument('pageNum', 1))
         size = int(self.get_i_argument('size', 10))
         skip = (pageNum - 1) * size if (pageNum - 1) * size > 0 else 0
         if member_cid:
             member = await find_app_member_by_cid(member_cid)
             if not member:
                 r_dict['code'] = 1002  # 没有匹配到用户
             else:
                 if not member.is_register:
                     r_dict['code'] = 1003  # 用户未登陆不展示收藏列表
                     return r_dict
                 filter_dict = {
                     'member_cid': member_cid,
                     'status': COLLECTION_STATUS_ACTIVE
                 }
                 match = MatchStage(filter_dict)
                 skip = SkipStage(skip)
                 sort = SortStage([('updated_dt', DESC)])
                 limit = LimitStage(int(size))
                 my_collect_list = await MyCollection.aggregate(
                     [match, sort, skip, limit]).to_list(None)
                 show_my_list = []
                 for my_collect in my_collect_list:
                     if my_collect.s_type == 'film':
                         film = await Films.find_one(
                             {'_id': ObjectId(my_collect.source_id)})
                         show_my_list.append({
                             'id':
                             str(film.id),
                             'name':
                             film.name,
                             'pic_url':
                             film.pic_url,
                             's_type':
                             'film',
                             'db_mark':
                             film.db_mark,
                             'actor':
                             film.actor,
                             'source_nums':
                             len(film.download),
                             'release_time':
                             film.release_time.strftime('%Y-%m-%d'),
                             'recommend_info':
                             film.recommend_info
                             if film.recommend_info else '这部神片值得一看。',
                             'label':
                             api_utils.get_show_source_label(film)
                         })
                     elif my_collect.s_type == 'tv':
                         tv = await Tvs.find_one(
                             {'_id': ObjectId(my_collect.source_id)})
                         show_my_list.append({
                             'id':
                             str(tv.id),
                             'name':
                             tv.name,
                             'pic_url':
                             tv.pic_url,
                             's_type':
                             'tv',
                             'db_mark':
                             tv.db_mark,
                             'actor':
                             tv.actor,
                             'source_nums':
                             len(tv.download),
                             'release_time':
                             tv.release_time.strftime('%Y-%m-%d'),
                             'recommend_info':
                             tv.recommend_info
                             if tv.recommend_info else '这部神剧值得一看。',
                             'label':
                             api_utils.get_show_source_label(tv),
                             'set_num':
                             tv.set_num if tv.set_num else ''
                         })
                 r_dict['my_collect_list'] = show_my_list
                 r_dict['code'] = 1000
         else:
             r_dict['code'] = 1001  # member_cid为空
     except Exception:
         logger.error(traceback.format_exc())
     print(r_dict)
     return r_dict
Exemplo n.º 8
0
 async def post(self):
     r_dict = {'code': 0}
     try:
         search_name = self.get_i_argument('search_name', None)
         member_cid = self.get_i_argument('member_cid', None)
         if not member_cid:
             r_dict['code'] = 1001  # member_cid为空
             return r_dict
         if not search_name:
             r_dict['code'] = 1002  # 检索名称为空
             return r_dict
         pageNum = int(self.get_i_argument('pageNum', 1))
         size = int(self.get_i_argument('size', 10))
         skip = (pageNum - 1) * size if (pageNum - 1) * size > 0 else 0
         filter_dict = {
             'db_mark': {
                 '$ne': ''
             },
             'release_time': {
                 '$ne': ''
             },
             'status':
             1,
             '$or': [
                 {
                     'name': {
                         '$regex': search_name
                     }
                 },
                 {
                     'actor': {
                         '$regex': search_name
                     }
                 },
                 {
                     'director': {
                         '$regex': search_name
                     }
                 },
                 {
                     'label': {
                         '$regex': search_name
                     }
                 },
             ]
         }
         match = MatchStage(filter_dict)
         skip = SkipStage(skip)
         sort = SortStage([('db_mark', DESC)])
         limit = LimitStage(int(size))
         films_count = await Films.count(filter_dict)
         films = await Films.aggregate([match, sort, skip,
                                        limit]).to_list(None)
         new_films = []
         for film in films:
             new_films.append({
                 'id':
                 str(film.id),
                 'name':
                 film.name,
                 'pic_url':
                 film.pic_url,
                 's_type':
                 'film',
                 'stage_photo': [k['img_url'] for k in film.stage_photo
                                 ][0:4] if film.stage_photo else []
             })
         r_dict['films'] = new_films
         r_dict['films_count'] = films_count
         tvs_count = await Tvs.count(filter_dict)
         tvs = await Tvs.aggregate([match, sort, skip, limit]).to_list(None)
         new_tvs = []
         for tv in tvs:
             new_tvs.append({
                 'id':
                 str(tv.id),
                 'name':
                 tv.name,
                 'pic_url':
                 tv.pic_url,
                 's_type':
                 'tv',
                 'stage_photo':
                 [k['img_url']
                  for k in tv.stage_photo][0:4] if tv.stage_photo else []
             })
         r_dict['tvs'] = new_tvs
         r_dict['tvs_count'] = tvs_count
         r_dict['code'] = 1000
     except Exception:
         logger.error(traceback.format_exc())
     return r_dict
Exemplo n.º 9
0
    async def post(self):
        r_dict = {'code': 0}
        try:

            pageNum = int(self.get_i_argument('pageNum', 1))
            size = int(self.get_i_argument('size', 10))
            search_type = self.get_i_argument('search_type', 'all')
            skip = (pageNum - 1) * size if (pageNum - 1) * size > 0 else 0
            filter_dict = {'db_mark': {'$ne': ''}, 'release_time': {'$ne': ''}}
            dif_time = 0
            if search_type == 'week':
                dif_time = 7
            elif search_type == 'month':
                dif_time = 30
            elif search_type == 'year':
                dif_time = 365
            if dif_time:
                show_time = datetime.datetime.now().replace(
                    hour=0, minute=0, second=0,
                    microsecond=0) - datetime.timedelta(days=dif_time)
                filter_dict = {
                    'db_mark': {
                        '$ne': ''
                    },
                    'release_time': {
                        '$ne': '',
                        '$gte': show_time
                    }
                }

            match = MatchStage(filter_dict)
            skip = SkipStage(skip)
            sort = SortStage([('db_mark', DESC)])
            limit = LimitStage(int(size))
            count = await Films.count({
                'db_mark': {
                    '$ne': ''
                },
                'release_time': {
                    '$ne': ''
                }
            })
            films = await Films.aggregate([match, sort, skip,
                                           limit]).to_list(None)
            new_films = []
            for film in films:
                # if len(film.label) > 0:
                #     label = film.label[0:3]
                # else:
                #     label = []
                new_films.append({
                    'id':
                    str(film.id),
                    'name':
                    film.name,
                    'pic_url':
                    film.pic_url,
                    'db_mark':
                    film.db_mark,
                    'actor':
                    film.actor,
                    'source_nums':
                    len(film.download),
                    'release_time':
                    film.release_time.strftime('%Y-%m-%d'),
                    # 'recommend_info': '这部神片值得一看。',
                    'recommend_info':
                    film.recommend_info
                    if film.recommend_info else '这部神片值得一看。',
                    # 'label': label
                    'label':
                    api_utils.get_show_source_label(film),
                    's_type':
                    'film'
                })
            r_dict['films'] = new_films
            r_dict['count'] = count
            r_dict['code'] = 1000
        except Exception:
            logger.error(traceback.format_exc())
        print('score')
        print(r_dict)
        return r_dict
Exemplo n.º 10
0
    async def post(self):
        r_dict = {'code': 0}
        try:
            pageNum = int(self.get_i_argument('pageNum', 1))
            size = int(self.get_i_argument('size', 10))
            skip = (pageNum - 1) * size if (pageNum - 1) * size > 0 else 0
            filter_dict = {'db_mark': {'$ne': ''}, 'release_time': {'$ne': ''}}

            match = MatchStage(filter_dict)
            skip = SkipStage(skip)
            sort = SortStage([('release_time', DESC)])
            limit = LimitStage(int(size))
            count = await Films.count({
                'db_mark': {
                    '$ne': ''
                },
                'release_time': {
                    '$ne': ''
                }
            })
            films = await Films.aggregate([match, sort, skip,
                                           limit]).to_list(None)
            new_films = []
            for film in films:
                # if len(film.label) > 0:
                #     label = film.label[0:3]
                # else:
                #     label = []
                new_films.append({
                    'id':
                    str(film.id),
                    'name':
                    film.name,
                    'pic_url':
                    film.pic_url,
                    'db_mark':
                    film.db_mark,
                    'actor':
                    film.actor,
                    'source_nums':
                    len(film.download),
                    'release_time':
                    film.release_time.strftime('%Y-%m-%d'),
                    # 'recommend_info': '这部神片值得一看。',
                    'recommend_info':
                    film.recommend_info
                    if film.recommend_info else '这部神片值得一看。',
                    # 'label': label
                    'label':
                    api_utils.get_show_source_label(film),
                    's_type':
                    'film'
                })
            r_dict['films'] = new_films
            r_dict['count'] = count
            r_dict['code'] = 1000
        except Exception:
            logger.error(traceback.format_exc())
        print('latest')
        print(r_dict)
        return r_dict