testsn

Brightcells 6 gadi atpakaļ
vecāks
revīzija
74f2a0cd6d
5 mainītis faili ar 40 papildinājumiem un 24 dzēšanām
  1. 5 2
      api/clerk_views.py
  2. 2 2
      integral/admin.py
  3. 1 0
      integral/models.py
  4. 2 0
      kodo/settings.py
  5. 30 20
      page/sale_views.py

+ 5 - 2
api/clerk_views.py

@@ -2,6 +2,7 @@
2 2
 
3 3
 from __future__ import division
4 4
 
5
+from django.db import transaction
5 6
 from django_logit import logit
6 7
 from django_response import response
7 8
 from paginator import pagination
@@ -40,6 +41,7 @@ def clerk_add(request):
40 41
 
41 42
 
42 43
 @logit
44
+@transaction.atomic
43 45
 def clerk_delete(request):
44 46
     distributor_id = request.POST.get('distributor_id', '')
45 47
     clerk_id = request.POST.get('clerk_id', '')
@@ -52,7 +54,7 @@ def clerk_delete(request):
52 54
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
53 55
 
54 56
     try:
55
-        clerk = SaleclerkInfo.objects.get(brand_id=administrator.brand_id, clerk_id=clerk_id, status=True)
57
+        clerk = SaleclerkInfo.objects.select_for_update().get(brand_id=administrator.brand_id, clerk_id=clerk_id, status=True)
56 58
     except SaleclerkInfo.DoesNotExist:
57 59
         return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
58 60
 
@@ -64,6 +66,7 @@ def clerk_delete(request):
64 66
 
65 67
 
66 68
 @logit
69
+@transaction.atomic
67 70
 def clerk_update(request):
68 71
     distributor_id = request.POST.get('distributor_id', '')
69 72
     clerk_id = request.POST.get('clerk_id', '')
@@ -79,7 +82,7 @@ def clerk_update(request):
79 82
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
80 83
 
81 84
     try:
82
-        clerk = SaleclerkInfo.objects.get(brand_id=administrator.brand_id, clerk_id=clerk_id, status=True)
85
+        clerk = SaleclerkInfo.objects.select_for_update().get(brand_id=administrator.brand_id, clerk_id=clerk_id, status=True)
83 86
     except SaleclerkInfo.DoesNotExist:
84 87
         return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
85 88
 

+ 2 - 2
integral/admin.py

@@ -14,8 +14,8 @@ class SaleclerkIntegralIncomeExpensesInfoAdmin(ReadOnlyModelAdmin, admin.ModelAd
14 14
 
15 15
 
16 16
 class SaleclerkSubmitLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
17
-    list_display = ('clerk_id', 'code', 'remark', 'dupload', 'test_user', 'status', 'created_at', 'updated_at')
18
-    list_filter = ('dupload', 'test_user', 'status')
17
+    list_display = ('clerk_id', 'code', 'remark', 'dupload', 'test_user', 'test_sn', 'status', 'created_at', 'updated_at')
18
+    list_filter = ('dupload', 'test_user', 'test_sn', 'status')
19 19
     search_fields = ('code', 'remark')
20 20
 
21 21
 

+ 1 - 0
integral/models.py

@@ -97,6 +97,7 @@ class SaleclerkSubmitLogInfo(BaseModelMixin):
97 97
     dupload = models.BooleanField(_(u'dupload'), default=False, help_text=_(u'是否为重复提交'), db_index=True)
98 98
 
99 99
     test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True)
100
+    test_sn = models.BooleanField(_(u'test_sn'), default=False, help_text=_(u'是否为测试序列号'), db_index=True)
100 101
 
101 102
     class Meta:
102 103
         verbose_name = _(u'saleclerksubmitloginfo')

+ 2 - 0
kodo/settings.py

@@ -398,6 +398,8 @@ KODO_SCREEN_LOGIN_URL = 'http://pai.ai/w/o?s=snsapi_base&r=http%3A%2F%2Fkodo.xfo
398 398
 GIS_2_ADMINISTRATIVE_DIVISION = 'http://116.196.105.215:1234/gis?auth_user=freevip&latitude={0}&longitude={1}'
399 399
 PHONE_2_ADMINISTRATIVE_DIVISION = 'https://www.baifubao.com/callback?cmd=1059&callback=phone&phone={0}'
400 400
 
401
+TESTING_SNS = ['000000']
402
+
401 403
 # 开发调试相关配置
402 404
 if DEBUG:
403 405
     try:

+ 30 - 20
page/sale_views.py

@@ -37,6 +37,8 @@ def clerk_sale_submit_api(request):
37 37
 
38 38
     file_path = request.POST.get('file_path', '')
39 39
 
40
+    test_sn = serialNo in settings.TESTING_SNS
41
+
40 42
     try:
41 43
         user = UserInfo.objects.get(user_id=user_id, status=True)
42 44
     except UserInfo.DoesNotExist:
@@ -63,7 +65,7 @@ def clerk_sale_submit_api(request):
63 65
         return response(ProductModelStatusCode.MODEL_NOT_FOUND)
64 66
 
65 67
     try:
66
-        clerk = SaleclerkInfo.objects.get(brand_id=brand.brand_id, unionid=user.unionid, status=True)
68
+        clerk = SaleclerkInfo.objects.select_for_update().get(brand_id=brand.brand_id, unionid=user.unionid, status=True)
67 69
     except SaleclerkInfo.DoesNotExist:
68 70
         return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
69 71
 
@@ -87,8 +89,15 @@ def clerk_sale_submit_api(request):
87 89
         lon=lon,
88 90
         image=file_path,
89 91
         test_user=clerk.test_user,
92
+        test_sn=test_sn,
90 93
     )
91 94
 
95
+    if test_sn:
96
+        return response(200, data={
97
+            'integral': 0,
98
+            'total_integral': clerk.integral,
99
+        })
100
+
92 101
     try:
93 102
         sci = SaleclerkIntegralIncomeExpensesInfo.objects.get(code=serialNo, status=True)
94 103
     except SaleclerkIntegralIncomeExpensesInfo.DoesNotExist:
@@ -117,25 +126,26 @@ def clerk_sale_submit_api(request):
117 126
     clerk.save()
118 127
 
119 128
     # 店员积分记录
120
-    SaleclerkIntegralIncomeExpensesInfo.objects.create(
121
-        clerk_id=clerk.clerk_id,
122
-        type=SaleclerkIntegralIncomeExpensesInfo.INCOME,
123
-        brand_id=brand.brand_id,
124
-        brand_name=brand.brand_name,
125
-        model_id=model.model_id,
126
-        model_name=model.model_name,
127
-        distributor_id=distributor.distributor_id,
128
-        distributor_name=distributor.distributor_name,
129
-        code=serialNo,
130
-        consumer_name=consumer_name,
131
-        consumer_phone=consumer_phone,
132
-        lat=lat,
133
-        lon=lon,
134
-        image=file_path,
135
-        integral=integral,
136
-        left_integral=clerk.total_integral,
137
-        test_user=clerk.test_user,
138
-    )
129
+    if integral > 0:
130
+        SaleclerkIntegralIncomeExpensesInfo.objects.create(
131
+            clerk_id=clerk.clerk_id,
132
+            type=SaleclerkIntegralIncomeExpensesInfo.INCOME,
133
+            brand_id=brand.brand_id,
134
+            brand_name=brand.brand_name,
135
+            model_id=model.model_id,
136
+            model_name=model.model_name,
137
+            distributor_id=distributor.distributor_id,
138
+            distributor_name=distributor.distributor_name,
139
+            code=serialNo,
140
+            consumer_name=consumer_name,
141
+            consumer_phone=consumer_phone,
142
+            lat=lat,
143
+            lon=lon,
144
+            image=file_path,
145
+            integral=integral,
146
+            left_integral=clerk.total_integral,
147
+            test_user=clerk.test_user,
148
+        )
139 149
 
140 150
     # TODO: Make statistic async
141 151
     if not sci: