No Description

tenancy_admin_views.py 14KB

    # -*- coding: utf-8 -*- 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', '') 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 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'镜头租用申请已通过', "color": "#173177" }, "thing2": { "value": req.name, "color": "#173177" }, "character_string3": { "value": shot.data['model_info']['model_name'], "color": "#173177" }, "character_string4": { "value": shot.sn, "color": "#173177" }, "remark": { "value": u'快递已寄出,请注意查收~~~', "color": "#173177" } } 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') # tracking / back_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