""" @author: luojunhui """ from applications.functions import ArticleRank class AccountArticleRank(object): """ 文章排序 """ def __init__(self, params, mysql_client): """ :param params: 请求参数 :param mysql_client: 数据库链接池 """ self.publishArticleList = None self.publishNum = None self.strategy = None self.ghId = None self.accountName = None self.accountId = None self.params = params self.mysql_client = mysql_client async def check_params(self): """ 校验参数 :return: """ try: self.accountId = self.params['accountId'] self.accountName = self.params['accountName'] self.ghId = self.params['ghId'] self.strategy = self.params['strategy'] self.publishNum = self.params['publishNum'] self.publishArticleList = self.params['publishArticleList'] self.title_list = [i['title'] for i in self.publishArticleList] self.content_list = [i['content'] for i in self.publishArticleList] return None except AttributeError as e: response = { "msg": "params error", "info": "params check failed, params : {} is not correct".format(e), "code": 0 } return response async def rank_v1(self): """ Rank Version 1 :return: """ rank_info = ArticleRank().rank(account_list=[self.accountName], text_list=self.title_list) score_list = rank_info[self.accountName]['score_list'] for index, item in enumerate(self.publishArticleList): item['score'] = score_list[index] sorted_list = sorted(self.publishArticleList, key=lambda x: x['score'], reverse=True) result = { "accountId": self.accountId, "accountName": self.accountName, "ghId": self.ghId, "strategy": self.strategy, "publishNum": self.publishNum, "rank_list": sorted_list[:self.publishNum] } response = { "status": "Rank Success", "data": result } return response async def rank_v2(self): """ Rank Version 2 :return: """ return await self.rank_v1() async def rank_v3(self): """ Rank Version 3 :return: """ return await self.rank_v1() async def rank_v4(self): """ Rank Version 4 :return: """ return await self.rank_v1() async def rank_v5(self): """ Rank Version 5 :return: """ return await self.rank_v1() async def choose_strategy(self): """ 选择排序策略 :return: """ match self.strategy: case "ArticleRankV1": return await self.rank_v1() case "ArticleRankV2": return await self.rank_v2() case "ArticleRankV3": return await self.rank_v3() case "ArticleRankV4": return await self.rank_v4() case "ArticleRankV5": return await self.rank_v5() async def deal(self): """ Deal Function :return: """ error_params = await self.check_params() if error_params: return error_params else: return await self.choose_strategy()