le-box diff-box file-content" id="diff-5">

+ 34 - 0
coupon/migrations/0007_auto_20191230_1605.py
Datei anzeigen

@@ -0,0 +1,34 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.26 on 2019-12-30 08:05
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations
6
+import jsonfield.fields
7
+
8
+
9
+class Migration(migrations.Migration):
10
+
11
+    dependencies = [
12
+        ('coupon', '0006_auto_20191230_1516'),
13
+    ]
14
+
15
+    operations = [
16
+        migrations.RemoveField(
17
+            model_name='couponinfo',
18
+            name='coupon_limit_brand_ids',
19
+        ),
20
+        migrations.RemoveField(
21
+            model_name='usercouponinfo',
22
+            name='coupon_limit_brand_ids',
23
+        ),
24
+        migrations.AddField(
25
+            model_name='couponinfo',
26
+            name='coupon_limit_model_ids',
27
+            field=jsonfield.fields.JSONField(blank=True, help_text='\u5238\u9650\u5236\u4f7f\u7528 model_ids', null=True, verbose_name='coupon_limit_model_ids'),
28
+        ),
29
+        migrations.AddField(
30
+            model_name='usercouponinfo',
31
+            name='coupon_limit_model_ids',
32
+            field=jsonfield.fields.JSONField(blank=True, help_text='\u5238\u9650\u5236\u4f7f\u7528 model_ids', null=True, verbose_name='coupon_limit_model_ids'),
33
+        ),
34
+    ]

+ 17 - 3
coupon/models.py

@@ -33,7 +33,7 @@ class CouponInfo(BaseModelMixin):
33 33
     coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=_(u'维修券有效时间(单位:天)'))
34 34
     coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间'))
35 35
 
36
-    coupon_limit_brand_ids = JSONField(_(u'coupon_limit_brand_ids'), blank=True, null=True, help_text=u'券限制使用 brand_ids')
36
+    coupon_limit_model_ids = JSONField(_(u'coupon_limit_model_ids'), blank=True, null=True, help_text=u'券限制使用 model_ids')
37 37
 
38 38
     class Meta:
39 39
         verbose_name = _(u'券信息')
@@ -60,7 +60,7 @@ class UserCouponInfo(BaseModelMixin):
60 60
     expire_at = models.DateTimeField(_(u'expire_at'), blank=True, null=True, help_text=_(u'过期时间'))
61 61
     coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=_(u'券有效时间(单位:天)'))
62 62
 
63
-    coupon_limit_brand_ids = JSONField(_(u'coupon_limit_brand_ids'), blank=True, null=True, help_text=u'券限制使用 brand_ids')
63
+    coupon_limit_model_ids = JSONField(_(u'coupon_limit_model_ids'), blank=True, null=True, help_text=u'券限制使用 model_ids')
64 64
 
65 65
     has_used = models.BooleanField(_(u'has_used'), default=False, help_text=u'是否已核销', db_index=True)
66 66
     admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'核销员唯一标识', db_index=True)
@@ -82,6 +82,18 @@ class UserCouponInfo(BaseModelMixin):
82 82
         return upload_file_url(self.coupon_image)
83 83
 
84 84
     @property
85
+    def has_actived(self):
86
+        if not self.active_at:
87
+            return True
88
+        return tc.utc_datetime() > self.active_at
89
+
90
+    @property
91
+    def has_expired(self):
92
+        if not self.expire_at:
93
+            return False
94
+        return tc.utc_datetime() > self.expire_at
95
+
96
+    @property
85 97
     def data(self):
86 98
         return {
87 99
             'user_coupon_id': self.user_coupon_id,
@@ -94,7 +106,9 @@ class UserCouponInfo(BaseModelMixin):
94 106
             'active_at': tc.local_string(self.active_at, format='%Y%m%d'),
95 107
             'expire_at': tc.local_string(self.expire_at, format='%Y-%m-%d'),
96 108
             'coupon_valid_period': self.coupon_valid_period,
97
-            'coupon_limit_brand_ids': self.coupon_limit_brand_ids,
109
+            'coupon_limit_model_ids': self.coupon_limit_model_ids,
110
+            'has_actived': self.has_actived,
111
+            'has_expired': self.has_expired,
98 112
             'has_used': self.has_used,
99 113
             'admin_id': self.admin_id,
100 114
             'used_at': self.used_at,

+ 9 - 0
utils/error/errno_utils.py

@@ -81,6 +81,15 @@ class MemberActivityStatusCode(BaseStatusCode):
81 81
     ACTIVITY_NOT_FOUND = StatusCodeField(503701, 'Activity Not Found', description=u'活动不存在')
82 82
 
83 83
 
84
+class MemberCouponStatusCode(BaseStatusCode):
85
+    """ 会员优惠券相关错误码 5040xx """
86
+    USER_COUPON_NOT_FOUND = StatusCodeField(504001, 'User Coupon Not Found', description=u'用户优惠券不存在')
87
+
88
+    USER_COUPON_HAS_USED = StatusCodeField(504010, 'User Coupon Has Used', description=u'用户优惠券已使用')
89
+    USER_COUPON_NOT_ACTIVED = StatusCodeField(504011, 'User Coupon Not Actived', description=u'用户优惠券未生效')
90
+    USER_COUPON_HAS_EXPIRED = StatusCodeField(504012, 'User Coupon Has Expired', description=u'用户优惠券已过期')
91
+
92
+
84 93
 class LensmanStatusCode(BaseStatusCode):
85 94
     """ 摄影师相关错误码 4000xx """
86 95
     LENSMAN_NOT_FOUND = StatusCodeField(400001, 'Lensman Not Found', description=u'摄影师不存在')

+ 1 - 1
utils/redis/rshot.py

@@ -6,7 +6,7 @@ from utils.redis.rkeys import MEMBER_SHOT_DATA
6 6
 
7 7
 def update_member_shot_data():
8 8
     from member.models import ShotTypeInfo
9
-    shots_types = ShotTypeInfo.objects.filter(status=True).order_by('position')
9
+    shots_types = ShotTypeInfo.objects.filter(status=True).order_by('position', '-pk')
10 10
     shots_types = [st.data for st in shots_types]
11 11
     r.setjson(MEMBER_SHOT_DATA, shots_types)
12 12
     return shots_types

kodo - Gogs: Go Git Service

Brak opisu

0003_mchinfoencryptloginfo.py 2.1KB

    # -*- coding: utf-8 -*- # Generated by Django 1.11.11 on 2018-06-07 10:21 from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('logs', '0002_auto_20180530_1122'), ] operations = [ migrations.CreateModel( name='MchInfoEncryptLogInfo', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('status', models.BooleanField(db_index=True, default=True, help_text='Status', verbose_name='status')), ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), ('plaintext', models.CharField(blank=True, db_index=True, help_text='\u5f85\u52a0\u5bc6\u5b57\u7b26\u4e32', max_length=64, null=True, unique=True, verbose_name='plaintext')), ('alg', models.CharField(blank=True, help_text='\u52a0\u5bc6\u7b97\u6cd5', max_length=16, null=True, verbose_name='alg')), ('ciphertext', models.CharField(blank=True, help_text='\u52a0\u5bc6\u5b57\u7b26\u4e32', max_length=64, null=True, verbose_name='ciphertext')), ('brand_pk', models.IntegerField(db_index=True, default=0, help_text='\u54c1\u724cPK', verbose_name='brand_pk')), ('model_pk', models.IntegerField(db_index=True, default=0, help_text='\u578b\u53f7PK', verbose_name='model_pk')), ('sn', models.CharField(blank=True, db_index=True, help_text='\u5e8f\u5217\u53f7', max_length=32, null=True, verbose_name='sn')), ('operator_id', models.CharField(blank=True, db_index=True, help_text='\u64cd\u4f5c\u5458\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='operator_id')), ], options={ 'verbose_name': 'mchinfoencryptloginfo', 'verbose_name_plural': 'mchinfoencryptloginfo', }, ), ]