GUI编程之路内计费工具

import os
import sys
from PyQt5.QtCore import QObject, pyqtSignal
from PyQt5.QtGui import QTextCursor
from jifei3 import Ui_Form
from PyQt5 import  QtWidgets
from PyQt5.QtWidgets import *
import requests
import pandas as pd
import csv


class Signal(QObject):

    text_update = pyqtSignal(str)

    def write(self, text):
        self.text_update.emit(str(text))
        QApplication.processEvents()

class MyClass(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.InitUi()

    def InitUi(self):
        self.setupUi(self)
        self.setWindowTitle("路内计费测试工具")
        self.show()
        self.txt = QtWidgets.QTextEdit()
        self.pushButton.clicked.connect(self.path)
        self.pushButton_2.clicked.connect(self.jifei)
        # 实时显示输出, 将控制台的输出重定向到界面中
        sys.stdout = Signal()
        sys.stdout.text_update.connect(self.updatetext)

    def updatetext(self, text):
        """
            更新textBrowser
        """
        cursor = self.textBrowser.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.textBrowser.append(text)
        self.textBrowser.setTextCursor(cursor)
        self.textBrowser.ensureCursorVisible()

    def environment(self):
        if self.comboBox.currentText()=="测试环境":
            url="https://apitest.xtingcloud.com/zk_xm_test/charge/test?orderId="
            return url
        else:
            url = "https://api.xtingcloud.com/zk_zk/charge/test?orderId="
            return url

    def path(self):
        self.dir_name = QFileDialog.getOpenFileName(None, '选择文件', os.getcwd())
        dir_path=self.dir_name
        dir_path2=dir_path[0]
        self.lineEdit_4.setText(dir_path2)

    def get_exceldata(self):
        try:
            if self.comboBox_2.currentText()=="大沥" and self.comboBox_3.currentText()=="一类区域" and self.comboBox_4.currentText()=="小型车" and self.comboBox_5.currentText() == "全部":
                raw_data = pd.read_excel(self.lineEdit_4.text(), header=0,sheet_name="大沥一类区域小型车计费规则(燃油&新能源车)")  # header=0表示第一行是表头,就自动去除了
                data = raw_data.values  # 只提取表中信息
                return data

            elif self.comboBox_2.currentText()=="永安" and self.comboBox_3.currentText()=="繁华路段" and self.comboBox_4.currentText()=="全部" and self.comboBox_5.currentText() == "全部":
                raw_data = pd.read_excel(self.lineEdit_4.text(), header=0,sheet_name="永安繁华路段小中大型车计费规则(燃油&新能源车)")
                data = raw_data.values  # 只提取表中信息
                return data

            elif self.comboBox_2.currentText()=="全部" and self.comboBox_3.currentText()=="全部" and self.comboBox_4.currentText()=="全部" and self.comboBox_5.currentText() == "全部":
                #大沥一类区域小型车计费规则(燃油&新能源车)
                raw_data = pd.read_excel(self.lineEdit_4.text(), header=0,
                                         sheet_name="大沥一类区域小型车计费规则(燃油&新能源车)")  # header=0表示第一行是表头,就自动去除了
                data1 = raw_data.values  # 只提取表中信息
                list1 = data1.tolist()
                #数据条数
                self.output_dali=len(list1)
                #永安繁华路段小中大型车计费规则(燃油&新能源车)
                raw_data2 = pd.read_excel(self.lineEdit_4.text(), header=0,
                                          sheet_name="永安繁华路段小中大型车计费规则(燃油&新能源车)")  # header=0表示第一行是表头,就自动去除了
                data2 = raw_data2.values  # 只提取表中信息
                list2 = data2.tolist()
                # 数据条数
                self.output_yonan=len(list2)
                list3=list1+list2
                self.output_all = len(list3)
                self.output_all=self.output_all+1
                return list3

        except Exception as e:
            print(8888888)

    #获取计费接口返回的数据(如果选项不都是全部用这个函数)
    def postdata(self,starttime,endtime) -> object:
        try:
            url1=self.environment()
            #大沥一类区域小型车计费规则(燃油&新能源车),订单号已写死
            self.url2_dali1 = url1 + f"671035385089884170&startTime={starttime}&endTime={endtime}"
            #永安繁华路段小中大型车计费规则(燃油&新能源车),订单号已写死
            self.url2_yonan1 = url1 + f"676746866603327498&startTime={starttime}&endTime={endtime}"

            #大沥一类区域小型车计费规则(燃油&新能源车)计费请求
            if self.comboBox_2.currentText() == "大沥" and self.comboBox_3.currentText() == "一类区域" and self.comboBox_4.currentText() == "小型车" and self.comboBox_5.currentText() == "全部":
                payload = {}
                headers = {

                    'Content-Type': 'application/json',
                    'User-Agent': 'Mozilla / 5.0(Windows NT 6.1;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 98.0.4758.102Safari / 537.36'
                }
                response = requests.request("GET", self.url2_dali1, headers=headers, data=payload)
                rez = response.json()["res"]["data"]["payment"]
                return rez
            # 永安繁华路段小中大型车计费规则(燃油&新能源车)计费请求
            elif self.comboBox_2.currentText() == "永安" and self.comboBox_3.currentText() == "繁华路段" and self.comboBox_4.currentText() == "全部" and self.comboBox_5.currentText() == "全部":
                payload = {}
                headers = {

                    'Content-Type': 'application/json',
                    'User-Agent': 'Mozilla / 5.0(Windows NT 6.1;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 98.0.4758.102Safari / 537.36'
                }

                response = requests.request("GET", self.url2_yonan1, headers=headers, data=payload)
                rez = response.json()["res"]["data"]["payment"]
                return rez

        except Exception as e:
            print(444444444)

    # 获取计费接口返回的数据(如果选项都是全部用这个函数)
    def postdata2(self, starttime, endtime):
        url1 = self.environment()
        self.url2_dali1 = url1 + f"671035385089884170&startTime={starttime}&endTime={endtime}"
        self.url2_yonan1 = url1 + f"676746866603327498&startTime={starttime}&endTime={endtime}"
        if self.wudi <= self.output_dali:
            payload = {}
            headers = {

                'Content-Type': 'application/json',
                'User-Agent': 'Mozilla / 5.0(Windows NT 6.1;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 98.0.4758.102Safari / 537.36'
            }
            response = requests.request("GET", self.url2_dali1, headers=headers, data=payload)
            rez = response.json()["res"]["data"]["payment"]
            self.wudi =self.wudi+1
            return rez

        elif self.wudi <= self.output_all:
            payload = {}
            headers = {

                'Content-Type': 'application/json',
                'User-Agent': 'Mozilla / 5.0(Windows NT 6.1;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 98.0.4758.102Safari / 537.36'

            }
            response = requests.request("GET", self.url2_yonan1, headers=headers, data=payload)
            rez = response.json()["res"]["data"]["payment"]
            self.wudi = self.wudi + 1
            return rez

    def jifei(self):
        if self.lineEdit_4.text()=="":
            QMessageBox.about(self, '提示','文件地址好像还没填哦!')
            return

        if self.comboBox_2.currentText() == "大沥" and self.comboBox_3.currentText() == "一类区域" and self.comboBox_4.currentText() == "小型车" and self.comboBox_5.currentText() == "全部":
            print("地区:大沥")
            print("路段类型:一类区域")
            print("车辆类型:小型车")
            print("车辆属性:燃油车&新能源车")

        elif self.comboBox_2.currentText() == "永安" and self.comboBox_3.currentText() == "繁华路段" and self.comboBox_4.currentText() == "全部" and self.comboBox_5.currentText() == "全部":
            print("地区:永安")
            print("路段类型:繁华路段")
            print("车辆类型:小型车")
            print("车辆属性:燃油车&新能源车")

        elif self.comboBox_2.currentText() == "全部" and self.comboBox_3.currentText() == "全部" and self.comboBox_4.currentText() == "全部" and self.comboBox_5.currentText() == "全部":
            print("地区:全部")
            print("路段类型:全部")
            print("车辆类型:全部")
            print("车辆属性:全部")

        else:
            print("还没有这个类型的计费规则哦!")

        self.m=0
        self.n=0
        self.b=0
        if os.path.exists("测试明细.csv"):
            os.remove("测试明细.csv")
        try:
            if self.comboBox_2.currentText() == "大沥" and self.comboBox_3.currentText() == "一类区域" and self.comboBox_4.currentText() == "小型车" and self.comboBox_5.currentText() == "全部":
                for i in self.get_exceldata():
                    self.pay = i[7]
                    starttime = i[5]
                    endtime = i[6]
                    sumpay = self.postdata(starttime, endtime)
                    sumpay = sumpay / 100
                    print("案例编号:" + f"{i[0]}")
                    print("入场时间:" + f"{i[5]}")
                    print("离场时间:" + f"{i[6]}")
                    print("理论值:" + f"{self.pay}", "实际计算值:" + f"{sumpay}")
                    if sumpay == self.pay:
                        print("测试结果:通过!")
                        self.m=self.m+1
                        self.testresult="通过"

                    else:
                        print("测试结果:失败!")
                        self.n = self.n + 1
                        print(self.n)
                        self.testresult = "失败"

                    Area = "测试地区"
                    RoadType = "路段类型"
                    CaseNo = "案例编号"
                    EntryTimes = "入场时间"
                    leaveTimes = "离场时间"
                    ExcepetValue = "理论值"
                    ActualValue = "实际计算值"
                    Testresult = "测试结果"
                    CarAttribute="车辆属性"
                    CarType="车辆类型"
                    # csv header
                    fieldnames = [Area, RoadType,CarAttribute,CarType,CaseNo, EntryTimes, leaveTimes, ExcepetValue, ActualValue, Testresult]
                    # csv data
                    mydict = [
                        {CaseNo: i[0],Area:i[1], RoadType:i[2] ,CarAttribute:i[3],CarType:i[4] ,EntryTimes: i[5], leaveTimes: i[6], ExcepetValue: i[7], ActualValue: sumpay,
                         Testresult: self.testresult}]
                    with open('测试明细.csv', 'a+', encoding='UTF8', newline='') as f:
                        writer = csv.DictWriter(f, fieldnames=fieldnames)
                        if self.b==0:
                            writer.writeheader()
                            self.b=self.b+1
                        writer.writerows(mydict)

            elif self.comboBox_2.currentText() == "永安" and self.comboBox_3.currentText() == "繁华路段" and self.comboBox_4.currentText() == "全部" and self.comboBox_5.currentText() == "全部":
                for i in self.get_exceldata():
                    self.pay = i[7]
                    starttime = i[5]
                    endtime = i[6]
                    sumpay = self.postdata(starttime, endtime)
                    sumpay = sumpay / 100
                    print("案例编号:" + f"{i[0]}")
                    print("入场时间:" + f"{i[5]}")
                    print("离场时间:" + f"{i[6]}")
                    print("理论值:" + f"{self.pay}", "实际计算值:" + f"{sumpay}")
                    if sumpay == self.pay:
                        print("测试结果:通过!")
                        self.m=self.m+1
                        self.testresult="通过"

                    else:
                        print("测试结果:失败!")
                        self.n = self.n + 1
                        print(self.n)
                        self.testresult = "失败"

                    Area = "测试地区"
                    RoadType = "路段类型"
                    CaseNo = "案例编号"
                    EntryTimes = "入场时间"
                    leaveTimes = "离场时间"
                    ExcepetValue = "理论值"
                    ActualValue = "实际计算值"
                    Testresult = "测试结果"
                    CarAttribute = "车辆属性"
                    CarType = "车辆类型"
                    # csv header
                    fieldnames = [Area, RoadType, CarAttribute, CarType, CaseNo, EntryTimes, leaveTimes, ExcepetValue,
                                  ActualValue, Testresult]
                    # csv data
                    mydict = [
                        {CaseNo: i[0], Area: i[1], RoadType: i[2], CarAttribute: i[3], CarType: i[4] ,EntryTimes: i[5],
                         leaveTimes: i[6], ExcepetValue: i[7], ActualValue: sumpay,
                         Testresult: self.testresult}]
                    with open('测试明细.csv', 'a+', encoding='UTF8', newline='') as f:
                        writer = csv.DictWriter(f, fieldnames=fieldnames)
                        if self.b == 0:
                            writer.writeheader()
                            self.b = self.b + 1
                        writer.writerows(mydict)
            #按钮都选择全部时要特殊处理
            elif self.comboBox_2.currentText() == "全部" and self.comboBox_3.currentText() == "全部" and self.comboBox_4.currentText() == "全部" and self.comboBox_5.currentText() == "全部":
                self.wudi = 1
                for i in self.get_exceldata():
                    self.pay = i[7]
                    starttime = i[5]
                    endtime = i[6]
                    sumpay = self.postdata2(starttime, endtime)
                    sumpay = sumpay / 100
                    print("案例编号:" + f"{i[0]}")
                    print("入场时间:" + f"{i[5]}")
                    print("离场时间:" + f"{i[6]}")
                    print("理论值:" + f"{self.pay}", "实际计算值:" + f"{sumpay}")
                    if sumpay == self.pay:
                        print("测试结果:通过!")
                        self.m=self.m+1
                        self.testresult="通过"

                    else:
                        print("测试结果:失败!")
                        self.n = self.n + 1
                        print(self.n)
                        self.testresult = "失败"

                    Area = "测试地区"
                    RoadType = "路段类型"
                    CaseNo = "案例编号"
                    EntryTimes = "入场时间"
                    leaveTimes = "离场时间"
                    ExcepetValue = "理论值"
                    ActualValue = "实际计算值"
                    Testresult = "测试结果"
                    CarAttribute = "车辆属性"
                    CarType = "车辆类型"
                    # csv header
                    fieldnames = [Area, RoadType, CarAttribute, CarType, CaseNo, EntryTimes, leaveTimes, ExcepetValue,
                                  ActualValue, Testresult]
                    # csv data
                    mydict = [
                        {CaseNo: i[0], Area: i[1], RoadType: i[2], CarAttribute: i[3], CarType: i[4], EntryTimes: i[5],
                         leaveTimes: i[6], ExcepetValue: i[7], ActualValue: sumpay,
                         Testresult: self.testresult}]
                    with open('测试明细.csv', 'a+', encoding='UTF8', newline='') as f:
                        writer = csv.DictWriter(f, fieldnames=fieldnames)
                        if self.b == 0:
                            writer.writeheader()
                            self.b = self.b + 1
                        writer.writerows(mydict)

            print("测试结果汇总报告:"+"测试通过:"f"{self.m}"+"条案例"+","+"测试失败:"f"{self.n}"+"条案例")
            Area="测试地区"
            RoadType="路段类型"
            CarType="车辆类型"
            CarAttributes="车辆属性"
            TestPasses="测试通过数"
            Testfails="测试失败数"
            # csv header
            fieldnames = [Area, RoadType, CarType, CarAttributes,TestPasses,Testfails]
            # csv data
            mydict = [{Area:self.comboBox_2.currentText(), RoadType:self.comboBox_3.currentText() , CarType:self.comboBox_4.currentText(),CarAttributes:self.comboBox_5.currentText(),TestPasses:self.m,Testfails:self.n}]
            with open('测试报告.csv', 'w', encoding='UTF8', newline='') as f:
                writer = csv.DictWriter(f, fieldnames=fieldnames)
                writer.writeheader()
                writer.writerows(mydict)
        except Exception as e:
            print(e)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mc = MyClass()
    sys.exit(app.exec_())

jifei3.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'jifei3.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(781, 409)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(66, 50, 675, 270))
        self.widget.setObjectName("widget")
        self.gridLayout = QtWidgets.QGridLayout(self.widget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.label_5 = QtWidgets.QLabel(self.widget)
        self.label_5.setObjectName("label_5")
        self.gridLayout.addWidget(self.label_5, 0, 0, 1, 1)
        self.comboBox_2 = QtWidgets.QComboBox(self.widget)
        self.comboBox_2.setEditable(True)
        self.comboBox_2.setDuplicatesEnabled(False)
        self.comboBox_2.setObjectName("comboBox_2")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.gridLayout.addWidget(self.comboBox_2, 0, 1, 1, 1)
        self.label_6 = QtWidgets.QLabel(self.widget)
        self.label_6.setObjectName("label_6")
        self.gridLayout.addWidget(self.label_6, 0, 2, 1, 1)
        self.comboBox_3 = QtWidgets.QComboBox(self.widget)
        self.comboBox_3.setEditable(True)
        self.comboBox_3.setDuplicatesEnabled(False)
        self.comboBox_3.setObjectName("comboBox_3")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.gridLayout.addWidget(self.comboBox_3, 0, 3, 1, 1)
        self.label_7 = QtWidgets.QLabel(self.widget)
        self.label_7.setObjectName("label_7")
        self.gridLayout.addWidget(self.label_7, 0, 4, 1, 1)
        self.comboBox_4 = QtWidgets.QComboBox(self.widget)
        self.comboBox_4.setEditable(True)
        self.comboBox_4.setDuplicatesEnabled(False)
        self.comboBox_4.setObjectName("comboBox_4")
        self.comboBox_4.addItem("")
        self.comboBox_4.addItem("")
        self.comboBox_4.addItem("")
        self.comboBox_4.addItem("")
        self.gridLayout.addWidget(self.comboBox_4, 0, 5, 1, 1)
        self.label_9 = QtWidgets.QLabel(self.widget)
        self.label_9.setObjectName("label_9")
        self.gridLayout.addWidget(self.label_9, 0, 6, 1, 1)
        self.comboBox_5 = QtWidgets.QComboBox(self.widget)
        self.comboBox_5.setEditable(True)
        self.comboBox_5.setDuplicatesEnabled(False)
        self.comboBox_5.setObjectName("comboBox_5")
        self.comboBox_5.addItem("")
        self.comboBox_5.addItem("")
        self.comboBox_5.addItem("")
        self.gridLayout.addWidget(self.comboBox_5, 0, 7, 1, 1)
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 8, 1, 1)
        self.comboBox = QtWidgets.QComboBox(self.widget)
        self.comboBox.setEditable(True)
        self.comboBox.setDuplicatesEnabled(False)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.gridLayout.addWidget(self.comboBox, 0, 9, 1, 1)
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout.addWidget(self.pushButton_2, 0, 10, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 2)
        self.lineEdit_4 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.gridLayout.addWidget(self.lineEdit_4, 1, 2, 1, 5)
        self.label_8 = QtWidgets.QLabel(self.widget)
        self.label_8.setObjectName("label_8")
        self.gridLayout.addWidget(self.label_8, 2, 0, 1, 2)
        self.textBrowser = QtWidgets.QTextBrowser(self.widget)
        self.textBrowser.setObjectName("textBrowser")
        self.gridLayout.addWidget(self.textBrowser, 3, 0, 1, 11)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label_5.setText(_translate("Form", "地区"))
        self.comboBox_2.setCurrentText(_translate("Form", "全部"))
        self.comboBox_2.setItemText(0, _translate("Form", "全部"))
        self.comboBox_2.setItemText(1, _translate("Form", "大沥"))
        self.comboBox_2.setItemText(2, _translate("Form", "永安"))
        self.label_6.setText(_translate("Form", "区域类型"))
        self.comboBox_3.setCurrentText(_translate("Form", "全部"))
        self.comboBox_3.setItemText(0, _translate("Form", "全部"))
        self.comboBox_3.setItemText(1, _translate("Form", "一类区域"))
        self.comboBox_3.setItemText(2, _translate("Form", "二类区域"))
        self.comboBox_3.setItemText(3, _translate("Form", "三类区域"))
        self.comboBox_3.setItemText(4, _translate("Form", "一般路段"))
        self.comboBox_3.setItemText(5, _translate("Form", "繁华路段"))
        self.label_7.setText(_translate("Form", "车辆类型"))
        self.comboBox_4.setCurrentText(_translate("Form", "全部"))
        self.comboBox_4.setItemText(0, _translate("Form", "全部"))
        self.comboBox_4.setItemText(1, _translate("Form", "小型车"))
        self.comboBox_4.setItemText(2, _translate("Form", "中型车"))
        self.comboBox_4.setItemText(3, _translate("Form", "大型车"))
        self.label_9.setText(_translate("Form", "车辆属性"))
        self.comboBox_5.setCurrentText(_translate("Form", "全部"))
        self.comboBox_5.setItemText(0, _translate("Form", "全部"))
        self.comboBox_5.setItemText(1, _translate("Form", "燃油车"))
        self.comboBox_5.setItemText(2, _translate("Form", "新能源"))
        self.label.setText(_translate("Form", "运行环境"))
        self.comboBox.setCurrentText(_translate("Form", "测试环境"))
        self.comboBox.setItemText(0, _translate("Form", "测试环境"))
        self.comboBox.setItemText(1, _translate("Form", "正式环境"))
        self.pushButton_2.setText(_translate("Form", "开始测试"))
        self.pushButton.setText(_translate("Form", "导入excel"))
        self.lineEdit_4.setText(_translate("Form", "C:/Users/Administrator/Desktop/jifei.xls"))
        self.label_8.setText(_translate("Form", "测试结果"))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值