import pymysql

from air_case.public1.public1.public1 import *
from common.fileUtls import FileUtils


def get_db():
    # 打开数据库连接
    db = pymysql.connect(host="10.17.65.108", user="root", password="Cmic.2023", database="spd3_herp_test2",
                         charset="utf8")
    return db


def get_sql_conn():
    """
    获取数据库连接
    """
    db = get_db()
    cursor = db.cursor()
    return db, cursor


def get_index_dict(cursor):
    """
    获取数据库对应表中的字段名
    """
    index_dict = dict()
    index = 0
    for desc in cursor.description:
        index_dict[desc[0]] = index
        index = index + 1
    return index_dict


def get_dict_data_sql(cursor, sql):
    """
    运行sql语句，获取结果，并根据表中字段名，转化成dict格式（默认是tuple格式）
    """
    cursor.execute(sql)
    data = cursor.fetchall()
    index_dict = get_index_dict(cursor)
    res = []
    for datai in data:
        resi = dict()
        for indexi in index_dict:
            resi[indexi] = datai[index_dict[indexi]]
        res.append(resi)
    return res


def main2(hos_goods_id):
    db, cursor = get_sql_conn()
    sql = """SELECT hos_goods_code,
                    hos_id,
                    prov_id,
                    prov_hos_goods_id,
                    srv_id,
                    mdm_goods_code,
                    mdm_goods_spec_code,
                    spd_goods_code,
                    goods_name,
                    goods_general_name,
                    goods_mfrs_id,
                    goods_mfrs_name,
                    goods_reg_cert,
                    goods_agent_mfrs_id,
                    brand,
                    short_pinyin,
                    kind_sixtyeight_code,
                    unit,
                    goods_spec,
                    goods_package,
                    bar_code_mng,
                    unique_code_strategy,
                    pur_mode,
                    sub_pur_mode,
                    erp_code,
                    herp_code,
                    hrp,
                    price,
                    abroad_flag,
                    made,
                    property,
                    mgr_level,
                    goods_desc,
                    charge_flag,
                    focus_control_type,
                    temp_flag,
                    official_status,
                    focus_control,
                    storage_conditions,
                    transport_conditions,
                    into_cost_flag,
                    rfid_flag,
                    purchase_flag,
                    tb_status,
                    version,
                    create_user,
                    create_time,
                    last_modified_user,
                    sterilize_flag,
                    multi_charge_flag,
                    use_frequency,
                    charge_unit FROM  	mcms_goods_info WHERE 	id ='%s';""" % hos_goods_id
    res_dict = get_dict_data_sql(cursor, sql)
    print('res_dict', res_dict)
    return res_dict


def check_mcms_dept_buy_car_sql(sql):
    db, cursor = get_sql_conn()
    res_dict = get_dict_data_sql(cursor, sql)
    print('res_dict', res_dict)
    cursor.close()
    db.close()
    return res_dict


def check_mcms_dept_buy_sql(sql):
    db, cursor = get_sql_conn()
    res_dict = get_dict_data_sql(cursor, sql)
    print('res_dict', res_dict)
    cursor.close()
    db.close()
    return res_dict


def check_mcms_pur_plan_sql(sql):
    db, cursor = get_sql_conn()
    res_dict = get_dict_data_sql(cursor, sql)
    print('res_dict', res_dict)
    cursor.close()
    db.close()
    return res_dict


def check_mcms_pur_sql(sql):
    db, cursor = get_sql_conn()
    res_dict = get_dict_data_sql(cursor, sql)
    print('res_dict', res_dict)
    cursor.close()
    db.close()
    return res_dict


def get_create_time(sql):
    db, cursor = get_sql_conn()
    cursor.execute(sql)
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(date', 'date')
    # new_str1 = new_str1.replace(',', '')
    # print(new_str1)
    cursor.close()
    db.close()
    return new_str1


def get_expdt_date(sql):
    db, cursor = get_sql_conn()
    cursor.execute(sql)
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(date', 'date')
    # new_str1 = new_str1.replace(',', '')
    # print(new_str1)
    cursor.close()
    db.close()
    return new_str1


def get_expdt_date1(sql):
    db, cursor = get_sql_conn()
    cursor.execute(sql)
    results = cursor.fetchone()
    cursor.close()
    db.close()
    return results


def get_account_date(sql):
    db, cursor = get_sql_conn()
    cursor.execute(sql)
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(', '')
    new_str1 = new_str1.replace(',', '')
    new_str1 = new_str1.replace("'", '')
    # print(new_str1)
    cursor.close()
    db.close()
    return new_str1


def set_goods_coding_type(branch_id):  # 设置科室产品为赋码管理0为赋码管理1是非赋码
    db, cursor = get_sql_conn()
    sql = "UPDATE mcms_dept_goods_info SET coding_type = 0 WHERE branch_id=%s;"
    cursor.execute(sql, (branch_id))
    db.commit()
    cursor.close()
    db.close()


def get_id(sql):
    db, cursor = get_sql_conn()
    cursor.execute(sql)
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(', '')
    new_str1 = new_str1.replace(',', '')
    new_str1 = new_str1.replace("'", '')
    # print(new_str1)
    cursor.close()
    db.close()
    return new_str1


def get_DRId(branch_id, type):
    db, cursor = get_sql_conn()
    cursor.execute(
        "select id from  mcms_psi_dept where target_branch_id='%s' and bill_mode='%s' and stock_kind='CK_LYTK' order by   CREATE_TIME desc LIMIT 1;"%(branch_id,type))
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(', '')
    new_str1 = new_str1.replace(',', '')
    new_str1 = new_str1.replace("'", '')
    # print(new_str1)
    cursor.close()
    db.close()
    return new_str1
def get_DN_no(branch_id, type):
    DR_id=get_DRId(branch_id, type)
    db, cursor = get_sql_conn()
    cursor.execute(
        "select order_no from  mcms_psi_dept where id='%s';" % (
        DR_id))
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(', '')
    new_str1 = new_str1.replace(',', '')
    new_str1 = new_str1.replace("'", '')
    # print(new_str1)
    cursor.close()
    db.close()
    return  new_str1
def get_login_user_uxid_bydb(username):
    db, cursor = get_sql_conn()
    cursor.execute("select id from sys_user where user_code='%s'" % username)
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(', '')
    new_str1 = new_str1.replace(',', '')
    new_str1 = new_str1.replace("'", '')
    # print(new_str1)
    cursor.close()
    db.close()
    return new_str1


def get_dept_buy_id(sql):
    db, cursor = get_sql_conn()
    cursor.execute(sql)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return results


def process_tuple(tuple1):
    str1 = str(tuple1)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(', '')
    new_str1 = new_str1.replace(',', '')
    new_str1 = new_str1.replace("'", '')
    return new_str1


def get_mdm_goods_code1(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select mdm_goods_code from mcms_goods_info where id='%s'" % hos_goods_id)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return process_tuple(results)


def get_goods_code1(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select hos_goods_code from mcms_goods_info where id='%s'" % hos_goods_id)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return process_tuple(results)


def get_goods_name(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select goods_name from mcms_goods_info where id='%s'" % hos_goods_id)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return process_tuple(results)


def get_goods_gg(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select goods_spec from mcms_goods_info where id='%s'" % hos_goods_id)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return process_tuple(results)


def get_supply_id(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select id from supply_prov_hos_goods  where hos_goods_id='%s'" % hos_goods_id)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return process_tuple(results)


def get_pkg_def_id(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select pkg_def_id from mcms_pkg where hos_goods_id='%s'" % hos_goods_id)
    results = cursor.fetchone()
    cursor.close()
    db.close()
    return process_tuple(results)


def get_pkg_def_Name(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select pkg_def_name from mcms_pkg where hos_goods_id='%s'" % hos_goods_id)
    results = cursor.fetchone()
    cursor.close()
    db.close()
    return process_tuple(results)


def get_goods_name1(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select goods_name from mcms_goods_info where id='%s'" % hos_goods_id)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return process_tuple(results)


def get_mdm_goods_code(sql):
    db, cursor = get_sql_conn()
    cursor.execute(sql)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return results


def get_goods_mfrs_id(hos_goods_id):
    db, cursor = get_sql_conn()
    cursor.execute("select goods_mfrs_id from mcms_goods_info where id='%s'" % hos_goods_id)
    results = cursor.fetchall()
    cursor.close()
    db.close()
    return process_tuple(results)


def check_source_id(hos_goods_id, source_id):
    db, cursor = get_sql_conn()
    cursor.execute("select hos_goods_id from mcms_pur_plan_detail where id='%s'" % (source_id))
    results1 = cursor.fetchall()
    cursor.close()
    db.close()
    hos_goods_id2 = process_tuple(results1)
    if hos_goods_id2 == hos_goods_id:
        return True
    else:
        return False


def check_batch_id(source_batch_id):
    db, cursor = get_sql_conn()
    cursor.execute("select id from mcms_hos_batch where id='%s'" % (source_batch_id))
    results1 = cursor.fetchall()
    cursor.close()
    db.close()
    batch_id = process_tuple(results1)
    if batch_id != None:
        return True
    else:
        return False


def check_barcode_id(barcode_id):
    db, cursor = get_sql_conn()
    cursor.execute("select id from hdi_barcode where id='%s'" % (barcode_id))
    results1 = cursor.fetchall()
    cursor.close()
    db.close()
    batch_id = process_tuple(results1)
    if batch_id != None:
        return True
    else:
        return False


def get_PICK_id(branch_id, bill_mode):
    sql = "select id from  mcms_pick  where branch_id='%s' and bill_mode='%s' order by   CREATE_TIME desc LIMIT 1;" % (
        branch_id, bill_mode)
    print(sql)
    return process_tuple(get_dept_buy_id(sql))


def get_pick_detail_id(branch_id, bill_mode):
    main_id = get_PICK_id(branch_id, bill_mode)
    sql = "select id from  mcms_pick_detail  where pid='%s';" % (
        main_id)
    print(sql)
    return process_tuple(get_dept_buy_id(sql))


def get_PICK_order_no(branch_id, bill_mode):
    PICK_id = get_PICK_id(branch_id, bill_mode)
    sql = "select order_no from  mcms_pick  where id='%s' order by   CREATE_TIME desc LIMIT 1;" % (
        PICK_id)
    print(sql)
    return process_tuple(get_dept_buy_id(sql))


def get_buyBillId(branch_id, bill_mode):
    sql = "select id from  spd3_herp_test2.mcms_dept_buy where branch_id='%s' and bill_mode='%s' order by create_time desc  LIMIT 1;" % (
        branch_id, bill_mode)
    print(sql)
    return process_tuple(get_dept_buy_id(sql))


def get_buyOrderNo(branch_id, bill_mode):
    sql = "select order_no from  spd3_herp_test2.mcms_dept_buy where branch_id='%s' and bill_mode='%s' order by create_time desc  LIMIT 1;" % (
        branch_id, bill_mode)
    print(sql)
    return process_tuple(get_dept_buy_id(sql))


def get_purOrderNo(branch_id, bill_mode):
    sql = "select id from  mcms_purchase where branch_id='%s' and bill_mode='%s' order by create_time desc  LIMIT 1;" % (
        branch_id, bill_mode)
    # print(sql)
    id1 = process_tuple(get_dept_buy_id(sql))
    sql = "select order_no from  mcms_purchase where branch_id='%s' and bill_mode='%s'and id='%s' order by create_time desc LIMIT 1;" % (
        branch_id, bill_mode, id1)
    print(sql)
    return process_tuple(get_dept_buy_id(sql))


def get_purBillId(branch_id, bill_mode):
    sql = "select id from  mcms_purchase where branch_id='%s' and bill_mode='%s' order by create_time desc  LIMIT 1;" % (
        branch_id, bill_mode)
    # print(sql)
    return process_tuple(get_dept_buy_id(sql))


def get_planBillId(hos_goods_id):
    planBillId = process_tuple(
        get_id(
            "select pid from spd3_herp_test2.mcms_pur_plan_detail  where hos_goods_id='%s' order by create_time desc  LIMIT 1;" % (
                hos_goods_id)))
    return planBillId


def get_planOrderNo(hos_goods_id):
    return process_tuple(
        get_id(
            "select order_no from spd3_herp_test2.mcms_pur_plan_detail  where hos_goods_id='%s' order by create_time desc  LIMIT 1;" % (
                hos_goods_id)))


def get_ext_info(branch_id, bill_mode):
    distr_main_key = get_id(
        "select id from hdi_distr a where branch_id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            branch_id, bill_mode))
    ext_info = get_id(
        "select ext_info from hdi_distr a where id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            distr_main_key, bill_mode))
    # print(bill_relation_json)
    return ext_info


def get_purBillDate(branch_id, bill_mode):
    distr_main_key = get_id(
        "select id from hdi_distr a where branch_id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            branch_id, bill_mode))
    ext_info = get_id(
        "select ext_info from hdi_distr a where id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            distr_main_key, bill_mode))
    # print(bill_relation_json)
    return ext_info


def get_purBillDate2(branch_id, bill_mode):
    main_key = get_id(
        "select id from mcms_psi a where target_branch_id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            branch_id, bill_mode))
    bill_relation_json = get_id(
        "select bill_relation_json from mcms_psi a where id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            main_key, bill_mode))
    # print(bill_relation_json)
    return bill_relation_json


def get_mcms_chek_purBillDate(branch_id, bill_mode):
    main_key = get_id(
        "select id from mcms_check a where branch_id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            branch_id, bill_mode))
    bill_relation_json = get_id(
        "select bill_relation_json from mcms_check a where id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            main_key, bill_mode))
    # print(bill_relation_json)
    return bill_relation_json


def get_distrBillId(branch_id, bill_mode):
    distr_main_key = get_id(
        "select id from hdi_distr a where branch_id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            branch_id, bill_mode))
    return distr_main_key

def get_DRID(branch_id, bill_mode):
    DRID = get_id(
        "select id from mcms_psi_dept  where target_branch_id='%s' and bill_mode='%s' and stock_kind='CK_TK'  order by   CREATE_TIME desc LIMIT 1" % (
            branch_id, bill_mode))
    return DRID

def get_distr_detail_id(branch_id, bill_mode):
    distr_main_key = get_distrBillId(branch_id, bill_mode)
    distr_detail_id = get_id(
        "select id from hdi_distr_detail a where pid='%s' order by create_time desc LIMIT 1;" % (
            distr_main_key))
    return distr_detail_id


def get_distrOrderNo(branch_id, bill_mode):
    # 查询配送单order_no
    distr_order_no = get_id(
        "select order_no from hdi_distr a where id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            get_distrBillId(branch_id, bill_mode), bill_mode))
    return distr_order_no


def get_checkBillId(branch_id, bill_mode):
    checkBillId = get_id(
        "select id from  mcms_check where branch_id='%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            branch_id, bill_mode))
    return checkBillId


def get_checkOrderNo(branch_id, bill_mode):
    checkOrderNo = get_id(
        "select order_no from mcms_check a where id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            get_checkBillId(branch_id, bill_mode), bill_mode))
    return checkOrderNo


def get_psiInBillId(branch_id, bill_mode):
    psiInBillId = get_id(
        "select id from  mcms_psi where target_branch_id='%s' and bill_mode='%s' and stock_kind='RK_YS' order by create_time desc LIMIT 1;" % (
            branch_id, bill_mode))
    return psiInBillId


def get_psiInOrderNo(branch_id, bill_mode):
    psiInOrderNo = get_id(
        "select order_no from mcms_psi a where id = '%s' and bill_mode='%s' order by create_time desc LIMIT 1;" % (
            get_psiInBillId(branch_id, bill_mode), bill_mode))
    return psiInOrderNo


def check_in_check_mcms_purchase(sql):
    db, cursor = get_sql_conn()
    cursor.execute(sql)
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(', '')
    new_str1 = new_str1.replace(',', '')
    new_str1 = new_str1.replace("'", '')
    # print(new_str1)
    cursor.close()
    db.close()
    return new_str1


def process_date(str1):
    # str1 = "datetime.datetime(2024, 9, 17, 15, 32, 58)"
    str2 = str1.replace('datetime.datetime(', "")
    str3 = str2.replace(')', "")
    result = str3.split(",")
    result.pop(3)
    result.pop(4)
    result.pop(3)
    print(result)
    b = [int(x) for x in result]
    print(type(b), b)
    date_list = b
    #
    from datetime import datetime

    # # 假设我们有一个列表，包含年、月、日
    # date_list = [2023, 3, 14]
    # print(type(date_list),date_list)
    #
    # # 使用列表元素构造字符串
    date_string = '-'.join(map(str, date_list))
    #
    # # 使用datetime.strptime将字符串转换为日期
    date = datetime.strptime(date_string, '%Y-%m-%d').date()

    #
    print(date)  # 输出: 2023-03-14
    return date


def get_last_auditor(order_no):
    db, cursor = get_sql_conn()
    cursor.execute("select last_auditor from mcms_pur_plan  where order_no='%s';" % order_no)
    results = cursor.fetchone()
    str1 = str(results)
    new_str1 = str1.replace(',)', '')
    new_str1 = new_str1.replace('(', '')
    new_str1 = new_str1.replace(',', '')
    new_str1 = new_str1.replace("'", '')
    # print(new_str1)
    cursor.close()
    db.close()
    return new_str1
# hos_goods_id = 'h034700004220'
# main2(hos_goods_id)
# try:
#     set_goods_coding_type('h0347-3761')
# except Exception as e:
#     # 打印错误信息
#     print(f"发生错误: {e}")
