:art: Add api activity_group_share

huangqimin001 4 anni fa
parent
commit
96c4bec605

+ 53 - 0
account/migrations/0048_auto_20201130_0131.py

@@ -0,0 +1,53 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('account', '0047_auto_20200601_0242'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='lensmanincomeexpensesinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='lensmaninfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='lensmanloginloginfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='tourguideinfo',
30
+            name='status',
31
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
32
+        ),
33
+        migrations.AlterField(
34
+            model_name='userincomeexpensesinfo',
35
+            name='status',
36
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
37
+        ),
38
+        migrations.AlterField(
39
+            model_name='userinfo',
40
+            name='status',
41
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
42
+        ),
43
+        migrations.AlterField(
44
+            model_name='userloginloginfo',
45
+            name='status',
46
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
47
+        ),
48
+        migrations.AlterField(
49
+            model_name='wechatinfo',
50
+            name='status',
51
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
52
+        ),
53
+    ]

+ 78 - 16
api/member_views.py

@@ -8,12 +8,14 @@ from django_logit import logit
8 8
 from django_query import get_query_value
9 9
 from django_response import response
10 10
 from paginator import pagination
11
+from pywe_miniapp import get_shareinfo
12
+from pywe_storage import RedisStorage
11 13
 from TimeConvert import TimeConvert as tc
12 14
 
13 15
 from account.models import UserInfo
14 16
 from coupon.models import UserCouponInfo
15
-from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityInfo, MemberActivitySigninInfo,
16
-                           MemberActivitySignupInfo, RightInfo)
17
+from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityGroupShareInfo, MemberActivityInfo,
18
+                           MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo)
17 19
 from utils.error.errno_utils import (MemberActivityStatusCode, MemberCouponStatusCode, MemberGoodStatusCode,
18 20
                                      MemberRightStatusCode, UserStatusCode)
19 21
 from utils.redis.connect import r
@@ -21,6 +23,9 @@ from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST, MEMBER_UPGRADE_INFO
21 23
 from utils.redis.rshot import get_member_shot_data
22 24
 
23 25
 
26
+WECHAT = settings.WECHAT
27
+
28
+
24 29
 @logit
25 30
 def member(request):
26 31
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
@@ -44,7 +49,7 @@ def member(request):
44 49
 
45 50
     upgrade_info, _ = r.getdel(MEMBER_UPGRADE_INFO % (brand_id, user_id))
46 51
 
47
-    return response(200, data={
52
+    return response(data={
48 53
         'nickname': user.final_nickname,
49 54
         'avatar': user.avatar,
50 55
         'integral': user.integral,
@@ -74,7 +79,7 @@ def rights(request):
74 79
     rights = RightInfo.objects.filter(status=True).order_by('position')
75 80
     rights = [right.data for right in rights]
76 81
 
77
-    return response(200, data={
82
+    return response(data={
78 83
         'nickname': user.final_nickname,
79 84
         'avatar': user.avatar,
80 85
         'integral': user.integral,
@@ -97,7 +102,7 @@ def right_detail(request):
97 102
     except RightInfo.DoesNotExist:
98 103
         return response(MemberRightStatusCode.RIGHT_NOT_FOUND)
99 104
 
100
-    return response(200, data={
105
+    return response(data={
101 106
         'right': right.data,
102 107
     })
103 108
 
@@ -121,7 +126,7 @@ def goods(request):
121 126
         else:
122 127
             goods.append(good.data(user_id))
123 128
 
124
-    return response(200, data={
129
+    return response(data={
125 130
         'nickname': user.final_nickname,
126 131
         'avatar': user.avatar,
127 132
         'integral': user.integral,
@@ -151,7 +156,7 @@ def good_detail(request):
151 156
     except GoodsInfo.DoesNotExist:
152 157
         return response(MemberGoodStatusCode.GOOD_NOT_FOUND)
153 158
 
154
-    return response(200, data={
159
+    return response(data={
155 160
         'nickname': user.final_nickname,
156 161
         'avatar': user.avatar,
157 162
         'integral': user.integral,
@@ -233,7 +238,7 @@ def good_exchange(request):
233 238
 
234 239
         goods.append(good.data(user_id))
235 240
 
236
-    return response(200, data={
241
+    return response(data={
237 242
         'nickname': user.final_nickname,
238 243
         'avatar': user.avatar,
239 244
         'integral': user.integral,
@@ -256,7 +261,7 @@ def coupons(request):
256 261
     coupons, left = pagination(coupons, page, num)
257 262
     coupons = [coupon.data for coupon in coupons if not coupon.has_used]
258 263
 
259
-    return response(200, data={
264
+    return response(data={
260 265
         'coupons': coupons,
261 266
         'left': left,
262 267
     })
@@ -272,7 +277,7 @@ def user_coupon_detail(request):
272 277
     except UserCouponInfo.DoesNotExist:
273 278
         return response(MemberCouponStatusCode.USER_COUPON_NOT_FOUND)
274 279
 
275
-    return response(200, data=coupon.data)
280
+    return response(data=coupon.data)
276 281
 
277 282
 
278 283
 @logit
@@ -301,14 +306,14 @@ def user_coupon_use(request):
301 306
     coupon.used_at = tc.utc_datetime()
302 307
     coupon.save()
303 308
 
304
-    return response(200, data=coupon.data)
309
+    return response(data=coupon.data)
305 310
 
306 311
 
307 312
 @logit
308 313
 def integrals(request):
309 314
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
310 315
 
311
-    return response(200, data={
316
+    return response(data={
312 317
         'shots_types': get_member_shot_data(),
313 318
         'enable_photo_upvote_integral': True,
314 319
         'mp_url': 'https://mp.weixin.qq.com/s/2K6PAnf3KrxtrP40-DBuww',
@@ -339,7 +344,7 @@ def activity_list(request):
339 344
         else:
340 345
             activitys.append(act.data(user_id))
341 346
 
342
-    return response(200, data={
347
+    return response(data={
343 348
         'banners': banners,
344 349
         'activitys': activitys,
345 350
     })
@@ -356,7 +361,7 @@ def activity_detail(request):
356 361
     except MemberActivityInfo.DoesNotExist:
357 362
         return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
358 363
 
359
-    return response(200, data={
364
+    return response(data={
360 365
         'activity': act.details(user_id),
361 366
     })
362 367
 
@@ -383,7 +388,7 @@ def activity_signup(request):
383 388
     # TODO: 立即推送模版消息(报名成功,时间,地点)
384 389
     # TODO: 延迟(活动当天)推送模版消息(时间,地点)
385 390
 
386
-    return response(200, data={
391
+    return response(data={
387 392
         'activity': act.data(user_id),
388 393
     })
389 394
 
@@ -415,6 +420,63 @@ def activity_signin(request):
415 420
 
416 421
     # TODO: 立即推送模版消息(感谢您参加活动,获得的积分)
417 422
 
418
-    return response(200, data={
423
+    return response(data={
419 424
         'activity': act.data(user_id),
420 425
     })
426
+
427
+
428
+def get_group_share_info_integral(share_user_id, open_gid, group_share_integral):
429
+    # 校验该分享人是否已领取该群积分
430
+    has_integral = MemberActivityGroupShareInfo.objects.filter(share_user_id=share_user_id, open_gid=open_gid, is_integral=True).exists()
431
+    if has_integral:
432
+        return False, 0
433
+    # TODO: 其他限制条件
434
+    return True, group_share_integral
435
+
436
+
437
+@logit
438
+def activity_group_share(request):
439
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
440
+    share_user_id = request.POST.get('share_user_id', '')
441
+    click_user_id = request.POST.get('click_user_id', '')
442
+    activity_id = request.POST.get('activity_id')
443
+
444
+    wxcfg = WECHAT.get('MINIAPP', {})
445
+
446
+    appid = wxcfg.get('appID')
447
+    secret = wxcfg.get('appsecret')
448
+
449
+    iv = request.POST.get('iv', '')
450
+    encryptedData = request.POST.get('encryptedData', '')
451
+
452
+    # {
453
+    #     "openGId": "OPENGID"
454
+    # }
455
+    shareinfo = get_shareinfo(appid=appid, secret=secret, unid=click_user_id, session_key=None, encryptedData=encryptedData, iv=iv, storage=RedisStorage(r))
456
+
457
+    open_gid = shareinfo.get('openGId')
458
+
459
+    if not open_gid:
460
+        return response()
461
+
462
+    try:
463
+        act = MemberActivityInfo.objects.select_for_update().get(activity_id=activity_id, status=True)
464
+    except MemberActivityInfo.DoesNotExist:
465
+        return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
466
+
467
+    # 判断是否给积分 & 给多少积分
468
+    is_integral, integral = get_group_share_info_integral(share_user_id, open_gid, act.group_share_integral)
469
+
470
+    MemberActivityGroupShareInfo.objects.create(**{
471
+        'brand_id': act.brand_id,
472
+        'brand_name': act.brand_name,
473
+        'share_user_id': share_user_id,
474
+        'click_user_id': click_user_id,
475
+        'open_gid': open_gid,
476
+        'activity_id': activity_id,
477
+        'title': act.title,
478
+        'is_integral': is_integral,
479
+        'integral': integral,
480
+    })
481
+
482
+    return response(data={})

+ 2 - 0
api/urls.py

@@ -363,6 +363,8 @@ urlpatterns += [
363 363
     url(r'^member/activity/signup$', member_views.activity_signup, name='member_activity_signup'),
364 364
     url(r'^member/activity/signin$', member_views.activity_signin, name='member_activity_signin'),
365 365
 
366
+    url(r'^member/activity/group_share$', member_views.activity_group_share, name='member_activity_group_share'),
367
+
366 368
     url(r'^rights$', member_views.rights, name='rights'),
367 369
     url(r'^right/detail$', member_views.right_detail, name='right_detail'),
368 370
     url(r'^goods$', member_views.goods, name='goods'),

+ 28 - 0
coupon/migrations/0016_auto_20201130_0131.py

@@ -0,0 +1,28 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('coupon', '0015_auto_20200727_1720'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='couponinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='usercouponinfo',
20
+            name='coupon_from',
21
+            field=models.CharField(blank=True, db_index=True, default='MEMBER_BENEFITS', help_text='劵来源', max_length=32, null=True, verbose_name='coupon_from'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='usercouponinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+    ]

+ 43 - 0
group/migrations/0046_auto_20201130_0131.py

@@ -0,0 +1,43 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('group', '0045_auto_20180930_1159'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='groupinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='groupphotoinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='groupphotoorderinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='groupuserinfo',
30
+            name='status',
31
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
32
+        ),
33
+        migrations.AlterField(
34
+            model_name='photocommentinfo',
35
+            name='status',
36
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
37
+        ),
38
+        migrations.AlterField(
39
+            model_name='photothumbupinfo',
40
+            name='status',
41
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
42
+        ),
43
+    ]

+ 18 - 0
guideline/migrations/0004_auto_20201130_0131.py

@@ -0,0 +1,18 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('guideline', '0003_auto_20190826_1537'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='screenadmininfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+    ]

+ 23 - 0
integral/migrations/0020_auto_20201130_0131.py

@@ -0,0 +1,23 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('integral', '0019_saleclerksubmitloginfo_is_upload_qiniu'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='saleclerkintegralincomeexpensesinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='saleclerksubmitloginfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+    ]

+ 33 - 0
logs/migrations/0012_auto_20201130_0131.py

@@ -0,0 +1,33 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('logs', '0011_auto_20200309_1735'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='mchinfodecryptloginfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='mchinfoencryptloginfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='mchloginfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='mchsearchmodelandcameraloginfo',
30
+            name='status',
31
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
32
+        ),
33
+    ]

+ 18 - 0
marketcode/migrations/0004_auto_20201130_0131.py

@@ -0,0 +1,18 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('marketcode', '0003_auto_20200114_0220'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='marketcodeinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+    ]

+ 98 - 0
mch/migrations/0058_auto_20201130_0131.py

@@ -0,0 +1,98 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('mch', '0057_auto_20200602_1403'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='activityinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='administratorinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='brandinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='brandmodeldistributorpriceinfo',
30
+            name='status',
31
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
32
+        ),
33
+        migrations.AlterField(
34
+            model_name='cameramodelinfo',
35
+            name='status',
36
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
37
+        ),
38
+        migrations.AlterField(
39
+            model_name='consumeinfosubmitloginfo',
40
+            name='status',
41
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
42
+        ),
43
+        migrations.AlterField(
44
+            model_name='distributorinfo',
45
+            name='status',
46
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
47
+        ),
48
+        migrations.AlterField(
49
+            model_name='latestappinfo',
50
+            name='status',
51
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
52
+        ),
53
+        migrations.AlterField(
54
+            model_name='latestappscreeninfo',
55
+            name='status',
56
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
57
+        ),
58
+        migrations.AlterField(
59
+            model_name='maintenancemaninfo',
60
+            name='sex',
61
+            field=models.IntegerField(choices=[(0, '未知'), (1, '男'), (2, '女')], default=0, help_text='Sex', verbose_name='sex'),
62
+        ),
63
+        migrations.AlterField(
64
+            model_name='maintenancemaninfo',
65
+            name='status',
66
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
67
+        ),
68
+        migrations.AlterField(
69
+            model_name='modelcamerabodyinfo',
70
+            name='status',
71
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
72
+        ),
73
+        migrations.AlterField(
74
+            model_name='modelimageinfo',
75
+            name='status',
76
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
77
+        ),
78
+        migrations.AlterField(
79
+            model_name='modelinfo',
80
+            name='status',
81
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
82
+        ),
83
+        migrations.AlterField(
84
+            model_name='operatorinfo',
85
+            name='status',
86
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
87
+        ),
88
+        migrations.AlterField(
89
+            model_name='saleclerkinfo',
90
+            name='sex',
91
+            field=models.IntegerField(choices=[(0, '未知'), (1, '男'), (2, '女')], default=0, help_text='Sex', verbose_name='sex'),
92
+        ),
93
+        migrations.AlterField(
94
+            model_name='saleclerkinfo',
95
+            name='status',
96
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
97
+        ),
98
+    ]

+ 77 - 0
member/migrations/0019_auto_20201130_0131.py

@@ -0,0 +1,77 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+import shortuuidfield.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('member', '0018_memberactivityinfo_is_signup'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.CreateModel(
15
+            name='MemberActivityGroupShareInfo',
16
+            fields=[
17
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
19
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
20
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
21
+                ('brand_id', models.CharField(blank=True, db_index=True, help_text='品牌唯一标识', max_length=32, null=True, verbose_name='brand_id')),
22
+                ('brand_name', models.CharField(blank=True, help_text='品牌名称', max_length=255, null=True, verbose_name='brand_name')),
23
+                ('group_share_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='活动群组分享唯一标识', max_length=22, null=True, unique=True)),
24
+                ('share_user_id', models.CharField(blank=True, db_index=True, help_text='分享用户唯一标识', max_length=32, null=True, verbose_name='share_user_id')),
25
+                ('click_user_id', models.CharField(blank=True, db_index=True, help_text='点击用户唯一标识', max_length=32, null=True, verbose_name='click_user_id')),
26
+                ('open_gid', models.CharField(blank=True, db_index=True, help_text='群组唯一标识', max_length=32, null=True, verbose_name='open_gid')),
27
+                ('activity_id', models.CharField(blank=True, db_index=True, help_text='活动唯一标识', max_length=32, null=True, verbose_name='activity_id')),
28
+                ('title', models.CharField(blank=True, help_text='活动名称', max_length=255, null=True, verbose_name='title')),
29
+                ('is_integral', models.BooleanField(default=False, help_text='是否有积分', verbose_name='is_integral')),
30
+                ('integral', models.IntegerField(default=0, help_text='积分', verbose_name='integral')),
31
+            ],
32
+            options={
33
+                'verbose_name': '会员活动群组分享信息',
34
+                'verbose_name_plural': '会员活动群组分享信息',
35
+            },
36
+        ),
37
+        migrations.AddField(
38
+            model_name='memberactivityinfo',
39
+            name='group_share_integral',
40
+            field=models.IntegerField(default=0, help_text='群组分享会员积分', verbose_name='group_share_integral'),
41
+        ),
42
+        migrations.AlterField(
43
+            model_name='goodsinfo',
44
+            name='status',
45
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
46
+        ),
47
+        migrations.AlterField(
48
+            model_name='goodsorderinfo',
49
+            name='status',
50
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
51
+        ),
52
+        migrations.AlterField(
53
+            model_name='memberactivityinfo',
54
+            name='status',
55
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
56
+        ),
57
+        migrations.AlterField(
58
+            model_name='memberactivitysignininfo',
59
+            name='status',
60
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
61
+        ),
62
+        migrations.AlterField(
63
+            model_name='memberactivitysignupinfo',
64
+            name='status',
65
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
66
+        ),
67
+        migrations.AlterField(
68
+            model_name='rightinfo',
69
+            name='status',
70
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
71
+        ),
72
+        migrations.AlterField(
73
+            model_name='shottypeinfo',
74
+            name='status',
75
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
76
+        ),
77
+    ]

+ 27 - 0
member/models.py

@@ -297,6 +297,7 @@ class MemberActivityInfo(BaseModelMixin):
297 297
     lon = models.FloatField(_(u'lon'), default=1.0, help_text=u'经度')
298 298
 
299 299
     integral = models.IntegerField(_(u'integral'), default=0, help_text=u'会员积分')
300
+    group_share_integral = models.IntegerField(_(u'group_share_integral'), default=0, help_text=u'群组分享会员积分')
300 301
 
301 302
     image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'活动内容图片')
302 303
 
@@ -453,3 +454,29 @@ class MemberActivitySigninInfo(BaseModelMixin):
453 454
 
454 455
     def __unicode__(self):
455 456
         return unicode(self.pk)
457
+
458
+
459
+class MemberActivityGroupShareInfo(BaseModelMixin):
460
+    brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
461
+    brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
462
+
463
+    group_share_id = ShortUUIDField(_(u'group_share_id'), max_length=32, blank=True, null=True, help_text=u'活动群组分享唯一标识', db_index=True, unique=True)
464
+
465
+    share_user_id = models.CharField(_(u'share_user_id'), max_length=32, blank=True, null=True, help_text=u'分享用户唯一标识', db_index=True)
466
+    click_user_id = models.CharField(_(u'click_user_id'), max_length=32, blank=True, null=True, help_text=u'点击用户唯一标识', db_index=True)
467
+
468
+    open_gid = models.CharField(_(u'open_gid'), max_length=32, blank=True, null=True, help_text=u'群组唯一标识', db_index=True)
469
+
470
+    activity_id = models.CharField(_(u'activity_id'), max_length=32, blank=True, null=True, help_text=u'活动唯一标识', db_index=True)
471
+
472
+    title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'活动名称')
473
+
474
+    is_integral = models.BooleanField(_(u'is_integral'), default=False, help_text=u'是否有积分')
475
+    integral = models.IntegerField(_(u'integral'), default=0, help_text=u'积分')
476
+
477
+    class Meta:
478
+        verbose_name = _(u'会员活动群组分享信息')
479
+        verbose_name_plural = _(u'会员活动群组分享信息')
480
+
481
+    def __unicode__(self):
482
+        return unicode(self.pk)

+ 38 - 0
message/migrations/0014_auto_20201130_0131.py

@@ -0,0 +1,38 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('message', '0013_auto_20180103_0446'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='systemmessagedeleteinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='systemmessageinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='systemmessagereadinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='usermessageinfo',
30
+            name='msg_type',
31
+            field=models.CharField(db_index=True, default='system', help_text='消息类型', max_length=8, verbose_name='msg_type'),
32
+        ),
33
+        migrations.AlterField(
34
+            model_name='usermessageinfo',
35
+            name='status',
36
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
37
+        ),
38
+    ]

+ 48 - 0
operation/migrations/0019_auto_20201130_0131.py

@@ -0,0 +1,48 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('operation', '0018_auto_20180114_2314'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='appsettingsinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='boxprogramversioninfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='feedbackinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='guestentrancecontrolinfo',
30
+            name='status',
31
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
32
+        ),
33
+        migrations.AlterField(
34
+            model_name='latestappinfo',
35
+            name='status',
36
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
37
+        ),
38
+        migrations.AlterField(
39
+            model_name='patchinfo',
40
+            name='status',
41
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
42
+        ),
43
+        migrations.AlterField(
44
+            model_name='splashinfo',
45
+            name='status',
46
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
47
+        ),
48
+    ]

+ 18 - 0
pay/migrations/0012_auto_20201130_0131.py

@@ -0,0 +1,18 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('pay', '0011_auto_20180103_0446'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='orderinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+    ]

+ 28 - 0
photo/migrations/0014_auto_20201130_0131.py

@@ -0,0 +1,28 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('photo', '0013_auto_20180103_0446'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='photosinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='photouuidinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='uuidinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+    ]

+ 1 - 1
requirements_dj.txt

@@ -11,7 +11,7 @@ django-json-render==1.0.3
11 11
 django-json-response==1.1.5
12 12
 django-logit==1.1.3
13 13
 django-mobi2==1.0.2
14
-django-models-ext==1.1.9
14
+django-models-ext==1.1.10
15 15
 django-multidomain==1.1.4
16 16
 django-paginator2==1.1.3
17 17
 django-query==1.0.6

+ 1 - 1
requirements_pywe.txt

@@ -7,7 +7,7 @@ pywe-marketcode==1.0.3
7 7
 pywe-membercard==1.0.1
8 8
 pywe-custom-message==1.0.1
9 9
 pywe-event-message==1.0.1
10
-pywe-miniapp==1.1.5
10
+pywe-miniapp==1.1.6
11 11
 pywe-oauth==1.1.1
12 12
 pywe-pay==1.0.13
13 13
 pywe-pay-notify==1.0.5

+ 28 - 0
sales/migrations/0008_auto_20201130_0131.py

@@ -0,0 +1,28 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('sales', '0007_supersalesresponsibilityinfomodelssalestatisticinfo_sr_avatar'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='salesresponsibilityinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='salesresponsibilityinfomodelssalestatisticinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='supersalesresponsibilityinfomodelssalestatisticinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+    ]

+ 18 - 0
staff/migrations/0002_auto_20201130_0131.py

@@ -0,0 +1,18 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('staff', '0001_initial'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='staffdeleteclerksalesubmitloginfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+    ]

+ 68 - 0
statistic/migrations/0016_auto_20201130_0131.py

@@ -0,0 +1,68 @@
1
+# Generated by Django 2.2.15 on 2020-11-29 17:31
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('statistic', '0015_modelsalestatisticinfo_saleclerks'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='consumedistributorsalestatisticinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='consumemodelsalestatisticinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='consumeprovincesalestatisticinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='consumesalestatisticinfo',
30
+            name='status',
31
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
32
+        ),
33
+        migrations.AlterField(
34
+            model_name='consumeuserstatisticinfo',
35
+            name='status',
36
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
37
+        ),
38
+        migrations.AlterField(
39
+            model_name='distributorsalestatisticinfo',
40
+            name='status',
41
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
42
+        ),
43
+        migrations.AlterField(
44
+            model_name='modelsalestatisticinfo',
45
+            name='status',
46
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
47
+        ),
48
+        migrations.AlterField(
49
+            model_name='provincesalestatisticinfo',
50
+            name='status',
51
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
52
+        ),
53
+        migrations.AlterField(
54
+            model_name='registerstatisticinfo',
55
+            name='status',
56
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
57
+        ),
58
+        migrations.AlterField(
59
+            model_name='saleclerksalestatisticinfo',
60
+            name='status',
61
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
62
+        ),
63
+        migrations.AlterField(
64
+            model_name='salestatisticinfo',
65
+            name='status',
66
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
67
+        ),
68
+    ]