Python--Linux (ubuntu) Shell 环境 显卡测试 Python操作SQLSERVER测试数据交互

68 篇文章 1 订阅
53 篇文章 2 订阅
#coding=utf-8
import pymssql#加载SQLSERVER连接
import os#加载系统操作
import uuid#加载读取本机Mac Address
import sys#获取命令行参数

#定义全局变量
Temp="" #操作全局变量使用global A
Isn=""
IMac=""
BiosInfo=['','','','','']
BiosInfoValues=['','','','','']
BiosInfoArgs=['Product Name','Bios Config File','Bios P/N','Bios Version','Bios Date']
OrderName=""
BiosParticle_Number=0

def createsConnection(server,uid,pwd,database_str):#设置数据库连接
    conn=pymssql.connect(server=server,user=uid,password=pwd,database=database_str)
    print("\033[0m")
    return conn

def closeConnection(conn):#关闭数据库连接
    conn.close()

def Read_Diag_Test_Program_Name(conn,Stored_Str,n):#读取数据库对应键值字符串
    cursor=conn.cursor()
    cursor.execute(Stored_Str)
    row=cursor.fetchone()
    return str(row[n])

def InsertTestData(conn,SN,Mac_Address):#插入DIAG测试数据
    curs=conn.cursor()
    curs.callproc('usp_Insert_Graogucs_Card_Diag_Data',(SN,Mac_Address,1))
    conn.commit()
    curs.execute("select count(*) from Graogucs_Card_Diag where SN=%s",SN)
    for row in curs:
        if(row[0]==0):
            print("\033[31mInsert Diag Test Data Fail!!")#字体颜色设置为红色
            print("\033[0m")
            closeConnection(conn)
            return 1
        else:
            print("\033[32mInsert Diag Test Data Succeed!!")
            print("\033[0m")
            closeConnection(conn)
            return 0

def Insert_Upadte_BiosInfo(conn,DiagPackageName):#插入或更新线体BIOS临时信息
    My_Mac_Address=Get_MacAddress()
    Querying_Str="select * from ThePositionInformation where Mac_Address="+"'"+My_Mac_Address+"'"#查询该Mac_Address所在线体
    LineBody=Read_Diag_Test_Program_Name(conn, Querying_Str,1)
    curs=conn.cursor()
    curs.callproc('usp_InsertOrUpdate_NB_DiagTest_Args',(LineBody,BiosInfoValues[0],BiosInfoValues[1],BiosInfoValues[2],
                  BiosInfoValues[3],BiosInfoValues[4],DiagPackageName,1))
    conn.commit()
    curs.execute("select count(*) from NB_Diag_Test_Args where Code_Name=%s",LineBody)
    for row in curs:
        if(row[0]==0):
            print("\033[31mInsert Or Update Bios Info Temp Information Fail!!")
            print("\033[0m")
            closeConnection(conn)
            return 1
        else:
            print("\033[32mInsert Or Update Bios Info Temp Information Succeed!!")
            print("\033[0m")
            closeConnection(conn)
            return 0

def Querying_DataBase_MacAddress_IfThereIsa(conn):#查找数据库该MAC_Address是否存在
    My_Mac_Address=Get_MacAddress()
    curs=conn.cursor()
    curs.execute("select count(*) from ThePositionInformation where Mac_Address=%s", My_Mac_Address)
    for row in curs:
        if(row[0]==0):
            #print("\033[31m Querying Database Read Mac Information Fail!!")
            #print("\033[0m")
            closeConnection(conn)
            return 1
        else:
            #print("\033[32m Querying Database Read Mac Information Succeed!!")
            #print("\033[0m")
            closeConnection(conn)
            return 0

def Query_Section_Database_Exists(Section):#查询区间数据库是否存在
    conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
    curs=conn.cursor()
    curs.execute("select * from JobNumber_Prefix")
    for row in curs:
        if row[1]==Section[:len(row[1])]:
            closeConnection(conn)
            return 0
    closeConnection(conn)
    return 1

def Insert_Employee_Information(JobNumber,LineBody,Mac_Address):#插入员工信息
    conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
    curs=conn.cursor()
    sql_str="insert into ThePositionInformation values("+"'"+LineBody+"'"+",'L05-Diag',"+"'"+JobNumber+"'"+","+"'"+Mac_Address+"'"+",'020')"
    curs.execute(sql_str)
    conn.commit()
    curs.execute("select count(*) from ThePositionInformation where Mac_Address=%s",Mac_Address)
    for row in curs:
        if(row[0]==0):
            print("\033[31mInsert Employee Information Fail")
            print("\033[0m")
            closeConnection(conn)
            return 1
        else:
            print("\033[32mInsert Employee Information Succeed!!")
            print("\033[0m")
            closeConnection(conn)
            return 0

def Insert_Upadte_BiosInfo_2(conn,DiagPackageName,OrderName):#插入或更新当前线机程式Bios_1
    My_Mac_Address=Get_MacAddress()
    Querying_Str="select * from ThePositionInformation where Mac_Address="+"'"+My_Mac_Address+"'"#查询该Mac_Address所在线体
    #LineBody=Read_Diag_Test_Program_Name(conn, Querying_Str,1)
    curs=conn.cursor()
    curs.callproc('usp_InsertOrUpdate_NB_DiagTest_Args',(OrderName,BiosInfoValues[0],BiosInfoValues[1],BiosInfoValues[2],
                  BiosInfoValues[3],BiosInfoValues[4],DiagPackageName,1))
    conn.commit()
    curs.execute("select count(*) from NB_Diag_Test_Args where Code_Name=%s",OrderName)
    for row in curs:
        if(row[0]==0):
            print("\033[31mInsert Or Update Bios_1 Info Temp Information Fail!!")
            print("\033[0m")
            closeConnection(conn)
            return 1
        else:
            print("\033[32mInsert Or Update Bios_1 Info Temp Information Succeed!!")
            print("\033[0m")
            closeConnection(conn)
            return 0

def Insert_Upadte_BiosInfo_Bios2(conn,DiagPackageName,OrderName):#插入或更新当前线机程式Bios_2
    My_Mac_Address=Get_MacAddress()
    Querying_Str="select * from ThePositionInformation where Mac_Address="+"'"+My_Mac_Address+"'"#查询该Mac_Address所在线体
    #LineBody=Read_Diag_Test_Program_Name(conn, Querying_Str,1)
    curs=conn.cursor()
    curs.callproc('usp_Insert_Update_NB_Diag_Test_Args_Bios2',(OrderName,BiosInfoValues[0],BiosInfoValues[1],BiosInfoValues[2],
                  BiosInfoValues[3],BiosInfoValues[4],DiagPackageName,1))
    conn.commit()
    curs.execute("select count(*) from NB_Diag_Test_Args_Bios2 where Code_Name=%s",OrderName)
    for row in curs:
        if(row[0]==0):
            print("\033[31mInsert Or Update Bios_2 Info Temp Information Fail!!")
            print("\033[0m")
            closeConnection(conn)
            return 1
        else:
            print("\033[32mInsert Or Update Bios_2 Info Temp Information Succeed!!")
            print("\033[0m")
            closeConnection(conn)
            return 0

def Title():#显示标题
    os.system("clear")
    print("\033[37mProgram Read_Diag_Args Version.1.00")#将字体设置为灰色
    print("\033[37mProerty in Copyright Ferex ShenBo.")
    print("\033[37m------------------------------------------------------------------------------------")

def Help():#帮助信息
    os.system("clear")
    print("\033[37mProgram Version.1.00")
    print("\033[37mProperty in Copyright Ferex ShenBo.")
    print("\033[37m====================================================================================")
    print("\033[37m/Uploading               Uploading Test Data In DataBase!!")
    print("\033[37m/RdDiagPackageName       Read Diag Test Program Package Name!!")
    print("\033[37m/ChkBiosTest             Check Graphics Card Bios_1 Test!!")
    print("\033[37m/ChkBiosTest2            Check Graphics Card Bios_2 Test!!")
    print("\033[37m/InUpDiagArgs            Inset Or Update Graphics Card Diag Test Information!!")
    print("\033[37m/NowInUpDiagArgs         Now Inset Or Update Graphics Card Diag Bios_1 Test Information!!")
    print("\033[37m/NowInUpDiagArgs_Bios2   Now Inset Or Update Graphics Card Diag Bios_2 Test Information!!")
    print("\033[37m/InUpBiosParticleNumber  Insert Or Update Graphics Card Bios Particle Number!!")
    print("\033[37m/RedBiosParticleNumber   Read Graphics Card Bios Particle Number!!")
    print("\033[37m/RWVersionInfo           Read Local And Server Version Information Comparison!!")
    print("\033[37m/RWEmployeeInfo          Connection DataBase Read And Write Employee Information!!")
    print("\033[36mExample_1:*.exe /Uploading sn.dat")
    print("\033[36mExample_2:*.exe /RdDiagPackageName")
    print("\033[36mExample_3:*.exe /ChkBiosTest  BiosLog.dat")
    print("\033[36mExample_3:*.exe /ChkBiosTest2 BiosLog.dat")
    print("\033[36mExample_4:*.exe /InUpDiagArgs BiosLog.dat DiagPackage_Name")
    print("\033[36mExample_4:*.exe /NowInUpDiagArgs BiosLog.dat 'DiagPackage_Name' 'OrderName'")
    print("\033[36mExample_4:*.exe /NowInUpDiagArgs_Bios2 BiosLog.dat 'DiagPackage_Name' 'OrderName'")
    print("\033[36mExample_5:*.exe /InUpBiosParticleNumber 'Code_Name' 'Bios_Particle_Number'")
    print("\033[36mExample_6:*.exe /RedBiosParticleNumber")
    print("\033[36mExample_7:*.exe /RWVersionInfo 'ServerTextFileName' 'LocalTextFileName'")
    print("\033[36mExample_7:*.exe /RWEmployeeInfo")
    print("\033[0m")#恢复当前的颜色

def Write_BathFile(FileName,Str):#将字符串写入文件中
    with open(FileName,'w',encoding='utf-8') as fw:
        fw.write(Str)
    fw.closed

def Read_CfgFile(FileName):#读取配置文件
    with open(FileName,'r',encoding='utf-8') as fr:
        Temp=str(fr.read())
    fr.closed
    return Temp

def Get_MacAddress():#读取本机Mac_Address
    Mac=uuid.UUID(int=uuid.getnode()).hex[-12:].upper()
    return "".join([Mac[e:e+2] for e in range(0,11,2)])

def Get_Bios_Info(Str):#读取BIOS信息
    conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
    My_Mac_Address=Get_MacAddress()
    Querying_Str="select * from ThePositionInformation where Mac_Address="+"'"+My_Mac_Address+"'"#查询该Mac_Address所在线体
    LineBody=Read_Diag_Test_Program_Name(conn, Querying_Str,1)
    if LineBody.strip():#判断返回的Querying_Str字符串是否为空
        Querying_Str="select * from Line_Body_Program where Line_BOdy="+"'"+LineBody+"'"#查询该线体产品订单号
        Code_Name_Str=Read_Diag_Test_Program_Name(conn,Querying_Str,1)
        if Code_Name_Str.strip():#判断返回的Code_Name_Str字符串是否为空
            Querying_Str=Str+"'"+Code_Name_Str+"'"#查询调用Diag测试包名称
            cursor=conn.cursor()
            cursor.execute(Querying_Str)
            row=cursor.fetchone()
            i=0
            global BiosInfo
            while(i<5):
                BiosInfo[i]=str(row[i+2])
                if not str(BiosInfo[i]).strip():
                    print("\033[31mRead Order Number ",Code_Name_Str," DataBase BiosInfo ",i," Is Null",)
                    return 1
                i+=1
            print("\033[32mRead Order Number ",Code_Name_Str," DataBase BiosInfo Succeed!!")
            return 0
        else:
            print("\033[31mQuerying DataBase Read Code_Name is Null")
            closeConnection(conn)
            return 2
    else:
        print("\033[31mQuerying DataBase Read LineBody is Null")
        closeConnection(conn)
        return 3

def ReadTextStore(FileName):#读取字符串并存储于集合中返回
    with open(FileName,"r",encoding='utf-8') as rf:
        list=rf.readlines()
    rf.closed
    return list

def ReadTestLog(FileName):#读取BIOS INFO LOG File Info
    Title()
    global BiosInfoValues
    t=0
    with open(FileName,'r',encoding='utf-8') as rf:
        list=rf.readlines()
        for l in list:
            n=0
            while(n<len(BiosInfoArgs)):
                if(t==len(BiosInfoArgs)):
                    print("\033[32mRead ",FileName," Succeed!!")
                    print("\033[0m")
                    return 0
                else:
                    if BiosInfoArgs[t] in l:
                        l=l[l.find(":")+1:l.find("\n")]
                        s=0
                        while(l[s]==" "):
                            s+=1
                        l=l[s:]
                        e=len(l)-1
                        while(l[e]==" "):
                            e-=1
                        l=l[:e+1]
                        BiosInfoValues[t]=l
                        t+=1
                        break
                n+=1
    rf.closed
    if(t<len(BiosInfoArgs)):
        print("\033[31m Read ",FileName," Fail!!")
        print("\033[0m")
        return 1

def ReadDiagPackageName():#读取Diag包名称
    Title()
    conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
    My_Mac_Address=Get_MacAddress()
    Querying_Str="select * from ThePositionInformation where Mac_Address="+"'"+My_Mac_Address+"'"#查询该Mac_Address所在线体
    LineBody=Read_Diag_Test_Program_Name(conn, Querying_Str,1)
    if LineBody.strip():#判断返回的Querying_Str字符串是否为空
        Querying_Str="select * from Line_Body_Program where Line_BOdy="+"'"+LineBody+"'"#查询该线体产品订单号
        Code_Name_Str=Read_Diag_Test_Program_Name(conn,Querying_Str,1)
        if Code_Name_Str.strip():#判断返回的Code_Name_Str字符串是否为空
            Querying_Str="select * from NB_Diag_Test_Args where Code_Name="+"'"+Code_Name_Str+"'"#查询调用Diag测试包名称
            Call_Diag_Name_Str=Read_Diag_Test_Program_Name(conn,Querying_Str,7)
            if Call_Diag_Name_Str.strip():#判断返回的Call_Diag_Name_St字符串是否为空
                closeConnection(conn)
                Write_BathFile("fpath",Call_Diag_Name_Str)
                print("\033[32mRead DataBase Call_Diag_Name Succeed!!")
                closeConnection(conn)
                return 0
            else:
                print("\033[31mQuerying DataBase Read Call_Diag_Name is Null")
                closeConnection(conn)
                return 1
        else:
            print("\033[31mQuerying DataBase Read Code_Name is Null")
            closeConnection(conn)
            return 2
    else:
        print("\033[31mQuerying DataBase Read LineBody is Null")
        closeConnection(conn)
        return 3

def UploadingTestData_In_DataBase(Isn_FileName):#上传测试数据至数据库
    Title()
    conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
    My_Mac_Address=Get_MacAddress()
    Isn=Read_CfgFile(Isn_FileName)
    if(InsertTestData(conn,Isn,My_Mac_Address)==1):
        print("\033[31mUpload Test Data In DataBase Fail!!")
        print("\033[0m")
        return 1
    else:
        print("\033[32mUpload Test Data In DataBase Succeed!1")
        print("\033[0m")
        return 0

def CheckBiosInfo(LogFileName,x):#核对BIOS信息
    n=0
    if (x==1):
        if(Get_Bios_Info("select * from NB_Diag_Test_Args where Code_Name=")==0):
            if(ReadTestLog(LogFileName)==0):
                while(n<len(BiosInfo)):
                    if(BiosInfo[n]!=BiosInfoValues[n]):
                        print("\033[31m Check Bios Info ",BiosInfoArgs[n],":",BiosInfo[n]," Fail!!")
                        print("\033[0m")
                        return 1
                    n+=1
                print("\033[32n Check Bios Info All Items Pass!!")
                print("\033[0m")
                return 0
            else:
                return 1
        else:
            return 1
    if (x==2):
        if(Get_Bios_Info("select * from NB_Diag_Test_Args_Bios2 where Code_Name=")==0):
            if(ReadTestLog(LogFileName)==0):
                while(n<len(BiosInfo)):
                    if(BiosInfo[n]!=BiosInfoValues[n]):
                        print("\033[31m Check Bios Info ",BiosInfoArgs[n],":",BiosInfo[n]," Fail!!")
                        print("\033[0m")
                        return 1
                    n+=1
                print("\033[32n Check Bios Info All Items Pass!!")
                print("\033[0m")
                return 0
            else:
                return 1
        else:
            return 1

def Inset_Update_NB_DiagTest_Args(LogFileName,DiagPackageName,n):#插入或更新蓝宝Diag测试参数
    Title()
    if(ReadTestLog(LogFileName)==0):
        conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
        if n==1:
            if(Insert_Upadte_BiosInfo(conn,DiagPackageName)==0):
                return 0
            else:
                return 1
        elif n==2:
            if(Insert_Upadte_BiosInfo_2(conn,DiagPackageName,OrderName)==0):
                return 0
            else:
                return 1
        elif n==3:
            if(Insert_Upadte_BiosInfo_Bios2(conn,DiagPackageName,OrderName)==0):
                return 0
            else:
                return 1
    else:
        return 1

def Insert_Update_BiosParticle_Number_Data(Code_Name,Bios_Particle_Number):#插入或更新对应订单号BIOS颗粒数
    Title()
    conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
    curs=conn.cursor()
    curs.callproc("usp_Insert_Update_Bios_Particle_Number_Data_Info",(Code_Name,Bios_Particle_Number,1))
    conn.commit()
    curs.execute("select count(*) from BIOS_Particle_Number_Data where Code_Name=%s",Code_Name)
    for row in curs:
        if(row[0]==0):
            print("\033[31mInsert Or Update Bios Particle Number Data Information Fail!!")#字体颜色设置为红色
            print("\033[0m")
            closeConnection(conn)
            return 1
        else:
            print("\033[32mInset Or Update Bios Particle Number Data Information Succeed!!")
            print("\033[0m")
            closeConnection(conn)
            return 0

def ReadBiosParticle_Number():#读取BIOS颗粒数
    Title()
    My_Mac_Address=Get_MacAddress()
    conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
    curs=conn.cursor()
    conn.commit()
    Querying_Str="select * from ThePositionInformation where Mac_Address="+"'"+My_Mac_Address+"'"#查询该Mac_Address所在线体
    LineBody=Read_Diag_Test_Program_Name(conn, Querying_Str,1)
    if LineBody.strip():#判断返回的Querying_Str字符串是否为空
        Querying_Str="select * from Line_Body_Program where Line_BOdy="+"'"+LineBody+"'"#查询该线体产品订单号
        Code_Name_Str=Read_Diag_Test_Program_Name(conn,Querying_Str,1)
        if Code_Name_Str.strip():#判断返回的Code_Name_Str字符串是否为空
            curs.execute("select count(*) from BIOS_Particle_Number_Data where Code_Name=%s",Code_Name_Str)
            global BiosParticle_Number
            for row in curs:
                if(row[0]<=0):
                    BiosParticle_Number=0
                    closeConnection(conn)
                    return 0
                else:
                    curs.execute("select * from BIOS_Particle_Number_Data where Code_Name=%s",Code_Name_Str)
                    row=curs.fetchone()
                    BiosParticle_Number=row[2]
                    closeConnection(conn)
                    return 0
        else:
            print("\033[31mQuerying DataBase Read Code_Name is Null")
            closeConnection(conn)
            return 2
    else:
        print("\033[31mQuerying DataBase Read LineBody is Null")
        closeConnection(conn)
        return 3
    #curs.execute("select count(*) from BIOS_Particle_Number_Data where Code_Name=%s",OrderName)
    #for row in curs:

def Version_File_Comparison(ServerFileName,ThisLocalityFileName):#本地版本文件与服务器版本文件比较
    ServerFileStr=ReadTextStore(ServerFileName)
    ThisLocalityStr=ReadTextStore(ThisLocalityFileName)
    if len(ServerFileStr)>0 and len(ThisLocalityStr)>0:
        if(len(ServerFileStr)==len(ThisLocalityStr)):
            i=0
            return 0
        else:
            print("\033[31mThe Current Version Of The File Is Not Up To Date And The Latest Version Needs To Be Updated")
            print("\033[0m")
            return 1
    else:
        print("\033[31mThe Contents Of The Local Version File Are Empty!!")
        print("\033[0m")
        return 1

def Connection_DataBase_RWEmployee():#读写员工信息
    Title()
    conn=createsConnection("192.167.10.12\server2","sa","adminsystem","E_Graphics_Card")
    if(Querying_DataBase_MacAddress_IfThereIsa(conn)==1):
        Job_Number=input("\033[33mPlease Enter Your Job Number:")
        while(len(Job_Number)<6 or (Query_Section_Database_Exists(Job_Number))==1):
             Title()
             Job_Number=input("\033[33mPlease Enter Your Job Number:")
        My_Mac_Address=Get_MacAddress()
        LineBody=Read_CfgFile("Line_Body.dat")
        if(Insert_Employee_Information(Job_Number,LineBody,My_Mac_Address)==0):
            return 0
        else:
            return 1
    else:
        return 0


#def Bios_Particle_Number_Data_WU()
if(len(sys.argv))>=2:
    if sys.argv[1] in "/Uploading" and len(sys.argv)==3:
        if(UploadingTestData_In_DataBase(sys.argv[2])==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/RdDiagPackageName":
        if(ReadDiagPackageName()==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/RedBiosParticleNumber":
        if(ReadBiosParticle_Number()==0):
            Write_BathFile("BsPe_Number",str(BiosParticle_Number))
            print("\033[32m Read And Insert Bios Particle Number Succeed!!")
            print("\033[0m")
            exit(0)
        else:
            print("\033[31m Read And Insert Bios Particle Number Fail!!")
            print("\033[0m")
            exit(1)
    elif sys.argv[1] in "/ChkBiosTest" and len(sys.argv)==3:
        if(CheckBiosInfo(sys.argv[2],1)==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/ChkBiosTest2" and len(sys.argv)==3:
        if(CheckBiosInfo(sys.argv[2],2)==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/InUpDiagArgs" and len(sys.argv)==4:
        if(Inset_Update_NB_DiagTest_Args(sys.argv[2],sys.argv[3],1)==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/NowInUpDiagArgs" and len(sys.argv)==5:
        OrderName=sys.argv[4]
        if(Inset_Update_NB_DiagTest_Args(sys.argv[2],sys.argv[3],2)==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/NowInUpDiagArgs_Bios2" and len(sys.argv)==5:
        OrderName=sys.argv[4]
        if(Inset_Update_NB_DiagTest_Args(sys.argv[2],sys.argv[3],3)==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/InUpBiosParticleNumber" and len(sys.argv)==4:
        if(Insert_Update_BiosParticle_Number_Data(sys.argv[2],sys.argv[3])==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/RWVersionInfo" and len(sys.argv)==4:
        if(Version_File_Comparison(sys.argv[2],sys.argv[3])==0):
            exit(0)
        else:
            exit(1)
    elif sys.argv[1] in "/RWEmployeeInfo":
        if(Connection_DataBase_RWEmployee()==0):
            exit(0)
        else:
            exit(1)
    else:
        Help()
        exit(1)
else:
    Help()
    exit(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值