Add freeze_balance for lensman/user

Brightcells 8 years ago
parent
commit
e249360c0c
4 changed files with 101 additions and 3 deletions
  1. 54 0
      account/migrations/0018_auto_20161020_1844.py
  2. 10 0
      account/models.py
  3. 28 1
      group/lensman_views.py
  4. 9 2
      pay/views.py

+ 54 - 0
account/migrations/0018_auto_20161020_1844.py

@@ -0,0 +1,54 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('account', '0017_auto_20160908_1053'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='lensmanincomeexpensesinfo',
16
+            name='freeze_amount',
17
+            field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u6570\u91cf(\u5206)', verbose_name='freeze_amount'),
18
+        ),
19
+        migrations.AddField(
20
+            model_name='lensmanincomeexpensesinfo',
21
+            name='freeze_balance',
22
+            field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u540e\u6570\u91cf(\u5206)', verbose_name='freeze_balance'),
23
+        ),
24
+        migrations.AddField(
25
+            model_name='lensmaninfo',
26
+            name='freeze_balance',
27
+            field=models.IntegerField(default=0, help_text='\u6444\u5f71\u5e08\u51bb\u7ed3\u4f59\u989d(\u5206)', verbose_name='freeze_balance'),
28
+        ),
29
+        migrations.AddField(
30
+            model_name='userincomeexpensesinfo',
31
+            name='freeze_amount',
32
+            field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u6570\u91cf(\u5206)', verbose_name='freeze_amount'),
33
+        ),
34
+        migrations.AddField(
35
+            model_name='userincomeexpensesinfo',
36
+            name='freeze_balance',
37
+            field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u540e\u6570\u91cf(\u5206)', verbose_name='freeze_balance'),
38
+        ),
39
+        migrations.AddField(
40
+            model_name='userinfo',
41
+            name='freeze_balance',
42
+            field=models.IntegerField(default=0, help_text='\u7528\u6237\u51bb\u7ed3\u4f59\u989d(\u5206)', verbose_name='freeze_balance'),
43
+        ),
44
+        migrations.AlterField(
45
+            model_name='lensmanincomeexpensesinfo',
46
+            name='type',
47
+            field=models.IntegerField(default=0, help_text='\u6536\u652f\u7c7b\u522b', verbose_name='type', choices=[(0, '\u6536\u5165'), (1, '\u652f\u51fa'), (2, '\u89e3\u51bb')]),
48
+        ),
49
+        migrations.AlterField(
50
+            model_name='userincomeexpensesinfo',
51
+            name='type',
52
+            field=models.IntegerField(default=0, help_text='\u6536\u652f\u7c7b\u522b', verbose_name='type', choices=[(0, '\u6536\u5165'), (1, '\u652f\u51fa'), (2, '\u89e3\u51bb')]),
53
+        ),
54
+    ]

+ 10 - 0
account/models.py

@@ -51,6 +51,7 @@ class LensmanInfo(CreateUpdateMixin):
51 51
     origin = models.IntegerField(_(u'origin'), default=999, help_text=u'摄影师高清图价格(分)')
52 52
 
53 53
     balance = models.IntegerField(_(u'balance'), default=0, help_text=u'摄影师余额(分)')
54
+    freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'摄影师冻结余额(分)')
54 55
 
55 56
     user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED)
56 57
     refused_reason = models.TextField(_(u'refused_reason'), blank=True, null=True, help_text=u'审核拒绝原因')
@@ -104,10 +105,12 @@ class LensmanLoginLogInfo(CreateUpdateMixin):
104 105
 class LensmanIncomeExpensesInfo(CreateUpdateMixin):
105 106
     INCOME = 0
106 107
     EXPENSE = 1
108
+    UNFREEZE = 2
107 109
 
108 110
     TYPE = (
109 111
         (INCOME, u'收入'),
110 112
         (EXPENSE, u'支出'),
113
+        (UNFREEZE, u'解冻'),
111 114
     )
112 115
 
113 116
     lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True)
@@ -116,6 +119,8 @@ class LensmanIncomeExpensesInfo(CreateUpdateMixin):
116 119
     type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别')
117 120
     amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)')
118 121
     balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)')
122
+    freeze_amount = models.IntegerField(_(u'freeze_amount'), default=0, help_text=u'冻结余额增减数量(分)')
123
+    freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'冻结余额增减后数量(分)')
119 124
 
120 125
     remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注')
121 126
 
@@ -211,6 +216,7 @@ class UserInfo(CreateUpdateMixin):
211 216
     location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')
212 217
 
213 218
     balance = models.IntegerField(_(u'balance'), default=0, help_text=u'用户余额(分)')
219
+    freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'用户冻结余额(分)')
214 220
 
215 221
     user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED)
216 222
 
@@ -277,10 +283,12 @@ class UserLoginLogInfo(CreateUpdateMixin):
277 283
 class UserIncomeExpensesInfo(CreateUpdateMixin):
278 284
     INCOME = 0
279 285
     EXPENSE = 1
286
+    UNFREEZE = 2
280 287
 
281 288
     TYPE = (
282 289
         (INCOME, u'收入'),
283 290
         (EXPENSE, u'支出'),
291
+        (UNFREEZE, u'解冻'),
284 292
     )
285 293
 
286 294
     user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
@@ -289,6 +297,8 @@ class UserIncomeExpensesInfo(CreateUpdateMixin):
289 297
     type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别')
290 298
     amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)')
291 299
     balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)')
300
+    freeze_amount = models.IntegerField(_(u'freeze_amount'), default=0, help_text=u'冻结余额增减数量(分)')
301
+    freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'冻结余额增减后数量(分)')
292 302
 
293 303
     remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注')
294 304
 

+ 28 - 1
group/lensman_views.py

@@ -319,6 +319,8 @@ def lensman_origin_photo_upload_api(request):
319 319
                 type=UserIncomeExpensesInfo.INCOME,
320 320
                 amount=order.total_fee,
321 321
                 balance=from_user.balance,
322
+                freeze_amount=0,
323
+                freeze_balance=from_user.freeze_balance,
322 324
                 remark=u'高清图购买退款',
323 325
             )
324 326
 
@@ -330,7 +332,7 @@ def lensman_origin_photo_upload_api(request):
330 332
 
331 333
         if to_user:
332 334
             # 减少余额
333
-            to_user.balance -= order.total_fee
335
+            to_user.freeze_balance -= order.total_fee
334 336
             to_user.save()
335 337
             # 余额记录
336 338
             UserIncomeExpensesInfo.objects.create(
@@ -339,6 +341,8 @@ def lensman_origin_photo_upload_api(request):
339 341
                 type=UserIncomeExpensesInfo.EXPENSE,
340 342
                 amount=order.total_fee,
341 343
                 balance=to_user.balance,
344
+                freeze_amount=0,
345
+                freeze_balance=to_user.freeze_balance,
342 346
                 remark=u'高清图购买退款',
343 347
             )
344 348
 
@@ -393,6 +397,29 @@ def lensman_origin_photo_upload_api(request):
393 397
 
394 398
         set_lensman_order_record(porder)
395 399
 
400
+        # 摄影师余额解冻
401
+        try:
402
+            to_user = UserInfo.objects.select_for_update().get(user_id=order.to_uid)
403
+        except UserInfo.DoesNotExist:
404
+            pass
405
+
406
+        if to_user:
407
+            # 减少余额
408
+            to_user.balance += order.total_fee
409
+            to_user.freeze_balance -= order.total_fee
410
+            to_user.save()
411
+            # 余额记录
412
+            UserIncomeExpensesInfo.objects.create(
413
+                user_id=order.to_uid,
414
+                photo_id=order.photo_id,
415
+                type=UserIncomeExpensesInfo.UNFREEZE,
416
+                amount=order.total_fee,
417
+                balance=to_user.balance,
418
+                freeze_amount=order.total_fee,
419
+                freeze_balance=to_user.freeze_balance,
420
+                remark=u'高清图购买退款',
421
+            )
422
+
396 423
         order.photo_status = OrderInfo.FETCHED
397 424
         order.save()
398 425
 

+ 9 - 2
pay/views.py

@@ -142,7 +142,12 @@ def order_paid_success(order):
142 142
     except UserInfo.DoesNotExist:
143 143
         return
144 144
 
145
-    user.balance += order.total_fee
145
+    if order.photo_type == OrderInfo.NOMARK:
146
+        amount, freeze_amount = total_fee, 0
147
+        user.balance += amount
148
+    elif order.photo_type == OrderInfo.ORIGIN:
149
+        amount, freeze_amount = 0, total_fee
150
+        user.freeze_balance += freeze_amount
146 151
     user.save()
147 152
 
148 153
     ymd = tc.local_string(format='%Y%m%d')
@@ -162,8 +167,10 @@ def order_paid_success(order):
162 167
         user_id=to_uid,
163 168
         photo_id=order.photo_id,
164 169
         type=UserIncomeExpensesInfo.INCOME,
165
-        amount=total_fee,
170
+        amount=amount,
166 171
         balance=user.balance,
172
+        freeze_amount=freeze_amount,
173
+        freeze_balance=user.freeze_balance,
167 174
         remark=u'图片购买',
168 175
     )
169 176