add api lensman_brief_api

Brightcells 8 gadi atpakaļ
vecāks
revīzija
21b4a5403a
7 mainītis faili ar 114 papildinājumiem un 55 dzēšanām
  1. 2 0
      api/urls.py
  2. 40 1
      group/lensman_views.py
  3. 5 18
      message/views.py
  4. 43 35
      pay/views.py
  5. 1 1
      utils/error/response_utils.py
  6. 17 0
      utils/message_utils.py
  7. 6 0
      utils/redis/rkeys.py

+ 2 - 0
api/urls.py

@@ -33,6 +33,8 @@ urlpatterns += [
33 33
     url(r'^l/wx/authorize$', lensman_views.lensman_wx_authorize_api, name='lensman_wx_authorize_api'),  # 微信用户授权
34 34
 
35 35
     url(r'^l/upload$', lensman_views.lensman_photo_upload_api, name='lensman_photo_upload_api'),  # 摄影师照片上传
36
+
37
+    url(r'^l/brief$', lensman_views.lensman_brief_api, name='lensman_brief_api'),  # 摄影师简报
36 38
 ]
37 39
 
38 40
 # 群组相关

+ 40 - 1
group/lensman_views.py

@@ -14,11 +14,15 @@ from TimeConvert import TimeConvert as tc
14 14
 
15 15
 from account.models import LensmanInfo, UserInfo
16 16
 from group.models import GroupInfo, GroupPhotoInfo, GroupUserInfo
17
+from message.models import SystemMessageInfo
18
+from pay.models import OrderInfo
17 19
 from photo.models import PhotosInfo
18 20
 from utils.error.errno_utils import LensmanStatusCode, UserStatusCode
19 21
 from utils.error.response_utils import response
22
+from utils.message_utils import system_messages
23
+from utils.page_utils import pagination
20 24
 from utils.redis.rgroup import get_group_info, get_group_users_info, set_group_info, set_group_users_info
21
-from utils.redis.rkeys import GROUP_LAST_PHOTO_PK
25
+from utils.redis.rkeys import GROUP_LAST_PHOTO_PK, TODAY_INCOME, TODAY_UPLOAD_PHOTO_AMOUNT
22 26
 from utils.thumbnail_utils import make_thumbnail
23 27
 from utils.watermark_utils import watermark_wrap
24 28
 
@@ -243,6 +247,9 @@ def lensman_photo_upload_api(request):
243 247
         # 设置群组最后一张照片PK
244 248
         r.set(GROUP_LAST_PHOTO_PK % group_id, group_photo.pk)
245 249
 
250
+        # 更新今日上传照片数量
251
+        r.incr(TODAY_UPLOAD_PHOTO_AMOUNT % (user_id, tc.local_string(format='%Y%m%d')))
252
+
246 253
     # 获取从 current_id 到 now 的群组照片列表
247 254
     # group_photos = GroupPhotoInfo.objects.filter(
248 255
     #     group_id=group_id,
@@ -258,3 +265,35 @@ def lensman_photo_upload_api(request):
258 265
         # 'current_id': latest_photo and latest_photo.pk or current_id,
259 266
         # 'photos': [photo.photo_info(user_id) for photo in group_photos],
260 267
     })
268
+
269
+
270
+@logit
271
+def lensman_brief_api(request):
272
+    user_id = request.POST.get('user_id', '')
273
+
274
+    ymd = tc.local_string(format='%Y%m%d')
275
+
276
+    today_income = int(r.get(TODAY_INCOME % (user_id, ymd)) or 0)
277
+    today_upload = int(r.get(TODAY_UPLOAD_PHOTO_AMOUNT % (user_id, ymd)) or 0)
278
+
279
+    # 摄影师端系统消息
280
+    systems = system_messages(user_id, SystemMessageInfo.PAIAI_LENSMAN)
281
+    systems, left = pagination(systems, 1, 10)
282
+    systems = [msg.msg_info(user_id) for msg in systems]
283
+
284
+    # 照片购买记录
285
+    orders = OrderInfo.objects.filter(to_uid=user_id, pay_status=OrderInfo.PAID, status=True).order_by('-pk')
286
+    orders, left = pagination(orders, 1, 10)
287
+    orders = [order.data(user_id) for order in orders]
288
+
289
+    data = {
290
+        'today_income': today_income,
291
+        'today_upload': today_upload,
292
+        'avg_income': int(today_income / (today_upload + 1)),
293
+        'messages': {
294
+            'system': systems,
295
+            'orders': orders,
296
+        }
297
+    }
298
+
299
+    return response(200, 'Get Lensman Brief Success', u'获取摄影师简报成功', data)

+ 5 - 18
message/views.py

@@ -7,9 +7,9 @@ from account.models import UserInfo
7 7
 from message.models import SystemMessageDeleteInfo, SystemMessageInfo, SystemMessageReadInfo, UserMessageInfo
8 8
 from utils.error.errno_utils import MessageStatusCode, UserStatusCode
9 9
 from utils.error.response_utils import response
10
+from utils.message_utils import system_messages, system_unread_messages
10 11
 from utils.page_utils import pagination
11
-from utils.redis.rmessage import (get_system_message_delete_info, get_system_message_read_info,
12
-                                  set_system_message_delete_info, set_system_message_read_info)
12
+from utils.redis.rmessage import set_system_message_delete_info, set_system_message_read_info
13 13
 
14 14
 
15 15
 @logit
@@ -27,14 +27,7 @@ def message_list_api(request):
27 27
     for message in messages:
28 28
         msg_type = message['msg_type']
29 29
         if msg_type == UserMessageInfo.SYSTEM:
30
-            read_message_ids = get_system_message_read_info(user_id)
31
-            deleted_message_ids = get_system_message_delete_info(user_id)
32
-            type_unread_messages = SystemMessageInfo.objects.filter(
33
-                src=SystemMessageInfo.PAIAI_USER,
34
-                status=True,
35
-            ).exclude(
36
-                pk__in=list(set(read_message_ids + deleted_message_ids)),
37
-            )
30
+            type_unread_messages = system_unread_messages(user_id, SystemMessageInfo.PAIAI_USER)
38 31
         else:
39 32
             type_unread_messages = UserMessageInfo.objects.filter(
40 33
                 to_uid=user_id,
@@ -63,13 +56,7 @@ def message_type_list_api(request, msg_type):
63 56
     num = int(request.POST.get('num', 0) or request.GET.get('num', 0) or settings.MESSAGE_NUM_PER_PAGE)
64 57
 
65 58
     if msg_type == UserMessageInfo.SYSTEM:
66
-        deleted_message_ids = get_system_message_delete_info(user_id)
67
-        type_messages = SystemMessageInfo.objects.filter(
68
-            src=SystemMessageInfo.PAIAI_USER,
69
-            status=True,
70
-        ).exclude(
71
-            pk__in=deleted_message_ids,
72
-        )
59
+        type_messages = system_messages(user_id, SystemMessageInfo.PAIAI_USER)
73 60
     else:
74 61
         type_messages = UserMessageInfo.objects.filter(
75 62
             to_uid=user_id,
@@ -114,7 +101,7 @@ def message_type_read_api(request, msg_type=None):
114 101
         if _all == 'true':  # 系统消息全部读取
115 102
             for msg in SystemMessageInfo.objects.filter(src=SystemMessageInfo.PAIAI_USER, status=True):
116 103
                 SystemMessageReadInfo.objects.get_or_create(user_id=user_id, msg_id=msg.pk)
117
-        get_system_message_read_info(user_id)
104
+        set_system_message_read_info(user_id)
118 105
     else:
119 106
         if pk > 0:  # 用户(点赞/评论)消息单个读取
120 107
             UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(read=True)

+ 43 - 35
pay/views.py

@@ -15,7 +15,7 @@ from photo.models import PhotosInfo
15 15
 from utils.error.errno_utils import GroupPhotoStatusCode, OrderStatusCode, UserStatusCode, WithdrawStatusCode
16 16
 from utils.error.response_utils import response
17 17
 from utils.page_utils import pagination
18
-from utils.redis.rkeys import LENSMAN_PHOTO_PRICE
18
+from utils.redis.rkeys import LENSMAN_PHOTO_PRICE, TODAY_INCOME, TOTAL_INCOME
19 19
 from utils.redis.rorder import set_lensman_order_record
20 20
 
21 21
 
@@ -124,40 +124,48 @@ def order_paid_success(order):
124 124
 
125 125
     set_lensman_order_record(porder)
126 126
 
127
-    if order.to_lid:
128
-        try:
129
-            lensman = LensmanInfo.objects.select_for_update().filter(lensman_id=order.to_lid)[0]
130
-        except IndexError:
131
-            return
132
-
133
-        lensman.balance += order.total_fee
134
-        lensman.save()
135
-
136
-        LensmanIncomeExpensesInfo.objects.create(
137
-            lensman_id=order.to_lid,
138
-            photo_id=order.photo_id,
139
-            type=LensmanIncomeExpensesInfo.INCOME,
140
-            amount=order.total_fee,
141
-            balance=lensman.balance,
142
-            remark=u'图片购买',
143
-        )
144
-    elif order.to_uid:
145
-        try:
146
-            user = UserInfo.objects.select_for_update().filter(user_id=order.to_uid)[0]
147
-        except IndexError:
148
-            return
149
-
150
-        user.balance += order.total_fee
151
-        user.save()
152
-
153
-        UserIncomeExpensesInfo.objects.create(
154
-            user_id=order.user_id,
155
-            photo_id=order.photo_id,
156
-            type=UserIncomeExpensesInfo.INCOME,
157
-            amount=order.total_fee,
158
-            balance=user.balance,
159
-            remark=u'图片购买',
160
-        )
127
+    # Lensman ==> User
128
+    # if order.to_lid:
129
+    #     try:
130
+    #         lensman = LensmanInfo.objects.select_for_update().filter(lensman_id=order.to_lid)[0]
131
+    #     except IndexError:
132
+    #         return
133
+    #
134
+    #     lensman.balance += order.total_fee
135
+    #     lensman.save()
136
+    #
137
+    #     LensmanIncomeExpensesInfo.objects.create(
138
+    #         lensman_id=order.to_lid,
139
+    #         photo_id=order.photo_id,
140
+    #         type=LensmanIncomeExpensesInfo.INCOME,
141
+    #         amount=order.total_fee,
142
+    #         balance=lensman.balance,
143
+    #         remark=u'图片购买',
144
+    #     )
145
+    # elif order.to_uid:
146
+
147
+    to_uid = order.to_uid
148
+    total_fee = order.total_fee
149
+
150
+    try:
151
+        user = UserInfo.objects.select_for_update().filter(user_id=to_uid)[0]
152
+    except IndexError:
153
+        return
154
+
155
+    user.balance += order.total_fee
156
+    user.save()
157
+
158
+    r.incr(TOTAL_INCOME % to_uid, total_fee)
159
+    r.incr(TODAY_INCOME % (to_uid, tc.local_string(format='%Y%m%d')), total_fee)
160
+
161
+    UserIncomeExpensesInfo.objects.create(
162
+        user_id=to_uid,
163
+        photo_id=order.photo_id,
164
+        type=UserIncomeExpensesInfo.INCOME,
165
+        amount=total_fee,
166
+        balance=user.balance,
167
+        remark=u'图片购买',
168
+    )
161 169
 
162 170
 
163 171
 def order_paid_fail(order):

+ 1 - 1
utils/error/response_utils.py

@@ -16,4 +16,4 @@ def response_data(status_code, message=None, description=None, data={}):
16 16
 
17 17
 def response(status_code, message=None, description=None, data={}):
18 18
     message, description = (status_code.message, status_code.description) if isinstance(status_code, StatusCodeField) else (message, description)
19
-    return JsonResponse(response_data(status_code, message, description, data))
19
+    return JsonResponse(response_data(status_code, message, description, data), safe=False)

+ 17 - 0
utils/message_utils.py

@@ -0,0 +1,17 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from message.models import SystemMessageInfo
4
+from utils.redis.rmessage import get_system_message_delete_info, get_system_message_read_info
5
+
6
+
7
+def system_messages(user_id, src=SystemMessageInfo.PAIAI_USER):
8
+    """ Not Deleted """
9
+    deleted_message_ids = get_system_message_delete_info(user_id)
10
+    return SystemMessageInfo.objects.filter(src=src, status=True).exclude(pk__in=deleted_message_ids)
11
+
12
+
13
+def system_unread_messages(user_id, src):
14
+    """ Not Deleted & Read """
15
+    read_message_ids = get_system_message_read_info(user_id)
16
+    deleted_message_ids = get_system_message_delete_info(user_id)
17
+    return SystemMessageInfo.objects.filter(src=src, status=True).exclude(pk__in=list(set(read_message_ids + deleted_message_ids)))

+ 6 - 0
utils/redis/rkeys.py

@@ -30,6 +30,12 @@ LENSMAN_PHOTO_PRICE = 'lensman:photo:price:%s:%s:%s'  # STRING,摄影师照片
30 30
 LENSMAN_PHOTO_HAGGLE_TIMES = 'lensman:photo:haggle:times:%s:%s:%s'  # STRING,摄影师照片砍价次数,photo_id、user_id、photo_type
31 31
 LENSMAN_PHOTO_ORDER_RECORD = 'lensman:photo:order:record:%s:%s'  # STRING,摄影师照片购买记录,photo_id、user_id
32 32
 
33
+# 摄影师简报相关
34
+TOTAL_INCOME = 'total:income:%s'  # STRING,总收入,user_id
35
+TODAY_INCOME = 'today:income:%s:%s'  # STRING,今日收入,user_id、tc.local_string(format='%Y%m%d')
36
+
37
+TODAY_UPLOAD_PHOTO_AMOUNT = 'today:upload:photo:amount:%s:%s'  # STRING,今日上传照片数量,user_id、tc.local_string(format='%Y%m%d')
38
+
33 39
 # 系统消息相关
34 40
 SYSTEM_MESSAGE_READ_INFO = 'system:message:read:info:%s'  # STRING,系统消息读取信息,user_id
35 41
 SYSTEM_MESSAGE_DELETED_INFO = 'system:message:deleted:info:%s'  # STRING,系统消息删除信息,user_id