调整租用逻辑

FFIB 2 年 前
コミット
1175fbf001
共有4 個のファイルを変更した142 個の追加38 個の削除を含む
  1. 20 22
      api/tenancy_admin_views.py
  2. 7 9
      api/tenancy_views.py
  3. 74 0
      tenancy/migrations/0004_auto_20221115_1836.py
  4. 41 7
      tenancy/models.py

+ 20 - 22
api/tenancy_admin_views.py

@@ -64,23 +64,12 @@ def shot_create(request, administrator):
64 64
     model_id = request.POST.get('model_id', '')
65 65
     model_name = request.POST.get('model_name', '')
66 66
     sn = request.POST.get('sn', '')
67
-    front_cap_status = request.POST.get('front_cap_status', 1)
68
-    rear_cap_status = request.POST.get('rear_cap_status', 1)
69
-    lens_hood_status = request.POST.get('lens_hood_status', 1)
70
-    tripod_ring_status = request.POST.get('tripod_ring_status', 1)
71
-    appearance_performance_status = request.POST.get('appearance_performance_status', 1)
72 67
     tenancy_status = request.POST.get('tenancy_status', 0)
73 68
 
74 69
     shot = TenancyShotInfo.objects.create(
75 70
         model_id=model_id,
76 71
         model_name=model_name,
77 72
         sn=sn,
78
-        front_cap_status=front_cap_status,
79
-        rear_cap_status=rear_cap_status,
80
-        lens_hood_status=lens_hood_status,
81
-        tripod_ring_status=tripod_ring_status,
82
-        appearance_performance_status=appearance_performance_status,
83
-        tenancy_status=tenancy_status,
84 73
     )
85 74
 
86 75
     return response(data={
@@ -95,22 +84,12 @@ def shot_update(request, administrator):
95 84
     model_id = request.POST.get('model_id', '')
96 85
     model_name = request.POST.get('model_name', '')
97 86
     sn = request.POST.get('sn', '')
98
-    front_cap_status = request.POST.get('front_cap_status', 1)
99
-    rear_cap_status = request.POST.get('rear_cap_status', 1)
100
-    lens_hood_status = request.POST.get('lens_hood_status', 1)
101
-    tripod_ring_status = request.POST.get('tripod_ring_status', 1)
102
-    appearance_performance_status = request.POST.get('appearance_performance_status', 1)
103 87
     tenancy_status = request.POST.get('tenancy_status', 0)
104 88
 
105 89
     shot, _ = TenancyShotInfo.objects.update_or_create(shot_id=shot_id, defaults={
106 90
         'model_id': model_id,
107 91
         'model_name': model_name,
108 92
         'sn': sn,
109
-        'front_cap_status': front_cap_status,
110
-        'rear_cap_status': rear_cap_status,
111
-        'lens_hood_status': lens_hood_status,
112
-        'tripod_ring_status': tripod_ring_status,
113
-        'appearance_performance_status': appearance_performance_status,
114 93
         'tenancy_status': tenancy_status,
115 94
     })
116 95
 
@@ -132,7 +111,9 @@ def shot_request_list(request, administrator):
132 111
     reqs = TenancyShotRequestInfo.objects.filter(status=True).order_by('-pk')
133 112
 
134 113
     if query:
135
-        reqs = reqs.filter(Q(phone__icontains=query) | Q(name__icontains=query))
114
+        shots = list(TenancyShotInfo.objects.values_list('model_id', flat=True).filter(sn__icontains=query))
115
+        reqs = reqs.filter(Q(phone__icontains=query) | Q(name__icontains=query) | Q(shot_id__in=shots))
116
+
136 117
 
137 118
     if request_status != 'all':
138 119
         reqs = reqs.filter(request_status=request_status)
@@ -264,17 +245,34 @@ def shot_request_send(request, administrator):
264 245
     express_name = request.POST.get('express_name', '')
265 246
     express_com = request.POST.get('express_com', '')
266 247
     tracking_number = request.POST.get('tracking_number', '')
248
+    shot_id = request.POST.get('shot_id', '')
249
+    front_cap_status = request.POST.get('front_cap_status', 0)
250
+    rear_cap_status = request.POST.get('rear_cap_status', 0)
251
+    lens_hood_status = request.POST.get('lens_hood_status', 0)
252
+    tripod_ring_status = request.POST.get('tripod_ring_status', 0)
253
+    appearance_performance_status = request.POST.get('appearance_performance_status', 0)
267 254
 
268 255
     try:
269 256
         req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
270 257
     except TenancyShotRequestInfo.DoesNotExist:
271 258
         return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
259
+    
260
+    try:
261
+        shot = TenancyShotInfo.objects.get(shot_id=shot_id, status=True)
262
+    except TenancyShotInfo.DoesNotExist:
263
+        return response()
272 264
 
273 265
     old_tracking_number = req.tracking_number
274 266
 
275 267
     req.express_name = express_name
276 268
     req.express_com = express_com
277 269
     req.tracking_number = tracking_number
270
+    req.shot_id = shot_id
271
+    req.front_cap_status = front_cap_status
272
+    req.rear_cap_status = rear_cap_status
273
+    req.lens_hood_status = lens_hood_status
274
+    req.tripod_ring_status = tripod_ring_status
275
+    req.appearance_performance_status = appearance_performance_status
278 276
     req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_SEND
279 277
     request_status_at = req.request_status_at
280 278
     request_status_at[TenancyShotRequestInfo.TENANCY_TRACKING_SEND] = tc.utc_string()

+ 7 - 9
api/tenancy_views.py

@@ -14,22 +14,20 @@ from paginator import pagination
14 14
 from TimeConvert import TimeConvert as tc
15 15
 
16 16
 from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo
17
+from mch.models import ModelInfo
17 18
 from utils.error.errno_utils import TenancyStatusCode
18 19
 from utils.kuaidi.subscribe import KuaiDi100 as KuaiDi100Subscribe
19 20
 
20 21
 
21 22
 @logit
22 23
 def shot_list(request):
23
-    page = request.POST.get('page', 1)
24
-    num = request.POST.get('num', 20)
25
-
26
-    shots = TenancyShotInfo.objects.filter(tenancy_status=0, status=True).order_by('-pk')
27
-    shots = [shot.data for shot in shots]
28
-    shots, left = pagination(shots, page, num)
24
+    shots = TenancyShotInfo.objects.values('model_id').filter(tenancy_status=0, status=True).order_by('model_id')
25
+    shots = [shot['model_id'] for shot in shots]
26
+    shots = ModelInfo.objects.filter(model_id__in=shots)
27
+    shots = [shot.admindata for shot in shots]
29 28
 
30 29
     return response(data={
31 30
         'shots': shots,
32
-        'left': left,
33 31
     })
34 32
 
35 33
 
@@ -49,7 +47,7 @@ def shot_detail(request):
49 47
 
50 48
 @logit
51 49
 def shot_request_create(request):
52
-    shot_id = request.POST.get('shot_id', '')
50
+    model_id = request.POST.get('model_id', '')
53 51
     user_id = request.POST.get('user_id', '')
54 52
     name = request.POST.get('name', '')
55 53
     phone = request.POST.get('phone', '')
@@ -59,7 +57,7 @@ def shot_request_create(request):
59 57
     return_date = tc.to_date(request.POST.get('return_date', '') or settings.DEFAULT_START_DATE)
60 58
 
61 59
     req = TenancyShotRequestInfo.objects.create(
62
-        shot_id=shot_id,
60
+        model_id=model_id,
63 61
         user_id=user_id,
64 62
         name=name,
65 63
         phone=phone,

+ 74 - 0
tenancy/migrations/0004_auto_20221115_1836.py

@@ -0,0 +1,74 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 3.2.16 on 2022-11-15 10:36
3
+
4
+from django.db import migrations, models
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('tenancy', '0003_auto_20221108_2326'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='tenancyshotrequestinfo',
16
+            name='admin_id',
17
+            field=models.CharField(blank=True, db_index=True, help_text='经手人唯一标识', max_length=32, null=True, verbose_name='admin_id'),
18
+        ),
19
+        migrations.AddField(
20
+            model_name='tenancyshotrequestinfo',
21
+            name='appearance_performance_status',
22
+            field=models.BooleanField(default=False, help_text='外观性能状态', verbose_name='appearance_performance_status'),
23
+        ),
24
+        migrations.AddField(
25
+            model_name='tenancyshotrequestinfo',
26
+            name='front_cap_status',
27
+            field=models.BooleanField(default=False, help_text='前盖状态', verbose_name='front_cap_status'),
28
+        ),
29
+        migrations.AddField(
30
+            model_name='tenancyshotrequestinfo',
31
+            name='lens_hood_status',
32
+            field=models.BooleanField(default=False, help_text='遮光罩状态', verbose_name='lens_hood_status'),
33
+        ),
34
+        migrations.AddField(
35
+            model_name='tenancyshotrequestinfo',
36
+            name='model_id',
37
+            field=models.CharField(blank=True, db_index=True, help_text='镜头型号唯一标识', max_length=32, null=True, verbose_name='model_id'),
38
+        ),
39
+        migrations.AddField(
40
+            model_name='tenancyshotrequestinfo',
41
+            name='rear_cap_status',
42
+            field=models.BooleanField(default=False, help_text='后盖状态', verbose_name='rear_cap_status'),
43
+        ),
44
+        migrations.AddField(
45
+            model_name='tenancyshotrequestinfo',
46
+            name='tripod_ring_status',
47
+            field=models.BooleanField(default=False, help_text='脚架环状态', verbose_name='tripod_ring_status'),
48
+        ),
49
+        migrations.AlterField(
50
+            model_name='tenancyshotinfo',
51
+            name='appearance_performance_status',
52
+            field=models.BooleanField(default=False, help_text='外观性能状态', verbose_name='appearance_performance_status'),
53
+        ),
54
+        migrations.AlterField(
55
+            model_name='tenancyshotinfo',
56
+            name='front_cap_status',
57
+            field=models.BooleanField(default=False, help_text='前盖状态', verbose_name='front_cap_status'),
58
+        ),
59
+        migrations.AlterField(
60
+            model_name='tenancyshotinfo',
61
+            name='lens_hood_status',
62
+            field=models.BooleanField(default=False, help_text='遮光罩状态', verbose_name='lens_hood_status'),
63
+        ),
64
+        migrations.AlterField(
65
+            model_name='tenancyshotinfo',
66
+            name='rear_cap_status',
67
+            field=models.BooleanField(default=False, help_text='后盖状态', verbose_name='rear_cap_status'),
68
+        ),
69
+        migrations.AlterField(
70
+            model_name='tenancyshotinfo',
71
+            name='tripod_ring_status',
72
+            field=models.BooleanField(default=False, help_text='脚架环状态', verbose_name='tripod_ring_status'),
73
+        ),
74
+    ]

+ 41 - 7
tenancy/models.py

@@ -7,7 +7,7 @@ from jsonfield import JSONField
7 7
 from shortuuidfield import ShortUUIDField
8 8
 from TimeConvert import TimeConvert as tc
9 9
 
10
-from mch.models import ModelInfo
10
+from mch.models import ModelInfo, AdministratorInfo
11 11
 
12 12
 
13 13
 class TenancyShotInfo(BaseModelMixin):
@@ -20,11 +20,11 @@ class TenancyShotInfo(BaseModelMixin):
20 20
     model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
21 21
     model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
22 22
     sn = models.CharField(_(u'sn'), max_length=32, blank=True, null=True, help_text=u'序列号', db_index=True)
23
-    front_cap_status = models.BooleanField(_(u'front_cap_status'), default=True, help_text=u'前盖状态')
24
-    rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=True, help_text=u'后盖状态')
25
-    lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=True, help_text=u'遮光罩状态')
26
-    tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=True, help_text=u'脚架环状态')
27
-    appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=True, help_text=u'外观性能状态')
23
+    front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态')
24
+    rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态')
25
+    lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')
26
+    tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')
27
+    appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')
28 28
     tenancy_status = models.IntegerField(_(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态')
29 29
 
30 30
     class Meta:
@@ -70,10 +70,20 @@ class TenancyShotRequestInfo(BaseModelMixin):
70 70
     )
71 71
 
72 72
     request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True, null=True, help_text=u'申请唯一标识', db_index=True, unique=True)
73
+    admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)
74
+
73 75
     shot_id = models.CharField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True)
76
+    model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'镜头型号唯一标识', db_index=True)
74 77
 
75 78
     user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
76 79
 
80
+    #镜头配件信息
81
+    front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态')
82
+    rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态')
83
+    lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')
84
+    tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')
85
+    appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')
86
+
77 87
     # 身份证信息
78 88
     identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号')
79 89
     identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名')
@@ -132,6 +142,11 @@ class TenancyShotRequestInfo(BaseModelMixin):
132 142
             'request_id': self.request_id,
133 143
             'shot_id': self.shot_id,
134 144
             'shot_info': shot.data if shot else {},
145
+            'front_cap_status': self.front_cap_status,
146
+            'rear_cap_status': self.rear_cap_status,
147
+            'lens_hood_status': self.lens_hood_status,
148
+            'tripod_ring_status': self.tripod_ring_status,
149
+            'appearance_performance_status': self.appearance_performance_status,
135 150
             'user_id': self.user_id,
136 151
             'name': self.name,
137 152
             'phone': self.phone,
@@ -159,14 +174,26 @@ class TenancyShotRequestInfo(BaseModelMixin):
159 174
     @property
160 175
     def admindata(self):
161 176
         try:
162
-            shot = TenancyShotInfo.objects.get(shot_id=self.shot_id)
177
+            admin = AdministratorInfo.objects.get(admin_=self.admin)
178
+        except AdministratorInfo.DoesNotExist:
179
+            admin = None
180
+
181
+        try:
182
+            shot = TenancyShotInfo.objects.get(shot_id=self.shot_id, status=True)
163 183
         except TenancyShotInfo.DoesNotExist:
164 184
             shot = None
185
+        
186
+        try:
187
+            model = ModelInfo.objects.get(model_id=self.model_id, status=True)
188
+        except ModelInfo.DoesNotExist:
189
+            model = None
190
+
165 191
         return {
166 192
             'req_id': self.request_id,
167 193
             'request_id': self.request_id,
168 194
             'shot_id': self.shot_id,
169 195
             'shot_info': shot.data if shot else {},
196
+            'model_info': model.admindata,
170 197
             'user_id': self.user_id,
171 198
             'name': self.name,
172 199
             'phone': self.phone,
@@ -189,4 +216,11 @@ class TenancyShotRequestInfo(BaseModelMixin):
189 216
             'request_status': self.request_status,
190 217
             'request_status_at': {k: tc.local_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%dT%H:%M:%S.%fZ')) for k, v in self.request_status_at.items()},
191 218
             'created_at': tc.local_string(utc_dt=self.created_at),
219
+            'admin_id': self.admin_id,
220
+            'admin_data': admin.admindata if admin else {},
221
+            'front_cap_status': self.front_cap_status,
222
+            'rear_cap_status': self.rear_cap_status,
223
+            'lens_hood_status': self.lens_hood_status,
224
+            'tripod_ring_status': self.tripod_ring_status,
225
+            'appearance_performance_status': self.appearance_performance_status,
192 226
         }