|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
|
|
|
from django.core.paginator import Paginator
|
|
|
|
|
from django.db import connection
|
|
|
|
|
from django.http import JsonResponse
|
|
|
|
|
from django.shortcuts import render
|
|
|
|
|
from django.views.decorators.clickjacking import xframe_options_exempt
|
|
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
|
from django.views.decorators.http import require_GET
|
|
|
|
|
|
|
|
|
|
from customer.models import Customer, CustomerOrders, OrdersDetail, CustomerLoss, CustomerReprieve
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Create your views here.
|
|
|
|
|
@xframe_options_exempt
|
|
|
|
|
def customer_index(request):
|
|
|
|
|
return render(request, 'customer/customer.html')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@require_GET
|
|
|
|
|
def select_customer_list(request):
|
|
|
|
|
try:
|
|
|
|
|
page_num = request.GET.get('page') # 页号
|
|
|
|
|
page_size = request.GET.get('limit') # 页容量
|
|
|
|
|
|
|
|
|
|
users = Customer.objects.filter(isValid=1).values()
|
|
|
|
|
paginator = Paginator(users, page_size)
|
|
|
|
|
count = paginator.count
|
|
|
|
|
users_list = paginator.page(page_num).object_list
|
|
|
|
|
|
|
|
|
|
user_response = {
|
|
|
|
|
'code': 0,
|
|
|
|
|
'msg': '',
|
|
|
|
|
'count': count,
|
|
|
|
|
'data': list(users_list)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return JsonResponse(user_response)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
return JsonResponse({'code': 400, 'msg': "error"})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
@xframe_options_exempt
|
|
|
|
|
def create_or_update_customer_page(request):
|
|
|
|
|
# 获取需要编辑客户的id并发送,修改客户信息时需要使用
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 如果查询不到 id 就是添加客户操作,反之就是修改操作
|
|
|
|
|
if id is not None and id != '':
|
|
|
|
|
customer = Customer.objects.values().filter(id=id) # 根据id查找数据库客户信息
|
|
|
|
|
return render(request, 'customer/customer_add_update.html', customer[0]) # 修改操作,需要发送id,便于修改时定位客户
|
|
|
|
|
else:
|
|
|
|
|
return render(request, 'customer/customer_add_update.html') # 新建操作,无需id
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_or_update_customer(request):
|
|
|
|
|
try: # 接收参数
|
|
|
|
|
name = request.GET.get('name')
|
|
|
|
|
area = request.GET.get('area')
|
|
|
|
|
cusManager = request.GET.get('cusManager')
|
|
|
|
|
level = request.GET.get('level')
|
|
|
|
|
xyd = request.GET.get('xyd')
|
|
|
|
|
postCode = request.GET.get('postCode')
|
|
|
|
|
phone = request.GET.get('phone')
|
|
|
|
|
fax = request.GET.get('fax')
|
|
|
|
|
website = request.GET.get('website')
|
|
|
|
|
address = request.GET.get('address')
|
|
|
|
|
fr = request.GET.get('fr')
|
|
|
|
|
zczj = request.GET.get('zczj')
|
|
|
|
|
nyye = request.GET.get('nyye')
|
|
|
|
|
khyh = request.GET.get('khyh')
|
|
|
|
|
khzh = request.GET.get('khzh')
|
|
|
|
|
dsdjh = request.GET.get('dsdjh')
|
|
|
|
|
gsdjh = request.GET.get('gsdjh')
|
|
|
|
|
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
c = None
|
|
|
|
|
|
|
|
|
|
# 如果id为空 说明无此用户,故为新建客户操作
|
|
|
|
|
if not id:
|
|
|
|
|
# KH + 时间
|
|
|
|
|
khno = 'KH' + datetime.now().strftime('%Y%m%d%H%M%S')
|
|
|
|
|
# 添加数据
|
|
|
|
|
Customer.objects.create(khno=khno, name=name, area=area,
|
|
|
|
|
cusManager=cusManager, level=level,
|
|
|
|
|
xyd=xyd, postCode=postCode, phone=phone,
|
|
|
|
|
fax=fax, website=website,
|
|
|
|
|
address=address, fr=fr, zczj=zczj, nyye=nyye,
|
|
|
|
|
khyh=khyh,
|
|
|
|
|
khzh=khzh, dsdjh=dsdjh, gsdjh=gsdjh)
|
|
|
|
|
# 如果id有值 说明已经有此用户,故对其进行修改操作
|
|
|
|
|
else:
|
|
|
|
|
# 修改数据
|
|
|
|
|
Customer.objects.filter(id=id).update(name=name, area=area,
|
|
|
|
|
cusManager=cusManager, level=level,
|
|
|
|
|
xyd=xyd, postCode=postCode,
|
|
|
|
|
phone=phone, fax=fax,
|
|
|
|
|
website=website,
|
|
|
|
|
address=address, fr=fr,
|
|
|
|
|
zczj=zczj, nyye=nyye, khyh=khyh,
|
|
|
|
|
khzh=khzh, dsdjh=dsdjh,
|
|
|
|
|
gsdjh=gsdjh,
|
|
|
|
|
updateDate=datetime.now())
|
|
|
|
|
# 返回提示信息
|
|
|
|
|
return JsonResponse({'code': 200, 'msg': '保存成功'})
|
|
|
|
|
|
|
|
|
|
except Exception as es:
|
|
|
|
|
return JsonResponse({'code': 400, 'msg': '保存失败'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def delete_customer(request):
|
|
|
|
|
"""根据主键删除客户信息"""
|
|
|
|
|
try:
|
|
|
|
|
# 接收参数
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 逻辑删除
|
|
|
|
|
# Customer.objects.filter(pk=id).update(isValid=0, updateDate=datetime.now())
|
|
|
|
|
Customer.objects.get(pk=id).delete()
|
|
|
|
|
return JsonResponse({'code': 200, 'msg': '删除成功'})
|
|
|
|
|
except Exception as e:
|
|
|
|
|
return JsonResponse({'code': 400, 'msg': '删除失败'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@xframe_options_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def order_index(request):
|
|
|
|
|
"""跳转订单查看页面"""
|
|
|
|
|
# 接收参数
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 查询客户信息
|
|
|
|
|
customer = Customer.objects.get(pk=id)
|
|
|
|
|
context = {
|
|
|
|
|
'id': id,
|
|
|
|
|
'khno': customer.khno,
|
|
|
|
|
'name': customer.name,
|
|
|
|
|
'fr': customer.fr,
|
|
|
|
|
'address': customer.address,
|
|
|
|
|
'phone': customer.phone
|
|
|
|
|
}
|
|
|
|
|
return render(request, 'customer/customer_order.html', context)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@xframe_options_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def select_orderlist_by_customerid(request):
|
|
|
|
|
"""根据客户主键查询订单"""
|
|
|
|
|
try:
|
|
|
|
|
# 获取第几页
|
|
|
|
|
page_num = request.GET.get('page')
|
|
|
|
|
# 获取每页多少条
|
|
|
|
|
page_size = request.GET.get('limit')
|
|
|
|
|
# 获取客户主键
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 查询订单列表
|
|
|
|
|
order_list = CustomerOrders.objects.values().filter(customer=id)
|
|
|
|
|
# 初始化分页对象
|
|
|
|
|
p = Paginator(order_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:
|
|
|
|
|
return JsonResponse({'code': 400, 'msg': 'error'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@xframe_options_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def order_detail_index(request):
|
|
|
|
|
"""跳转订单详情页面"""
|
|
|
|
|
# 接收参数
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 查询订单信息
|
|
|
|
|
o = CustomerOrders.objects.get(pk=id)
|
|
|
|
|
context = {
|
|
|
|
|
'id': id,
|
|
|
|
|
'orderNo': o.orderNo,
|
|
|
|
|
'totalPrice': o.totalPrice,
|
|
|
|
|
'address': o.address,
|
|
|
|
|
'state': o.get_state_display()
|
|
|
|
|
}
|
|
|
|
|
return render(request, 'customer/customer_order_detail.html', context)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@require_GET
|
|
|
|
|
def select_orderdetail_by_orderid(request):
|
|
|
|
|
"""根据订单主题查询订单详情"""
|
|
|
|
|
try:
|
|
|
|
|
# 获取第几页
|
|
|
|
|
page_num = request.GET.get('page')
|
|
|
|
|
# 获取每页多少条
|
|
|
|
|
page_size = request.GET.get('limit')
|
|
|
|
|
# 获取订单主键
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 查询订单详情
|
|
|
|
|
orderdetail_list = OrdersDetail.objects.values().filter(order=id)
|
|
|
|
|
# 初始化分页对象
|
|
|
|
|
p = Paginator(orderdetail_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:
|
|
|
|
|
return JsonResponse({'code': 400, 'msg': 'error'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# def create_customer_loss():
|
|
|
|
|
# """添加暂缓流失客户"""
|
|
|
|
|
# try:
|
|
|
|
|
# # 创建游标对象
|
|
|
|
|
# cursor = connection.cursor()
|
|
|
|
|
# # 编写 SQL
|
|
|
|
|
# sql = '''
|
|
|
|
|
# SELECT
|
|
|
|
|
# c.id id,
|
|
|
|
|
# c.khno cusNo,
|
|
|
|
|
# c.NAME cusName,c.cus_manager cusManager,
|
|
|
|
|
# max( co.order_date ) lastOrderTime
|
|
|
|
|
# FROM
|
|
|
|
|
# t_customer c
|
|
|
|
|
# LEFT JOIN t_customer_order co ON c.id = co.cus_id
|
|
|
|
|
# WHERE
|
|
|
|
|
# c.is_valid = 1
|
|
|
|
|
# AND c.state = 0
|
|
|
|
|
# AND NOW() > DATE_ADD( c.create_date, INTERVAL 6 MONTH )
|
|
|
|
|
# AND NOT EXISTS (
|
|
|
|
|
# SELECT DISTINCT
|
|
|
|
|
# o.cus_id
|
|
|
|
|
# FROM
|
|
|
|
|
# t_customer_order o
|
|
|
|
|
# WHERE
|
|
|
|
|
# o.is_valid = 1
|
|
|
|
|
# AND NOW() < DATE_ADD( o.order_date, INTERVAL 6 MONTH )
|
|
|
|
|
# AND c.id = o.cus_id
|
|
|
|
|
# )
|
|
|
|
|
# GROUP BY
|
|
|
|
|
# c.id;
|
|
|
|
|
# '''
|
|
|
|
|
# # 执行sql
|
|
|
|
|
# cursor.execute(sql)
|
|
|
|
|
# # 返回多条结果行
|
|
|
|
|
# customer_loss_tuple = cursor.fetchall() # 查询当前sql执行后所有的记录,返回元组
|
|
|
|
|
# # 关闭游标
|
|
|
|
|
# cursor.close()
|
|
|
|
|
# # 将元组转为列表
|
|
|
|
|
# customer_loss_id = [] # 暂缓流失客户 id 列表
|
|
|
|
|
# customer_loss_list = [] # 暂缓流失客户列表
|
|
|
|
|
# for cl in customer_loss_tuple:
|
|
|
|
|
# customer_loss_id.append(cl[0])
|
|
|
|
|
# customer_loss_list.append(CustomerLoss(cusNo=cl[1],
|
|
|
|
|
# cusName=cl[2],
|
|
|
|
|
# cusManager=cl[3],
|
|
|
|
|
# lastOrderTime=cl[4],
|
|
|
|
|
# state=0)) # 暂缓流失
|
|
|
|
|
# # 批量插入客户流失表
|
|
|
|
|
# CustomerLoss.objects.bulk_create(customer_loss_list)
|
|
|
|
|
# # 修改这些数据客户表中的状态为 1 暂时流失
|
|
|
|
|
# Customer.objects.filter(id__in=customer_loss_id).update(state=1,
|
|
|
|
|
# updateDate=datetime.now())
|
|
|
|
|
# except Exception as e:
|
|
|
|
|
# print(e)
|
|
|
|
|
# finally:
|
|
|
|
|
# connection.close()
|
|
|
|
|
#
|
|
|
|
|
#
|
|
|
|
|
# scheduler = BackgroundScheduler() # 创建一个调度器对象
|
|
|
|
|
# scheduler.add_job(create_customer_loss, 'interval', minutes=1) # 创建一个任务
|
|
|
|
|
# scheduler.start() # 启动任务
|
|
|
|
|
@xframe_options_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def loss_index(request):
|
|
|
|
|
return render(request, 'customer/customer_loss.html')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@require_GET
|
|
|
|
|
def select_loss_list(request):
|
|
|
|
|
try:
|
|
|
|
|
# 获取第几页
|
|
|
|
|
page_num = request.GET.get('page')
|
|
|
|
|
# 获取每页多少条
|
|
|
|
|
page_size = request.GET.get('limit')
|
|
|
|
|
# 获取客户编号
|
|
|
|
|
cusNo = request.GET.get('cusNo')
|
|
|
|
|
# 获取客户名称
|
|
|
|
|
cusName = request.GET.get('cusName')
|
|
|
|
|
# 获取客户状态
|
|
|
|
|
state = request.GET.get('state')
|
|
|
|
|
# 查询所有
|
|
|
|
|
loss_list = CustomerLoss.objects.values().all().order_by('-lastOrderTime')
|
|
|
|
|
# 如果有条件参数,带条件查询
|
|
|
|
|
if cusNo:
|
|
|
|
|
loss_list = loss_list.filter(cusNo__icontains=cusNo)
|
|
|
|
|
if cusName:
|
|
|
|
|
loss_list = loss_list.filter(cusName__icontains=cusName)
|
|
|
|
|
if state:
|
|
|
|
|
loss_list = loss_list.filter(state=state)
|
|
|
|
|
# 初始化分页对象
|
|
|
|
|
p = Paginator(loss_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:
|
|
|
|
|
return JsonResponse({'code': 400, 'msg': 'error'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@xframe_options_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def loss_detail_index(request):
|
|
|
|
|
try:
|
|
|
|
|
# 获取客户流失主键
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 查询客户流失信息
|
|
|
|
|
cl = CustomerLoss.objects.get(pk=id)
|
|
|
|
|
context = {'cl': cl}
|
|
|
|
|
return render(request, 'customer/customer_reprieve.html', context)
|
|
|
|
|
except CustomerLoss.DoesNotExist as e:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@require_GET
|
|
|
|
|
def select_reprieve_by_lossid(request):
|
|
|
|
|
"""根据客户流失主键查询流失措施"""
|
|
|
|
|
try:
|
|
|
|
|
page_num = request.GET.get('page')
|
|
|
|
|
page_size = request.GET.get('limit')
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
|
|
|
|
|
cp_list = CustomerReprieve.objects.values().filter(customerLoss=id).order_by('-id')
|
|
|
|
|
|
|
|
|
|
p = Paginator(cp_list, page_size)
|
|
|
|
|
|
|
|
|
|
data = p.page(page_num).object_list
|
|
|
|
|
|
|
|
|
|
count = p.count
|
|
|
|
|
|
|
|
|
|
context = {'code': 0, 'msg': '', 'count': count, 'data': list(data)}
|
|
|
|
|
|
|
|
|
|
return JsonResponse(context)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
|
|
|
|
return JsonResponse({'code': 400, 'msg': 'error'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@xframe_options_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def reprieve_index(request):
|
|
|
|
|
"""添加客户暂缓页面"""
|
|
|
|
|
lossId = request.GET.get('lossId')
|
|
|
|
|
context = {'lossId': lossId}
|
|
|
|
|
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
|
|
|
|
|
if id:
|
|
|
|
|
cp = CustomerReprieve.objects.get(pk=id)
|
|
|
|
|
context['id'] = id
|
|
|
|
|
context['cp'] = cp
|
|
|
|
|
return render(request, 'customer/customer_reprieve_add_update.html', context)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def create_reprieve(request):
|
|
|
|
|
"""添加客户暂缓"""
|
|
|
|
|
# 获取客户流失主键
|
|
|
|
|
lossId = request.GET.get('lossId')
|
|
|
|
|
# 获取客户暂缓措施
|
|
|
|
|
measure = request.GET.get('measure')
|
|
|
|
|
# 查询流失客户数据
|
|
|
|
|
cl = CustomerLoss.objects.get(pk=lossId)
|
|
|
|
|
data = {
|
|
|
|
|
'customerLoss': cl,
|
|
|
|
|
'measure': measure
|
|
|
|
|
}
|
|
|
|
|
# 添加
|
|
|
|
|
CustomerReprieve.objects.create(**data)
|
|
|
|
|
return JsonResponse({'code': 200, 'msg': '添加成功'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def update_reprieve(request):
|
|
|
|
|
"""修改客户暂缓"""
|
|
|
|
|
# 获取客户暂缓主键
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 获取客户暂缓措施
|
|
|
|
|
measure = request.GET.get('measure')
|
|
|
|
|
data = {
|
|
|
|
|
'measure': measure,
|
|
|
|
|
'updateDate': datetime.now()
|
|
|
|
|
}
|
|
|
|
|
# 修改
|
|
|
|
|
CustomerReprieve.objects.filter(pk=id).update(**data)
|
|
|
|
|
return JsonResponse({'code': 200, 'msg': '修改成功'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def delete_reprieve(request):
|
|
|
|
|
"""删除客户暂缓"""
|
|
|
|
|
# 获取客户暂缓主键
|
|
|
|
|
id = request.GET.get('id')
|
|
|
|
|
# 逻辑删除
|
|
|
|
|
CustomerReprieve.objects.filter(pk=id).update(isValid=0,
|
|
|
|
|
updateDate=datetime.now())
|
|
|
|
|
return JsonResponse({'code': 200, 'msg': '删除成功'})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
@require_GET
|
|
|
|
|
def update_lossreason_by_lossid(request):
|
|
|
|
|
"""确认流失"""
|
|
|
|
|
# 获取客户流失主键
|
|
|
|
|
lossId = request.GET.get('lossId')
|
|
|
|
|
# 获取流失原因
|
|
|
|
|
lossReason = request.GET.get('lossReason')
|
|
|
|
|
# 根据客户流失主键查询
|
|
|
|
|
cl = CustomerLoss.objects.get(pk=lossId)
|
|
|
|
|
# 重新赋值
|
|
|
|
|
cl.lossReason = lossReason
|
|
|
|
|
cl.state = 1
|
|
|
|
|
cl.confirmLossTime = datetime.now()
|
|
|
|
|
# 保存
|
|
|
|
|
cl.save()
|
|
|
|
|
# 修改客户表状态
|
|
|
|
|
Customer.objects.filter(khno=cl.cusNo).update(state=2,
|
|
|
|
|
updateDate=datetime.now())
|
|
|
|
|
return JsonResponse({'code': 200, 'msg': '保存成功'})
|