queryusedsn

Kimi.Huang лет %!s(int64=5): %!d(string=назад)
Родитель
Сommit
77c612316a
5 измененных файлов с 63 добавлено и 3 удалено
  1. 31 2
      api/admin_views.py
  2. 1 0
      api/urls.py
  3. 25 0
      mch/migrations/0036_auto_20190701_1441.py
  4. 4 1
      mch/models.py
  5. 2 0
      utils/error/errno_utils.py

+ 31 - 2
api/admin_views.py

@@ -6,9 +6,10 @@ from django.conf import settings
6 6
 from django.db import transaction
7 7
 from django_logit import logit
8 8
 from django_response import response
9
+from TimeConvert import TimeConvert as tc
9 10
 
10
-from mch.models import ConsumeInfoSubmitLogInfo
11
-from utils.error.errno_utils import ProductBrandStatusCode, ProductMachineStatusCode
11
+from mch.models import ConsumeInfoSubmitLogInfo, AdministratorInfo
12
+from utils.error.errno_utils import AdministratorStatusCode, ProductBrandStatusCode, ProductMachineStatusCode
12 13
 
13 14
 
14 15
 WECHAT = settings.WECHAT
@@ -17,12 +18,16 @@ WECHAT = settings.WECHAT
17 18
 @logit
18 19
 def querysn(request):
19 20
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
21
+    admin_id = request.POST.get('admin_id', '')
20 22
     model_id = request.POST.get('model_id', '')
21 23
     sn = request.POST.get('sn', '')
22 24
 
23 25
     if brand_id != settings.KODO_DEFAULT_BRAND_ID:
24 26
         return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
25 27
 
28
+    if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists():
29
+        return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)
30
+
26 31
     log = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=brand_id, model_id=model_id, serialNo=sn, submit_during_activity=True, has_used=False).order_by('-pk').first()
27 32
 
28 33
     if not log:
@@ -35,21 +40,45 @@ def querysn(request):
35 40
 
36 41
 
37 42
 @logit
43
+def queryusedsn(request):
44
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
45
+    admin_id = request.POST.get('admin_id', '')
46
+
47
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
48
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
49
+
50
+    if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists():
51
+        return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)
52
+
53
+    logs = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=brand_id, admin_id=admin_id, has_used=True).order_by('-used_at')
54
+    logs = [log.data for log in logs]
55
+
56
+    return response(200, 'Query Used SN Success', u'查询核销序列号成功', data={
57
+        'logs': logs,
58
+    })
59
+
60
+
61
+@logit
38 62
 @transaction.atomic
39 63
 def usecoupon(request):
40 64
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
65
+    admin_id = request.POST.get('admin_id', '')
41 66
     model_id = request.POST.get('model_id', '')
42 67
     sn = request.POST.get('sn', '')
43 68
 
44 69
     if brand_id != settings.KODO_DEFAULT_BRAND_ID:
45 70
         return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
46 71
 
72
+    if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists():
73
+        return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)
74
+
47 75
     try:
48 76
         log = ConsumeInfoSubmitLogInfo.objects.get(brand_id=brand_id, model_id=model_id, serialNo=sn, submit_during_activity=True, has_used=False)
49 77
     except ConsumeInfoSubmitLogInfo.DoesNotExist:
50 78
         return response(ProductMachineStatusCode.SN_NOT_FOUND)
51 79
 
52 80
     log.has_used = True
81
+    log.used_at = tc.utc_datetime()
53 82
     log.save()
54 83
 
55 84
     return response(200, 'Use Coupon Success', u'核销优惠券成功')

+ 1 - 0
api/urls.py

@@ -277,5 +277,6 @@ urlpatterns += [
277 277
 
278 278
 urlpatterns += [
279 279
     url(r'^admin/querysn$', admin_views.querysn, name='querysn'),
280
+    url(r'^admin/queryusedsn$', admin_views.queryusedsn, name='queryusedsn'),
280 281
     url(r'^admin/usecoupon$', admin_views.usecoupon, name='usecoupon'),
281 282
 ]

+ 25 - 0
mch/migrations/0036_auto_20190701_1441.py

@@ -0,0 +1,25 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.20 on 2019-07-01 06:41
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('mch', '0035_auto_20190625_1443'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AddField(
16
+            model_name='consumeinfosubmitloginfo',
17
+            name='admin_id',
18
+            field=models.CharField(blank=True, db_index=True, help_text='\u6838\u9500\u5458\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='admin_id'),
19
+        ),
20
+        migrations.AddField(
21
+            model_name='consumeinfosubmitloginfo',
22
+            name='used_at',
23
+            field=models.DateTimeField(blank=True, help_text='\u7ef4\u4fee\u5238\u6838\u9500\u65f6\u95f4', null=True, verbose_name='used_at'),
24
+        ),
25
+    ]

+ 4 - 1
mch/models.py

@@ -507,6 +507,8 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
507 507
     coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间'))
508 508
     coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=_(u'维修券金额(单位:分)'))
509 509
     has_used = models.BooleanField(_(u'has_used'), default=False, help_text=_(u'是否已核销'), db_index=True)
510
+    admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'核销员唯一标识', db_index=True)
511
+    used_at = models.DateTimeField(_(u'used_at'), blank=True, null=True, help_text=_(u'维修券核销时间'))
510 512
 
511 513
     test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True)
512 514
 
@@ -534,7 +536,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
534 536
 
535 537
     @property
536 538
     def data(self):
537
-        if self.submit_during_activity and not self.has_used:
539
+        if self.submit_during_activity:
538 540
             try:
539 541
                 act = ActivityInfo.objects.get(pk=self.activity_id)
540 542
             except ActivityInfo.DoesNotExist:
@@ -554,6 +556,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
554 556
             'submit_during_activity': self.submit_during_activity,
555 557
             'coupon_info': act.coupon_info(created_at=self.created_at) if act else self.coupon_info,
556 558
             'has_used': self.has_used,
559
+            'used_at': self.used_at,
557 560
         }
558 561
 
559 562
 

+ 2 - 0
utils/error/errno_utils.py

@@ -82,6 +82,8 @@ class AdministratorStatusCode(BaseStatusCode):
82 82
     ADMINISTRATOR_NOT_ACTIVATED = StatusCodeField(400215, 'Administrator Not Activated', description=u'管理员未激活')
83 83
     ADMINISTRATOR_HAS_DISABLED = StatusCodeField(400216, 'Administrator Has Disabled', description=u'管理员已禁用')
84 84
     ADMINISTRATOR_HAS_DELETED = StatusCodeField(400217, 'Administrator Has Deleted', description=u'管理员已删除')
85
+    # 管理员
86
+    MAINTENANCE_NOT_FOUND = StatusCodeField(400251, 'Maintenance Not Found', description=u'核销员不存在')
85 87
 
86 88
 
87 89
 class OperatorStatusCode(BaseStatusCode):