wumu
2024-03-05 2a6c60a34a892b1a7296535952d86a9d6b195d64
internal_system_v1/searchinfo.cpp
@@ -1,8 +1,13 @@
#include "searchinfo.h"
#include "searchinfo.h"
#include "ui_searchinfo.h"
#include <QAxObject>
#include <QDebug>
#include <QDir>
#include <QSqlError>
#include <QSqlQuery>
#include <QMessageBox>
#include <QFileDialog>
#include <QCalendarWidget>
SearchInfo::SearchInfo(QWidget *parent) :
    QMainWindow(parent),
@@ -13,11 +18,17 @@
//    ui->label_3->hide();
//    ui->dateTimeEdit->hide();
//    ui->dateTimeEdit_2->hide();
    ui->dateEdit_begin->calendarWidget()->setStyleSheet("background-color:#deab8a");
    ui->dateEdit_end->calendarWidget()->setStyleSheet("background-color:pink");
    ui->dateEdit_end->setDate(QDate::currentDate());
    m_model = new QStandardItemModel(this);
    ui->tableView->setModel(m_model);
    ui->tableView->verticalHeader()->setVisible(false); // 隐藏行头
    m_model->setColumnCount(5);
    QStringList labels;
    labels<<"ID"<<"指标名称"<<"代码"<<"数量"<<"公司编号"<<"审计时间";
    m_model->setHorizontalHeaderLabels(labels);
    if(QSqlDatabase::contains("qt_sql_default_connection")){
        m_db = QSqlDatabase::addDatabase("qt_sql_default_connection");
    }else{
@@ -32,7 +43,8 @@
    }else{
        qDebug()<<"db open fail";
    }
    // 设置表格列标签
    setLabels();
}
@@ -125,6 +137,238 @@
    createTableHasUnit("case_clue");
    m_itemAndTable["案件线索"] = "case_clue";
    // 单位的所有信息表  创建
    createTableAllComInfo("all_company_info");
    // 整改结果信息表 创建
    createTableRectifyResultInfo("rectify_result_info");
    // 问题清单信息表 创建
    createTableProblemListInfo("problem_list_info");
    // 综合录入信息表 创建
    createTableComprehensiveEntryInfo("comprehensive_entry_info");
}
// 综合录入信息表 以编码作为指标名
void SearchInfo::createTableComprehensiveEntryInfo(QString tableName){
    QString sql = QString("CREATE TABLE %1 (\
            id       INTEGER      PRIMARY KEY AUTOINCREMENT,\
            name     VARCHAR (30),\
            _030000     TEXT,\
            _030001     TEXT,\
            _030100     TEXT,\
            _030101     TEXT,\
            _030200     TEXT,\
            _030210     TEXT,\
            _030220     TEXT,\
            _030221     TEXT,\
            _030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
_030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
                          _030222     TEXT,\
            company_type     TEXT)").arg(tableName);
    QSqlQuery query;
    if(query.exec(sql))
    {
      qDebug()<<QString("create %1 ok...").arg(tableName);
    }else{
      qDebug()<<QString("create %1 fail...").arg(tableName)<<query.lastError().text();
    }
}
// 整改结果信息表
void SearchInfo::createTableRectifyResultInfo(QString tableName){
    QString sql = QString("CREATE TABLE %1 (\
            id       INTEGER      PRIMARY KEY AUTOINCREMENT,\
            name     VARCHAR (30),\
            修订制度     TEXT,\
            新增制度     TEXT,\
            挽回损失     TEXT,\
            剔除     TEXT,\
            审减     TEXT,\
            处理人     TEXT,\
            宣贯培训     TEXT,\
            其他     TEXT,\
            审核结果     TEXT,\
            注销     TEXT)").arg(tableName);
    QSqlQuery query;
    if(query.exec(sql))
    {
      qDebug()<<QString("create %1 ok...").arg(tableName);
    }else{
      qDebug()<<QString("create %1 fail...").arg(tableName)<<query.lastError().text();
    }
}
// 问题清单信息表
void SearchInfo::createTableProblemListInfo(QString tableName){
    QString sql = QString("CREATE TABLE %1 (\
            id       INTEGER      PRIMARY KEY AUTOINCREMENT,\
            name     VARCHAR (30),\
            序号     TEXT,\
            摘要     TEXT,\
            检查时间     TEXT,\
            检查方式     TEXT,\
            纠正问题     TEXT,\
            完善制度     TEXT,\
            完成时间     TEXT,\
            主要原因     TEXT,\
            完成时限     TEXT,\
            主要原因1     TEXT,\
            责任部门或责任人     TEXT,\
            完成时限1     TEXT,\
            是否销号     TEXT,\
            销号时间     TEXT)").arg(tableName);
    QSqlQuery query;
    if(query.exec(sql))
    {
      qDebug()<<QString("create %1 ok...").arg(tableName);
    }else{
      qDebug()<<QString("create %1 fail...").arg(tableName)<<query.lastError().text();
    }
}
// 单位信息表 全
void SearchInfo::createTableAllComInfo(QString tableName){
    QString sql = QString("CREATE TABLE %1 (\
            id       INTEGER      PRIMARY KEY AUTOINCREMENT,\
            name     VARCHAR (30),\
            code     VARCHAR (30),\
            机构类型     TEXT,\
            主要业务活动   TEXT,\
            行业代码     TEXT,\
            单位注册地及区域 TEXT,\
            区域代码     TEXT,\
            城乡代码     TEXT,\
            单位规模     TEXT,\
            从业期末人数   TEXT,\
            法定代表人    TEXT,\
            执行会记标准类别 TEXT,\
            长途区号     TEXT,\
            固定电话     TEXT,\
            邮政编码     TEXT,\
            电子邮箱     TEXT,\
            网址       TEXT,\
            是否有上一级法人       TEXT,\
            上一级统信代码       TEXT,\
            原组织代码       TEXT,\
            上级单位名称       TEXT,\
            是否设置总审计师       TEXT,\
            总审计师职位层级       TEXT,\
            总审任职方式       TEXT,\
            是否设置内审机构       TEXT,\
            内审机构名称       TEXT,\
            领导机构       TEXT,\
            是否独立设置内审机构       TEXT,\
            财务部门       INTEGER,\
            法务部门       INTEGER,\
            内部控制部门       INTEGER,\
            纪检部门       INTEGER,\
            其他部门       INTEGER,\
            内审层级       TEXT,\
            编制数量       INTEGER,\
            实有人数量       INTEGER,\
            专职人员数量       INTEGER,\
            拥有CIA人数       INTEGER,\
            硕士学历以上人数       INTEGER,\
            本科人数       INTEGER,\
            专科及以下人数       INTEGER,\
            高级职称人数       INTEGER,\
            中级职称人数       INTEGER,\
            初级职称人数       INTEGER,\
            无职称人数       INTEGER,\
            五十岁以上人数       INTEGER,\
            三十至五十岁岁人数       INTEGER,\
            三十岁以下人数       INTEGER,\
            审计数量       INTEGER,\
            会计数量       INTEGER,\
            经济数量       INTEGER,\
            法律数量       INTEGER,\
            管理数量       INTEGER,\
            信息技术数量       INTEGER,\
            工程数量       INTEGER,\
            其他数量       INTEGER,\
            统计负责人       TEXT,\
            填表人       TEXT,\
            联系电话       TEXT,\
            填报日期       TEXT\
        )").arg(tableName);
    QSqlQuery query;
    if(query.exec(sql))
    {
        qDebug()<<QString("create %1 ok...").arg(tableName);
    }else{
        qDebug()<<QString("create %1 fail...").arg(tableName)<<query.lastError().text();
    }
}
void SearchInfo::createTableHasEvidences(QString tableName)
@@ -135,7 +379,8 @@
            code      TEXT,\
            num       INTEGER,\
            evidences TEXT,\
            com_id  INTEGER\
            com_id  INTEGER,\
            time     TEXT\
        )").arg(tableName);
    QSqlQuery query;
    if(query.exec(sql))
@@ -153,7 +398,8 @@
            kpi_name TEXT,\
            code     TEXT,\
            num      INTEGER,\
            com_id  INTEGER\
            com_id  INTEGER,\
            time     TEXT\
        )").arg(tableName);
    QSqlQuery query;
    if(query.exec(sql))
@@ -172,7 +418,8 @@
            code     TEXT,\
            unit     TEXT,\
            num      INTEGER,\
            com_id  INTEGER\
            com_id  INTEGER,\
            time     TEXT\
        )").arg(tableName);
    QSqlQuery query;
    if(query.exec(sql))
@@ -186,14 +433,16 @@
void SearchInfo::searchComName()
{
    QSqlQuery query;
    QString sql = QString("select id,name from company_info");
    QString sql = QString("select id,name,code from company_info");
    if(query.exec(sql)){
        qDebug()<<"size:"<<query.numRowsAffected();
        while(query.next()){
            int id = query.value(0).toInt();
            QString name = query.value(1).toString();
            QString code = query.value(2).toString();
            qDebug()<<"com select:"<<id<<name;
            m_comInfo[name] = id;
            m_comCode[name] = code;
            ui->comboBox_company->addItem(name);
        }
    }
@@ -216,12 +465,33 @@
    return resultSet;
}
void SearchInfo::setLabels()
{
    QStringList labels,labels2,labels3;
    labels<<"ID"<<"指标名称"<<"代码"<<"数量"<<"公司编号"<<"审计时间"<<" ";
    labels2<<"ID"<<"指标名称"<<"代码"<<"单位"<<"数量"<<"公司编号"<<"审计时间";
    labels3<<"ID"<<"指标名称"<<"代码"<<"数量"<<"佐证"<<"公司编号"<<"审计时间";
    m_labels["审计项目"] = labels;
    m_labels["内审工作量"] = labels;
    m_labels["问题金额"] = labels3;
    m_labels["问题个数"] = labels3;
    m_labels["问题整改"] = labels3;
    m_labels["问题整改--非金额"] = labels3;
    m_labels["处分"] = labels;
    m_labels["案件线索"] = labels2;
}
void SearchInfo::on_pushButton_search_clicked()
{
    // 获取信息,然后查询
    QString item = ui->comboBox->currentText();
    QString comName = ui->comboBox_company->currentText();
    QString sql = QString("select * from %1 where com_id=%2").arg(m_itemAndTable[item]).arg(m_comInfo[comName]);
    if(ui->checkBox->isChecked()){ // 勾选之后
        sql = QString("select * from %1 where com_id=%2 and time between '%3' and '%4'").arg(m_itemAndTable[item]).arg(m_comInfo[comName])
                .arg(ui->dateEdit_begin->date().toString("yyyy-MM-dd"))
                .arg(ui->dateEdit_end->date().toString("yyyy-MM-dd"));
    }
    qDebug()<<__FUNCTION__<<sql;
    QSqlQuery query;
    if(query.exec(sql)){
@@ -232,11 +502,12 @@
            rowCnt++;
            m_model->setRowCount(rowCnt);
            qDebug()<<query.value(0).toInt();
            m_model->setItem(rowCnt-1,0,new QStandardItem(query.value(0).toString()));
            m_model->setItem(rowCnt-1,1,new QStandardItem(query.value(1).toString()));
            m_model->setItem(rowCnt-1,2,new QStandardItem(query.value(2).toString()));
            m_model->setItem(rowCnt-1,3,new QStandardItem(query.value(3).toString()));
            m_model->setItem(rowCnt-1,4,new QStandardItem(query.value(4).toString()));
            for(int i=0;i<7;++i){
                if(query.value(i).isValid()){
                    m_model->setItem(rowCnt-1,i,new QStandardItem(query.value(i).toString()));
                }
            }
        }
    }
@@ -244,6 +515,14 @@
void SearchInfo::on_pushButton_export_clicked()
{
    if(ui->comboBox_company->currentText() == "公司名称"){
        QMessageBox::information(this,"导出错误","请选择一个公司名再导出");
        return;
    }
    if(ui->label_excel_path->text().size() < 5){
        QMessageBox::information(this,"导出设置错误","请先在“导出设置”选择模板及保存文件的路径信息");
        return;
    }
    // 每一张表拿最新的那一批数据即可,然后保存到电子表格中
    int comId = m_comInfo[ui->comboBox_company->currentText()];
    QString audit_project = QString("select kpi_name,code,num from %2 where com_id=%1 limit 10").arg(comId).arg("audit_project");
@@ -265,4 +544,163 @@
    QVector<QVector<QString>> punish_res = getResult(punish,3);
    qDebug()<<audit_project_res.size()<<punish_res.size();
    // 操作excel
    // 创建新的电子表格
//    QAxObject* excel = new QAxObject("Excel.Application");  // 创建Excel对象
//    excel->setProperty("Visible", false);  // 设置Excel不可见
//    QAxObject* workbooks = excel->querySubObject("Workbooks");  // 获取所有工作簿
//    QAxObject* workbook = workbooks->querySubObject("Add");  // 添加新工作簿
//    QAxObject* worksheets = workbook->querySubObject("Worksheets");  // 获取所有工作表
//    QAxObject* worksheet = worksheets->querySubObject("Item(int)", 1);  // 获取第一个工作表
 //   for (int i = 1; i <= 61; i++) {
//        for (int j = 1; j <= 5; j++) {
//            QString cellValue = "Value";  // 设置要写入的单元格值
//            worksheet->querySubObject("Cells(int, int)", i, j)->dynamicCall("SetValue(const QVariant&)", cellValue);  // 写入单元格值
//        }
    //}
    // 构建一张表:
//    QString cellValue = "单位内部审计业务情况表";  // 设置要写入的单元格值
//    worksheet->querySubObject("Cells(int, int)", 1, 1)->dynamicCall("SetValue(const QVariant&)", cellValue);  // 写入单元格值
//    worksheet->querySubObject("Cells(int, int)", 3, 4)->dynamicCall("SetValue(const QVariant&)", "表  号:");
//    worksheet->querySubObject("Cells(int, int)", 3, 5)->dynamicCall("SetValue(const QVariant&)", "内审统02表");
//    QString path = QDir::currentPath();
//    qDebug()<<"path:"<<path;
//    path += "/debug/Data/save2.xls";
//    qDebug()<<"path:"<<path;
//    workbook->dynamicCall("SaveAs(const QString&)", path);  // 保存工作簿
//    workbook->dynamicCall("Close()");  // 关闭工作簿
//    excel->dynamicCall("Quit()");  // 退出Excel应用程序
//    QMessageBox::information(this,"导出路径信息",path);
    // 打开已存在的电子表格,然后往里写入数据
    // :/mayi/附件3_内审统02表_单位内部审计业务情况表.xls
    QAxObject excel("Excel.Application");
    excel.setProperty("Visible",false);
    excel.setProperty("DisplayAlerts",false);
    //QString str = "D:/Qt/QtP/build-internal_system_v1-Desktop_Qt_5_9_4_MinGW_32bit-Debug/debug/Data/附件3_内审统02表_单位内部审计业务情况表.xls";
    QString str = ui->label_excel_path->text();
    qDebug()<<"open:"<<str;
    qDebug()<<"excel:"<<excel.className();
    QAxObject * wbs = excel.querySubObject("WorkBooks");
    QAxObject * wb = wbs->querySubObject("Open(QString&)",str);
    QAxObject * shs = wb->querySubObject("Sheets"); // WorkSheets 也可以
    int cnt = shs->property("Count").toInt();
    qDebug()<<"cnt="<<cnt;
    for(int i=0;i<cnt;++i){
        QAxObject * sheet = shs->querySubObject("Item(int)", i+1);
        QString sheetName = sheet->property("Name").toString();
        qDebug()<<"sh name:"<<sheetName;
        // 然后再操作表内的数据
        QAxObject *usedRange = sheet->querySubObject("UsedRange");
        int rows = usedRange->querySubObject("Rows")->property("Count").toInt();
        int columns = usedRange->querySubObject("Columns")->property("Count").toInt();
        qDebug()<<"r--c:"<<rows<<columns;
        QVariant  val = usedRange->dynamicCall("Value"); // 拿到二维表格
        QVariantList valRows = val.toList();
        qDebug()<<valRows[11].toList().at(4);
        sheet->querySubObject("Cells(int, int)", 7, 2)->dynamicCall("SetValue(const QVariant&)", ui->comboBox_company->currentText());
        sheet->querySubObject("Cells(int, int)", 6, 2)->dynamicCall("SetValue(const QVariant&)", m_comCode[ui->comboBox_company->currentText()]);
        // 写入审计项目 一
        qDebug()<<"size:"<<audit_project_res.size();
        QString it = audit_project_res[0][2];
        //sheet->querySubObject("Cells(int, int)", 13, 5)->dynamicCall("SetValue(doubule)", 4.5);
        for(int i=0;i<audit_project_res.size();++i){
            sheet->querySubObject("Cells(int, int)", 11+i, 5)->dynamicCall("SetValue(const QVariant&)", audit_project_res[i][2].toDouble());
        }
        // 写入审计工作量 二
        for(int i=0;i<audit_workload_res.size();++i){
            sheet->querySubObject("Cells(int, int)", 21+i, 5)->dynamicCall("SetValue(const QVariant&)", audit_workload_res[i][2].toDouble());
        }
        // 写入问题金额 三
        for(int i=0;i<problem_money_res.size();++i){
            sheet->querySubObject("Cells(int, int)", 22+i, 5)->dynamicCall("SetValue(const QVariant&)", problem_money_res[i][2].toDouble());
        }
        // 写入问题个数 四
        for(int i=0;i<problem_count_res.size();++i){
            sheet->querySubObject("Cells(int, int)", 33+i, 5)->dynamicCall("SetValue(const QVariant&)", problem_count_res[i][2].toDouble());
        }
        // 写入问题整改(金额) 五
        for(int i=0;i<problem_rectification_res.size();++i){
            sheet->querySubObject("Cells(int, int)", 40+i, 5)->dynamicCall("SetValue(const QVariant&)", problem_rectification_res[i][2].toDouble());
        }
        // 写入问题整改(非金额) 六
        for(int i=0;i<problem_no_money_res.size();++i){
            sheet->querySubObject("Cells(int, int)", 47+i, 5)->dynamicCall("SetValue(const QVariant&)", problem_no_money_res[i][2].toDouble());
        }
        // 写入处分 七
        for(int i=0;i<punish_res.size();++i){
            sheet->querySubObject("Cells(int, int)", 52+i, 5)->dynamicCall("SetValue(const QVariant&)", punish_res[i][2].toDouble());
        }
        // 写入案件线索 八
        for(int i=0;i<case_clue_res.size();++i){
            sheet->querySubObject("Cells(int, int)", 56+i, 5)->dynamicCall("SetValue(const QVariant&)", case_clue_res[i][2].toDouble());
        }
    }
    //wb->dynamicCall("Save()");  // 若文件已存在,则直接保存
    //wb->dynamicCall("SaveAs(const QString&)", str);  // 保存工作簿,若文件不存在,则带名字保存
    if(ui->lineEdit_excel_save->text().size() > 1){
        wb->dynamicCall("SaveAs(const QString&)", ui->lineEdit_excel_save->text());  // 保存工作簿,若文件不存在,则带名字保存
        qDebug()<<"保存到新文件中";
    }else{
        wb->dynamicCall("Save()"); // 直接保存到模板文件中
        qDebug()<<"保存到老文件中";
    }
    wbs->dynamicCall("Close()");
    excel.dynamicCall("Quit(void)");
    QMessageBox::information(this,"导出成功",QString("导出成功,文件路径为:%1").arg(ui->lineEdit_excel_save->text()));
}
void SearchInfo::on_comboBox_currentIndexChanged(const QString &arg1)
{
     m_model->setHorizontalHeaderLabels(m_labels[arg1]);
}
void SearchInfo::on_toolButton_seleceExcel_clicked()
{
    if(ui->comboBox_company->currentText() == "公司名称"){
        QMessageBox::information(this,"导出设置错误","请选择一个公司名再设置");
        return;
    }
    QString path = QFileDialog::getOpenFileName(this,"选择表格模板:单位内部审计业务情况表","./","excel(*单位内部审计业务情况表.xls)");
    ui->label_excel_path->setText(path);
    QStringList paths = path.split(".");
    QString newPath = paths.at(0)+"_"+ui->comboBox_company->currentText()+"."+paths.at(1);
    ui->lineEdit_excel_save->setText(newPath);
}
void SearchInfo::on_comboBox_company_currentIndexChanged(const QString &arg1)
{
    if(ui->lineEdit_excel_save->text().size() > 5){
        QStringList paths = ui->label_excel_path->text().split(".");
        QString newPath = paths.at(0)+"_"+arg1+"."+paths.at(1);
        ui->lineEdit_excel_save->setText(newPath);
    }
}
void SearchInfo::addComName(QString name)
{
    ui->comboBox_company->addItem(name);
}
void SearchInfo::on_checkBox_clicked()
{
    if(ui->checkBox->isChecked()){
        ui->dateEdit_begin->setEnabled(true);
        ui->dateEdit_end->setEnabled(true);
    }else{
        ui->dateEdit_begin->setEnabled(false);
        ui->dateEdit_end->setEnabled(false);
    }
}