记录积分获得记录

FFIB 4 gadi atpakaļ
vecāks
revīzija
f9d21d534b
4 mainītis faili ar 105 papildinājumiem un 2 dzēšanām
  1. 37 0
      account/migrations/0051_userintegralincomeexpensesinfo.py
  2. 35 1
      account/models.py
  3. 1 0
      api/urls.py
  4. 32 1
      miniapp/views.py

+ 37 - 0
account/migrations/0051_userintegralincomeexpensesinfo.py

@@ -0,0 +1,37 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.26 on 2020-12-08 09:15
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', '0050_auto_20201208_1607'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.CreateModel(
16
+            name='UserIntegralIncomeExpensesInfo',
17
+            fields=[
18
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
20
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
21
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
22
+                ('user_id', models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='clerk_id')),
23
+                ('brand_id', models.CharField(blank=True, db_index=True, help_text='\u54c1\u724c\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='brand_id')),
24
+                ('brand_name', models.CharField(blank=True, help_text='\u54c1\u724c\u540d\u79f0', max_length=255, null=True, verbose_name='brand_name')),
25
+                ('integral_from', models.IntegerField(choices=[(0, '\u4ea7\u54c1'), (1, '\u5206\u4eab'), (2, '\u6295\u7a3f')], default=0, help_text='\u79ef\u5206\u6765\u6e90', verbose_name='integral_from')),
26
+                ('model_id', models.CharField(blank=True, db_index=True, help_text='\u578b\u53f7\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='model_id')),
27
+                ('model_name', models.CharField(blank=True, help_text='\u578b\u53f7\u540d\u79f0', max_length=255, null=True, verbose_name='model_name')),
28
+                ('code', models.CharField(blank=True, db_index=True, help_text='\u673a\u8eab\u7801', max_length=32, null=True, verbose_name='code')),
29
+                ('integral', models.IntegerField(default=0, help_text='\u589e\u51cf\u79ef\u5206', verbose_name='integral')),
30
+                ('remark', models.CharField(blank=True, help_text='\u5907\u6ce8', max_length=255, null=True, verbose_name='remark')),
31
+            ],
32
+            options={
33
+                'verbose_name': 'userinfointegralincomeexpensesinfo',
34
+                'verbose_name_plural': 'userinfointegralincomeexpensesinfo',
35
+            },
36
+        ),
37
+    ]

+ 35 - 1
account/models.py

@@ -320,4 +320,38 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin):
320 320
             # 'brand_id': self.brand_id,
321 321
             'card_id': self.membercardid,
322 322
             'code': self.memberusercardcode,
323
-        }
323
+        }
324
+
325
+class UserIntegralIncomeExpensesInfo(BaseModelMixin):
326
+    PRODUCT = 0
327
+    SHARE = 1
328
+    CONTRIBUTE = 2
329
+
330
+    INTEGRAL_FROM = (
331
+        (PRODUCT, u'产品'),
332
+        (SHARE, u'分享'),
333
+        (CONTRIBUTE, u'投稿'),
334
+    )
335
+
336
+    user_id = models.CharField(_(u'clerk_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
337
+
338
+    brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
339
+    brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
340
+    
341
+    integral_from = models.IntegerField(_(u'integral_from'), choices=INTEGRAL_FROM, default=PRODUCT, help_text=u'积分来源')
342
+
343
+    model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
344
+    model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
345
+
346
+    code = models.CharField(_(u'code'), max_length=32, blank=True, null=True, help_text=u'机身码', db_index=True)
347
+
348
+    integral = models.IntegerField(_(u'integral'), default=0, help_text=u'增减积分')
349
+
350
+    remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注')
351
+
352
+    class Meta:
353
+        verbose_name = _(u'userinfointegralincomeexpensesinfo')
354
+        verbose_name_plural = _(u'userinfointegralincomeexpensesinfo')
355
+
356
+    def __unicode__(self):
357
+        return '%d' % self.pk

+ 1 - 0
api/urls.py

@@ -135,6 +135,7 @@ urlpatterns += [
135 135
     url(r'^admin/query_usercoupons$', admin_views.query_usercoupons, name='query_usercoupons'),
136 136
     url(r'^admin/query_userinfo$', admin_views.query_userinfo, name='query_userinfo'),
137 137
     url(r'^admin/userinfo_update$', admin_views.userinfo_update, name='userinfo_update'),
138
+    url(r'^admin/userinfo/integral/add$', mini_views.user_integral_add, name='user_integral_add'),
138 139
 
139 140
     # statistic
140 141
     url(r'^admin/statistic/user_profile$', admin_views.statistic_userprofile, name='statistic_userprofile'),

+ 32 - 1
miniapp/views.py

@@ -13,7 +13,7 @@ from pywe_miniapp import get_session_info, get_session_key, get_userinfo, store_
13 13
 from pywe_storage import RedisStorage
14 14
 from TimeConvert import TimeConvert as tc
15 15
 
16
-from account.models import UserInfo
16
+from account.models import UserInfo, UserIntegralIncomeExpensesInfo
17 17
 from mch.models import SaleclerkInfo
18 18
 from statistic.models import RegisterStatisticInfo
19 19
 from utils.error.errno_utils import ProductBrandStatusCode, UserStatusCode
@@ -247,3 +247,34 @@ def membercard_extradata(request):
247 247
     extraData = get_miniapp_extraData(settings.MEMBER_CARD_ID, outer_str='miniapp', appid=appid, secret=secret, storage=RedisStorage(r))
248 248
 
249 249
     return response(200, 'Get extraData Success', u'获取 extraData 成功', extraData)
250
+
251
+@logit
252
+@transaction.atomic
253
+def user_integral_add(request):
254
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
255
+    user_id = request.POST.get('user_id', '')
256
+    integral = int(request.POST.get('integral', 0))
257
+    remark = request.POST.get('remark')
258
+
259
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
260
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
261
+
262
+    try:
263
+        user = UserInfo.objects.get(user_id=user_id, status=True)
264
+    except UserInfo.DoesNotExist:
265
+        return response(UserStatusCode.USER_NOT_FOUND)
266
+
267
+    UserIntegralIncomeExpensesInfo.objects.create(
268
+        brand_id=brand_id,
269
+        user_id=user_id,
270
+        integral_from=UserIntegralIncomeExpensesInfo.CONTRIBUTE,
271
+        integral=integral,
272
+        remark=remark
273
+    )
274
+
275
+    user.integral += integral
276
+    user.save()
277
+
278
+    return response(200, 'Add User Integral Success', u'添加用户投稿积分成功')
279
+
280
+