#coding:utf8

from BaseDataMaintenance.maintenance.product.htmlparser import *
from BaseDataMaintenance.common.Utils import getLegal_str


requirement_pattern = "(采购需求|需求分析|项目说明|合同内容|招标项目技术要求|采购内容及其它要求|服务要求|招标内容[及与和]要求|服务需求|采购内容|项目概况|项目目标|项目服务内容|项目服务范围|需求内容如下)([:：]|$)"
policy_pattern = "《.+?》"
not_policy_pattern = "(表|函|书|证)》$|采购合同|响应方须知|响应文件格式|营业执照|开标一览|采购需求"
aptitude_pattern = "(资格要求|资质要求)([:：]|$)"
def extract_parameters(_html):


    pd = ParseDocument(_html,True)

    list_data = pd.tree
    list_result = []



    requirement_text = ''
    list_policy = []
    aptitude_text = ''

    _find_count = 0
    _data_i = -1
    while _data_i<len(list_data)-1:
        _data_i += 1
        _data = list_data[_data_i]
        _type = _data["type"]
        _text = _data["text"].strip()
        # print(_data.keys())
        if _type=="sentence":
            if _data["sentence_title"] is not None:
                if re.search(requirement_pattern,_text) is not None:

                    childs = get_childs([_data])
                    for c in childs:
                        requirement_text += c["text"]+"\n"
                    _data_i += len(childs)-1
    _data_i = -1
    while _data_i<len(list_data)-1:
        _data_i += 1
        _data = list_data[_data_i]
        _type = _data["type"]
        _text = _data["text"].strip()
        # print(_data.keys())
        if _type=="sentence":
            if _data["sentence_title"] is not None:
                print("aptitude_pattern",_text)
                if re.search(aptitude_pattern,_text) is not None:
                    childs = get_childs([_data])

                    for c in childs:
                        aptitude_text += c["text"]+"\n"
                    _data_i += len(childs)-1

        if _type=="table":
            list_table = _data["list_table"]
            parent_title = _data["parent_title"]
            if list_table is not None:
                for line in list_table[:2]:
                    for cell_i in range(len(line)):
                        cell = line[cell_i]
                        cell_text = cell[0]
                        if len(cell_text)>120 and re.search(aptitude_pattern,cell_text) is not None:
                            aptitude_text += cell_text+"\n"

    _data_i = -1
    while _data_i<len(list_data)-1:
        _data_i += 1
        _data = list_data[_data_i]
        _type = _data["type"]
        _text = _data["text"].strip()
        # print(_data.keys())
        if _type=="sentence":
            if re.search(policy_pattern,_text) is not None:
                for t in re.findall(policy_pattern,_text):
                    if len(t)>0:
                        list_policy.append(t)


    list_policy = list(set(list_policy))
    new_list_policy = []
    for _policy in list_policy:
        if re.search(not_policy_pattern,_policy) is None:
            new_list_policy.append(_policy)
    return requirement_text,new_list_policy,aptitude_text


def valid_xml_char_ordinal(c):
    codepoint = ord(c)
    # conditions ordered by presumed frequency
    return (
            0x20 <= codepoint <= 0xD7FF or
            codepoint in (0x9, 0xA, 0xD) or
            0xE000 <= codepoint <= 0xFFFD or
            0x10000 <= codepoint <= 0x10FFFF
    )


def wash_data(text):
    cleaned_string = ''.join(c for c in text if valid_xml_char_ordinal(c))
    return cleaned_string

def extract_datas():
    import glob
    import pandas as pd

    list_data = []
    for file in glob.glob(r"C:\Users\Administrator\Desktop\html_output\*.html"):
        _content = open(file,"r",encoding="utf-8").read()
        filename = file.split("\\")[-1]
        # if filename!='2023年泗门镇公共视频图像通信链路技术服务采购项目.html':
        #     continue
        requirement_text,list_policy,aptitude_text = extract_parameters(_content)
        print("requirement_text",requirement_text)
        print("list_policy",list_policy)
        print("aptitude_text",aptitude_text)
        list_data.append([wash_data(filename),wash_data(requirement_text),wash_data(",".join(list_policy)),wash_data(aptitude_text)])
    df = pd.DataFrame(list_data,columns=["文件名","采购需求","采购政策","资质要求"])
    df.to_excel("提取结果.xlsx",columns=["文件名","采购需求","采购政策","资质要求"])

def extract_datas_1():
    import glob
    import pandas as pd

    list_data = []
    for file in glob.glob(r"C:\Users\Administrator\Desktop\html_output1\*.html"):
        _content = open(file,"r",encoding="utf-8").read()
        filename = file.split("\\")[-1].split(".")[0]
        # if filename!='2023年泗门镇公共视频图像通信链路技术服务采购项目.html':
        #     continue
        requirement_text,list_policy,aptitude_text = extract_parameters(_content)
        print("requirement_text",requirement_text)
        print("list_policy",list_policy)
        print("aptitude_text",aptitude_text)
        # list_data.append([wash_data(filename),wash_data(requirement_text),wash_data(",".join(list_policy)),wash_data(aptitude_text)])
        list_data.append([wash_data(filename),wash_data(",".join(list_policy))])
    df = pd.DataFrame(list_data,columns=["文件名","采购政策"])
    df.to_excel("提取结果1.xlsx",columns=["文件名","采购政策"])

def test_extract():

    _html = '''
    <div style="display:none;" class="richTextFetch"><div filemd5="26b9078ad045130489e440c40ff6e89d"><div>湖南石化环氧氯丙烷污水预处理建设项目建筑安装施工总承包招标公告</div><div>1．招标条件</div><div>湖南石化环氧氯丙烷污水预处理建设项目已由<a target="_blank" class="markBlue" href="/bdqyhx/586565143588823040.html" style="color: #3083EB !important;text-decoration: underline;">中石化湖南石油化工有限公司</a>以《关于环氧氯丙烷污水预处理建设项目基础</div><div>设计的批复》（湖南石化办〔2024〕68号）批准建设，项目业主为<a target="_blank" class="markBlue" href="/bdqyhx/586565143588823040.html" style="color: #3083EB !important;text-decoration: underline;">中石化湖南石油化工有限公司</a>，建设资金来自企业自筹，</div><div>项目出资比例为100%，招标人为<a target="_blank" class="markBlue" href="/bdqyhx/586565143588823040.html" style="color: #3083EB !important;text-decoration: underline;">中石化湖南石油化工有限公司</a>，招标代理机构为<a target="_blank" class="markBlue" href="/bdqyhx/594388553060274176.html" style="color: #3083EB !important;text-decoration: underline;">中国石化集团招标有限公司武汉分公司</a>。湖</div><div>南石化环氧氯丙烷污水预处理建设项目建筑安装施工总承包项目已具备招标条件，现进行公开招标。</div><div>2．．项目概况与招标范围</div><div>2.1建设地址：湖南省岳阳市云溪区湖南石化厂区内。</div><div>2.2标段划分：1个标段。</div><div>2.3标段合同估算金额：583万元（含税）。</div><div>2.4标段招标范围：建设一套厌氧工艺（EGSB）预处理装置（设计处理能力为240t/d，主要处理5万吨/年环氧氯丙烷装置</div><div>产生的废水）及配套供电、仪表、控制系统、循环水管、蒸汽管、臭气收集管等工程的施工总承包。</div><div>3．．投标人资格要求</div><div>3.1投标人应具备以下基本资格条件：</div><div>（1）在中华人民共和国境内注册的法人；</div><div>（2）持有行政主管部门核发的资质证书：</div><div>1)石油化工工程施工总承包三级及以上</div><div>2)特种设备生产许可证（工业管道安装GC2及以上）。</div><div>（3）持有安全生产许可证书。</div><div>（4）持有质量、环境、职业健康安全管理体系认证证书。</div><div>（5）2019年以来有炼油化工工程施工总承包项目业绩（单项合同金额≥300万元）。</div><div>（6）财务状况良好，具有足够资产及能力并有效地履行合同。</div><div>3.2本次招标不接受联合体投标。</div><div>3.3本次招标投标人主要人员资格要求为：</div><div>（1）项目经理持有机电工程专业二级及以上建造师注册证书（注册于投标人单位），持有建筑施工企业项目负责人安全</div><div>生产考核合格证书（企业名称：投标人单位），2019年以来有炼油化工工程施工总承包项目（单项合同金额≥300万元）的项</div><div>目经理执业业绩。</div><div>（2）技术负责人持有工程序列中级及以上专业技术职称证书，2019年以来有炼油化工工程施工总承包项目（单项合同金</div><div>额≥300万元）的技术负责人执业业绩。</div><div>（3）安全负责人持有国家注册安全工程师执业证书（注册于投标人单位），或持有建筑施工企业专职安全生产管理人员</div><div>安全生产考核合格证书（企业名称：投标人单位），2019年以来有炼油化工工程施工总承包项目（单项合同金额≥300万</div><div>元）的安全负责人执业业绩。</div><div>3.4投标人应慎重考虑并决策是否参与本招标项目的投标。若获取了招标文件后决定不参与投标，请在递交投标文件截止</div><div>时间5天前书面通知招标人或招标代理机构。</div><div>4．．注册、申领电子印章与招标文件及相关资料获取</div><div>4.1本招标项目采用全流程电子招标投标的方式，通过中国石化电子招标投标交易网（以下简称交易平台）在线完成发</div><div>标、投标、评标等工作。</div><div>4.2投标人须登录交易平台进行注册、申领企业CA数字证书的电子印章（以下简称CA章）、获取招标文件等。</div><div>4.3获取招标文件、图纸等相关资料时间：</div><div>（1）获取开始时间：2024年6月26日11时00分。</div><div>（2）获取截止时间：2024年7月3日20时00分。</div><div>（3）投标人应在文件获取截止时间前，按照交易平台提示支付标书款。</div><div>5．．投标文件编制及递交</div><div>5.1编制方式：投标文件须采用投标人文件制作工具进行编制。</div><div>5.2递交时间：投标截止时间前均可递交。</div><div>5.3投标截止时间：2024年7月17日09时00分。</div><div>5.4递交方式：登录交易平台上传（投标人应保存投标文件上传成功回执，递交时间即为上传成功回执时间）。</div><div>6．．开标</div><div>6.1开标时间：2024年7月17日09时00分。</div><div>6.2本项目远程在线开标。</div><div>7．．其他</div><div>7.1本次招标对投标人不作经济补偿。</div><div>7.2请投标人注意：在开标前自己的身份应对其他投标人保密。</div><div>8．．招标人</div><div>名称：<a target="_blank" class="markBlue" href="/bdqyhx/586565143588823040.html" style="color: #3083EB !important;text-decoration: underline;">中石化湖南石油化工有限公司</a>；</div><div>地址：湖南省岳阳市云溪区湖南石化公司机关办公楼；</div><div>邮编：414014；</div><div>联系人：欧阳会林；</div><div>电话：0730-8492126；</div><div>电子邮箱：ouyanghl.blsh@sinopec.com。</div><div>招标代理机构</div><div>名称：<a target="_blank" class="markBlue" href="/bdqyhx/594388553060274176.html" style="color: #3083EB !important;text-decoration: underline;">中国石化集团招标有限公司武汉分公司</a>；</div><div>地址：武汉市青山区和平大道1276号锐创中心10楼；</div><div>邮编：430081；</div><div>联系人：李先艳，薛烽；</div><div>电话：027-59972032；</div><div>电子邮箱：lixy9197@sinopec.com。</div><div>9．．发布公告的媒介</div><div>本公告同时在中国石化电子招标投标交易网（https://ebidding.sinopec.com/v3/portal/#/）和中国招标投标公共服务平</div><div>台（http://www.cebpubservice.com）上发布。</div><div>10．．公告发布期限</div><div>本公告发布期限：从本公告规定的招标文件获取时间起，到获取截止时间止。</div><div>11．．异议受理</div><table border="1"><tbody><tr><td colspan="1" rowspan="1">招标人异议受理部门名称</td><td colspan="1" rowspan="1"><a target="_blank" class="markBlue" href="/bdqyhx/586565143588823040.html" style="color: #3083EB !important;text-decoration: underline;">中石化湖南石油化工有限公司</a>工程建设部招标办</td><td colspan="1" rowspan="1"><a target="_blank" class="markBlue" href="/bdqyhx/586565143588823040.html" style="color: #3083EB !important;text-decoration: underline;">中石化湖南石油化工有限公司</a>工程建设部招标办</td><td colspan="1" rowspan="1"><a target="_blank" class="markBlue" href="/bdqyhx/586565143588823040.html" style="color: #3083EB !important;text-decoration: underline;">中石化湖南石油化工有限公司</a>工程建设部招标办</td></tr><tr><td colspan="1" rowspan="1">联系人姓名及办公电话</td><td colspan="1" rowspan="1">欧阳会林0730-8492126</td><td colspan="1" rowspan="1">电子邮箱</td><td colspan="1" rowspan="1">ouyanghl.blsh@sinopec.com</td></tr><tr><td colspan="1" rowspan="1">说明：潜在投标人对本公告内容或招标文件其他内容有异议的，请将相关异议材料（加盖单位章）的扫描件通过邮件方式递交招标人异议受理部门</td><td colspan="1" rowspan="1">说明：潜在投标人对本公告内容或招标文件其他内容有异议的，请将相关异议材料（加盖单位章）的扫描件通过邮件方式递交招标人异议受理部门</td><td colspan="1" rowspan="1">说明：潜在投标人对本公告内容或招标文件其他内容有异议的，请将相关异议材料（加盖单位章）的扫描件通过邮件方式递交招标人异议受理部门</td><td colspan="1" rowspan="1">说明：潜在投标人对本公告内容或招标文件其他内容有异议的，请将相关异议材料（加盖单位章）的扫描件通过邮件方式递交招标人异议受理部门</td></tr></tbody></table><div>招标代理机构：<a target="_blank" class="markBlue" href="/bdqyhx/594388553060274176.html" style="color: #3083EB !important;text-decoration: underline;">中国石化集团招标有限公司武汉分公司</a></div><div>2024年6月26日</div></div></div>
    '''
    requirement_text,list_policy,aptitude_text = extract_parameters(_html)
    print("requirement_text",requirement_text)
    print("list_policy",list_policy)
    print("aptitude_text",aptitude_text)

if __name__ == '__main__':
    # extract_datas()
    # extract_datas_1()
    test_extract()
    # print(re.search(aptitude_pattern,'二、申请人的资格要求:'))
