1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import datetime
from celery import shared_task
from django.conf import settings
from gm_protocol import GmProtocol
from gm_types.push.enum import PUSH_INFO_TYPE, AUTOMATED_PUSH
from gm_types.gaia import USER_RIGHTS_LEVEL, POINTS_TYPE
from utils.rpc import get_rpc_invoker
from utils.rpc import logging_exception
from user_hierarchy.models import UserEventLog, UserGrowthValue
from user_hierarchy.score import get_level_by_value
from user_hierarchy.libs.user import rpc_update_user_level
gm_protocol = GmProtocol(api_host=settings.BACKEND_API_HOST+'/')
@shared_task
def process_notify_message(user_id, title='升级提醒', message=None, url=''):
# TODO : 处理通知
if settings.INIT_DATA:
return
try:
r = get_rpc_invoker()
r['api/notification/create'](uid=user_id, title=title, content=message, url=url).unwrap()
except:
logging_exception()
return
@shared_task
def process_push_message(user_id, message, extra=None, push_type=None):
# TODO: 处理推送 除了更美等级提升,其他场景目前不会触发推送
if settings.INIT_DATA:
return
try:
rpc_client = get_rpc_invoker()
rpc_client['push2/push/user/automated_push/uids'](
push_type=push_type,
user_ids=[user_id],
alert=message,
extra=extra,
).unwrap()
except Exception as e:
logging_exception()
print(e)
return 'ok'
@shared_task
def process_user_add_value(user_id, version='7.6.19'):
# process event that user add value triggered
# tips: level may upper or lower
user_value = UserEventLog.get_user_value(user_id)
try:
user_growth = UserGrowthValue.objects.get(user_id=user_id)
user_value = user_value if user_value > 0 else 0 # 负值时统一显示为0,同时记录其负值@PM -- eventlog表有负值记录
pre_level = user_growth.level
now_level = get_level_by_value(user_value)
if pre_level != now_level:
user_growth.value = user_value
user_growth.level = now_level
user_growth.save()
if int(now_level) > int(pre_level):
_build_level_upper_message(user_id, pre_level, now_level, version)
add_user_point(user_id, POINTS_TYPE.LEVEL_UPPER, settings.LEVEL_UPPER_GAIN_POINTS)
return _callback_update_user_level(user_id, now_level)
user_growth.value = user_value
user_growth.save()
except UserGrowthValue.DoesNotExist:
now_level = get_level_by_value(user_value)
UserGrowthValue.objects.create(user_id=user_id, value=user_value, level=now_level)
if not now_level == USER_RIGHTS_LEVEL.V1:
add_user_point(user_id, POINTS_TYPE.LEVEL_UPPER, settings.LEVEL_UPPER_GAIN_POINTS)
def _callback_update_user_level(user_id, level):
# call gaia to update user level
if settings.INIT_DATA:
return
user = {'user_id': user_id, 'level': level}
rpc_update_user_level([user, ])
def _build_level_upper_message(user_id, pre_level, now_level, version='7.6.19'):
title = '升级提醒'
message = '快来看!你的更美等级由等级{}升级到了等级{},多了哪些特权呀?——'.format(pre_level, now_level)
if version == '7.6.20':
from six.moves import urllib_parse as urlparse
url_new = urlparse.urljoin(
gm_protocol.api_host,
'hybrid/user/rights_v1?user_id={}'.format(user_id)
)
url = gm_protocol.get_webview(url_new)
elif version >= '7.6.25':
url = gm_protocol.get_user_task_center()
else:
url = gm_protocol.get_user_rights(user_id)
extra = {
'type': PUSH_INFO_TYPE.GM_PROTOCOL,
'msgType': 4,
'pushUrl': url,
'push_url': url,
}
process_notify_message.delay(user_id, title=title, message=message, url=url)
process_push_message.delay(user_id, message=message, extra=extra, push_type=AUTOMATED_PUSH.USER_LEVEL_UP)
return
@shared_task
def add_user_point(user_id, point_type, point_v=0):
try:
r = get_rpc_invoker()
r['api/point/add'](user_id=user_id, point_type=point_type, point_v=point_v).unwrap()
except:
logging_exception()
@shared_task
def add_user_growth(user_id, event_type, item_id, value, version='7.6.19'):
UserEventLog.objects.create(
event_type=event_type,
related_item_id=item_id,
trigger_time=datetime.datetime.now(),
value=value,
user_id=user_id,
)
process_user_add_value(user_id, version)