You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.5 KiB
100 lines
3.5 KiB
from django.shortcuts import render
|
|
from django.core.paginator import Paginator
|
|
from django.db.models import Sum, Count, Case, When, Value
|
|
from django.http import JsonResponse
|
|
from django.shortcuts import render
|
|
from django.views.decorators.clickjacking import xframe_options_exempt
|
|
from django.views.decorators.http import require_GET
|
|
from customer.models import Customer
|
|
from serve.models import CustomerServe
|
|
|
|
from customer.views import loss_index, select_loss_list
|
|
|
|
|
|
# Create your views here.
|
|
|
|
@xframe_options_exempt
|
|
@require_GET
|
|
def report_index(request, template):
|
|
"""统计报表子菜单首页"""
|
|
'''
|
|
contribute 客户贡献分析首页
|
|
composition 客户构成分析首页
|
|
serve 客户服务分析首页
|
|
loss 客户流失分析首页
|
|
'''
|
|
return render(request, 'report/%s.html' % template)
|
|
|
|
|
|
@require_GET
|
|
def select_contribute(request):
|
|
"""查询客户贡献"""
|
|
try:
|
|
|
|
# """
|
|
# SELECT c.id, c.name, sum(od.sum) sum FROM t_customer c
|
|
# LEFT JOIN t_customer_order co ON c.id = co.cus_id
|
|
# LEFT JOIN t_order_details od ON co.id = od.order_id
|
|
# WHERE c.is_valid = 1 AND c.id = 1 GROUP BY c.id, c.name;
|
|
# """
|
|
# 获取第几页
|
|
page_num = request.GET.get('page', 1) # 添加默认值,防止没有参数导致的异常错误
|
|
# 获取每页多少条
|
|
page_size = request.GET.get('limit', 10) # 添加默认值,防止没有参数导致的异常错误
|
|
customer_list = Customer.objects.values('id', 'name') \
|
|
.annotate(sum=Sum('customerorders__ordersdetail__sum')) \
|
|
.order_by('-sum')
|
|
# 按条件查询
|
|
# 客户名称
|
|
customerName = request.GET.get('customerName')
|
|
if customerName:
|
|
customer_list = customer_list.filter(name__icontains=customerName)
|
|
# 金额区间
|
|
type = request.GET.get('type')
|
|
if type == '1':
|
|
customer_list = customer_list.filter(sum__gte=0, sum__lte=1000)
|
|
elif type == '2':
|
|
customer_list = customer_list.filter(sum__gt=1000, sum__lte=3000)
|
|
elif type == '3':
|
|
customer_list = customer_list.filter(sum__gt=3000, sum__lte=5000)
|
|
elif type == '4':
|
|
customer_list = customer_list.filter(sum__gt=5000)
|
|
# 初始化分页对象
|
|
p = Paginator(customer_list, page_size)
|
|
# 获取指定页数的数据
|
|
data = p.page(page_num).object_list
|
|
# 返回总条数
|
|
count = p.count
|
|
# 返回数据,按照 layuimini 要求格式构建
|
|
context = {
|
|
'code': 0,
|
|
'msg': '查询成功',
|
|
'count': count,
|
|
'data': list(data)
|
|
}
|
|
return JsonResponse(context)
|
|
except Exception as e:
|
|
pass
|
|
|
|
|
|
@require_GET
|
|
def select_composition(request):
|
|
"""查询客户构成数据"""
|
|
level = Customer.objects.values('level') \
|
|
.annotate(amount=Count('level')).order_by('level')
|
|
return JsonResponse(list(level), safe=False)
|
|
|
|
|
|
@require_GET
|
|
def select_serve(request):
|
|
"""查询客户服务类型数据"""
|
|
serve = CustomerServe.objects.values('serveType') \
|
|
.annotate(type=Case(When(serveType=6, then=Value("咨询")),
|
|
When(serveType=7, then=Value("建议")),
|
|
When(serveType=8, then=Value("投诉"))), amount=Count('serveType')) \
|
|
.order_by('serveType')
|
|
return JsonResponse(list(serve), safe=False)
|
|
|
|
|
|
|