cma_search/server/apps/vod/views2.py

93 lines
3.5 KiB
Python

from rest_framework.viewsets import GenericViewSet
from apps.vod.serializers import DatetimeSerializer
from rest_framework.decorators import action
from rest_framework.response import Response
from utils.sql import query_all_dict
class AnalyseViewSet(GenericViewSet):
perms_map = {'post': '*'}
serializer_class = DatetimeSerializer
def is_valid(self, request):
data = request.data
sr = self.get_serializer(data=data)
sr.is_valid(raise_exception=True)
vdata = sr.validated_data
return vdata
@action(methods=['post'], detail=False)
def group_by_video_category_big(self, request):
"""
视频大类播放量统计
视频大类播放量统计
"""
vdata = self.is_valid(request)
sql_str = """select
d.name as "视频大类",
count(v.id) as "视频数量",
count(vi.id) as "观看总次数",
count(distinct vi.create_by_id) as "观看总人数"
from vod_video v
left join system_dict d on d.id = v.category_big_id
left join vod_viewitem vi on vi.video_id = v.id
and vi.create_time >= %s
and vi.create_time <= %s
group by d.id
order by "视频数量" desc, d.sort
limit %s
"""
return Response(query_all_dict(sql_str, [vdata['start_time'], vdata['end_time'], vdata['limit']]))
@action(methods=['post'], detail=False)
def group_by_user_view(self, request):
"""
个人观看量统计
个人观看量统计
"""
vdata = self.is_valid(request)
sql_str = """select
u.name as "姓名",
u.username as "账号",
count(v2.is_completed is true) as "观看完成视频总数",
count(distinct vi.video_id) as "观看视频总数",
count(vi.id) as "观看总次数" ,
sum(vi.total_seconds/60) as "观看总时间"
from vod_viewitem vi
left join vod_video v on v.id = vi.video_id
left join system_user u on u.id = vi.create_by_id
left join vod_view2 v2 on v2.create_by_id = vi.create_by_id and v2.video_id = vi.video_id
where vi.create_time >= %s and vi.create_time <= %s
group by u.id
order by "观看完成视频总数" desc, "观看总时间" desc
limit %s
"""
return Response(query_all_dict(sql_str, [vdata['start_time'], vdata['end_time'], vdata['limit']]))
@action(methods=['post'], detail=False)
def group_by_org_view(self, request):
"""
单位观看量统计
单位观看量统计
"""
vdata = self.is_valid(request)
sql_str = """select
o.name as "单位名称",
count(v2.is_completed is true) as "观看完成视频总数",
count(distinct vi.video_id) as "观看视频总数",
count(vi.id) as "观看总次数" ,
sum(vi.total_seconds/60) as "观看总时间"
from vod_viewitem vi
left join vod_video v on v.id = vi.video_id
left join system_user u on u.id = vi.create_by_id
left join system_organization o on o.id = u.dept_id
left join vod_view2 v2 on v2.create_by_id = vi.create_by_id and v2.video_id = vi.video_id
where vi.create_time >= %s and vi.create_time <= %s
group by o.id
order by "观看完成视频总数" desc, "观看总时间" desc
limit %s
"""
return Response(query_all_dict(sql_str, [vdata['start_time'], vdata['end_time'], vdata['limit']]))