kboss/b/news/news_article_search.dspy
2026-07-15 15:30:29 +08:00

79 lines
3.5 KiB
Plaintext

async def news_article_search(ns={}):
if not ns.get('url_link'):
return {
'status': False,
'msg': '请传递url_link'
}
domain_name = ns.get('url_link').split("//")[1].split("/")[0]
if 'localhost' in domain_name:
domain_name = 'dev.opencomputing.cn'
current_page = int(ns.get('current_page', 1))
page_size = int(ns.get('page_size', 10))
offset = (current_page - 1) * page_size
conditions = ["domain_name = '%s'" % domain_name, "del_flg = '0'"]
summary_conditions = ["domain_name = '%s'" % domain_name, "del_flg = '0'"]
if ns.get('title'):
conditions.append("title like '%%%%%s%%%%'" % ns.get('title'))
if ns.get('article_type'):
conditions.append("article_type = '%s'" % ns.get('article_type'))
if ns.get('status'):
conditions.append("status = '%s'" % ns.get('status'))
where_clause = " and ".join(conditions)
db = DBPools()
async with db.sqlorContext('kboss') as sor:
try:
count_sql = """select count(*) as total_count from enterprise_news_article where %s;""" % where_clause
total_count = (await sor.sqlExe(count_sql, {}))[0]['total_count']
summary_sql = """
select article_type, count(*) as article_count, ifnull(sum(read_count), 0) as read_count
from enterprise_news_article
where %s
group by article_type;
""" % " and ".join(summary_conditions)
summary_result = await sor.sqlExe(summary_sql, {})
summary_mapping = {}
for summary_dic in summary_result:
summary_mapping[summary_dic.get('article_type')] = summary_dic
article_type_summary = []
for article_type in ['企业动态', '产品动态', '行业洞察', '活动资讯']:
summary_dic = summary_mapping.get(article_type, {})
article_type_summary.append({
'article_type': article_type,
'article_count': summary_dic.get('article_count', 0),
'read_count': summary_dic.get('read_count', 0)
})
search_sql = """
select id, domain_name, title, article_type, summary, cover_img, status, content,
publish_time, read_count, update_time, create_at
from enterprise_news_article
where %s
order by publish_time desc, update_time desc
limit %s offset %s;
""" % (where_clause, page_size, offset)
result = await sor.sqlExe(search_sql, {})
for data_dic in result:
data_dic['status_name'] = {'0': '草稿', '1': '已发布'}.get(str(data_dic.get('status')), data_dic.get('status'))
data_dic['operation_list'] = ['发布', '删除'] if str(data_dic.get('status')) == '0' else ['下架', '删除']
return {
'status': True,
'msg': 'search news article success',
'data': result,
'article_type_summary': article_type_summary,
'pagination': {
'total': total_count,
'page_size': page_size,
'current_page': current_page
}
}
except Exception as e:
return {
'status': False,
'msg': 'search news article failed, %s' % str(e)
}
ret = await news_article_search(params_kw)
return ret