123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802 |
- import json
- from django.core.serializers import serialize
- from django.http import JsonResponse
- from django.shortcuts import render, redirect
- from alipay import AliPay
- import datetime
- from django.views.decorators.http import require_http_methods
- from index.models import UserInfo
- from Sellers.models import Tickets, Order, Flight, Message
- from django.db.models import Count, Q
- def hello(request, user_id):
- user = UserInfo.objects.filter(id=user_id).first()
- name = user.name
- sex = user.sex
- if sex == '1':
- sexx = '先生'
- else:
- sexx = '女士'
- context = {
- 'user_id': user_id,
- 'name': name,
- 'sex': sexx,
- }
- return render(request, 'hello.html', context)
- def my_info(request, user_id):
- my_data = UserInfo.objects.filter(id=user_id).first()
- if my_data.licence == '1':
- lic = '中国居民身份证'
- elif my_data.licence == '2':
- lic = '港澳台居民居住证'
- elif my_data.licence == '3':
- lic = '港澳居民来往内地通行证'
- elif my_data.licence == '4':
- lic = '台湾居民来往内地通行证'
- elif my_data.licence == '5':
- lic = '护照'
- elif my_data.licence == '6':
- lic = '外国人永久居留身份证'
- if my_data.sex == '1':
- sexx = '男'
- else:
- sexx = '女'
- if my_data.grand == '1':
- gra = '成人'
- elif my_data.grand == '2':
- gra = '儿童'
- elif my_data.grand == '3':
- gra = '学生'
- elif my_data.grand == '4':
- gra = '残疾军人、伤残人民警察'
- context = {
- 'username': my_data.username,
- 'password': my_data.password,
- 'name': my_data.name,
- 'lic_typ': lic,
- 'lic_num': my_data.lic_num,
- 'sex': sexx,
- 'gra': gra,
- 'pho': my_data.phone,
- 'ema': my_data.mail,
- 'user_id': my_data.id,
- }
- return render(request, 'my_info.html', context)
- def update_info(request, user_id):
- if request.method != 'POST':
- my_data = UserInfo.objects.filter(id=user_id).first()
- if my_data.licence == '1':
- lic = '中国居民身份证'
- elif my_data.licence == '2':
- lic = '港澳台居民居住证'
- elif my_data.licence == '3':
- lic = '港澳居民来往内地通行证'
- elif my_data.licence == '4':
- lic = '台湾居民来往内地通行证'
- elif my_data.licence == '5':
- lic = '护照'
- elif my_data.licence == '6':
- lic = '外国人永久居留身份证'
- if my_data.sex == '1':
- sexx = '男'
- else:
- sexx = '女'
- if my_data.grand == '1':
- gra = '成人'
- elif my_data.grand == '2':
- gra = '儿童'
- elif my_data.grand == '3':
- gra = '学生'
- elif my_data.grand == '4':
- gra = '残疾军人、伤残人民警察'
- context = {
- 'user': my_data.username,
- 'password': my_data.password,
- 'name': my_data.name,
- 'lic_typ': lic,
- 'lic_num': my_data.lic_num,
- 'sex': sexx,
- 'gra': gra,
- 'pho': my_data.phone,
- 'ema': my_data.mail,
- 'user_id': my_data.id,
- }
- return render(request, 'update_info.html', context)
- else:
- user_name = request.POST.get('user')
- pwd = request.POST.get('pwd')
- apwd = request.POST.get('apwd')
- lic = request.POST.get('lic')
- lic_num = request.POST.get('lic_num')
- gra = request.POST.get('grand')
- pho = request.POST.get('phone')
- ema = request.POST.get('mail')
- if user_name == '':
- return redirect('Users:up_non_user', user_id)
- elif pwd == '':
- return redirect('Users:up_non_pwd', user_id)
- elif apwd == '':
- return redirect('Users:up_non_apwd', user_id)
- elif pwd != apwd:
- return redirect('Users:up_not_equ', user_id)
- elif lic == '0':
- return redirect('Users:up_non_lic', user_id)
- elif lic_num == '':
- return redirect('Users:up_non_licnum', user_id)
- elif gra == '0':
- return redirect('Users:up_non_gra', user_id)
- elif pho == '':
- return redirect('Users:up_non_pho', user_id)
- elif ema == '':
- return redirect('Users:up_non_ema', user_id)
- else:
- UserInfo.objects.filter(id=user_id).update(username=user_name, password=pwd, licence=lic, lic_num=lic_num,
- grand=gra, phone=pho, mail=ema)
- return redirect('Users:my_info', user_id)
- def up_nonuser(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_non_user.html', context)
- def up_nonpwd(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_non_pwd.html', context)
- def up_nonapwd(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_non_apwd.html', context)
- def up_notequ(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_not_equ.html', context)
- def up_nonlic(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_non_lic.html', context)
- def up_nonlicnum(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_non_licnum.html', context)
- def up_nongra(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_non_gra.html', context)
- def up_nonpho(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_non_pho.html', context)
- def up_nonema(request, user_id):
- context = {'user_id': user_id}
- return render(request, 'up_non_ema.html', context)
- def search(request, user_id):
- if request.method != 'POST':
- context = {
- 'user_id': user_id
- }
- return render(request, 'search.html', context)
- else:
- tickets = Tickets.objects.all()
- eff_tickets = []
- now = str(datetime.datetime.now())
- for ticket in tickets:
- if now < str(ticket.starting_time):
- eff_tickets.append(ticket)
- sta = request.POST.get('sta_point')
- sta = sta.strip()
- fin = request.POST.get('fin_point')
- fin = fin.strip()
- tim = request.POST.get('dat')
- time = str(tim)
- tics = []
- # print(203, sta,fin,time)
- flight_result = Flight.objects.filter(sta_point__icontains=sta, fin_point__icontains=fin, status='未起飞')
- print(flight_result)
- for ticket in eff_tickets:
- if str(ticket.starting_time.date()) == time and ticket.start_point == sta and ticket.final_point == fin:
- tics.append(ticket)
- F_real_prices = []
- C_real_prices = []
- Y_real_prices = []
- for tic in tics:
- F_real_prices.append(tic.F_price * tic.F_discount / 10)
- C_real_prices.append(tic.C_price * tic.C_discount / 10)
- Y_real_prices.append(tic.Y_price * tic.Y_discount / 10)
- context = {
- 'tickets': flight_result,
- 'user_id': user_id,
- 'F_prices': F_real_prices,
- 'C_prices': C_real_prices,
- 'Y_prices': Y_real_prices,
- }
- print(227, flight_result)
- return render(request, 'search_result.html', context)
- def check_ticket(request, user_id, ticket_id):
- ticket = Tickets.objects.filter(id=ticket_id).first()
- context = {
- 'user_id': user_id,
- 'ticket': ticket,
- }
- return render(request, 'check_ticket.html', context)
- def order(request, user_id, ticket_id):
- orders = Order.objects.filter(user_id=user_id)
- flag = 0
- for order in orders:
- if order.ticket_id == ticket_id and order.status == '已支付':
- flag = 1
- break
- elif order.ticket_id == ticket_id and order.status == '等待支付':
- flag = 2
- break
- elif order.ticket_id == ticket_id and order.status == '退款审核中':
- flag = 3
- break
- elif order.ticket_id == ticket_id and order.status == '改签审核中':
- flag = 4
- break
- if flag == 0:
- ticket = Tickets.objects.filter(id=ticket_id).first()
- user = UserInfo.objects.filter(id=user_id).first()
- context = {
- 'ticket': ticket,
- 'user': user,
- }
- return render(request, 'order.html', context)
- elif flag == 1:
- context = {'user_id': user_id}
- return render(request, 'cant_two.html', context)
- elif flag == 2:
- context = {'user_id': user_id}
- return render(request, 'waiting_for_payment.html', context)
- elif flag == 3:
- context = {'user_id': user_id}
- return render(request, 'refunding.html', context)
- elif flag == 4:
- context = {'user_id': user_id}
- return render(request, 'changing.html', context)
- def dingdan(request, user_id, ticket_id):
- user = UserInfo.objects.filter(id=user_id).first()
- ticket = Tickets.objects.filter(id=ticket_id).first()
- berth = request.POST.get('berth')
- if berth == '1':
- ber = '头等舱'
- be_price = ticket.F_price
- if user.grand == '1':
- price = ticket.F_real_price
- discount = ticket.F_discount
- if user.grand == '2':
- price = ticket.F_price * 0.5
- discount = 5
- if user.grand == '3':
- price = ticket.F_price * 0.5
- discount = 5
- if user.grand == '4':
- price = ticket.F_price * 0.5
- discount = 5
- if berth == '2':
- ber = '商务舱'
- be_price = ticket.C_price
- if user.grand == '1':
- price = ticket.C_real_price
- discount = ticket.C_discount
- if user.grand == '2':
- price = ticket.C_price * 0.5
- discount = 5
- if user.grand == '3':
- price = ticket.C_price * 0.5
- discount = 5
- if user.grand == '4':
- price = ticket.C_price * 0.5
- discount = 5
- if berth == '3':
- be_price = ticket.Y_price
- ber = '经济舱'
- if user.grand == '1':
- price = ticket.Y_real_price
- discount = ticket.Y_discount
- if user.grand == '2':
- price = ticket.Y_price * 0.5
- discount = 5
- if user.grand == '3':
- price = ticket.Y_price * 0.5
- discount = 5
- if user.grand == '4':
- price = ticket.Y_price * 0.5
- discount = 5
- status = '等待支付'
- order = Order.objects.create(flight=ticket.flight, start_point=ticket.start_point, final_point=ticket.final_point,
- tye=ticket.tye, stopover_hour=ticket.stopover_hour,
- stopover_minute=ticket.stopover_minute,
- stopover_point=ticket.stopover_point, starting_time=ticket.starting_time,
- final_time=ticket.final_time, be_price=ticket.be_price, discount=discount,
- true_price=price,
- Type=ticket.Type, berth=ber, status=status, ticket_id=ticket.id, user_id=user.id)
- if user.balance - order.true_price > 0:
- # 这里走余额
- UserInfo.objects.filter(id=user_id).update(balance=user.balance - price)
- Order.objects.filter(id=order.id).update(status='已支付')
- return redirect('Users:my_orders', user_id)
- # User / my_orders / 2 /
- sub = f'{ticket.flight} {ticket.start_point}至{ticket.final_point} {str(ticket.starting_time)}'
- app_private_key_string = open(r"Users/rsakey/private2048.txt").read()
- alipay_public_key_string = open(r"Users/rsakey/paypublic.txt").read()
- # 实例化AliPay
- alipay = AliPay(
- appid="2021000122675132",
- app_notify_url=None, # 支付宝会向这个地址发送post请求
- app_private_key_string=app_private_key_string, # 应用私钥
- alipay_public_key_string=alipay_public_key_string, # 支付宝公钥
- sign_type="RSA2",
- debug=True, # 默认是False
- )
- # 定义请求地址传入的参数
- res = alipay.api_alipay_trade_page_pay(
- out_trade_no=str(order.id), # 订单号
- total_amount=str(order.true_price), # 交易金额(单位是元,保留两位小数)
- subject=sub, # 商品描述
- return_url='http://127.0.0.1:8000/User/show/' # 支付后像这个界面发送GET请求
- )
- # 生成跳转到支付宝支付页面的url
- url = 'https://openapi.alipaydev.com/gateway.do?' + res
- return redirect(url)
- def pay_order(request, order_id):
- order = Order.objects.filter(id=order_id).first()
- ticket_id = order.ticket_id
- ticket = Tickets.objects.filter(id=ticket_id).first()
- sub = f'{ticket.flight} {ticket.start_point}至{ticket.final_point} {str(ticket.starting_time)}'
- app_private_key_string = open(r"Users/rsakey/private2048.txt").read()
- alipay_public_key_string = open(r"Users/rsakey/paypublic.txt").read()
- # 实例化AliPay
- alipay = AliPay(
- appid="2021000122675132",
- app_notify_url=None, # 支付宝会向这个地址发送post请求
- app_private_key_string=app_private_key_string, # 应用私钥
- alipay_public_key_string=alipay_public_key_string, # 支付宝公钥
- sign_type="RSA2", # 支付宝会向这个地址发送get请求
- debug=True, # 默认是False
- )
- # 定义请求地址传入的参数
- res = alipay.api_alipay_trade_page_pay(
- out_trade_no=str(order.id), # 订单号
- total_amount=str(order.true_price), # 交易金额(单位是元,保留两位小数)
- subject=sub, # 商品描述
- return_url='http://127.0.0.1:8000/User/show/'
- )
- # 生成跳转到支付宝支付页面的url
- url = 'https://openapi.alipaydev.com/gateway.do?' + res
- return redirect(url)
- def show(request):
- if request.method == 'GET':
- app_private_key_string = open(r"Users/rsakey/private2048.txt").read()
- alipay_public_key_string = open(r"Users/rsakey/paypublic.txt").read()
- alipay = AliPay(
- appid="2021000122675132",
- app_notify_url=None, # 支付宝会向这个地址发送post请求
- app_private_key_string=app_private_key_string, # 应用私钥
- alipay_public_key_string=alipay_public_key_string, # 支付宝公钥
- sign_type="RSA2", # 支付宝会向这个地址发送get请求
- debug=True, # 默认是False
- )
- param = request.GET.dict() # 获取请求携带的参数并转换成字典类型
- print(param)
- sign = param.pop('sign', None) # 获取sign的值,并将字典中以'sign'为键的键值对删除
- # 对sign参数进行验证
- statu = alipay.verify(param, sign)
- if statu:
- numstr = param.pop('out_trade_no')
- Num = int(numstr)
- order = Order.objects.filter(id=Num).first()
- tiid = order.ticket_id
- uid = order.user_id
- flinum = order.flight
- ticket = Tickets.objects.filter(id=tiid).first()
- flight = Flight.objects.filter(number=flinum).first()
- if order.berth == '头等舱':
- num = ticket.F_quantity - 1
- Tickets.objects.filter(id=tiid).update(F_quantity=num)
- if order.berth == '商务舱':
- num = ticket.C_quantity - 1
- Tickets.objects.filter(id=tiid).update(C_quantity=num)
- if order.berth == '经济舱':
- num = ticket.Y_quantity - 1
- Tickets.objects.filter(id=tiid).update(Y_quantity=num)
- new_inc = flight.income + order.true_price
- Flight.objects.filter(number=flinum).update(income=new_inc)
- Order.objects.filter(id=Num).update(status='已支付')
- context = {'user_id': uid}
- return render(request, 'showsuc.html', context)
- else:
- numstr = param.pop('out_trade_no')
- num = int(numstr)
- order = Order.objects.filter(id=num).first()
- uid = order.user_id
- context = {'user_id': uid}
- return render(request, 'showfal.html', context)
- else:
- return render(request, 'showwro.html')
- def my_orders(request, user_id):
- orders = Order.objects.filter(user_id=user_id)
- now = str(datetime.datetime.now())
- eff_orders = []
- for order in orders:
- if order.status != '退款审核中' and order.status != '改签审核中' and order.status != '退款成功' \
- and order.status != '退款驳回' and order.status != '改签成功' and order.status != '改签驳回':
- eff_orders.append(order)
- for order in eff_orders:
- if order.status == '已支付' and now > str(order.starting_time) and now < str(order.final_time):
- Order.objects.filter(id=order.id).update(status='使用中')
- elif order.status == '已支付' and now > str(order.final_time):
- Order.objects.filter(id=order.id).update(status='已结束')
- elif order.status == '等待支付' and now > str(order.starting_time):
- Order.objects.filter(id=order.id).update(status='已取消')
- orders = Order.objects.filter(user_id=user_id)
- eff_orders = []
- for order in orders:
- if order.status != '退款审核中' and order.status != '改签审核中' and order.status != '退款成功' \
- and order.status != '退款驳回' and order.status != '改签成功' and order.status != '改签驳回':
- eff_orders.append(order)
- context = {
- 'orders': eff_orders,
- 'user_id': user_id,
- }
- return render(request, 'my_orders.html', context)
- def ask_for_refund(request, user_id, order_id):
- orders = Order.objects.filter(user_id=user_id)
- re_order = Order.objects.filter(id=order_id).first()
- if re_order.discount < 4:
- return redirect('cant_refund.html')
- eff_orders = []
- for order in orders:
- if order.status != '退款审核中' and order.status != '改签审核中' and order.status != '退款成功' \
- and order.status != '退款驳回' and order.status != '改签成功' and order.status != '改签驳回':
- eff_orders.append(order)
- context = {
- 'orders': eff_orders,
- 'user_id': user_id,
- 're_order': re_order,
- }
- return render(request, 'ask_for_refund.html', context)
- def assure_refund(request, user_id, order_id):
- Order.objects.filter(id=order_id).update(status='退款审核中')
- order = Order.objects.filter(id=order_id)
- now = datetime.datetime.now()
- sta_time = order.starting_time
- dur = sta_time - now
- hours = dur.seconds / 3600
- if hours < 2:
- Order.objects.filter(id=order_id).update(refund_percent=30)
- elif hours < 24:
- Order.objects.filter(id=order_id).update(refund_percent=20)
- else:
- Order.objects.filter(id=order_id).update(refund_percent=10)
- if now > sta_time:
- Order.objects.filter(id=order_id).update(refund_percent=50)
- order = Order.objects.filter(id=order_id).first()
- context = {
- 'order': order,
- 'user_id': user_id,
- }
- return render(request, 'assure_refund.html', context)
- def choose_change(request, user_id, order_id):
- order = Order.objects.filter(id=order_id).first()
- if order.discount < 4:
- return render(request, 'cant_change_dis.html')
- if request.method != 'POST':
- context = {
- 'user_id': user_id,
- 'order_id': order_id,
- }
- return render(request, 'search_choose_change.html', context)
- else:
- tickets = Tickets.objects.all()
- eff_tickets = []
- now = str(datetime.datetime.now())
- for ticket in tickets:
- if now < str(ticket.starting_time):
- eff_tickets.append(ticket)
- sta = request.POST.get('sta_point')
- fin = request.POST.get('fin_point')
- tim = request.POST.get('dat')
- tics = []
- time = str(tim)
- for ticket in eff_tickets:
- if ticket.start_point == sta and ticket.final_point == fin and str(ticket.starting_time.date()) == time:
- tics.append(ticket)
- context = {
- 'tickets': tics,
- 'user_id': user_id,
- 'order_id': order_id,
- }
- return render(request, 'choose_change.html', context)
- def check_change(request, user_id, order_id, ticket_id):
- ticket = Tickets.objects.filter(id=ticket_id).first()
- context = {
- 'ticket': ticket,
- 'user_id': user_id,
- 'order_id': order_id,
- }
- return render(request, 'check_change.html', context)
- def ask_for_change(request, user_id, order_id, ticket_id):
- new_ticket = Tickets.objects.filter(id=ticket_id).first()
- orders = Order.objects.all()
- user_orders = []
- for order in orders:
- if order.user_id == user_id:
- user_orders.append(order)
- for order in user_orders:
- if order.ticket_id == new_ticket.id and order.status == '已支付':
- ticket = Tickets.objects.filter(id=ticket_id).first()
- order = Order.objects.filter(id=order_id).first()
- context = {
- 'user_id': user_id,
- 'order': order,
- 'ticket': ticket,
- }
- return render(request, 'cant_change_sam.html', context)
- elif order.ticket_id == new_ticket.id and order.status == '等待支付':
- ticket = Tickets.objects.filter(id=ticket_id).first()
- order = Order.objects.filter(id=order_id).first()
- context = {
- 'user_id': user_id,
- 'order': order,
- 'ticket': ticket,
- }
- return render(request, 'have_wait.html', context)
- elif order.ticket_id == new_ticket.id and order.status == '改签审核中':
- ticket = Tickets.objects.filter(id=ticket_id).first()
- order = Order.objects.filter(id=order_id).first()
- context = {
- 'user_id': user_id,
- 'order': order,
- 'ticket': ticket,
- }
- return render(request, 'have_changing.html', context)
- elif order.ticket_id == new_ticket.id and order.status == '退款审核中':
- ticket = Tickets.objects.filter(id=ticket_id).first()
- order = Order.objects.filter(id=order_id).first()
- context = {
- 'user_id': user_id,
- 'order': order,
- 'ticket': ticket,
- }
- return render(request, 'have_refunding.html', context)
- order = Order.objects.filter(id=order_id).first()
- ticket = Tickets.objects.filter(id=ticket_id).first()
- berth = request.POST.get('berth')
- Berth = int(berth)
- context = {
- 'user_id': user_id,
- 'order': order,
- 'ticket': ticket,
- 'berth': Berth,
- }
- return render(request, 'ask_for_change.html', context)
- def assure_change(request, user_id, order_id, ticket_id, berth):
- if berth == 1:
- ber = '头等舱'
- elif berth == 2:
- ber = '公务舱'
- elif berth == 3:
- ber = '经济舱'
- Order.objects.filter(id=order_id).update(status='改签审核中', new_ticket_id=ticket_id, new_berth=ber)
- ticket = Tickets.objects.filter(id=ticket_id).first()
- order = Order.objects.filter(id=order_id).first()
- now = datetime.datetime.now()
- sta_tim = ticket.starting_time
- duration = sta_tim - now
- hours = duration.seconds / 3600
- if hours < 2:
- Order.objects.filter(id=order_id).update(change_percent=20)
- elif hours < 24:
- Order.objects.filter(id=order_id).update(change_percent=10)
- else:
- Order.objects.filter(id=order_id).update(change_percent=5)
- order = Order.objects.filter(id=order_id).first()
- value = order.true_price * (1 - order.change_percent * 0.01)
- if berth == 1:
- nee_val = ticket.F_real_price
- elif berth == 2:
- nee_val = ticket.C_real_price
- elif berth == 3:
- nee_val = ticket.Y_real_price
- if value < nee_val:
- sub = '改签补差'
- app_private_key_string = open(r"Users/rsakey/private2048.txt").read()
- alipay_public_key_string = open(r"Users/rsakey/paypublic.txt").read()
- # 实例化AliPay
- alipay = AliPay(
- appid="2021000122675132",
- app_notify_url=None, # 支付宝会向这个地址发送post请求
- app_private_key_string=app_private_key_string, # 应用私钥
- alipay_public_key_string=alipay_public_key_string, # 支付宝公钥
- sign_type="RSA2", # 支付宝会向这个地址发送get请求
- debug=True, # 默认是False
- )
- # 定义请求地址传入的参数
- res = alipay.api_alipay_trade_page_pay(
- out_trade_no=str(100000 - int(order.id)), # 订单号
- total_amount=str(nee_val - value), # 交易金额(单位是元,保留两位小数)
- subject=sub, # 商品描述
- return_url='http://127.0.0.1:8000/User/add_price_assure/'
- )
- # 生成跳转到支付宝支付页面的url
- url = 'https://openapi.alipaydev.com/gateway.do?' + res
- return redirect(url)
- else:
- context = {
- 'user_id': user_id,
- 'ticket': ticket,
- 'order': order,
- }
- return render(request, 'assure_change.html', context)
- def add_price_assure(request):
- if request.method == 'GET':
- app_private_key_string = open(r"Users/rsakey/private2048.txt").read()
- alipay_public_key_string = open(r"Users/rsakey/paypublic.txt").read()
- alipay = AliPay(
- appid="2021000122675132",
- app_notify_url=None, # 支付宝会向这个地址发送post请求
- app_private_key_string=app_private_key_string, # 应用私钥
- alipay_public_key_string=alipay_public_key_string, # 支付宝公钥
- sign_type="RSA2", # 支付宝会向这个地址发送get请求
- debug=True, # 默认是False
- )
- param = request.GET.dict() # 获取请求携带的参数并转换成字典类型
- sign = param.pop('sign', None) # 获取sign的值,并将字典中以'sign'为键的键值对删除
- # 对sign参数进行验证
- statu = alipay.verify(param, sign)
- if statu:
- numstr = param.pop('out_trade_no')
- num = int(numstr)
- rel_num = 100000 - num
- order = Order.objects.filter(id=rel_num).first()
- uid = order.user_id
- ticket = Tickets.objects.filter(id=order.new_ticket_id).first()
- context = {
- 'user_id': uid,
- 'order': order,
- 'ticket': ticket,
- }
- return render(request, 'wait_change.html', context)
- else:
- numstr = param.pop('out_trade_no')
- num = int(numstr)
- order = Order.objects.filter(id=num).first()
- uid = order.user_id
- context = {'user_id': uid}
- return render(request, 'showfal.html', context)
- else:
- return render(request, 'showwro.html')
- def my_change(request, user_id):
- orders = Order.objects.filter(user_id=user_id)
- change_orders = []
- change_new_tickets = []
- for order in orders:
- if order.status == '改签审核中' or order.status == '改签成功' or order.status == '改签驳回':
- ticket = Tickets.objects.filter(id=order.new_ticket_id).first()
- change_orders.append(order)
- change_new_tickets.append(ticket)
- context = {
- 'user_id': user_id,
- 'orders': change_orders,
- 'tickets': change_new_tickets,
- }
- print(change_new_tickets)
- return render(request, 'my_change.html', context)
- def my_refund(request, user_id):
- orders = Order.objects.filter(user_id=user_id)
- refund_orders = []
- for order in orders:
- if order.status == '退款审核中' or order.status == '退款成功' or order.status == '退款驳回':
- refund_orders.append(order)
- context = {
- 'user_id': user_id,
- 'orders': refund_orders,
- }
- return render(request, 'my_refund.html', context)
- def cancel_order(request, user_id, order_id):
- Order.objects.filter(id=order_id).update(status='已取消')
- return redirect('Users:my_orders', user_id)
- def consult(request, user_id):
- if request.method != 'POST':
- messages = Message.objects.all()
- fro_mess = []
- to_mess = []
- mess = []
- for message in messages:
- if message.from_id == user_id or message.to_id == user_id:
- mess.append(message)
- context = {
- 'user_id': user_id,
- 'mess': mess,
- }
- return render(request, 'consult.html', context)
- else:
- new_mess = request.POST.get('new_mess')
- Message.objects.create(content=new_mess, from_id=user_id, to_id=1, status=0)
- return redirect('Users:consult', user_id)
- # Create your views here.
- @require_http_methods(["POST", "GET"])
- def search_recommend(request, user_id):
- # 统计历史订单中最多记录的机票信息,以终点为目标进行统计
- duplicate_orders = Order.objects.values('final_point').annotate(count=Count('final_point')).filter(count__gt=1,
- user_id=user_id).order_by(
- '-count')[:3]
- final_point_list = []
- for order in duplicate_orders:
- final_point_list.append(order['final_point'])
- # print(order['final_point'], order['count'])
- # 查询航班信息
- final_list = Flight.objects.filter(fin_point__in=final_point_list, status='未起飞')
- final_list_data = []
- for item in json.loads(serialize('json', final_list)):
- params = {**item['fields']}
- params.setdefault('id', item['pk'])
- final_list_data.append(params)
- return JsonResponse({
- 'data': final_list_data
- })
|