93 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			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(distinct 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(distinct 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']])) |