:art: Add coupon_expire_at

huangqimin001 3 lat temu
rodzic
commit
c01f5a3b5b

+ 2 - 2
account/admin.py

@@ -8,8 +8,8 @@ from mch.models import ConsumeInfoSubmitLogInfo
8 8
 
9 9
 
10 10
 class UserInfoAdmin(ChangeOnlyModelAdmin, admin.ModelAdmin):
11
-    list_display = ('user_id', 'nickname', 'phone', 'appid', 'unionid', 'openid', 'openid_miniapp', 'location', 'balance', 'integral', 'freeze_integral', 'user_status', 'test_user', 'status', 'created_at', 'updated_at')
12
-    list_filter = ('user_from', 'appid', 'subscribe', 'has_membercard', 'test_user', 'sex', 'user_status', 'status', 'code_version', 'new_subscribe', 'created_at', 'integral')
11
+    list_display = ('user_id', 'nickname', 'phone', 'appid', 'unionid', 'openid', 'openid_miniapp', 'location', 'balance', 'integral', 'freeze_integral', 'user_status', 'test_user', 'integral', 'freeze_integral', 'shots_num', 'level', 'coupon_expire_at', 'is_maintenance', 'status', 'created_at', 'updated_at')
12
+    list_filter = ('user_from', 'appid', 'subscribe', 'has_membercard', 'test_user', 'is_maintenance', 'sex', 'user_status', 'status', 'code_version', 'new_subscribe', 'created_at', 'integral')
13 13
     readonly_fields = ('user_id', )
14 14
     search_fields = ('user_id', 'username', 'unionid', 'openid', 'openid_miniapp', 'name', 'phone', 'location', 'memberusercardcode')
15 15
 

+ 20 - 0
account/migrations/0054_userinfo_coupon_expire_at.py

@@ -0,0 +1,20 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.29 on 2021-09-05 17:09
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', '0053_userinfo_resgister_at'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AddField(
16
+            model_name='userinfo',
17
+            name='coupon_expire_at',
18
+            field=models.DateTimeField(blank=True, help_text='\u4f18\u60e0\u5238\u8fc7\u671f\u65f6\u95f4', null=True, verbose_name='coupon_expire_at'),
19
+        ),
20
+    ]

+ 3 - 0
account/models.py

@@ -139,6 +139,9 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin):
139 139
     shots_num = models.IntegerField(_(u'shots_num'), default=0, help_text=u'主持镜头数')
140 140
     level = models.IntegerField(_(u'level'), choices=LEVEL_TUPLE, default=MEMBER_NO, help_text=u'会员等级')
141 141
 
142
+    # 优惠券信息
143
+    coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'优惠券过期时间'))
144
+
142 145
     # 维修员信息
143 146
     is_maintenance = models.BooleanField(_(u'is_maintenance'), default=False, help_text=_(u'是否维修员'))
144 147
 

+ 43 - 0
commands/management/commands/once_refresh_user_coupon_expired_time.py

@@ -0,0 +1,43 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+import logging
4
+import time
5
+
6
+from django_six import CompatibilityBaseCommand, close_old_connections
7
+from TimeConvert import TimeConvert as tc
8
+
9
+from account.models import UserInfo
10
+from coupon.models import CouponInfo, UserCouponInfo
11
+from member.models import RightInfo
12
+from utils.redis.connect import r
13
+from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST
14
+
15
+
16
+logger = logging.getLogger('console')
17
+
18
+
19
+class Command(CompatibilityBaseCommand):
20
+    def handle(self, *args, **options):
21
+        coupon_ids = []
22
+
23
+        rights = RightInfo.objects.filter(is_send_coupon=True, status=True)
24
+        for right in rights:
25
+            for coupon_id in [right.coupon_level1_id, right.coupon_level2_id, right.coupon_level3_id, right.coupon_level4_id, right.coupon_level5_id]:
26
+                if not coupon_id:
27
+                    continue
28
+
29
+                try:
30
+                    coupon = CouponInfo.objects.get(coupon_id=coupon_id)
31
+                except CouponInfo.DoesNotExist:
32
+                    continue
33
+
34
+                coupon_ids.append(coupon_id)
35
+
36
+        users = UserInfo.objects.all()
37
+        for user in users:
38
+            coupons = UserCouponInfo.objects.filter(coupon_id__in=coupon_ids, status=True).order_by('-expire_at')
39
+            if not coupons:
40
+                continue
41
+
42
+            user.coupon_expire_at = coupons[0].expire_at
43
+            user.save()

+ 12 - 4
integral/models.py

@@ -87,7 +87,7 @@ class SaleclerkSubmitLogInfo(BaseModelMixin):
87 87
     model_uni_name = models.CharField(_(u'model_uni_name'), max_length=255, blank=True, null=True, help_text=u'型号统称')
88 88
 
89 89
     distributor_pk = models.IntegerField(_(u'distributor_pk'), default=0, help_text=u'经销商PK', db_index=True)
90
-    distributor_id =  models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True)
90
+    distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True)
91 91
     distributor_name = models.CharField(_(u'distributor_name'), max_length=32, blank=True, null=True, help_text=u'经销商名称')
92 92
 
93 93
     clerk_id = models.CharField(_(u'clerk_id'), max_length=32, blank=True, null=True, help_text=u'店员唯一标识', db_index=True)
@@ -152,11 +152,19 @@ class SaleclerkSubmitLogInfo(BaseModelMixin):
152 152
     def admindata(self):
153 153
         try:
154 154
             distributor = DistributorInfo.objects.get(distributor_id=self.distributor_id)
155
-            sr = SalesResponsibilityInfo.objects.get(sr_id=distributor.sr_id)
156
-
155
+        except DistributorInfo.DoesNotExist:
156
+            distributor = None
157
+        if distributor:
158
+            try:
159
+                sr = SalesResponsibilityInfo.objects.get(sr_id=distributor.sr_id)
160
+            except SalesResponsibilityInfo.DoesNotExist:
161
+                sr = None
162
+        else:
163
+            sr = None
164
+        if sr:
157 165
             office = distributor.office
158 166
             sr_name = sr.name
159
-        except:
167
+        else:
160 168
             office = ''
161 169
             sr_name = ''
162 170
 

+ 1 - 1
requirements.txt

@@ -1,7 +1,7 @@
1 1
 CodeConvert==3.0.2
2 2
 Pillow==8.3.1
3 3
 StatusCode==1.0.0
4
-TimeConvert==1.5.4
4
+TimeConvert==1.6.0
5 5
 furl==2.1.2
6 6
 isoweek==1.3.3
7 7
 jsonfield==3.1.0