123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- from __future__ import division
- import json
- from django.conf import settings
- from django.db import transaction
- from django.db.models import Q
- from django_logit import logit
- from django_response import response
- from paginator import pagination
- from TimeConvert import TimeConvert as tc
- from account.models import UserInfo
- from api.tenancy_views import tenancy_tracking_info_subscribe
- from kodo.decorators import check_admin
- from pre.custom_message import sendtemplatemessage
- from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo
- from utils.error.errno_utils import TenancyStatusCode
- from utils.kuaidi.synquery import KuaiDi100
- WECHAT = settings.WECHAT
- @logit
- @check_admin
- def shot_list(request, administrator):
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- tenancy_status = request.POST.get('tenancy_status', '')
- query = request.POST.get('query', '')
- model_id = request.POST.get('model_id', '')
- shots = TenancyShotInfo.objects.filter(status=True).order_by('-pk')
- if tenancy_status != '':
- shots = shots.filter(tenancy_status=tenancy_status)
- if model_id:
- shots = shots.filter(model_id=model_id)
- if query:
- shots = shots.filter(Q(sn__icontains=query))
- count = shots.count()
- shots = [shot.data for shot in shots]
- shots, left = pagination(shots, page, num)
- return response(data={
- 'shots': shots,
- 'left': left,
- 'count': count,
- })
- @logit
- @check_admin
- def shot_detail(request, administrator):
- shot_id = request.POST.get('shot_id', '')
- try:
- shot = TenancyShotInfo.objects.get(shot_id=shot_id, status=True)
- except TenancyShotInfo.DoesNotExist:
- return response(TenancyStatusCode.TENANCY_SHOT_NOT_FOUND)
- return response(data={
- 'shot': shot.data,
- })
- @logit
- @check_admin
- def shot_create(request, administrator):
- model_id = request.POST.get('model_id', '')
- model_name = request.POST.get('model_name', '')
- sn = request.POST.get('sn', '')
- tenancy_status = request.POST.get('tenancy_status', 0)
- shot = TenancyShotInfo.objects.create(
- model_id=model_id,
- model_name=model_name,
- sn=sn,
- )
- return response(data={
- 'shot': shot.data,
- })
- @logit
- @check_admin
- def shot_update(request, administrator):
- shot_id = request.POST.get('shot_id', '')
- model_id = request.POST.get('model_id', '')
- model_name = request.POST.get('model_name', '')
- sn = request.POST.get('sn', '')
- tenancy_status = request.POST.get('tenancy_status', 0)
- shot, _ = TenancyShotInfo.objects.update_or_create(shot_id=shot_id, defaults={
- 'model_id': model_id,
- 'model_name': model_name,
- 'sn': sn,
- 'tenancy_status': tenancy_status,
- })
- return response(data={
- 'shot': shot.data,
- })
- @logit
- @check_admin
- def shot_delete(request, administrator):
- shot_id = request.POST.get('shot_id', '')
- TenancyShotInfo.objects.filter(shot_id=shot_id).update(admin_id=administrator.admin_id, status=False)
- return response()
- @logit
- @check_admin
- def shot_request_list(request, administrator):
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- query = request.POST.get('query', '')
- model_id = request.POST.get('model_id', '')
- target_admin_id = request.POST.get('target_admin_id', '')
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- request_status = request.POST.get('request_status', 'all')
- reqs = TenancyShotRequestInfo.objects.filter(status=True).order_by('-pk')
- if query:
- shots = list(TenancyShotInfo.objects.values_list('shot_id', flat=True).filter(sn__icontains=query))
- reqs = reqs.filter(Q(phone__icontains=query) | Q(name__icontains=query) | Q(shot_id__in=shots))
- if model_id:
- reqs = reqs.filter(model_id=model_id)
- if target_admin_id:
- reqs = reqs.filter(admin_id=target_admin_id)
- if request_status != 'all':
- reqs = reqs.filter(request_status=request_status)
- if start_time and end_time:
- start_time = tc.string_to_utc_datetime(start_time, format='%Y%m%d')
- end_time = tc.string_to_utc_datetime(end_time + ' 23:59:59', format='%Y%m%d %H:%M:%S')
- reqs = reqs.filter(created_at__range=(start_time, end_time))
- count = reqs.count()
- reqs = [req.admindata for req in reqs]
- reqs, left = pagination(reqs, page, num)
- return response(data={
- 'reqs': reqs,
- 'left': left,
- 'count': count,
- })
- @logit
- @check_admin
- def shot_request_detail(request, administrator):
- req_id = request.POST.get('req_id') or request.POST.get('request_id')
- try:
- req = TenancyShotRequestInfo.objects.get(request_id=req_id, status=True)
- except TenancyShotRequestInfo.DoesNotExist:
- return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
- return response(data={
- 'req': req.admindata,
- })
- @logit
- @check_admin
- @transaction.atomic
- def shot_request_update(request, administrator):
- req_id = request.POST.get('req_id') or request.POST.get('request_id')
- shot_id = request.POST.get('shot_id', '')
- name = request.POST.get('name', '')
- phone = request.POST.get('phone', '')
- postcode = request.POST.get('postcode', '')
- location = request.POST.get('location', '')
- purpose = request.POST.get('purpose', '')
- return_date = request.POST.get('return_date', '')
- request_status = request.POST.get('request_status', '')
- express_name = request.POST.get('express_name', '')
- express_com = request.POST.get('express_com', '')
- tracking_number = request.POST.get('tracking_number', '')
- back_express_name = request.POST.get('back_express_name', '')
- back_express_com = request.POST.get('back_express_com', '')
- back_tracking_number = request.POST.get('back_tracking_number', '')
- remark = request.POST.get('remark', '')
- try:
- req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
- except TenancyShotRequestInfo.DoesNotExist:
- return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
- old_tracking_number = req.tracking_number
- old_back_tracking_number = req.back_tracking_number
- if req.admin_id and req.admin_id != administrator.admin_id:
- return response(40001, 'No permission', '不是经办人,没有权限')
- if shot_id:
- req.shot_id = shot_id
- if name:
- req.name = name
- if phone:
- req.phone = phone
- if postcode:
- req.postcode = postcode
- if location:
- req.location = location
- if purpose:
- req.purpose = purpose
- if return_date:
- req.return_date = tc.to_date(return_date)
- if request_status:
- req.request_status = request_status
- if express_name:
- req.express_name = express_name
- if express_com:
- req.express_com = express_com
- if tracking_number:
- req.tracking_number = tracking_number
- if back_express_name:
- req.back_express_name = back_express_name
- if back_express_com:
- req.back_express_com = back_express_com
- if back_tracking_number:
- req.back_tracking_number = back_tracking_number
- if remark:
- req.remark = remark
- req.save()
- if tracking_number and tracking_number != old_tracking_number:
- tenancy_tracking_info_subscribe(req, 'tracking')
- if back_tracking_number and back_tracking_number != old_back_tracking_number:
- tenancy_tracking_info_subscribe(req, 'back_tracking')
- return response(data={
- 'req': req.admindata,
- })
- @logit
- @check_admin
- @transaction.atomic
- def shot_request_audit(request, administrator):
- req_id = request.POST.get('req_id') or request.POST.get('request_id')
- audit_status = request.POST.get('audit_status', 0)
- try:
- req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
- except TenancyShotRequestInfo.DoesNotExist:
- return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
- req.audit_status = audit_status
- req.save()
- return response(data={
- 'req': req.admindata,
- })
- @logit
- @check_admin
- @transaction.atomic
- def shot_request_send(request, administrator):
- req_id = request.POST.get('req_id') or request.POST.get('request_id')
- express_name = request.POST.get('express_name', '')
- express_com = request.POST.get('express_com', '')
- tracking_number = request.POST.get('tracking_number', '')
- shot_id = request.POST.get('shot_id', '')
- front_cap_status = request.POST.get('front_cap_status', 0)
- rear_cap_status = request.POST.get('rear_cap_status', 0)
- lens_hood_status = request.POST.get('lens_hood_status', 0)
- tripod_ring_status = request.POST.get('tripod_ring_status', 0)
- appearance_performance_status = request.POST.get('appearance_performance_status', 0)
- try:
- req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
- except TenancyShotRequestInfo.DoesNotExist:
- return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
- try:
- shot = TenancyShotInfo.objects.get(shot_id=shot_id, status=True)
- except TenancyShotInfo.DoesNotExist:
- return response()
- if req.admin_id and req.admin_id != administrator.admin_id:
- return response(40001, 'No permission', '不是经办人,没有权限')
- old_tracking_number = req.tracking_number
- req.admin_id = administrator.admin_id
- req.express_name = express_name
- req.express_com = express_com
- req.tracking_number = tracking_number
- req.shot_id = shot_id
- req.front_cap_status = front_cap_status
- req.rear_cap_status = rear_cap_status
- req.lens_hood_status = lens_hood_status
- req.tripod_ring_status = tripod_ring_status
- req.appearance_performance_status = appearance_performance_status
- req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_SEND
- request_status_at = req.request_status_at
- request_status_at[TenancyShotRequestInfo.TENANCY_TRACKING_SEND] = tc.utc_string()
- req.request_status_at = request_status_at
- req.save()
- shot.front_cap_status = front_cap_status
- shot.rear_cap_status = rear_cap_status
- shot.lens_hood_status = lens_hood_status
- shot.tripod_ring_status = tripod_ring_status
- shot.appearance_performance_status = appearance_performance_status
- shot.tenancy_status = 1
- shot.save()
- try:
- user = UserInfo.objects.get(user_id=req.user_id)
- except UserInfo.DoesNotExist:
- return response()
- if tracking_number and tracking_number != old_tracking_number:
- tenancy_tracking_info_subscribe(req, 'tracking')
- data = {
- "first": {
- "value": u'镜头租用申请已通过',
- },
- "thing2": {
- "value": req.name,
- },
- "character_string3": {
- "value": shot.data['model_info']['model_name'],
- },
- "character_string4": {
- "value": shot.sn,
- },
- "remark": {
- "value": u'快递已寄出,请注意查收~~~',
- }
- }
- wxcfg = WECHAT.get('MINIAPP', {})
- appid = wxcfg.get('appID')
- sendtemplatemessage(openid=user.openid, template_id=settings.TEMPLATE_ID_TENANCY, data=data, miniappid=appid, minipagepath='/pages/member/mine/mine?page={}&request_id={}'.format('rentLensPage', req.request_id))
- return response(data={
- 'req': req.admindata,
- })
- @logit
- @check_admin
- @transaction.atomic
- def shot_request_signed(request, administrator):
- req_id = request.POST.get('req_id') or request.POST.get('request_id')
- try:
- req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
- except TenancyShotRequestInfo.DoesNotExist:
- return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
- if req.admin_id and req.admin_id != administrator.admin_id:
- return response(40001, 'No permission', '不是经办人,没有权限')
- req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_BACK_SIGNED
- request_status_at = req.request_status_at
- request_status_at[TenancyShotRequestInfo.TENANCY_TRACKING_BACK_SIGNED] = tc.utc_string()
- req.request_status_at = request_status_at
- req.save()
- TenancyShotInfo.objects.filter(shot_id=req.shot_id).update(tenancy_status=0)
- return response(data={
- 'req': req.admindata,
- })
- @logit
- @check_admin
- def shot_request_tracking_info(request, administrator):
- request_id = request.POST.get('request_id', '')
- type_ = request.POST.get('type', 'tracking')
- try:
- req = TenancyShotRequestInfo.objects.get(request_id=request_id, status=True)
- except TenancyShotRequestInfo.DoesNotExist:
- return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
- tracking_info = {}
- if type_ == 'tracking':
- if req.express_com and req.tracking_number:
- tracking_info = get_tracking_info(req.express_com, req.tracking_number, req.phone)
- req.tracking_info = tracking_info
- req.save()
- else:
- if req.back_express_com and req.back_tracking_number:
- tracking_info = get_tracking_info(req.back_express_com, req.back_tracking_number, req.phone)
- req.back_tracking_info = tracking_info
- req.save()
- if tracking_info:
- tenancy_tracking_info_subscribe(req, type_)
- return response(data={
- 'type': type_,
- 'tracking_info': tracking_info,
- })
- def get_tracking_info(express_com, tracking_number, phone):
- tracking_info = KuaiDi100().track(express_com, tracking_number, phone=phone)
- if tracking_info:
- try:
- tracking_info = json.loads(tracking_info)
- except Exception:
- tracking_info = {}
- return tracking_info
|