@@ -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 |
+ ] |
@@ -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 |
@@ -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'), |
@@ -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 |
+ |