Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
M
mentha
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
rank
mentha
Commits
7e406f02
Commit
7e406f02
authored
Mar 05, 2021
by
郑伟
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'mr/develop/73688' into 'master'
gaia get_problem_extra接口迁移 See merge request
!64
parents
5fc9e94c
484d41e1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
137 additions
and
8 deletions
+137
-8
util.py
data_sync/topic/util.py
+137
-8
No files found.
data_sync/topic/util.py
View file @
7e406f02
...
...
@@ -2,16 +2,17 @@
from
talos.models.topic
import
Problem
,
TopicRankingScore
from
data_sync.utils
import
tzlc
from
gm_types.gaia
import
TOPIC_TYPE
from
django.conf
import
settings
from
utils.rpc
import
get_rpc_invoker
from
django.db
import
connections
,
connection
def
get_problems
(
pks
):
"""
:param pks:
:return:
"""
r
=
get_rpc_invoker
()
#
r = get_rpc_invoker()
problems
=
Problem
.
objects
.
filter
(
pk__in
=
pks
)
data
=
[]
...
...
@@ -26,19 +27,147 @@ def get_problems(pks):
})
data
.
append
(
get_problem
(
p
))
extras
=
r
[
'api/dbmw/get_problem_extra'
](
params
=
params
)
.
unwrap
()
assert
len
(
extras
)
==
len
(
data
)
# extras = r['api/dbmw/get_problem_extra'](params=params).unwrap()
extras
=
get_problem_extra_batch
(
params
=
params
)
# assert len(extras) == len(data)
for
topic
in
data
:
topic
[
'user'
]
.
update
(
extras
.
get
(
topic
[
"id"
],
{})
.
get
(
"user"
,
{}))
topic
.
update
(
extras
[
topic
[
"id"
]])
# for idx, topic in enumerate(data):
# topic['user'].update(extras[idx].pop('user', {}))
# topic.update(extras[idx])
return
data
for
idx
,
topic
in
enumerate
(
data
):
topic
[
'user'
]
.
update
(
extras
[
idx
]
.
pop
(
'user'
,
{}))
topic
.
update
(
extras
[
idx
])
def
get_problem_extra_batch
(
params
):
data
=
{}
for
param
in
params
:
data
[
param
[
'pid'
]]
=
get_problem_extra
(
param
[
'pid'
],
param
[
'uid'
],
param
[
'tids'
],
param
[
'sid'
],
param
[
'did'
])
return
data
def
get_problem_extra
(
pid
,
uid
,
tids
,
sid
,
did
):
"""
Get extra topic data.
:param did: 帖子关联的医生
:param sid: 帖子关联的美购
:param tids: 帖子关联的TAG
:param pid: topic id.
:param uid: 帖子关联的用户.
:return:
"""
res
=
{}
cur
=
connections
[
settings
.
ZHENGXING_DB
]
.
cursor
()
if
sid
:
service_sql
=
"select is_online from api_service where id = {}"
.
format
(
sid
)
cur
.
execute
(
service_sql
)
if
not
cur
.
fetchone
():
res
[
'is_sink'
]
=
True
if
did
:
doctor_sql
=
"select is_online from api_doctor where id = '{}'"
.
format
(
did
)
cur
.
execute
(
doctor_sql
)
if
not
cur
.
fetchone
():
res
[
'is_sink'
]
=
True
if
uid
:
user_sql
=
""" select id, last_name from auth_user where id = {}"""
.
format
(
uid
)
userextra_sql
=
""" select user_id, city_id from api_userextra where user_id = {}"""
.
format
(
uid
)
doctor_user_sql
=
""" select id from api_doctor where user_id = {}"""
.
format
(
uid
)
cur
.
execute
(
user_sql
)
user
=
cur
.
fetchone
()
cur
.
execute
(
userextra_sql
)
userextra
=
cur
.
fetchone
()
is_doctor
=
False
cur
.
execute
(
doctor_user_sql
)
if
cur
.
fetchall
():
is_doctor
=
True
user_info
=
{
"is_doctor"
:
is_doctor
,
}
city
=
userextra
[
1
]
if
user
:
user_info
[
"id"
]
=
user
[
0
]
user_info
[
"last_name"
]
=
user
[
1
]
if
city
:
user_info
.
update
(
get_area_tag_info
(
city
,
cur
))
else
:
user_info
=
{}
res
[
'user'
]
=
user_info
res
[
'tags'
]
=
[]
res
[
'tag_ids'
]
=
[]
res
[
'closure_tag_ids'
]
=
[]
if
tids
:
tag_sql
=
"""
select id, name from api_tag
where id in ({}) and
is_online=true"""
.
format
(
','
.
join
([
str
(
tid
)
for
tid
in
tids
]))
cur
.
execute
(
tag_sql
)
tags
=
cur
.
fetchall
()
res
[
'tags'
]
=
list
(
set
([
pt
[
1
]
for
pt
in
tags
]))
tag_ids
=
list
(
set
([
pt
[
0
]
for
pt
in
tags
]))
res
[
'tag_ids'
]
=
tag_ids
closure_tag_ids
=
tag_ids
# TODO
if
tag_ids
:
# 递归查询
closure_tag_ids
=
get_v3_parent_tag_list
(
cur
,
tag_ids
,
tag_ids
)
res
[
'closure_tag_ids'
]
=
closure_tag_ids
res
[
'in_whitelist'
]
=
False
res
[
'in_multitopic'
]
=
False
return
res
def
get_v3_parent_tag_list
(
cur
,
tag_list
,
stack
):
"""
获取tag_v_3标签的父级标签(递归查询)
"""
if
not
stack
:
return
tag_list
parent_v3_tag_id_sql
=
"""
SELECT api_tag_v3_relation.parent_id as parent_id
FROM api_tag_v3_relation
INNER JOIN api_tag_3_0 ON api_tag_v3_relation.parent_id = api_tag_3_0.id
WHERE api_tag_v3_relation.is_online = True AND api_tag_3_0.is_online = True
and api_tag_v3_relation.child_id in ({})"""
.
format
(
','
.
join
([
str
(
tid
)
for
tid
in
tag_list
]))
cur
.
execute
(
parent_v3_tag_id_sql
)
parent_ids
=
cur
.
fetchall
()
v3_parent_tag_ids
=
[
item
[
0
]
for
item
in
parent_ids
if
item
[
0
]
not
in
tag_list
]
tag_list
=
tag_list
+
v3_parent_tag_ids
return
get_v3_parent_tag_list
(
cur
,
tag_list
,
v3_parent_tag_ids
)
def
get_area_tag_info
(
city_id
,
cur
):
"""
获取用户关联的城市、省份、国家标签id
"""
if
not
city_id
:
return
{}
city_sql
=
"""
select api_city.tag_id as city_tag_id, api_province.tag_id as city_province_tag_id, api_country.tag_id as city_province_country_tag_id
from api_city
left join api_province on api_city.province_id = api_province.id
left join api_country on api_province.country_id = api_country.id
where api_city.id = '{}'
"""
.
format
(
city_id
)
cur
.
execute
(
city_sql
)
area_tag
=
cur
.
fetchone
()
if
not
area_tag
:
return
{}
return
{
'city_tag_id'
:
area_tag
[
0
],
'city_province_tag_id'
:
area_tag
[
1
],
'city_province_country_tag_id'
:
area_tag
[
2
],
}
def
get_problem
(
instance
):
p
=
instance
res
=
{
'id'
:
p
.
id
,
'diary_id'
:
p
.
diary_id
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment