send_jsapi_hb

Kimi.Huang 6 年之前
父節點
當前提交
44839ebb5d
共有 8 個文件被更改,包括 67 次插入19 次删除
  1. 7 0
      api/encrypt_views.py
  2. 22 1
      api/mch_views.py
  3. 2 1
      api/urls.py
  4. 2 2
      logs/admin.py
  5. 13 1
      logs/models.py
  6. 18 13
      miniapp/redpack_views.py
  7. 2 0
      utils/redis/rkeys.py
  8. 1 1
      utils/shells/tests.py

+ 7 - 0
api/encrypt_views.py

@@ -110,6 +110,12 @@ def decrypt(request):
110 110
 
111 111
     act = ActivityInfo.objects.filter(brand_id=brand.brand_id, status=True).order_by('-pk').first()
112 112
 
113
+    # 红包
114
+    try:
115
+        elog = MchInfoEncryptLogInfo.objects.get(sn=sn)
116
+    except MchInfoEncryptLogInfo.DoesNotExist:
117
+        elog = None
118
+
113 119
     return response(200, data={
114 120
         'plaintext': plaintext,
115 121
         'logo_url': brand.brand_logo_url if brand else '',
@@ -123,4 +129,5 @@ def decrypt(request):
123 129
             'SerialNo': sn,
124 130
         },
125 131
         'has_unexpired_activity': True if act and act.has_unexpired_activity else False,
132
+        'redpack_info': elog.redpack_info if elog else {},
126 133
     })

+ 22 - 1
api/mch_views.py

@@ -12,13 +12,15 @@ from pywe_storage import RedisStorage
12 12
 from TimeConvert import TimeConvert as tc
13 13
 
14 14
 from account.models import UserInfo
15
+from logs.models import MchInfoEncryptLogInfo
15 16
 from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo,
16 17
                         LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo)
18
+from miniapp.redpack_views import send_jsapi_hb
17 19
 from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo
18 20
 from utils.error.errno_utils import (AdministratorStatusCode, OperatorStatusCode, ProductBrandStatusCode,
19 21
                                      ProductModelStatusCode, UserStatusCode)
20 22
 from utils.redis.connect import r
21
-from utils.redis.rkeys import MINI_PROGRAM_GIS_LIST
23
+from utils.redis.rkeys import MINI_PROGRAM_GIS_LIST, REDPACK_WAITING_SEND_LIST
22 24
 
23 25
 
24 26
 WECHAT = settings.WECHAT
@@ -374,6 +376,25 @@ def consumer_info_api(request):
374 376
             'ymd': ymd,
375 377
         })
376 378
 
379
+    try:
380
+        elog = MchInfoEncryptLogInfo.objects.select_for_update().get(sn=serialNo)
381
+    except MchInfoEncryptLogInfo.DoesNotExist:
382
+        elog = None
383
+
384
+    if elog and not dupload:
385
+        amount = 100
386
+        if user.openid:
387
+            send_jsapi_hb(user.openid, amount, transfer=False)
388
+            elog.has_send_redpack = True
389
+            elog.user_id = user.user_id
390
+            elog.nickname = user.nickname
391
+            elog.save()
392
+        else:
393
+            r.rpushjson(REDPACK_WAITING_SEND_LIST, {
394
+                'user_id': user.user_id,
395
+                'amount': amount,
396
+            })
397
+
377 398
     return response(200, 'Submit Consumer Info Success', u'提交消费者信息成功')
378 399
 
379 400
 

+ 2 - 1
api/urls.py

@@ -12,7 +12,8 @@ from group import (groupuser_views, lensman_views, tourguidegroup_views, tourgui
12 12
                    tourguidegroupuser_views)
13 13
 from group import views as group_views
14 14
 from message import views as message_views
15
-from miniapp import views as mini_views, redpack_views
15
+from miniapp import redpack_views
16
+from miniapp import views as mini_views
16 17
 from operation import views as op_views
17 18
 from page import oauth_views, sale_views, screen_views
18 19
 from pay import views as pay_views

+ 2 - 2
logs/admin.py

@@ -7,8 +7,8 @@ from logs.models import MchInfoDecryptLogInfo, MchInfoEncryptLogInfo, MchLogInfo
7 7
 
8 8
 
9 9
 class MchInfoEncryptLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
10
-    list_display = ('plaintext', 'alg', 'ciphertext', 'brand_pk', 'model_pk', 'distributor_pk', 'sn', 'operator_id', 'status', 'created_at', 'updated_at')
11
-    list_filter = ('alg', 'brand_pk', 'model_pk', 'distributor_pk', 'operator_id', 'status')
10
+    list_display = ('plaintext', 'alg', 'ciphertext', 'brand_pk', 'model_pk', 'distributor_pk', 'sn', 'operator_id', 'has_send_redpack', 'user_id', 'nickname', 'status', 'created_at', 'updated_at')
11
+    list_filter = ('alg', 'brand_pk', 'model_pk', 'distributor_pk', 'operator_id', 'has_send_redpack', 'status')
12 12
 
13 13
 
14 14
 class MchInfoDecryptLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):

+ 13 - 1
logs/models.py

@@ -2,7 +2,7 @@
2 2
 
3 3
 from django.db import models
4 4
 from django.utils.translation import ugettext_lazy as _
5
-from django_models_ext import BaseModelMixin, upload_file_url, upload_path
5
+from django_models_ext import BaseModelMixin, upload_path
6 6
 from shortuuidfield import ShortUUIDField
7 7
 
8 8
 
@@ -20,6 +20,10 @@ class MchInfoEncryptLogInfo(BaseModelMixin):
20 20
 
21 21
     operator_id = models.CharField(_(u'operator_id'), max_length=32, blank=True, null=True, help_text=u'操作员唯一标识', db_index=True)
22 22
 
23
+    has_send_redpack = models.BooleanField(_(u'has_send_redpack'), default=True, help_text=u'是否已发放红包', db_index=True)
24
+    user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识(红包)', db_index=True)
25
+    nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户昵称')
26
+
23 27
     class Meta:
24 28
         verbose_name = _(u'mchinfoencryptloginfo')
25 29
         verbose_name_plural = _(u'mchinfoencryptloginfo')
@@ -27,6 +31,14 @@ class MchInfoEncryptLogInfo(BaseModelMixin):
27 31
     def __unicode__(self):
28 32
         return unicode(self.pk)
29 33
 
34
+    @property
35
+    def redpack_info(self):
36
+        return {
37
+            'has_send_redpack': self.has_send_redpack,
38
+            'user_id': self.user_id,
39
+            'nickname': self.nickname,
40
+        }
41
+
30 42
 
31 43
 class MchInfoDecryptLogInfo(BaseModelMixin):
32 44
     ciphertext = models.CharField(_(u'ciphertext'), max_length=64, blank=True, null=True, help_text=u'待解密字符串', db_index=True)

+ 18 - 13
miniapp/redpack_views.py

@@ -10,19 +10,7 @@ from account.models import UserInfo
10 10
 WECHAT = settings.WECHAT
11 11
 
12 12
 
13
-def jsapi_hb_api(request):
14
-    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
15
-    user_id = request.POST.get('user_id', '')
16
-    transfer = request.POST.get('transfer', '')
17
-
18
-    try:
19
-        user = UserInfo.objects.get(user_id=user_id)
20
-    except UserInfo.DoesNotExist:
21
-        return response()
22
-
23
-    openid = user.openid
24
-    amount = 100
25
-
13
+def send_jsapi_hb(openid, amount, transfer=True):
26 14
     trade_type = 'JSAPI'
27 15
     # 根据 trade_type 获取 wechat 配置
28 16
     wxcfg = WECHAT.get(trade_type, {})
@@ -42,6 +30,23 @@ def jsapi_hb_api(request):
42 30
             remark=wxrpk.get('REMARK'),
43 31
             miniprogram=False,
44 32
         )
33
+    return ret_data
34
+
35
+
36
+def jsapi_hb_api(request):
37
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
38
+    user_id = request.POST.get('user_id', '')
39
+    transfer = request.POST.get('transfer', '')
40
+
41
+    try:
42
+        user = UserInfo.objects.get(user_id=user_id)
43
+    except UserInfo.DoesNotExist:
44
+        return response()
45
+
46
+    openid = user.openid
47
+    amount = 100
48
+
49
+    ret_data = send_jsapi_hb(openid, amount, transfer=True)
45 50
 
46 51
     return response(200, data=ret_data)
47 52
 

+ 2 - 0
utils/redis/rkeys.py

@@ -71,3 +71,5 @@ BOX_PROGRAM_VERSION_INFO = 'box:program:version:info'  # STRING,BOX 程序版
71 71
 MINI_PROGRAM_GIS_LIST = 'tamron:miniprogram:gis:list'
72 72
 
73 73
 SCREEN_ADMIN_LOGIN = 'tamron:screen:admin:login:%s:%s'  # brand_id, token
74
+
75
+REDPACK_WAITING_SEND_LIST = 'tamron:redpack:waiting:send'  #

+ 1 - 1
utils/shells/tests.py

@@ -26,4 +26,4 @@ def test_pay(openid, amount=100, trade_type='JSAPI', pay_type='PACKET'):
26 26
             remark=wxrpk.get('REMARK'),
27 27
         )
28 28
 
29
-    print ret_data
29
+    print ret_data