lensman balance decr when origin deleted & update redis

Brightcells преди 8 години
родител
ревизия
d79857ed0e
променени са 3 файла, в които са добавени 52 реда и са изтрити 16 реда
  1. 48 12
      group/lensman_views.py
  2. 3 3
      pay/views.py
  3. 1 1
      utils/redis/rkeys.py

+ 48 - 12
group/lensman_views.py

@@ -15,7 +15,7 @@ from logit import logit
15 15
 from TimeConvert import TimeConvert as tc
16 16
 
17 17
 from account.models import LensmanInfo, UserIncomeExpensesInfo, UserInfo
18
-from group.models import GroupInfo, GroupPhotoInfo, GroupPhotoOrderInfo, GroupUserInfo
18
+from group.models import GroupInfo, GroupPhotoInfo, GroupPhotoOrderInfo
19 19
 from message.models import SystemMessageInfo
20 20
 from pay.models import OrderInfo
21 21
 from photo.models import PhotosInfo
@@ -23,8 +23,9 @@ from utils.error.errno_utils import LensmanStatusCode, OrderStatusCode, UserStat
23 23
 from utils.error.response_utils import response
24 24
 from utils.message_utils import system_messages
25 25
 from utils.page_utils import pagination
26
-from utils.redis.rgroup import get_group_info, get_group_users_info, set_group_info, set_group_users_info
27
-from utils.redis.rkeys import GROUP_LAST_PHOTO_PK, TODAY_INCOME, TODAY_UPLOAD_PHOTO_AMOUNT, WEEK_INCOME, WEEK_SOLD
26
+from utils.redis.rgroup import get_group_info, set_group_info
27
+from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, TODAY_INCOME, TODAY_UPLOAD_PHOTO_AMOUNT, TOTAL_INCOME, WEEK_INCOME,
28
+                               WEEK_SOLD)
28 29
 from utils.redis.rorder import set_lensman_order_record
29 30
 from utils.redis.rprice import get_lensman_price_fixed, set_lensman_price_fixed
30 31
 from utils.thumbnail_utils import make_thumbnail
@@ -299,28 +300,63 @@ def lensman_origin_photo_upload_api(request):
299 300
     except OrderInfo.DoesNotExist:
300 301
         return response(OrderStatusCode.WX_ORDER_NOT_FOUND)
301 302
 
302
-    from_uid = order.from_uid
303 303
     # 原图已删除, 处理退款逻辑
304 304
     if deleted:
305
+        # 用户增加余额
305 306
         try:
306
-            user = UserInfo.objects.get(uid=from_uid)
307
+            from_user = UserInfo.objects.select_for_update().get(user_id=order.from_uid)
307 308
         except UserInfo.DoesNotExist:
308 309
             pass
309 310
 
310
-        if user:
311
+        if from_user:
311 312
             # 增加余额
312
-            user.balance += order.total_fee
313
-            user.save()
313
+            from_user.balance += order.total_fee
314
+            from_user.save()
314 315
             # 余额记录
315 316
             UserIncomeExpensesInfo.objects.create(
316
-                user_id=from_uid,
317
+                user_id=order.from_uid,
317 318
                 photo_id=order.photo_id,
318 319
                 type=UserIncomeExpensesInfo.INCOME,
319 320
                 amount=order.total_fee,
320
-                balance=user.balance,
321
+                balance=from_user.balance,
321 322
                 remark=u'高清图购买退款',
322 323
             )
323 324
 
325
+        # 摄影师减少余额
326
+        try:
327
+            to_user = UserInfo.objects.select_for_update().get(user_id=order.to_uid)
328
+        except UserInfo.DoesNotExist:
329
+            pass
330
+
331
+        if to_user:
332
+            # 减少余额
333
+            to_user.balance -= order.total_fee
334
+            to_user.save()
335
+            # 余额记录
336
+            UserIncomeExpensesInfo.objects.create(
337
+                user_id=order.to_uid,
338
+                photo_id=order.photo_id,
339
+                type=UserIncomeExpensesInfo.EXPENSE,
340
+                amount=order.total_fee,
341
+                balance=to_user.balance,
342
+                remark=u'高清图购买退款',
343
+            )
344
+
345
+        # Redis 数值更新
346
+        ymd = tc.local_string(tc.to_local_datetime(order.created_at), format='%Y%m%d')
347
+        week = Week.withdate(order.created_at)
348
+
349
+        # 总收入
350
+        r.decr_limit(TOTAL_INCOME % (order.to_uid, order.photo_type), order.total_fee, limit=0)
351
+        # 周收入
352
+        r.decr_limit(WEEK_INCOME % (order.to_uid, order.photo_type, week), order.total_fee, limit=0)
353
+        # 日收入
354
+        r.decr_limit(TODAY_INCOME % (order.to_uid, order.photo_type, ymd), order.total_fee, limit=0)
355
+
356
+        # 周售出
357
+        r.decr_limit(WEEK_SOLD % (order.to_uid, order.photo_type, week), limit=0)
358
+
359
+        # 更新订单状态
324 360
         order.photo_status = OrderInfo.DELETED
325 361
         order.reback_status = True
326 362
         order.reback_at = tc.utc_datetime()
@@ -348,7 +384,7 @@ def lensman_origin_photo_upload_api(request):
348 384
         porder, created = GroupPhotoOrderInfo.objects.get_or_create(
349 385
             group_id=order.group_id,
350 386
             session_id=session_id,
351
-            user_id=from_uid,
387
+            user_id=order.from_uid,
352 388
             photo_id=order.photo_id,
353 389
             lensman_photo_id=photo_id,
354 390
         )
@@ -377,7 +413,7 @@ def lensman_brief_api(request):
377 413
     # 日上传
378 414
     today_upload = int(r.get(TODAY_UPLOAD_PHOTO_AMOUNT % (user_id, ymd)) or 0)
379 415
     # 周售出
380
-    week_sold = int(r.get(WEEK_SOLD % (OrderInfo.ORIGIN, user_id, ymd)) or 0)
416
+    week_sold = int(r.get(WEEK_SOLD % (user_id, OrderInfo.ORIGIN, ymd)) or 0)
381 417
 
382 418
     # 摄影师端系统消息
383 419
     systems = system_messages(user_id, SystemMessageInfo.PAIAI_LENSMAN)

+ 3 - 3
pay/views.py

@@ -138,8 +138,8 @@ def order_paid_success(order):
138 138
     total_fee = order.total_fee
139 139
 
140 140
     try:
141
-        user = UserInfo.objects.select_for_update().filter(user_id=to_uid)[0]
142
-    except IndexError:
141
+        user = UserInfo.objects.select_for_update().get(user_id=to_uid)
142
+    except UserInfo.DoesNotExist:
143 143
         return
144 144
 
145 145
     user.balance += order.total_fee
@@ -156,7 +156,7 @@ def order_paid_success(order):
156 156
     r.incr(TODAY_INCOME % (to_uid, order.photo_type, ymd), total_fee)
157 157
 
158 158
     # 周售出
159
-    r.incr(WEEK_SOLD % (order.photo_type, to_uid, week))
159
+    r.incr(WEEK_SOLD % (to_uid, order.photo_type, week))
160 160
 
161 161
     UserIncomeExpensesInfo.objects.create(
162 162
         user_id=to_uid,

+ 1 - 1
utils/redis/rkeys.py

@@ -38,7 +38,7 @@ TODAY_INCOME = 'today:income:%s:%s:%s'  # STRING,日收入,user_id、photo_t
38 38
 # 上传
39 39
 TODAY_UPLOAD_PHOTO_AMOUNT = 'today:upload:photo:amount:%s:%s'  # STRING,日上传照片数量,user_id、tc.local_string(format='%Y%m%d')
40 40
 # 售出
41
-WEEK_SOLD = 'week:sold:%s:%s:%s'  # STRING,周售出,photo_type、user_id、Week.thisweek().isoformat()
41
+WEEK_SOLD = 'week:sold:%s:%s:%s'  # STRING,周售出,user_id、photo_type、Week.thisweek().isoformat()
42 42
 
43 43
 # 摄影师定价相关
44 44
 LENSMAN_PHOTO_PRICE_FIXED = 'lensman:photo:price:fixed:%s'  # STRING,摄影师照片定价(单位:分),user_id