@@ -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 |
+ |