from dao.treasure_name_es import NameEs
from collections import Counter
from dao.literal_meaning_es import ExplainEs
from service import preference_selecter
import random
from dao.treasure_name_dao import NameDao
from dao.literal_meaning_dao import WordDao


all_size = 20
find_size = 15


def statistics(name_type_dict,name_size_dict,json_result):
    name_type_list = []
    name_size_list = []
    for like_name in json_result:
        name_type_list.append(name_type_dict[like_name])
        name_size_list.append(name_size_dict[like_name])
    return name_type_list,name_size_list,len(json_result)

def precent_get(num_list,all_len):
    size_result_dict = {}
    for name_size in num_list.keys():
        size_result_dict[name_size] = num_list[name_size] / float(all_len)
    return size_result_dict

def  name_create(json_result):
    name_type_dict ,name_size_dict = preference_selecter.preference_meaning(json_result['preference'])
    name_type_list, name_size_list, all_len = statistics(name_type_dict,name_size_dict,json_result['preference'])

    name_type_num_dict = Counter(name_type_list)
    name_size_num_list = Counter(name_size_list)

    name_size_num_list = precent_get(name_size_num_list,all_len)
    name_type_num_list = precent_get(name_type_num_dict,all_len)
    namees = NameEs()
    result = {}
    all_num = 0
    name_list = []
    name_five_result = {}
    for item in name_type_num_list:
        if item not in result:
            result[item] = {}
        for name in name_size_num_list:
            if name not in result[item]:
                result[item][name] = ""
            result[item][name] = round(name_type_num_list[item] * name_size_num_list[name] * find_size)
            all_num += result[item][name]
            #带行业及地区
            # name_search_result = namees.select_name(item, name,json_result['city'],json_result['cate'], result[item][name])
            name_search_result = namees.select_name(item, name, result[item][name])

            if name_search_result:
                for search_name in name_search_result["hits"]['hits']:
                    name_list.append(search_name["_source"]['company_name'])
                    if str(search_name["_source"]['five_elements_type']) == "None":
                        name_five_result[search_name["_source"]['company_name']] = random.choice(["金", "木", "水", "火", "土"])
                    else:
                        name_five_result[search_name["_source"]['company_name']] = search_name["_source"][
                            'five_elements_type']

    surplus_num = all_size - len(name_list)
    if surplus_num > 0:
        null_result = namees.select_null(surplus_num)
        if null_result:
            for search_name in null_result["hits"]['hits']:
                name_list.append(search_name["_source"]['company_name'])

                if str(search_name["_source"]['five_elements_type']) == "None":
                    name_five_result[search_name["_source"]['company_name']] = random.choice(["金","木","水","火","土"])
                else:
                    name_five_result[search_name["_source"]['company_name']] = search_name["_source"]['five_elements_type']

    return name_list,name_five_result

def word_explain(name_list,name_five_result,json_result):
    explaines = ExplainEs()
    result = []
    for name in name_list:
        name_dict = {"name":"","explain":[],"company_name":"","five_elements_type":""}
        name_dict["company_name"] = json_result['city'].replace("市","") + name + json_result['cate'] + "有限公司"
        name_dict['name'] = name
        name_dict['five_elements_type'] = name_five_result[name]
        for word in name:
            word_dict = {}

            explain_result = explaines.select_explain(word)
            if explain_result:
                if explain_result['hits']['hits']:

                    word_dict[word] = explain_result['hits']['hits'][0]['_source']['explain']

                if not explain_result['hits']['hits']:
                    word_dict[word] = "暂无释义"
                name_dict['explain'].append(word_dict)
        result.append(name_dict)
    return result


def reserve(final_result_continue,name_list_final,json_result):
    already_name_dict = {'吉祥': [['昌盛', '金'], ['鸿喜', '水'], ['百福', '水'], ['步云', '水'], ['诚信', '金'], ['鼎泰', '火'], ['凤和', '水'], ['福寿', '金'], ['福和', '水'], ['广雅', '木'], ['观文', '水'], ['合盛', '金'], ['华盛', '金'], ['和祥', '金'], ['厚孚', '水'], ['厚康', '木'], ['恒孚', '水'], ['鸿福', '水'], ['鸿源', '水'], ['金福', '水']],
 '科技': [['赛玛', '水'], ['智奇', '木'], ['览智', '火'], ['诺克', '木'], ['冠中', '火'], ['华茂', '木'], ['华正', '金'], ['维阳', '土'], ['德中', '火'], ['永信', '金'], ['亿光', '火'], ['亿丰', '火'], ['利安', '土'], ['宇通', '火'], ['永迪', '火'], ['玛凯', '木'], ['展梦', '木'], ['威硕', '土'], ['启飞', '水'], ['安时', '金']],
 '通俗': [['泽民', '水'], ['民泽', '水'], ['小石头', '火'], ['红高粱', '水'], ['田大师', '金'], ['果壳', '木'], ['小镜子', '水'], ['斑鬣狗', '木'], ['大水牛', '木'], ['金钱豹', '水'], ['响尾蛇', '金'], ['鹰讯', '火'], ['凌峰者', '火'], ['攀峰者', '火'], ['快滴', '水'], ['七彩', '金'], ['兔先生', '金'], ['图小姐', '火'], ['小蜜蜂', '水'], ['狗管家', '木']],
 '文雅': [['琼华', '水'], ['琼英', '木'], ['鲁道', '火'], ['如雨', '水'], ['如水', '水'], ['美如英', '木'], ['园有桃', '木'], ['彼冈兮', '金'], ['十亩', '水'], ['桑者', '火'], ['乐土', '土'], ['鼓瑟', '木'], ['采苓', '木'], ['首阳', '土'], ['骐骝', '火'], ['伊人', '金'], ['在水一方', '水'], ['颜如', '金'], ['彼美淑姬', '木'], ['彼泽之陂', '水']],
 '洋气': [['亚伯拉罕', '水'], ['亚当', '火'], ['阿尔瓦', '土'], ['亚历克斯', '金'], ['艾伦', '火'], ['安德鲁', '火'], ['安迪', '火'], ['奥斯汀', '水'], ['本森', '木'], ['鲍伯', '水'], ['布兰登', '火'], ['布兰特', '火'], ['布伦特', '火'], ['卡尔', '火'], ['凯里', '火'], ['查尔斯', '金'], ['采尼', '火'], ['科林', '木'], ['科兹莫', '水'], ['丹尼尔', '火']]}

    already_word_dict = {'昌': '既有兴旺兴盛的意思，也是姓氏，在百家姓中排行51位。系出有熊氏，是黄帝的嫡系胤胄，始祖昌意。出自《史记·太史公自序》。',
                         '百': '1.最早见于甲骨文 ，其本义是数词一百，即《说文解字》：“百，十十也。”后引申为所有的、众多的，又特指百倍。2.百姓，姓氏名称，百姓望族居洛阳，起源分三支：一、出自上古，始祖为黄帝后人百倏。二、源于战国，始祖为著名道家列御寇的弟子百丰。三、古高丽八姓之一，为百姓又一支。百姓发迹之处为河南南阳，现主要分布于北京、浙江、湖南、四川和重庆等地。',
                         '步': '最早字形见于商代甲骨文。步是会意字，字上面的“止”是左脚。下面反写的“止”是右脚。“步”字的本义就是行走，如徒步行走的士兵称为步兵。“步”字在古代是一种长度单位。古人以举足一次为一跬，举足两次为一步。', '信': '本义为言语真实，引申泛指诚实，不欺，又引申指信用，由此引申出确实义和可靠义，又可指消息，讯息。',
                         '和': '“和”由本义和谐，引申到平和、温和、柔和这层意思，读hé。因为和谐，没有争斗，所以把结束战争称为和平、和好。因为“和”有共同一起的意思，所以就有连带的意思。又虚化作连词，意思同“与”“跟”。在粉状物中加液体搅拌，和字另读为huó。又读huò，指搅拌，加水搅合。',
                         '文': '最早见于甲骨文，像一个站立着的人形。本义指“文身”，引申为花纹、纹理，后又引申为文字、文饰、文武、天文等。 ', '合': '亼(ji)口为合。 亼，从入一，三合也。十口相传是古，三口相同为合。指运动时全身上下、四肢百骸都能互相配合，协调一致，使全身各部动作的幅度、运动的快慢、发力的大小及方向，各肢体间的相对位置恰到好处，没有过与不及的情况。',
                         '厚': '1.扁平物体上下两个面的距离较大之意，与“薄”相对。2.厚源于地名，出自春秋时期鲁国孝公之子惠伯巩之后，属于以封邑名称为氏。',
                         '孚': '第二次汉字简化方案中“孵”的二简字，后停用。', '金': '1.最早见于金文，金本义为赤金，即铜，引申为金属总称，后词义缩小指黄金。金在古代又作货币用，故又引申为货币。黄金在自然界储量稀少，故又指高贵、贵重之物等。2.金姓是占中国大陆第六十八位姓氏。在当今以人口多少为序的中国姓氏中，金姓是当今中国姓氏排行第六十八位的大姓，人口较多。',
                         '奇': '本义是独特、殊异；引申为出人意料、惊异、美妙；还引申为极、甚、特别；由意动用法（认为奇）引申为赏识、看重，以上各义都读qí。由本义引申出单数义，引申为余数、零数；由本义还引申为诡异不正、命运不好、遇事不顺利等，以上各义都读jī。', '克': '1.最早见于甲骨文，本义是战胜，后引申为能力超强，胜任，完成等义。2.克（g）是一个质量单位，千克（kg）的千分之一，一克是18×14074481个C－12原子的质量。',
                         '冠': '其古字形用手把帽子戴在头上。本义是帽子。古代的冠是一种装饰，用来束发，带冠表示礼貌。冠由帽子又引申为形状像帽子的或在顶部的东西。以上义读guān。冠又读guàn，用作动词，意思是戴帽。帽子戴在头上，处于人体最高处，故引申为第一位、第一名等。',
                         '中': '最早见于甲骨文，为象形字 ，一说指事字。其形体像竖立的一面旗帜，上下各两条旗斿向左飘动，方口表示中间。金文旗斿向右。小篆省掉旗斿，隶变后楷书写作“中”。原意指竖立“中”这种带旒之旗，来测定风向，表示中间，引申为内、里、中心之义，又引申为一半、中介、得当、符合等义。',
                         '正': '其古字形上为城池形，下为足，本义为征行、征伐，是“征”的古字，读zhēng。征伐的目的就是有所平定、有所纠正，因而引申出平定、匡正义，由平定引申出决定、考定、勘定等义。由匡正引申出使端正义，进一步引申为治理义，进行治理的人亦称为“正”，进一步引申为准则、法则义。由官长之“正”，引申为正、副之“正”。',
                         '永': '最早字形见于商代甲骨文 。一说“永”的古字形像人在水里游泳，本意指游泳，这个意思后来由“泳”表示。一说“永”的古字形像长长的流水，本义指水流长。由水长流不断的意思引申，指长久、久远，如：永乐、永生。', '光': '初文见于商代甲骨文。古文字的光像人头上有火，火能给人们带来光明。光的本义是明亮，引申指光线、亮光，又引申指光荣、光彩。光也表示增光、发扬光大、作动词用。由于光滑、裸露的东西容易反光，故引申为光滑、平滑。山水风景明亮光鲜，所以风景也叫风光。',
                         '利': '1.利的古字形用以刀割禾来反衬刀的锋利，本义指刀、剑锋利。刀口锋利切割速度就快，由这一点又可引申为速度快。对于刀，自然是越锋利越好，故引申为顺利、便利。事情顺利就有好处，故又引申指利益、好处、利润等义。2.利姓始祖李利贞为楚国老子的祖先，后人为纪念他，取利字为姓，是利姓的主要渊源，其它渊源还有出自芈姓，来源于封地；出自姬姓，也来源于封地。',
                         '安': '1.本义是平静，即《说文解字》所谓的“静也”，由此引申出静止、舒适、稳妥、没有危险、使……稳定、使……有合适的位置、乐意等含义。2.安姓，是中国旧百家姓排名第79位的大姓。', '宇': '1.最早出自金文，本义是屋檐，泛指房屋；引申义有空间、风度，仪容等。2.宇姓，来源于春秋申国国君之后，申，周时姜姓国，故城在今河南南阳北20里。',
                         '威': '其古字形像女子拿着象征权威的斧钺，本义是强大的力量和令人敬畏的气势，也有人认为“威”本义为婆婆，即丈夫的母亲，因为旧时婆婆是拥有绝对权力的人。由威力引申，表示使用或凭借权势，用作动词。', '飞': '本义是指鸟类在空中拍翅的动作，进而扩展为其他动物的飞翔，后又可指凡物的飘浮，如飞雪、飞絮等。又由此引申出急速，突然等义。',
                         '民': '此字初文始见于商代甲骨文，其古字形像一只被刺伤的眼睛，表示由刺瞎一只眼睛的战俘充当奴隶，后指平民、百姓。引申指大众的、非官方的、非军事的。也专指从事某种职业的人或某类人。', '小': '最早见于甲骨文，其本义是细碎的沙尘微粒，引申为微小，由微小义引申出低微、年幼或年幼的人等义，又用作称自己或与自己有关的人或事的谦辞等。',
                         '石': '1.此字初文始见于甲骨文。象形字。其古字形像山石形。本义即为岩石，后延伸至用石针治病。2.石是汉字部首之一，以“石”作意符的字大多与坚硬的物体有关，如：砖、矿、碉、碑、砚等。', '红': '形声字，其本义是指浅赤色的帛，后泛指粉红色，桃红色，也引申指赤，大红。通“工”，指妇女纺织、刺绣等工作。',
                         '田': '1.象形字。其古字形像阡陌纵横或沟浍四通的一块块农田。本义为种植农作物的土地，后延伸至和农业有关的东西。2.“田”也是汉字的一个部首，从“田”的字多与田猎耕种有关，如：畦、畎、界、甸、町等。3.田氏出自妫氏，跟陈，胡两姓出自一脉。陈国(位于今河南周口市淮阳县)灭亡后，陈国国君陈胡公后裔陈完逃到齐国，后以田为氏。得姓始祖:陈国公族陈完(今河南周口市淮阳县人)。',
                         '大': '最早见于图形文字，其本义是容量、体积、面积、数量、力量、年龄等方面超过一般或超过所比的对象，与“小”相对，后引申出“范围程度深广”、“年辈较长”、“再”等意义，又作为敬词来使用 。', '果': '最早见于甲骨文，其古字形像结满果实的树，本义即果实，后引申为使内部充实，使变成圆球形、事物发展的结局、善于决断的、有结局的等含义。',
                         '子': '子姓（殷本读依燕颖声），作为殷商帝王家族的姓氏，最早从偰（契（xiè）本写作偰）的时代开始，偰因生在殷水，以“殷”为姓，后来又辅佐大禹治水有功， 被舜帝封在商地并赐姓为“子”。', '水': '水，化学式为H₂O，是由氢、氧两种元素组成的无机物，无毒，可饮用。在常温常压下为无色无味的透明液体，被称为人类生命的源泉。水是地球上最常见的物质之一，是包括无机化合、人类在内所有生命生存的重要资源，也是生物体最重要的组成部分。',
                         '牛': '属牛族，为牛亚科下的一个族。染色体数为56的野牛、60的黄牛和58染色体的大额牛，杂交有可育后代，为哺乳动物，容易发生罗伯逊易位（丝粒融合）改变染色体数降低生育率，草食性，部分种类为家畜（包含家牛、黄牛、水牛和牦牛）。体型粗壮，部分公牛头部长有一对角。牛能帮助人类进行农业生产。', '快': '最早见于小篆（《说文解字》中的），其本义是指高兴、痛快，即《说文解字》所谓的“喜也”，引申指迅速、直爽、将要等。',
                         '七': '1.“七”本义为切断，“七”就借为数词，本义则淹没不闻；由数词“七”引申出与此相关的一些义项，如“七体”，指汉赋中一种以七段问答为主题的文学样式；按阴阳学说，七是由阳转阴的分界，故人死后，每七天一祭，俗称“七”，至七七四十九日，称为“满七”。2.七（柒）柒，读音作qī(ㄑㄧ) 现行较罕见姓氏。',
                         '先': '此字初文始见于商代甲骨文及商代金文，古字形从止（指脚）从人，人举足则前进，表示在前面的意思。先的基本义是走在前面，引申为时间或空间的次序在先。引申用作名词，特指祖先，又指过世的，多指长辈。',
                         '生': '生的本义是草木破土萌发。后引申为从无到有，出现。 由从无到有，出现引申为母体产子、产育。由母体产子、产育引申为古代对年轻男子的称呼。由古代对年轻男子的称呼引申为活着。由活着引申为活着的，新鲜的，未死的；活活地；人类的灵肉活动，存在。由人类的灵肉活动，存在引申为一个人存在的长度和次数。由活着的，新鲜的，未死的引申为未成熟的，未处理的。由未成熟的，未处理的引申为未接触的，不了解的；不成熟地，条件不足地。 ',
                         '姐': '姐 ，从女从且，且亦声。“且”本义为“加力”、“加强”，常常是姐姐连起来用，如果女孩先一步男孩出生，那男孩就要叫女孩姐或者姐姐。', '如': '最早见于金文。本义是顺从，后引申为像；如同等。', '雨': '本义是云层中降向地面的水滴；由云层中降向地面的水滴引申为朋友，也可比喻离散；又可用来比喻恩泽，像雨一样润泽大地万物；这些意义的“雨”读为yǔ。文言文中用为动词，指降雨，读yù；又用来比喻像雨一样地降落。',
                         '美': '美的古字形像戴着头饰站立的人，本义指漂亮、好看。“美”除了表示具体事物的美好外，还用来表示抽象意义。如形容一个人品德高尚称为“美德”。美好的事物往往给人愉快的感觉，所以“美”有令人满意的意思，“美”有时也作动词使用，指赞美；又指使其漂亮。', '有': '最早见于甲骨文，其本义是持有，与“无”相对，后引申指占有、存在、保存、丰收、富有等。',
                         '冈': '形声，从山，网声。本义：山脊，山岭。也是数学上的角度单位。《楚辞·守志》等均有相关记载。', '土': '此字始见于商代甲骨文及商代金文，其古字形像地面上的土堆或土块。“土”的本义为土地，又指土壤。由土地引申为家乡，又指本地的、地方的，由此又引申为出自民间的、民间产的。此外土还指不合潮流的或不开通的。',
                         '首': '其古字形是一个头的形状，有头颅、眼睛、嘴巴以及头颅上的毛发，本义即头。“首”因为位于身体的最上部，它的位置居最高、功效最重要，掌管着生物体的神经中枢，因此引申出“首领”“首相”“首要”“首先”“首位”，表示群体中最重要的人物或者处于第一、很重要位置的物或事。',
                         '伊': '1.作为名词，是姓氏和地名等；作为代词，是第三人称的代称；作为动词，表示“却”，还可以作为语气词。2.伊姓源于上古。3、为历史上伊娄氏所改。《魏书。官氏志》有记载云：后魏鲜卑族有可汗拓跋邻，以其六弟为伊娄氏，后分为二姓，一姓伊，一姓娄。 伊姓望族居陈留（今河南开封陈留镇）。 回族、满族、蒙古族有伊姓。',
                         '人': '人（学名：Homo sapiens，意为“有智慧的人”），是一种灵长目人科人属的物种。线粒体DNA与化石证明人类大约于500万年前起源于东非。与黑猩猩、大猩猩、猩猩、长臂猿、合趾猿同属人科的灵长目动物。英国动物学家和人类行为学家德斯蒙德·莫利斯戏称人类为裸猿 ，并著述从各个角度论述人类种种行为的起源。恩格斯著有《从猿到人》，代表着马克思主义对人的来源的经典研究。',
                         '在': '表示动作、情状所涉及的场所、时间、范围等的介词。', '一': '最早见于商代甲骨文及商代金文，其本义为最小原始单位，最小的正整数，后引申为相同的，无二至的、整体的、全部的、整个的、所有的等。古籍释义，一，惟初太始，道立于一，造分天地，化成万物，凡一之属皆从一。', '方': '最早见于甲骨文。方的本义是放逐，剔发披枷，流放边疆。后引申为边塞，边境。正，刚刚，才。由边塞，边境引申为与中央相对的、各具特色的四处小行政区域。',
                         '之': '属指事字，一说会意字。古字形从止，止下面一横表示出发的地方，本义是往、到……地方去。“之”常假借作代词用，指人或物；又作指示代词，相当于“此”“这”；又由代词虚化为助词，置于主谓结构之间以取消其独立性；又用在偏正结构中，作用相当于现代汉语“的”。之”字虚化后，有时仅为调节音节用。', '亚': '其本义是正视的族徽和俯视的祭坛形，后来引申为仅次一等。《说文解字》认为是“丑陋” 。',
                         '伯': '1.本义即人首。引申指第一的，如兄弟排行，伯仲叔季，兄曰伯；又父之兄称伯父或伯。2.伯（Bó）姓源出有四。伯姓历史悠久，不是别的姓氏可比得上的，因为根据历来学者的考证，他们是源自上古圣君虞舜时的贤人伯益，算起来已有4000多年的渊源。', '罕': '此字始见于战国文字 。形声字，古字形从网，干声。罕本指一种捕鸟的网，后假借为尟（鲜），表示稀少。',
                         '瓦': '始见于战国文字 。本义是瓦器，后又用作动词，铺瓦。', '艾': '1.多年生草本植物，叶子有香气，可入药，内服可做止血剂，又供灸法上用。也叫艾蒿。2.（Ài）姓。3.年老的，也指老年人：耆～。4.停止：方兴未～。5.美好；漂亮', '汀': '汀：水边平地，小洲。汀洲；绿汀；汀线（海岸被海水侵蚀而成的线状痕迹）。',
                         '本': '金文根部加粗，指明是根部。篆文规整化，用根部加一横指明。隶变后楷书写作“本”。衍义：根源。衍义：事物的根基或主体。', '布': '该字常表示为棉、麻及棉型化学短纤维经纺纱后的织成物、布匹、棉布、布料。其他含义：①散开；传播。②宣告；宣布。③安排；设置。④陈述：强齐压境举朝忧，韦布谁知握胜筹？——明冯梦龙《东周列国志》⑤姓。源于羌族，出自战国时期赵国大夫布子，属于以先祖名字为氏。',
                         '卡': '卡（qiǎ）（kǎ），汉字，多音字。分别组词有关卡、卡车。', '查': '查，形声。从木，有两种读法。1.读chá时意为考察：如：检查。调查。古同“槎”，水中浮木之意。2.作为姓氏读作zhā。', '尼': '尼古同“昵”，相近，亲近。梵语“比丘尼”的简称，指佛教中出家修行的女子。', '科': '从禾，从斗。斗者，量也。”可见该字本义为“区分”、“程度”、“类别”的意思。',
                         '林': '林姓，主要源自子姓、姬姓及少数民族改姓等，东夷一支称林方，南迁后称“郴”。林义与曹近似，“木”是建木，也就是天杆圭表，又名扶桑，扶木。二建木并立为林，“林”下为天齐坛台（渐台）。林姓是风姓别支，又作梵。中华书局刊印的《辞海》合订本载：林 ，“姓也，史谓殷比干避难长林之山，因以林为氏”。',
                         '丹': '此字始见于商代甲骨文及商代金文，指事字，其古字形像采丹井或盘子一类容器，中间一点像丹药在其中。丹的本义指朱砂，古时常用朱砂作绘画颜料，也可入药。朱砂是红色的，故引申为朱红色。因道家炼药多用朱砂，所以引申出道家炼制出的药物一义。'}

    name_type_dict, name_size_dict = preference_selecter.preference_meaning(json_result['preference'])
    name_type_list, name_size_list, all_len = statistics(name_type_dict, name_size_dict, json_result['preference'])

    name_type_num_dict = Counter(name_type_list)
    name_type_num_list = precent_get(name_type_num_dict, all_len)
    result = {}
    name_list = []
    name_five_result = {}


    for item in name_type_num_list:
        if item not in result:
            result[item] = {}

        result[item] = round(name_type_num_list[item] * 20)
        for name_data in already_name_dict[item][:result[item]]:
            name_list.append(name_data[0])
            if name_data[1] == "":
                name_five_result[name_data[0]] = random.choice(["金","木","水","火","土"])
            else:
                name_five_result[name_data[0]] = name_data[1]

    for name in name_list:
        if name not in name_list_final:
            name_dict = {"name": "", "explain": [], "company_name": "", "five_elements_type": ""}
            name_dict["name"] = name
            name_dict["company_name"] = json_result['city'].replace("市","") + name + json_result['cate'] + "有限公司"
            name_dict['five_elements_type'] = name_five_result[name]
            for word in name:
                word_dict = {}
                if word in already_word_dict:
                    word_dict[word] = already_word_dict[word]
                if word not in already_word_dict:
                    word_dict[word] = "暂无释义"
                name_dict['explain'].append(word_dict)
            final_result_continue.append(name_dict)
        if len(final_result_continue) == 20:
            break



    return final_result_continue


def mysql_reserve(final_name_list,name_five_result,json_result):
    name_type_dict ,name_size_dict = preference_selecter.preference_meaning(json_result['preference'])
    name_type_list, name_size_list, all_len = statistics(name_type_dict,name_size_dict,json_result['preference'])

    name_type_num_dict = Counter(name_type_list)
    name_size_num_list = Counter(name_size_list)

    name_size_num_list = precent_get(name_size_num_list,all_len)
    name_type_num_list = precent_get(name_type_num_dict,all_len)
    namedao = NameDao()
    result = {}
    all_num = 0
    # name_five_result = {}
    for item in name_type_num_list:
        if item not in result:
            result[item] = {}
        for name in name_size_num_list:
            if name not in result[item]:
                result[item][name] = ""
            result[item][name] = round(name_type_num_list[item] * name_size_num_list[name] * all_size)
            all_num += result[item][name]
            # name_search_result = namedao.select_name_dao(item, name, json_result['city'], json_result['cate'],result[item][name])
            name_search_result = namedao.select_name_dao(item, name, result[item][name])

            if name_search_result:
                for search_name in name_search_result:
                    if len(final_name_list) < 20:
                        if search_name['company_name'] not in final_name_list:
                            final_name_list.append(search_name['company_name'])
                        if search_name['five_elements_type'] == None:
                            name_five_result[search_name['company_name']] = random.choice(
                                ["金", "木", "水", "火", "土"])
                        if search_name['five_elements_type'] != None:
                            name_five_result[search_name['company_name']] = search_name['five_elements_type']

    surplus_num = all_size - len(final_name_list)
    if surplus_num > 0:
        null_result = namedao.select_null_dao(surplus_num)
        if null_result:
            for search_name in null_result:
                if search_name['company_name'] not in final_name_list:
                    final_name_list.append(search_name['company_name'])
                if search_name['five_elements_type'] == None:
                        name_five_result[search_name['company_name']] = random.choice(
                            ["金", "木", "水", "火", "土"])
                if search_name['five_elements_type'] != None:
                    name_five_result[search_name['company_name']] = search_name[
                        'five_elements_type']

    return final_name_list, name_five_result


def mysql_explain(name_list,name_five_result,json_result):
    worddao = WordDao()
    result = []
    for name in name_list:
        name_dict = {"name": "", "explain": [], "company_name": "", "five_elements_type": ""}
        name_dict["company_name"] = json_result['city'].replace("市", "") + name + json_result['cate'] + "有限公司"
        name_dict['name'] = name

        name_dict['five_elements_type'] = name_five_result.get(name)
        for word in name:
            word_dict = {}
            explain_result = worddao.select_explain_dao(word)

            if explain_result:
                if explain_result[0]['explain'] != None:
                    word_dict[word] = explain_result[0]['explain']
                else:
                    word_dict[word] = "暂无释义"

            if not explain_result:
                word_dict[word] = "暂无释义"
            name_dict['explain'].append(word_dict)
        result.append(name_dict)
    return result



def company_name_explain(json_result):
    result_dict = {}
    name_list,name_five_result = name_create(json_result)
    if len(name_list) < 20:
        final_name_list, name_five_result = mysql_reserve(name_list,name_five_result,json_result)
        result = mysql_explain(final_name_list, name_five_result, json_result)
    else:
        result = word_explain(name_list,name_five_result,json_result)
        final_name_list = name_list
    if len(final_name_list) == 0:
        result = reserve(result,name_list,json_result)

    result_dict["orderId"]=json_result['orderId']
    result_dict["result_name"] = result
    return result_dict


