:art: Add tenancy shot request relative apis

huangqimin001 2 年之前
父节点
当前提交
9161390df8
共有 5 个文件被更改,包括 267 次插入9 次删除
  1. 141 5
      api/tenancy_admin_views.py
  2. 104 3
      api/tenancy_views.py
  3. 14 1
      api/urls.py
  4. 6 0
      tenancy/models.py
  5. 2 0
      utils/error/errno_utils.py

+ 141 - 5
api/tenancy_admin_views.py

@@ -2,13 +2,14 @@
2 2
 
3 3
 from __future__ import division
4 4
 
5
-from django.conf import settings
5
+from django.db import transaction
6 6
 from django_logit import logit
7 7
 from django_response import response
8 8
 from paginator import pagination
9
+from TimeConvert import TimeConvert as tc
9 10
 
10 11
 from kodo.decorators import check_admin
11
-from tenancy.models import TenancyShotInfo
12
+from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo
12 13
 from utils.error.errno_utils import TenancyStatusCode
13 14
 
14 15
 
@@ -31,7 +32,6 @@ def shot_list(request, administrator):
31 32
 @logit
32 33
 @check_admin
33 34
 def shot_detail(request, administrator):
34
-    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
35 35
     shot_id = request.POST.get('shot_id', '')
36 36
 
37 37
     try:
@@ -47,7 +47,6 @@ def shot_detail(request, administrator):
47 47
 @logit
48 48
 @check_admin
49 49
 def shot_create(request, administrator):
50
-    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
51 50
     model_name = request.POST.get('model_name', '')
52 51
     sn = request.POST.get('sn', '')
53 52
     fittings_type = request.POST.get('fittings_type', 0)
@@ -68,7 +67,6 @@ def shot_create(request, administrator):
68 67
 @logit
69 68
 @check_admin
70 69
 def shot_update(request, administrator):
71
-    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
72 70
     shot_id = request.POST.get('shot_id', '')
73 71
     model_name = request.POST.get('model_name', '')
74 72
     sn = request.POST.get('sn', '')
@@ -85,3 +83,141 @@ def shot_update(request, administrator):
85 83
     return response(data={
86 84
         'shot': shot.data,
87 85
     })
86
+
87
+
88
+@logit
89
+@check_admin
90
+def shot_request_list(request, administrator):
91
+    page = request.POST.get('page', 1)
92
+    num = request.POST.get('num', 20)
93
+
94
+    reqs = TenancyShotRequestInfo.objects.filter(status=True).order_by('-pk')
95
+    reqs = [req.data for req in reqs]
96
+    reqs, left = pagination(reqs, page, num)
97
+
98
+    return response(data={
99
+        'reqs': reqs,
100
+        'left': left,
101
+    })
102
+
103
+
104
+@logit
105
+@check_admin
106
+def shot_request_detail(request, administrator):
107
+    req_id = request.POST.get('req_id') or request.POST.get('request_id')
108
+
109
+    try:
110
+        req = TenancyShotRequestInfo.objects.get(request_id=req_id, status=True)
111
+    except TenancyShotRequestInfo.DoesNotExist:
112
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
113
+
114
+    return response(data={
115
+        'req': req.data,
116
+    })
117
+
118
+
119
+@logit
120
+@check_admin
121
+@transaction.atomic
122
+def shot_request_update(request, administrator):
123
+    req_id = request.POST.get('req_id') or request.POST.get('request_id')
124
+    shot_id = request.POST.get('shot_id', '')
125
+    name = request.POST.get('name', '')
126
+    phone = request.POST.get('phone', '')
127
+    postcode = request.POST.get('postcode', '')
128
+    location = request.POST.get('location', '')
129
+    purpose = request.POST.get('purpose', '')
130
+    return_date = request.POST.get('return_date', '')
131
+    request_status = request.POST.get('request_status', '')
132
+    tracking_number = request.POST.get('tracking_number', '')
133
+    back_tracking_number = request.POST.get('back_tracking_number', '')
134
+
135
+    try:
136
+        req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
137
+    except TenancyShotRequestInfo.DoesNotExist:
138
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
139
+
140
+    if shot_id:
141
+        req.shot_id = shot_id
142
+    if name:
143
+        req.name = name
144
+    if phone:
145
+        req.phone = phone
146
+    if postcode:
147
+        req.postcode = postcode
148
+    if location:
149
+        req.location = location
150
+    if purpose:
151
+        req.purpose = purpose
152
+    if return_date:
153
+        req.return_date = tc.to_date(return_date)
154
+    if request_status:
155
+        req.request_status = request_status
156
+    if tracking_number:
157
+        req.tracking_number = tracking_number
158
+    if back_tracking_number:
159
+        req.back_tracking_number = back_tracking_number
160
+    req.save()
161
+
162
+    return response(data={
163
+        'req': req.data,
164
+    })
165
+
166
+
167
+@logit
168
+@check_admin
169
+@transaction.atomic
170
+def shot_request_audit(request, administrator):
171
+    req_id = request.POST.get('req_id') or request.POST.get('request_id')
172
+    audit_status = request.POST.get('audit_status', 0)
173
+
174
+    try:
175
+        req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
176
+    except TenancyShotRequestInfo.DoesNotExist:
177
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
178
+
179
+    req.audit_status = audit_status
180
+    req.save()
181
+
182
+    return response(data={
183
+        'req': req.data,
184
+    })
185
+
186
+
187
+@logit
188
+@check_admin
189
+@transaction.atomic
190
+def shot_request_send(request, administrator):
191
+    req_id = request.POST.get('req_id') or request.POST.get('request_id')
192
+    tracking_number = request.POST.get('tracking_number', '')
193
+
194
+    try:
195
+        req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
196
+    except TenancyShotRequestInfo.DoesNotExist:
197
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
198
+
199
+    req.tracking_number = tracking_number
200
+    req.save()
201
+
202
+    return response(data={
203
+        'req': req.data,
204
+    })
205
+
206
+
207
+@logit
208
+@check_admin
209
+@transaction.atomic
210
+def shot_request_signed(request, administrator):
211
+    req_id = request.POST.get('req_id') or request.POST.get('request_id')
212
+
213
+    try:
214
+        req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
215
+    except TenancyShotRequestInfo.DoesNotExist:
216
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
217
+
218
+    req.request_status = '寄回已签收并检查无损坏'
219
+    req.save()
220
+
221
+    return response(data={
222
+        'req': req.data,
223
+    })

+ 104 - 3
api/tenancy_views.py

@@ -3,17 +3,19 @@
3 3
 from __future__ import division
4 4
 
5 5
 from django.conf import settings
6
+from django.db import transaction
6 7
 from django_logit import logit
8
+from django_query import get_query_value
7 9
 from django_response import response
8 10
 from paginator import pagination
11
+from TimeConvert import TimeConvert as tc
9 12
 
10
-from tenancy.models import TenancyShotInfo
13
+from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo
11 14
 from utils.error.errno_utils import TenancyStatusCode
12 15
 
13 16
 
14 17
 @logit
15 18
 def shot_list(request):
16
-    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
17 19
     page = request.POST.get('page', 1)
18 20
     num = request.POST.get('num', 20)
19 21
 
@@ -29,7 +31,6 @@ def shot_list(request):
29 31
 
30 32
 @logit
31 33
 def shot_detail(request):
32
-    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
33 34
     shot_id = request.POST.get('shot_id', '')
34 35
 
35 36
     try:
@@ -40,3 +41,103 @@ def shot_detail(request):
40 41
     return response(data={
41 42
         'shot': shot.data,
42 43
     })
44
+
45
+
46
+@logit
47
+def shot_request_create(request):
48
+    shot_id = request.POST.get('shot_id', '')
49
+    user_id = request.POST.get('user_id', '')
50
+    name = request.POST.get('name', '')
51
+    phone = request.POST.get('phone', '')
52
+    postcode = request.POST.get('postcode', '')
53
+    location = request.POST.get('location', '')
54
+    purpose = request.POST.get('purpose', '')
55
+    return_date = tc.to_date(request.POST.get('return_date', '') or settings.DEFAULT_START_DATE)
56
+
57
+    req = TenancyShotRequestInfo.objects.create(
58
+        shot_id=shot_id,
59
+        user_id=user_id,
60
+        name=name,
61
+        phone=phone,
62
+        postcode=postcode,
63
+        location=location,
64
+        purpose=purpose,
65
+        return_date=return_date,
66
+    )
67
+
68
+    return response(data={
69
+        'req': req.data,
70
+    })
71
+
72
+
73
+@logit
74
+def shot_request_list(request):
75
+    user_id = request.POST.get('user_id', '')
76
+    page = request.POST.get('page', 1)
77
+    num = request.POST.get('num', 20)
78
+
79
+    reqs = TenancyShotRequestInfo.objects.filter(user_id=user_id, status=True).order_by('-pk')
80
+    reqs = [req.data for req in reqs]
81
+    reqs, left = pagination(reqs, page, num)
82
+
83
+    return response(data={
84
+        'reqs': reqs,
85
+        'left': left,
86
+    })
87
+
88
+
89
+@logit
90
+def shot_request_detail(request):
91
+    req_id = request.POST.get('req_id') or request.POST.get('request_id')
92
+    user_id = request.POST.get('user_id', '')
93
+
94
+    try:
95
+        req = TenancyShotRequestInfo.objects.get(request_id=req_id, user_id=user_id, status=True)
96
+    except TenancyShotRequestInfo.DoesNotExist:
97
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
98
+
99
+    return response(data={
100
+        'req': req.data,
101
+    })
102
+
103
+
104
+@logit
105
+@transaction.atomic
106
+def shot_request_signed(request):
107
+    req_id = request.POST.get('req_id') or request.POST.get('request_id')
108
+    user_id = request.POST.get('user_id', '')
109
+    signed_images = get_query_value(request, 'signed_images', val_cast_type='listjson')
110
+
111
+    try:
112
+        req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, user_id=user_id, status=True)
113
+    except TenancyShotRequestInfo.DoesNotExist:
114
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
115
+
116
+    req.tracking_signed_images = signed_images
117
+    req.request_status = '寄出已签收'
118
+    req.save()
119
+
120
+    return response(data={
121
+        'req': req.data,
122
+    })
123
+
124
+
125
+@logit
126
+@transaction.atomic
127
+def shot_request_sendback(request):
128
+    req_id = request.POST.get('req_id') or request.POST.get('request_id')
129
+    user_id = request.POST.get('user_id', '')
130
+    back_tracking_number = request.POST.get('back_tracking_number', '')
131
+
132
+    try:
133
+        req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, user_id=user_id, status=True)
134
+    except TenancyShotRequestInfo.DoesNotExist:
135
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
136
+
137
+    req.back_tracking_number = back_tracking_number
138
+    req.request_status = '寄出已签收'
139
+    req.save()
140
+
141
+    return response(data={
142
+        'req': req.data,
143
+    })

+ 14 - 1
api/urls.py

@@ -324,7 +324,7 @@ urlpatterns += [
324 324
     url(r'^maintenance/tracking/info/callback$', maintenance_views.maintenance_tracking_info_callback, name='maintenance_tracking_info_callback'),
325 325
 ]
326 326
 
327
-# 租赁
327
+# 租赁镜头
328 328
 urlpatterns += [
329 329
     # 小程序接口
330 330
     url(r'^tenancy/shot/list$', tenancy_views.shot_list, name='tenancy_shot_list'),
@@ -340,6 +340,19 @@ urlpatterns += [
340 340
 # 租赁申请
341 341
 urlpatterns += [
342 342
     # 小程序接口
343
+    url(r'^tenancy/shot/request/create$', tenancy_views.shot_request_create, name='tenancy_shot_request_create'),
344
+    url(r'^tenancy/shot/request/list$', tenancy_views.shot_request_list, name='tenancy_shot_request_list'),
345
+    url(r'^tenancy/shot/request/detail$', tenancy_views.shot_request_detail, name='tenancy_shot_request_detail'),
346
+    url(r'^tenancy/shot/request/signed$', tenancy_views.shot_request_signed, name='tenancy_shot_request_signed'),
347
+    url(r'^tenancy/shot/request/sendback$', tenancy_views.shot_request_sendback, name='tenancy_shot_request_sendback'),
343 348
 
344 349
     # 后台管理接口
350
+    url(r'^admin/tenancy/shot/request/list$', tenancy_admin_views.shot_request_list, name='admin_tenancy_shot_request_list'),
351
+    url(r'^admin/tenancy/shot/request/detail$', tenancy_admin_views.shot_request_detail, name='admin_tenancy_shot_request_detail'),
352
+    url(r'^admin/tenancy/shot/request/update$', tenancy_admin_views.shot_request_update, name='admin_tenancy_shot_request_update'),
353
+    url(r'^admin/tenancy/shot/request/audit$', tenancy_admin_views.shot_request_audit, name='admin_tenancy_shot_request_audit'),
354
+    url(r'^admin/tenancy/shot/request/send$', tenancy_admin_views.shot_request_send, name='admin_tenancy_shot_request_send'),
355
+    url(r'^admin/tenancy/shot/request/signed$', tenancy_admin_views.shot_request_signed, name='admin_tenancy_shot_request_signed'),
356
+
357
+    # 快递信息回调接口
345 358
 ]

+ 6 - 0
tenancy/models.py

@@ -113,9 +113,15 @@ class TenancyShotRequestInfo(BaseModelMixin):
113 113
 
114 114
     @property
115 115
     def data(self):
116
+        try:
117
+            shot = TenancyShotInfo.objects.get(shot_id=self.shot_id)
118
+        except TenancyShotInfo.DoesNotExist:
119
+            shot = None
116 120
         return {
121
+            'req_id': self.request_id,
117 122
             'request_id': self.request_id,
118 123
             'shot_id': self.shot_id,
124
+            'shot_info': shot.data if shot else {},
119 125
             'user_id': self.user_id,
120 126
             'name': self.name,
121 127
             'phone': self.phone,

+ 2 - 0
utils/error/errno_utils.py

@@ -216,3 +216,5 @@ class MaintenanceStatusCode(BaseStatusCode):
216 216
 class TenancyStatusCode(BaseStatusCode):
217 217
     """ 租赁相关错误码 5090xx """
218 218
     TENANCY_SHOT_NOT_FOUND = StatusCodeField(509001, 'Tenancy Shot Not Found', description=u'租赁镜头不存在')
219
+
220
+    TENANCY_SHOT_REQUEST_NOT_FOUND = StatusCodeField(509011, 'Tenancy Shot Request Not Found', description=u'租赁镜头申请不存在')