@@ -0,0 +1,40 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 1.11.22 on 2019-08-12 06:29 |
|
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 |
+ ('account', '0037_auto_20190418_1736'), |
|
12 |
+ ] |
|
13 |
+ |
|
14 |
+ operations = [ |
|
15 |
+ migrations.AddField( |
|
16 |
+ model_name='userinfo', |
|
17 |
+ name='clerk_id', |
|
18 |
+ field=models.CharField(blank=True, db_index=True, help_text='\u5e97\u5458\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='clerk_id'), |
|
19 |
+ ), |
|
20 |
+ migrations.AlterField( |
|
21 |
+ model_name='lensmaninfo', |
|
22 |
+ name='sex', |
|
23 |
+ field=models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], default=0, help_text='\u6444\u5f71\u5e08\u6027\u522b', verbose_name='sex'), |
|
24 |
+ ), |
|
25 |
+ migrations.AlterField( |
|
26 |
+ model_name='tourguideinfo', |
|
27 |
+ name='sex', |
|
28 |
+ field=models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], default=0, help_text='\u5bfc\u6e38\u6027\u522b', verbose_name='sex'), |
|
29 |
+ ), |
|
30 |
+ migrations.AlterField( |
|
31 |
+ model_name='userinfo', |
|
32 |
+ name='sex', |
|
33 |
+ field=models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], default=0, help_text='\u7528\u6237\u6027\u522b', verbose_name='sex'), |
|
34 |
+ ), |
|
35 |
+ migrations.AlterField( |
|
36 |
+ model_name='wechatinfo', |
|
37 |
+ name='sex', |
|
38 |
+ field=models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], default=0, help_text='\u7528\u6237\u6027\u522b', verbose_name='sex'), |
|
39 |
+ ), |
|
40 |
+ ] |
@@ -340,6 +340,8 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
340 | 340 |
membercardid = models.CharField(_(u'membercardid'), max_length=32, blank=True, null=True, help_text=_(u'会员卡编号'), db_index=True) |
341 | 341 |
memberusercardcode = models.CharField(_(u'memberusercardcode'), max_length=32, blank=True, null=True, help_text=_(u'用户会员卡编号'), db_index=True) |
342 | 342 |
|
343 |
+ clerk_id = models.CharField(_(u'clerk_id'), max_length=32, blank=True, null=True, help_text=u'店员唯一标识', db_index=True) |
|
344 |
+ |
|
343 | 345 |
test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True) |
344 | 346 |
|
345 | 347 |
class Meta: |
@@ -390,9 +392,9 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
390 | 392 |
] |
391 | 393 |
|
392 | 394 |
def brandata(self, brand_id=None): |
393 |
- if self.unionid: |
|
395 |
+ if self.clerk_id: |
|
394 | 396 |
try: |
395 |
- saleclerk = SaleclerkInfo.objects.get(brand_id=brand_id, unionid=self.unionid, status=True) |
|
397 |
+ saleclerk = SaleclerkInfo.objects.get(clerk_id=self.clerk_id, status=True) |
|
396 | 398 |
except SaleclerkInfo.DoesNotExist: |
397 | 399 |
saleclerk = None |
398 | 400 |
saleclerk_info = saleclerk.data if saleclerk and saleclerk.is_auth else {} |
@@ -227,6 +227,7 @@ urlpatterns += [ |
||
227 | 227 |
|
228 | 228 |
urlpatterns += [ |
229 | 229 |
url(r'^clerk/submit$', oauth_views.clerk_submit_api, name='clerk_submit_api'), # 店员信息提交 |
230 |
+ url(r'^clerk/submit2$', oauth_views.clerk_submit2_api, name='clerk_submit2_api'), # 店员信息提交 |
|
230 | 231 |
url(r'^clerk/sale/decrypt$', sale_views.clerk_sale_decrypt_api, name='clerk_sale_decrypt_api'), |
231 | 232 |
url(r'^clerk/sale/submit$', sale_views.clerk_sale_submit_api, name='clerk_sale_submit_api'), # 店员销售信息提交 |
232 | 233 |
url(r'^clerk/integral/list$', sale_views.clerk_integral_list_api, name='clerk_integral_list_api'), # |
@@ -0,0 +1,20 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 1.11.22 on 2019-08-12 06:29 |
|
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 |
+ ('guideline', '0002_auto_20181117_0052'), |
|
12 |
+ ] |
|
13 |
+ |
|
14 |
+ operations = [ |
|
15 |
+ migrations.AlterField( |
|
16 |
+ model_name='screenadmininfo', |
|
17 |
+ name='sex', |
|
18 |
+ field=models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], default=0, help_text='\u7528\u6237\u6027\u522b', verbose_name='sex'), |
|
19 |
+ ), |
|
20 |
+ ] |
@@ -0,0 +1,34 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 1.11.22 on 2019-08-12 06:29 |
|
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', '0040_auto_20190810_1619'), |
|
12 |
+ ] |
|
13 |
+ |
|
14 |
+ operations = [ |
|
15 |
+ migrations.AddField( |
|
16 |
+ model_name='saleclerkinfo', |
|
17 |
+ name='user_id', |
|
18 |
+ field=models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='user_id'), |
|
19 |
+ ), |
|
20 |
+ migrations.AlterField( |
|
21 |
+ model_name='saleclerkinfo', |
|
22 |
+ name='clerk_sex', |
|
23 |
+ field=models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], db_index=True, default=1, help_text='\u5e97\u5458\u6027\u522b', verbose_name='clerk_sex'), |
|
24 |
+ ), |
|
25 |
+ migrations.AlterField( |
|
26 |
+ model_name='saleclerkinfo', |
|
27 |
+ name='sex', |
|
28 |
+ field=models.IntegerField(choices=[(0, '\u672a\u77e5'), (1, '\u7537'), (2, '\u5973')], db_index=True, default=0, help_text='Sex', verbose_name='sex'), |
|
29 |
+ ), |
|
30 |
+ migrations.AlterUniqueTogether( |
|
31 |
+ name='saleclerkinfo', |
|
32 |
+ unique_together=set([('brand_id', 'unionid'), ('brand_id', 'user_id')]), |
|
33 |
+ ), |
|
34 |
+ ] |
@@ -377,6 +377,7 @@ class SaleclerkInfo(BaseModelMixin, SexModelMixin): |
||
377 | 377 |
clerk_sex = models.IntegerField(_(u'clerk_sex'), choices=SexModelMixin.SEX_TUPLE, default=SexModelMixin.MALE, help_text=u'店员性别', db_index=True) |
378 | 378 |
clerk_phone = models.CharField(_(u'clerk_phone'), max_length=11, blank=True, null=True, help_text=u'店员联系电话') |
379 | 379 |
|
380 |
+ user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
380 | 381 |
unionid = models.CharField(_(u'unionid'), max_length=32, blank=True, null=True, help_text=u'微信 UnionID', db_index=True) |
381 | 382 |
openid = models.CharField(_(u'openid'), max_length=32, blank=True, null=True, help_text=u'微信 OpenID', db_index=True) |
382 | 383 |
|
@@ -396,7 +397,8 @@ class SaleclerkInfo(BaseModelMixin, SexModelMixin): |
||
396 | 397 |
verbose_name = _(u'经销商销售员信息') |
397 | 398 |
verbose_name_plural = _(u'经销商销售员信息') |
398 | 399 |
unique_together = ( |
399 |
- ('unionid', 'brand_id'), |
|
400 |
+ ('brand_id', 'unionid'), |
|
401 |
+ ('brand_id', 'user_id'), |
|
400 | 402 |
) |
401 | 403 |
|
402 | 404 |
def __unicode__(self): |
@@ -7,7 +7,7 @@ from django_logit import logit |
||
7 | 7 |
from django_response import response |
8 | 8 |
from json_render import json_render |
9 | 9 |
|
10 |
-from account.models import LensmanInfo, TourGuideInfo |
|
10 |
+from account.models import LensmanInfo, TourGuideInfo, UserInfo |
|
11 | 11 |
from mch.models import BrandInfo, DistributorInfo, SaleclerkInfo |
12 | 12 |
from utils.error.errno_utils import ProductBrandStatusCode, ProductDistributorStatusCode, SaleclerkStatusCode |
13 | 13 |
from utils.redis.connect import r |
@@ -121,3 +121,49 @@ def clerk_submit_api(request): |
||
121 | 121 |
clerk.save() |
122 | 122 |
|
123 | 123 |
return response(200, 'Submit Success', u'提交成功', {}) |
124 |
+ |
|
125 |
+ |
|
126 |
+@logit |
|
127 |
+@transaction.atomic |
|
128 |
+def clerk_submit2_api(request): |
|
129 |
+ """ 店员授权信息提交 """ |
|
130 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) |
|
131 |
+ distributor_id = request.POST.get('distributor_id', '') |
|
132 |
+ user_id = request.POST.get('user_id', '') |
|
133 |
+ unionid = request.POST.get('unionid', '') |
|
134 |
+ openid = request.POST.get('openid', '') |
|
135 |
+ phone = request.POST.get('phone', '') |
|
136 |
+ |
|
137 |
+ if SaleclerkInfo.objects.filter(brand_id=brand_id, clerk_phone=phone).exclude(user_id=user_id).exists(): |
|
138 |
+ return response(SaleclerkStatusCode.CLERK_PHONE_ALREADY_EXISTS) |
|
139 |
+ |
|
140 |
+ try: |
|
141 |
+ distributor = DistributorInfo.objects.get(distributor_id=distributor_id) |
|
142 |
+ except DistributorInfo.DoesNotExist: |
|
143 |
+ return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND) |
|
144 |
+ |
|
145 |
+ fields = { |
|
146 |
+ 'distributor_id': distributor_id, |
|
147 |
+ 'distributor_name': distributor.distributor_name, |
|
148 |
+ 'clerk_name': request.POST.get('name', ''), |
|
149 |
+ 'clerk_sex': int(request.POST.get('sex', 1)), |
|
150 |
+ 'clerk_phone': phone, |
|
151 |
+ 'unionid': unionid, |
|
152 |
+ 'openid': openid, |
|
153 |
+ 'user_status': SaleclerkInfo.UNVERIFIED, |
|
154 |
+ } |
|
155 |
+ |
|
156 |
+ clerk, created = SaleclerkInfo.objects.select_for_update().get_or_create(brand_id=brand_id, user_id=user_id, defaults=fields) |
|
157 |
+ # clerk.user_status = SaleclerkInfo.UNVERIFIED |
|
158 |
+ clerk.status = True |
|
159 |
+ # 状态为 UNVERIFIED 的允许修改, 其他需要登录摄影师 APP 进行信息的修改 |
|
160 |
+ if clerk.user_status not in [SaleclerkInfo.UNVERIFIED, SaleclerkInfo.REFUSED]: |
|
161 |
+ return response(SaleclerkStatusCode.CLERK_ALREADY_NOT_UNVERIFIED) |
|
162 |
+ if not created: |
|
163 |
+ for key, value in fields.iteritems(): |
|
164 |
+ setattr(clerk, key, value) |
|
165 |
+ clerk.save() |
|
166 |
+ |
|
167 |
+ UserInfo.objects.filter(user_id=user_id).update(clerk_id=clerk.clerk_id) |
|
168 |
+ |
|
169 |
+ return response(200, 'Submit Success', u'提交成功', {}) |