wumu
2024-11-26 5efd96cc316f8a704f0f6315b85078b738ddee04
internal_system_v1/threemergeproblemlist.cpp
@@ -1,14 +1,1048 @@
#include "threemergeproblemlist.h"
#include "threemergeproblemlist.h"
#include "ui_threemergeproblemlist.h"
#include <QDebug>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>
#include <QDir>
#include <QFileDevice>
#include "noedititemdelegate.h"
#pragma execution_character_set("utf-8")
ThreeMergeProblemList::ThreeMergeProblemList(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ThreeMergeProblemList)
{
    ui->setupUi(this);
    m_fdd = new FileDialogDelegate;
    //m_noEdit = new ThreeComboBox;
    ui->statusbar->hide();
    ui->menubar->hide();
    initUi(); // 初始化所有界面
    // 隐藏
    //ui->comboBox_company->hide();
    ui->tableWidget_2->hide();
    ui->pushButton_save->hide();
    ui->pushButton_addRow->hide();
    ui->label_5->hide();
    ui->label->hide();
    ui->tableWidget_3->hide();
    ui->pushButton_save_2->hide();
    ui->pushButton_addRow_2->hide();
    ui->label_6->hide();
    ui->label_2->hide();
    ui->line->hide();
    ui->line_2->hide();
    ui->groupBox->hide(); // 首次先隐藏
    // pdf文件相关
    //m_pdfView = new QWebEngineView();
}
ThreeMergeProblemList::~ThreeMergeProblemList()
{
    //delete m_noEdit;
    delete ui;
}
// 拿结果集的sql
int ThreeMergeProblemList::selectSQL(QString sql,QVector<QVector<QString>> &result)
{
    int rows = -1;
    QSqlQuery query;
    if(query.exec(sql))
    {
      qDebug()<<QString("selectSQL ok...");
      while(query.next()){ // 添加结果集
          int idx = 0;
          QVariant var;
          QVector<QString> lines;
          while((var = query.value(idx++)).isValid()){
              lines.append(var.toString());
          }
          result.append(lines);
      }
      rows = result.size();
    }else{
      qDebug()<<QString("selectSQL fail...")<<query.lastError().text();
    }
    return rows;
}
// 拿修改条数的sql
int ThreeMergeProblemList::changeSQL(QString sql)
{
    int rows = -1;
    QSqlQuery query;
    if(query.exec(sql))
    {
      qDebug()<<QString("changeSQL ok...");
      rows = query.numRowsAffected();
    }else{
      qDebug()<<QString("changeSQL fail...")<<query.lastError().text();
    }
    return rows;
}
int ThreeMergeProblemList::saveDataLine(int row)
{
    if(ui->tableWidget->item(row,0)==nullptr) {
        qDebug()<<"当前行首为空"<<row;
        return 0;
    }
    // 处理为空的非首列单元,自动补零
    for(int i=1;i<ui->tableWidget->columnCount();++i){
        if(ui->tableWidget->item(row,i) == nullptr){
            qDebug()<<"发现空项:"<<row<<i;
            ui->tableWidget->setItem(row,i,new QTableWidgetItem(" "));
        }
    }
    // 取出索引号来判断一下
    QString sql = QString("select id from standing_book_info where id=%1").arg(ui->tableWidget->item(row,0)->text());
    qDebug()<<"id sql:"<<sql;
    QVector<QVector<QString>> res;
    int rows = selectSQL(sql,res);
    if( rows > 0){
        // 存在,则更新内容即可
        qDebug()<<"id已存在,需更新数据即可";
        sql = QString("update standing_book_info set 审计类别='%1',审计年度='%2',审计单位='%3',审计方式='%4',责任主体名称='%5'"
                      ",审计项目='%6',审计项目名称='%7',问题类别='%8',问题定性='%9',问题描述='%10',问题定性法规依据='%11',涉及金额='%12',问题描述佐证资料='%13'"
                      ",审计期间已整改='%14',整改金额='%15',整改情况1='%16',整改情况佐证资料1='%17',整改结果='%18',整改完成时间='%19',尚未整改到位的原因='%20',整改预计完成时间='%21'"
                      ",整改情况2='%22',整改情况佐证资料2='%23',整改检查结果_检查时间='%24',整改检查结果_检查方式='%25',整改检查结果_检查结果='%26',已整改_纠正问题='%27',已整改_完善制度='%28',已整改_完成时间='%29'"
                      ",正在整改_主要原因='%30',正在整改_完成时限='%31',尚未整改_主要原因='%32',尚未整改_责任部门或责任人='%33',尚未整改_完成时限='%34',制度建设_修订制度='%35',制度建设_新增制度='%36',资金收回_挽回损失='%37'"
                      ",资金收回_其他='%38',资金收回_审减='%39' where id=%40").arg(ui->tableWidget->item(row,1)->text()).arg(ui->tableWidget->item(row,2)->text()).arg(ui->tableWidget->item(row,3)->text()).arg(ui->tableWidget->item(row,4)->text())
                .arg(ui->tableWidget->item(row,5)->text()).arg(ui->tableWidget->item(row,6)->text()).arg(ui->tableWidget->item(row,7)->text()).arg(ui->tableWidget->item(row,8)->text()).arg(ui->tableWidget->item(row,9)->text()).arg(ui->tableWidget->item(row,10)->text())
                .arg(ui->tableWidget->item(row,11)->text()).arg(ui->tableWidget->item(row,12)->text()).arg(ui->tableWidget->item(row,13)->text()).arg(ui->tableWidget->item(row,14)->text()).arg(ui->tableWidget->item(row,15)->text()).arg(ui->tableWidget->item(row,16)->text())
                .arg(ui->tableWidget->item(row,17)->text()).arg(ui->tableWidget->item(row,18)->text()).arg(ui->tableWidget->item(row,19)->text()).arg(ui->tableWidget->item(row,20)->text()).arg(ui->tableWidget->item(row,21)->text()).arg(ui->tableWidget->item(row,22)->text())
                .arg(ui->tableWidget->item(row,23)->text()).arg(ui->tableWidget->item(row,24)->text()).arg(ui->tableWidget->item(row,25)->text()).arg(ui->tableWidget->item(row,26)->text()).arg(ui->tableWidget->item(row,27)->text()).arg(ui->tableWidget->item(row,28)->text())
                .arg(ui->tableWidget->item(row,29)->text()).arg(ui->tableWidget->item(row,30)->text()).arg(ui->tableWidget->item(row,31)->text()).arg(ui->tableWidget->item(row,32)->text()).arg(ui->tableWidget->item(row,33)->text()).arg(ui->tableWidget->item(row,34)->text())
                .arg(ui->tableWidget->item(row,35)->text()).arg(ui->tableWidget->item(row,36)->text()).arg(ui->tableWidget->item(row,37)->text()).arg(ui->tableWidget->item(row,38)->text()).arg(ui->tableWidget->item(row,39)->text()).arg(ui->tableWidget->item(row,0)->text());
        qDebug()<<sql;
        rows = changeSQL(sql);
        if(rows > 0){
            qDebug()<<"change ok";
        }else{
            qDebug()<<"change fail";
        }
    }else{
        // rows为-1 说明sql语句有问题
        if(rows == -1){
            qDebug()<<"sql error";
            return -1;
        }
        // 不存在,则需要新增插入
        qDebug()<<"不存在id,插入数据";
        sql = QString("insert into standing_book_info (审计类别,审计年度,审计单位,审计方式,责任主体名称"
                      ",审计项目,审计项目名称,问题类别,问题定性,问题描述,问题定性法规依据,涉及金额,问题描述佐证资料"
                      ",审计期间已整改,整改金额,整改情况1,整改情况佐证资料1,整改结果,整改完成时间,尚未整改到位的原因,整改预计完成时间"
                      ",整改情况2,整改情况佐证资料2,整改检查结果_检查时间,整改检查结果_检查方式,整改检查结果_检查结果,已整改_纠正问题,已整改_完善制度,已整改_完成时间"
                      ",正在整改_主要原因,正在整改_完成时限,尚未整改_主要原因,尚未整改_责任部门或责任人,尚未整改_完成时限,制度建设_修订制度,制度建设_新增制度,资金收回_挽回损失"
                      ",资金收回_其他,资金收回_审减,log_time) values ('%1','%2','%3','%4','%5','%6','%7','%8','%9','%10','%11','%12','%13','%14','%15','%16','%17','%18','%19','%20','%21','%22','%23'"
                      ",'%24','%25','%26','%27','%28','%29','%30','%31','%32','%33','%34','%35','%36','%37','%38','%39','%40')").arg(ui->tableWidget->item(row,1)->text()).arg(ui->tableWidget->item(row,2)->text()).arg(ui->tableWidget->item(row,3)->text()).arg(ui->tableWidget->item(row,4)->text())
                .arg(ui->tableWidget->item(row,5)->text()).arg(ui->tableWidget->item(row,6)->text()).arg(ui->tableWidget->item(row,7)->text()).arg(ui->tableWidget->item(row,8)->text()).arg(ui->tableWidget->item(row,9)->text()).arg(ui->tableWidget->item(row,10)->text())
                .arg(ui->tableWidget->item(row,11)->text()).arg(ui->tableWidget->item(row,12)->text()).arg(ui->tableWidget->item(row,13)->text()).arg(ui->tableWidget->item(row,14)->text()).arg(ui->tableWidget->item(row,15)->text()).arg(ui->tableWidget->item(row,16)->text())
                .arg(ui->tableWidget->item(row,17)->text()).arg(ui->tableWidget->item(row,18)->text()).arg(ui->tableWidget->item(row,19)->text()).arg(ui->tableWidget->item(row,20)->text()).arg(ui->tableWidget->item(row,21)->text()).arg(ui->tableWidget->item(row,22)->text())
                .arg(ui->tableWidget->item(row,23)->text()).arg(ui->tableWidget->item(row,24)->text()).arg(ui->tableWidget->item(row,25)->text()).arg(ui->tableWidget->item(row,26)->text()).arg(ui->tableWidget->item(row,27)->text()).arg(ui->tableWidget->item(row,28)->text())
                .arg(ui->tableWidget->item(row,29)->text()).arg(ui->tableWidget->item(row,30)->text()).arg(ui->tableWidget->item(row,31)->text()).arg(ui->tableWidget->item(row,32)->text()).arg(ui->tableWidget->item(row,33)->text()).arg(ui->tableWidget->item(row,34)->text())
                .arg(ui->tableWidget->item(row,35)->text()).arg(ui->tableWidget->item(row,36)->text()).arg(ui->tableWidget->item(row,37)->text()).arg(ui->tableWidget->item(row,38)->text()).arg(ui->tableWidget->item(row,39)->text()).arg(QDateTime::currentDateTime().toString("yyyy/MM/dd HH:mm:ss"));
        qDebug()<<sql;
        rows = changeSQL(sql);
        if(rows > 0){
            qDebug()<<"insert ok";
        }else{
            qDebug()<<"insert fail";
        }
    }
    return rows;
}
// path 为文件完整路径
// id为子目录名字
int ThreeMergeProblemList::saveFile(QString path, QString id,QString &absSavePath,QString proName)
{
    // 根据id来指定子目录进行文件的拷贝和存储
    // 默认保存到当前evidence目录下的id子目录中
    QFile sourceFile(path);
    if(!sourceFile.exists()){
        qDebug()<<"target file not exist:"<<path;
        return -1;
    }
    QString curPath = QString("./evidence/%1_%2/").arg(id).arg(proName);
    QDir dir;
    if(!dir.exists(curPath)){
        // 则直接创建
        if(!dir.mkpath(curPath)){
            qDebug()<<"create path fail:"<<curPath;
            return 0; // 创建失败
        }
    }
    // 成功
    // 开始拷贝文件到指定位置
    QFileInfo finfo(path);
    QString distinationPath = curPath+finfo.fileName();
    if(sourceFile.copy(distinationPath)){
        qDebug()<<"copy ok:"<<distinationPath;
        absSavePath = distinationPath;
        return 1;
    }else{
        qDebug()<<"copy fail:"<<distinationPath<<sourceFile.errorString();
        return -2;
    }
}
// 使用web技术 加载pdf文件
int ThreeMergeProblemList::loadPdfFile(QString path)
{
//    QString dirPath = QApplication::applicationDirPath();
//    qDebug()<<"pdf:"<<path<<dirPath;
//    qDebug()<<QDir::currentPath();
//    qDebug()<<path.mid(1);
//    QString pdfJS = "file://"+QDir::currentPath()+"/web/viewer.html";
//    QString link = "?file=";
//    QString fullPath = pdfJS+link+QDir::currentPath()+path.mid(1);
//    qDebug()<<"fullPath"<<fullPath;
//    m_pdfView->page()->load(QUrl::fromUserInput(fullPath));
    return 0;
}
void ThreeMergeProblemList::initUi()
{
    initProblemRectBookUi(); // 初始化整改台账
    initProblemListUi(); // 初始化问题清单界面
    initProblemResultUi(); // 初始化问题处理结果界面
    ui->tableWidget->setMinimumHeight(500);  // 整改台账
    ui->tableWidget_2->setMinimumHeight(500); // 整改结果
    ui->tableWidget_3->setMinimumHeight(500); // 问题清单
    ui->tableWidget->setItemDelegateForColumn(1,m_fdd);
    // 自适应操作
    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
    ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
    ui->tableWidget->resizeColumnsToContents();
    ui->tableWidget->resizeRowsToContents();
    // 控制表头颜色
        // 自定义的方式有缺陷是容易让对应项锁死
    //m_custonHV = new CustomHeaderView(Qt::Horizontal,ui->tableWidget);
    //ui->tableWidget->setHorizontalHeader(m_custonHV);
        // 给指定项改背景颜色
    //ui->tableWidget->horizontalHeaderItem(1)->setBackground(QBrush(Qt::red));
    //ui->tableWidget->horizontalHeaderItem(3)->setBackground(QBrush(Qt::blue));
//    QTableWidgetItem *item_1 = new QTableWidgetItem("审计类别");
//    item_1->setForeground(QBrush(QColor("#FF1493")));
//    ui->tableWidget->setHorizontalHeaderItem(1,item_1);
    for(int i=0;i<14;++i){
        QString label = ui->tableWidget->horizontalHeaderItem(i)->text();
        QTableWidgetItem *item_1 = new QTableWidgetItem(label);
        item_1->setForeground(QBrush(QColor("#ff00ff")));
        ui->tableWidget->setHorizontalHeaderItem(i,item_1);
        //ui->tableWidget->setItem(1,i,item_1);
    }
    for(int i=14;i<14+10;++i){
        QString label = ui->tableWidget->horizontalHeaderItem(i)->text();
        QTableWidgetItem *item_1 = new QTableWidgetItem(label);
        item_1->setForeground(QBrush(QColor("#00aaff")));
        ui->tableWidget->setHorizontalHeaderItem(i,item_1);
    }
    for(int i=24;i<24+3;++i){
        QString label = ui->tableWidget->horizontalHeaderItem(i)->text();
        QTableWidgetItem *item_1 = new QTableWidgetItem(label);
        item_1->setForeground(QBrush(QColor("#00aa00")));
        ui->tableWidget->setHorizontalHeaderItem(i,item_1);
    }
    for(int i=27;i<27+8;++i){
        QString label = ui->tableWidget->horizontalHeaderItem(i)->text();
        QTableWidgetItem *item_1 = new QTableWidgetItem(label);
        item_1->setForeground(QBrush(QColor("#007a50")));
        ui->tableWidget->setHorizontalHeaderItem(i,item_1);
    }
    for(int i=35;i<35+5;++i){
        QString label = ui->tableWidget->horizontalHeaderItem(i)->text();
        QTableWidgetItem *item_1 = new QTableWidgetItem(label);
        item_1->setForeground(QBrush(QColor("#500a50")));
        ui->tableWidget->setHorizontalHeaderItem(i,item_1);
    }
    // 处理具体某列的情况
        // 审计类别
    QStringList nwLabels;
    nwLabels << "内审"<<"外审";
    m_cbb_nw = new ComboBoxDelegate(nwLabels,this);
    ui->tableWidget->setItemDelegateForColumn(1,m_cbb_nw);
        // 审计年度
    m_date_year = new DateDelegate(this);
    ui->tableWidget->setItemDelegateForColumn(2,m_date_year);
        // 审计单位
    QStringList comLabels;
    comLabels << "审计局"<<"审计厅"<<"审计署"<<"其他";
    m_cbb_company = new ComboBoxDelegate(comLabels,this);
    ui->tableWidget->setItemDelegateForColumn(3,m_cbb_company);
        // 审计方式
    QStringList wayLabels;
    wayLabels << "就地审计"<<"报送审计";
    m_cbb_way = new ComboBoxDelegate(wayLabels,this);
    ui->tableWidget->setItemDelegateForColumn(4,m_cbb_way);
        // 审计项目
    QStringList proLabels;
    proLabels <<"  "<< "贯彻落实国家重大政策措施审计"<<"财政财务收支审计"<<"固定资产投资审计"<<"内部控制和风险管理审计"
              <<"经济责任审计"<<"信息系统审计"<<"境外审计"<<"其他";
    m_cbb_way = new ComboBoxDelegate(proLabels,this);
    ui->tableWidget->setItemDelegateForColumn(6,m_cbb_way);
        // 问题描述佐证资料(上传取证单) 录入或者上传
    //ui->tableWidget->setItemDelegateForColumn(13,m_fdd);
    QStringList fwLabels;
    fwLabels << "录入(直接输入后回车即可)"<<"上传";
    m_cbb_file_wri = new ComboBoxDelegate(fwLabels,this,true);
    ui->tableWidget->setItemDelegateForColumn(13+2,m_cbb_file_wri);
    ui->tableWidget->setItemDelegateForColumn(17+2,m_cbb_file_wri);
    ui->tableWidget->setItemDelegateForColumn(23+2,m_cbb_file_wri);
        // 处理年月日时间
    m_date_ymd = new DateDelegate(this,"yyyy/MM/dd");
    ui->tableWidget->setItemDelegateForColumn(19+2,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(21+2,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(24+2,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(29+2,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(31+2,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(34+2,m_date_ymd);
    // 将标题导入第三行
    for(int i=0;i<ui->tableWidget->columnCount();++i){
        QString label = ui->tableWidget->horizontalHeaderItem(i)->text();
        QTableWidgetItem *item = new QTableWidgetItem(label);
        if(i < 16){
            item->setBackground(QBrush(QColor("#ff00ff")));
        }else if(i < 16+10){
            item->setBackground(QBrush(QColor("#00aaff")));
        }
        ui->tableWidget->setItem(2,i,item);
    }
    // 并且禁用编辑功能
    //ui->tableWidget->setItemDelegateForRow(1,m_noEdit);
    //ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    m_noEdit = new TableItemDelegate;
    ui->tableWidget->setItemDelegateForRow(0,m_noEdit);
    ui->tableWidget->setItemDelegateForRow(1,m_noEdit);
    ui->tableWidget->setItemDelegateForRow(2,m_noEdit);
    // 合并第一行的情况,进行分类
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("发现问题"));
    ui->tableWidget->setItem(0,18,new QTableWidgetItem("发现问题22"));
    ui->tableWidget->setSpan(0,1,2,15);
    ui->tableWidget->item(0,1)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->item(0,1)->font().setBold(true);
    // 加载公司名
    readCompanyFromSQL();
}
void ThreeMergeProblemList::initProblemListUi()
{
    ui->tableWidget_3->setItem(0,0,new QTableWidgetItem("问题清单"));
    ui->tableWidget_3->setSpan(0,0,3,2);
    ui->tableWidget_3->item(0,0)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_3->setItem(0,2,new QTableWidgetItem("整改检查结果及对账销号清单"));
    ui->tableWidget_3->setSpan(0,2,1,12);
    ui->tableWidget_3->item(0,2)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_3->setItem(1,2,new QTableWidgetItem("整改检查结果"));
    ui->tableWidget_3->setSpan(1,2,2,2);
    ui->tableWidget_3->item(1,2)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_3->setItem(1,4,new QTableWidgetItem("整改类型"));
    ui->tableWidget_3->setSpan(1,4,1,8);
    ui->tableWidget_3->item(1,4)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_3->setItem(2,4,new QTableWidgetItem("已整改"));
    ui->tableWidget_3->setSpan(2,4,1,3);
    ui->tableWidget_3->item(2,4)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_3->setItem(2,7,new QTableWidgetItem("正在整改"));
    ui->tableWidget_3->setSpan(2,7,1,2);
    ui->tableWidget_3->item(2,7)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_3->setItem(2,9,new QTableWidgetItem("尚未整改"));
    ui->tableWidget_3->setSpan(2,9,1,3);
    ui->tableWidget_3->item(2,9)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_3->setItem(1,12,new QTableWidgetItem("是否销号"));
    ui->tableWidget_3->setSpan(1,12,3,1);
    ui->tableWidget_3->item(1,12)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_3->setItem(1,13,new QTableWidgetItem("销号时间"));
    ui->tableWidget_3->setSpan(1,13,3,1);
    ui->tableWidget_3->item(1,13)->setTextAlignment(Qt::AlignCenter);
    // 下级列标题 12个
    ui->tableWidget_3->setItem(3,0,new QTableWidgetItem("序号"));
    ui->tableWidget_3->setItem(3,1,new QTableWidgetItem("摘要"));
    ui->tableWidget_3->setItem(3,2,new QTableWidgetItem("检查时间"));
    ui->tableWidget_3->setItem(3,3,new QTableWidgetItem("检查方式"));
    ui->tableWidget_3->setItem(3,4,new QTableWidgetItem("纠正问题"));
    ui->tableWidget_3->setItem(3,5,new QTableWidgetItem("完善制度"));
    ui->tableWidget_3->setItem(3,6,new QTableWidgetItem("完成时间"));
    ui->tableWidget_3->setItem(3,7,new QTableWidgetItem("主要原因"));
    ui->tableWidget_3->setItem(3,8,new QTableWidgetItem("完成时限"));
    ui->tableWidget_3->setItem(3,9,new QTableWidgetItem("主要原因"));
    ui->tableWidget_3->setItem(3,10,new QTableWidgetItem("责任部门或责任人"));
    ui->tableWidget_3->setItem(3,11,new QTableWidgetItem("完成时限"));
    // 禁止编辑
    for(int i=0;i<4;++i){
        ui->tableWidget_3->setItemDelegateForRow(i,new TableItemDelegate());
    }
    // 右键菜单
    m_menu = new QMenu(this);
    m_menu->addAction("删除当前行");
    ui->tableWidget_3->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->tableWidget_3,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenuSlot(QPoint)));
    connect(m_menu->actions().at(0),SIGNAL(triggered(bool)),this,SLOT(deleteAction()));
}
void ThreeMergeProblemList::initProblemResultUi()
{
    ui->tableWidget_2->setSpan(0,0,1,5);
    ui->tableWidget_2->setItem(0,0,new QTableWidgetItem("整改成果"));
    ui->tableWidget_2->item(0,0)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_2->setSpan(1,0,1,2);
    ui->tableWidget_2->setItem(1,0,new QTableWidgetItem("制度建设"));
    ui->tableWidget_2->item(1,0)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_2->setSpan(1,2,1,3);
    ui->tableWidget_2->setItem(1,2,new QTableWidgetItem("资金收回"));
    ui->tableWidget_2->item(1,2)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget_2->setSpan(0,5,3,1);
    ui->tableWidget_2->setItem(0,5,new QTableWidgetItem("处理人"));
    ui->tableWidget_2->setSpan(0,6,3,1);
    ui->tableWidget_2->setItem(0,6,new QTableWidgetItem("宣贯培训"));
    ui->tableWidget_2->setSpan(0,7,3,1);
    ui->tableWidget_2->setItem(0,7,new QTableWidgetItem("其他"));
    ui->tableWidget_2->setSpan(0,8,3,1);
    ui->tableWidget_2->setItem(0,8,new QTableWidgetItem("审核结果"));
    ui->tableWidget_2->setSpan(0,9,3,1);
    ui->tableWidget_2->setItem(0,9,new QTableWidgetItem("注销"));
    // 下级标题
    ui->tableWidget_2->setItem(2,0,new QTableWidgetItem("修订制度"));
    ui->tableWidget_2->setItem(2,1,new QTableWidgetItem("新增制度"));
    ui->tableWidget_2->setItem(2,2,new QTableWidgetItem("挽回损失"));
    ui->tableWidget_2->setItem(2,3,new QTableWidgetItem("剔除"));
    ui->tableWidget_2->setItem(2,4,new QTableWidgetItem("审减"));
    // 禁止编辑
    for(int i=0;i<3;++i){
        ui->tableWidget_2->setItemDelegateForRow(i,new TableItemDelegate());
    }
    // 右键菜单
    m_menuResult = new QMenu(this);
    m_menuResult->addAction("删除当前行");
    ui->tableWidget_2->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->tableWidget_2,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenuSlotResult(QPoint)));
    connect(m_menuResult->actions().at(0),SIGNAL(triggered(bool)),this,SLOT(deleteActionResult()));
    // 加载下拉框的公司名
    //readCompanyFromSQL();
}
void ThreeMergeProblemList::initProblemRectBookUi()
{
    // 右键菜单
    m_menuRectBook = new QMenu(this);
    m_menuRectBook->addAction("删除当前行");
    m_menuRectBook->addAction("保存当前行");
    m_menuRectBook->addAction("查看已存佐证");
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->tableWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenuSlotRectBook(QPoint)));
    connect(m_menuRectBook->actions().at(0),SIGNAL(triggered(bool)),this,SLOT(deleteActionRectBook()));
    connect(m_menuRectBook->actions().at(1),SIGNAL(triggered(bool)),this,SLOT(saveActionRectBook()));
    connect(m_menuRectBook->actions().at(2),SIGNAL(triggered(bool)),this,SLOT(showSaveFile()));
}
void ThreeMergeProblemList::readCompanyFromSQL()
{
    ui->comboBox_company->clear();
    QString sql = "select DISTINCT name from all_company_info";
    QSqlQuery query;
    if(query.exec(sql)){
        qDebug()<<QString("select DISTINCT all_company_info ok");
        while(query.next()){ // 添加公司名
            QString name = query.value(0).toString();
            ui->comboBox_company->addItem(name);
        }
    }else{
        qDebug()<<QString("select all_company_info fail...")<<query.lastError().text();
    }
}
void ThreeMergeProblemList::loadDataFromSQL(const QString &arg1)
{
    // 问题台账
    // 问题清单
    // 要清除上一家公司的数据
    ui->tableWidget_3->setRowCount(4);
    ui->tableWidget_3->setRowCount(7);
    // 加载表格信息
    qDebug()<<"current :"<<arg1;
    QString sql = QString("select * from problem_list_info where name='%1'").arg(arg1);
    QSqlQuery query;
    if(query.exec(sql)){
        qDebug()<<QString("select problem_list_info ok");
        int row=0;
        while(query.next()){ // 添加行数据
            for(int i=0;i<14;++i){
                ui->tableWidget_3->setItem(row+4,i,new QTableWidgetItem(query.value(2+i).toString()));
            }
            row++;
            ui->tableWidget_3->setRowCount(ui->tableWidget_3->rowCount()+1); // 增加一个新的行
        }
        qDebug()<<"row:"<<row;
    }else{
        qDebug()<<QString("select problem_list_info fail...")<<query.lastError().text();
    }
    // 问题整改结果
    // 要清除上一家公司的数据
    ui->tableWidget_2->setRowCount(3);
    ui->tableWidget_2->setRowCount(6);
    // 加载表格信息
    //qDebug()<<"current :"<<arg1;
    sql = QString("select * from rectify_result_info where name='%1'").arg(arg1);
    //QString sql = QString("select * from rectify_result_info where name='%1'").arg(arg1);
    //QSqlQuery query;
    if(query.exec(sql)){
        qDebug()<<QString("select rectify_result_info ok");
        int row=0;
        while(query.next()){ // 添加行数据
            for(int i=0;i<10;++i){
                ui->tableWidget_2->setItem(row+3,i,new QTableWidgetItem(query.value(2+i).toString()));
            }
            row++;
            ui->tableWidget_2->setRowCount(ui->tableWidget_2->rowCount()+1); // 增加一个新的行
        }
        qDebug()<<"row:"<<row;
    }else{
        qDebug()<<QString("select rectify_result_info fail...")<<query.lastError().text();
    }
}
void ThreeMergeProblemList::showMenuSlot(QPoint)
{
    m_menu->exec(QCursor::pos());
}
void ThreeMergeProblemList::deleteAction()
{
    int row = ui->tableWidget_3->currentRow();
    if(row>=4){
        qDebug()<<"ok";
        ui->tableWidget_3->removeRow(row);
    }else{
        qDebug()<<"fail";
    }
}
void ThreeMergeProblemList::showMenuSlotResult(QPoint)
{
    m_menuResult->exec(QCursor::pos());
}
void ThreeMergeProblemList::deleteActionResult()
{
    int row = ui->tableWidget_2->currentRow();
    if(row>=3){
        qDebug()<<"ok";
        ui->tableWidget_2->removeRow(row);
    }else{
        qDebug()<<"fail";
    }
}
void ThreeMergeProblemList::showMenuSlotRectBook(QPoint)
{
    m_menuRectBook->exec(QCursor::pos());
}
void ThreeMergeProblemList::deleteActionRectBook()
{
    int row = ui->tableWidget->currentRow();
    if(row>=0){
        qDebug()<<"delete ok";
        ui->tableWidget->removeRow(row);
    }else{
        qDebug()<<"delete fail";
    }
}
void ThreeMergeProblemList::saveActionRectBook()
{
    // 单行保存,先判断id号是不是存在,存在则是更新,不存在则是插入
    int row = ui->tableWidget->currentRow();
    auto item = ui->tableWidget->currentItem();
    if(row>=0 && item){
        qDebug()<<"save ok"<< row << item->row()<<item->column();
        int rows = saveDataLine(row);
        if(rows>0){
            // 需要将文件拷贝到id目录
            QString fpath = ui->tableWidget->item(row,13+2)->text();
            QString spath = ui->tableWidget->item(row,17+2)->text();
            QString tpath = ui->tableWidget->item(row,23+2)->text();
            QString fid = ui->tableWidget->item(row,0)->text();
            QString proName = ui->tableWidget->item(row,7)->text(); // 项目名称
            qDebug()<<"拷贝文件:"<<fid<<proName<<fpath;
            QString absSavePath1,absSavePath2,absSavePath3;
            int sflag1 = saveFile(fpath,fid,absSavePath1,proName); // 保存第一个
            if(sflag1==1){
                ui->tableWidget->setItem(row,13+2,new QTableWidgetItem(absSavePath1));
            }
            int sflag2 = saveFile(spath,fid,absSavePath2,proName); // 保存第二个
            if(sflag2==1){
                ui->tableWidget->setItem(row,17+2,new QTableWidgetItem(absSavePath2));
            }
            int sflag3 = saveFile(tpath,fid,absSavePath3,proName); // 保存第三个
            if(sflag3==1){
                ui->tableWidget->setItem(row,23+2,new QTableWidgetItem(absSavePath3));
            }
            qDebug()<<"save falg:"<<sflag1<<sflag2<<sflag3;
            if(sflag1 || sflag2 || sflag3){
                saveDataLine(row);
            }
            QMessageBox::information(this,"保存成功","数据写入成功");
        }else{
            QMessageBox::information(this,"保存失败","数据写入失败,请检查是否每项都有数据了");
        }
    }else{
        qDebug()<<"save fail";
        QMessageBox::information(this,"保存失败","没有指定目标行或有空项...请选择有内容的目标行保存");
    }
}
// 增加到第一个表格的行
void ThreeMergeProblemList::on_pushButton_addRow_3_clicked()
{
    ui->tableWidget->insertRow(ui->tableWidget->rowCount());
}
void ThreeMergeProblemList::on_pushButton_addRow_2_clicked()
{
    ui->tableWidget_3->insertRow(ui->tableWidget_3->rowCount());
}
void ThreeMergeProblemList::on_pushButton_addRow_clicked()
{
    ui->tableWidget_2->insertRow(ui->tableWidget_2->rowCount());
}
void ThreeMergeProblemList::on_comboBox_company_currentIndexChanged(const QString &arg1)
{
    loadDataFromSQL(arg1);
}
void ThreeMergeProblemList::on_pushButton_save_2_clicked()
{
    // 问题清单保存
    QString sql = QString("insert into problem_list_info (name,序号,摘要,检查时间,检查方式,纠正问题,完善制度\
,完成时间,主要原因,完成时限,主要原因1,责任部门或责任人,完成时限1,是否销号,销号时间) values ");
    QString name = ui->comboBox_company->currentText();
    for(int i=4;i<ui->tableWidget_3->rowCount();++i){
        QStringList labels;
        for(int j=0;j<ui->tableWidget_3->columnCount();++j){
            QTableWidgetItem *item = ui->tableWidget_3->item(i,j);;
            qDebug() <<i<<j <<item;
            if(item){
                qDebug()<<"OK";
                labels<<item->data(Qt::EditRole).toString();
            }else{
                labels<<" ";
            }
        }
        qDebug()<<labels;
        if(labels.at(0)==" ")continue;
        if(name.size()==0){
            QMessageBox::information(this,"单位信息为空 ","请输入单位名称");
            continue;
        }
        sql += QString("('%1',").arg(name);
        for(int k=0;k<labels.size()-1;++k){
            sql += QString("'%1',").arg(labels[k]);
        }
        sql += QString("'%1'),").arg(labels.back());
    }
    sql = sql.left(sql.size()-1); // 去掉最后一个逗号
    qDebug()<<"sql="<<sql;
    QSqlQuery query;
    if(query.exec(sql))
    {
      qDebug()<<QString("insert  problem_list_info ok...");
      QMessageBox::information(this,"OK","添加成功");
    }else{
      qDebug()<<QString("insert problem_list_info fail...")<<query.lastError().text();
      QMessageBox::information(this,"添加失败","可能添加的数据不全导致的,得确认每行的首项有数据");
    }
}
void ThreeMergeProblemList::on_pushButton_save_clicked()
{
    // 问题整改保存
    QString sql = QString("insert into rectify_result_info (name,修订制度,新增制度,挽回损失,剔除,审减,处理人,宣贯培训,其他,审核结果,注销) values ");
    QString name = ui->comboBox_company->currentText();
    for(int i=3;i<ui->tableWidget_2->rowCount();++i){
        QStringList labels;
        for(int j=0;j<ui->tableWidget_2->columnCount();++j){
            QTableWidgetItem *item = ui->tableWidget_2->item(i,j);;
            qDebug() <<i<<j <<item;
            if(item){
                qDebug()<<"OK";
                labels<<item->data(Qt::EditRole).toString();
            }else{
                labels<<" ";
            }
        }
        qDebug()<<labels;
        if(labels.at(0)==" ")continue;
        if(name.size()==0){
            QMessageBox::information(this,"单位信息为空 ","请输入单位名称");
            continue;
        }
        sql += QString("('%1',").arg(name);
        for(int k=0;k<labels.size()-1;++k){
            sql += QString("'%1',").arg(labels[k]);
        }
        sql += QString("'%1'),").arg(labels.back());
    }
    sql = sql.left(sql.size()-1); // 去掉最后一个逗号
    qDebug()<<"sql="<<sql;
    QSqlQuery query;
    if(query.exec(sql))
    {
      qDebug()<<QString("insert  rectify_result_info ok...");
      QMessageBox::information(this,"OK","添加成功");
    }else{
      qDebug()<<QString("insert rectify_result_info fail...")<<query.lastError().text();
      QMessageBox::information(this,"添加失败","可能添加的数据不全导致的,得确认每行的首项有数据");
    }
}
void ThreeMergeProblemList::on_pushButton_search_clicked()
{
    QString curText = ui->comboBox_standing_book_condt->currentText();
    QString sql = "select * from standing_book_info ";
    QString condition = "";
    if(curText == "全部" || strcmp(curText.toLocal8Bit().data(),"全部")==0){
        qDebug()<<"全部";
    }else if(curText == "审计类别" || strcmp(curText.toLocal8Bit().data(),"审计类别")==0){
        qDebug()<<"审计类别";
        condition = QString(" where 审计类别='%1'").arg(ui->lineEdit_sbook_condition->text());
    }else if(curText == "审计年度" || strcmp(curText.toLocal8Bit().data(),"审计年度")==0){
        qDebug()<<"审计年度";
        condition = QString(" where 审计年度='%1'").arg(ui->lineEdit_sbook_condition->text());
    }else if(curText == "问题类别" || strcmp(curText.toLocal8Bit().data(),"问题类别")==0){
        qDebug()<<"问题类别";
        condition = QString(" where 问题类别='%1'").arg(ui->lineEdit_sbook_condition->text());
    }else if(curText == "审计方式" || strcmp(curText.toLocal8Bit().data(),"审计方式")==0){
        qDebug()<<"审计方式";
        condition = QString(" where 审计方式='%1'").arg(ui->lineEdit_sbook_condition->text());
    }else if(curText == "责任主体名称" || strcmp(curText.toLocal8Bit().data(),"责任主体名称")==0){
        qDebug()<<"责任主体名称";
        condition = QString(" where 责任主体名称='%1'").arg(ui->lineEdit_sbook_condition->text());
    }else if(curText == "审计单位" || strcmp(curText.toLocal8Bit().data(),"审计单位")==0){
        qDebug()<<"审计单位";
        condition = QString(" where 审计单位='%1'").arg(ui->lineEdit_sbook_condition->text());
    }else if(curText == "涉及金额" || strcmp(curText.toLocal8Bit().data(),"涉及金额")==0){
        qDebug()<<"涉及金额";
        condition = QString(" where 涉及金额 <=%1").arg(ui->lineEdit_sbook_condition->text());
    }else if(curText == "整顿金额" || strcmp(curText.toLocal8Bit().data(),"整顿金额")==0){
        qDebug()<<"整顿金额";
        condition = QString(" where 整顿金额 <=%1").arg(ui->lineEdit_sbook_condition->text());
    }
    sql += condition;
    qDebug()<<sql;
    QVector<QVector<QString>> res;
    int rows = selectSQL(sql,res);
    if(rows > 0){
        ui->tableWidget->setRowCount(rows);
        for(int i=0;i<res.size();++i){
            for(int j=0;j<res.at(0).size()-1;++j){ // 去掉记录时间
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(res[i][j]));
            }
        }
    }else{
        QMessageBox::information(this,"查询失败","可能查询的内容不正确或者没有记录相应的数据");
    }
}
void ThreeMergeProblemList::on_pushButton_save_3_clicked()
{
    int hasContentRow=0;
    for(int i=0;i<ui->tableWidget->rowCount();++i){
        int row = saveDataLine(i);
        if(row > 0) {
            hasContentRow++;
            // 需要将文件拷贝到id目录
            QString fpath = ui->tableWidget->item(i,13)->text();
            QString spath = ui->tableWidget->item(i,17)->text();
            QString tpath = ui->tableWidget->item(i,23)->text();
            QString fid = ui->tableWidget->item(i,0)->text();
            QString proName = ui->tableWidget->item(i,7)->text(); // 项目名称
            qDebug()<<"拷贝文件:"<<fid<<proName<<fpath;
            QString absSavePath1,absSavePath2,absSavePath3;
            int sflag1 = saveFile(fpath,fid,absSavePath1,proName); // 保存第一个
            if(sflag1==1){
                ui->tableWidget->setItem(i,13+2,new QTableWidgetItem(absSavePath1));
            }
            int sflag2 = saveFile(spath,fid,absSavePath2,proName); // 保存第二个
            if(sflag2==1){
                ui->tableWidget->setItem(i,17+2,new QTableWidgetItem(absSavePath2));
            }
            int sflag3 = saveFile(tpath,fid,absSavePath3,proName); // 保存第三个
            if(sflag3==1){
                ui->tableWidget->setItem(i,23+2,new QTableWidgetItem(absSavePath3));
            }
            qDebug()<<"save falg:"<<sflag1<<sflag2<<sflag3;
            if(sflag1 || sflag2 || sflag3){
                saveDataLine(i);
            }
        }
    }
    QMessageBox::information(this,"保存提示",QString("总行数为%1,成功%2行,失败%3行。").arg(ui->tableWidget->rowCount())
                             .arg(hasContentRow).arg(ui->tableWidget->rowCount()-hasContentRow));
}
void ThreeMergeProblemList::on_pushButton_moreSearch_clicked()
{
    QString sql = "select * from standing_book_info ";
    QVector<QString> vecCon; // 保存所有条件
    if(ui->checkBox_type->isChecked()){
        QString condition= QString(" 审计类别='%1' ").arg(ui->comboBox_type->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_year->isChecked()){
        QString condition= QString(" 审计年度='%1' ").arg(ui->dateEdit_year->text());
        vecCon.append(condition);
    }
    if(ui->checkBox_com->isChecked()){
        QString condition= QString(" 审计单位='%1' ").arg(ui->comboBox_com->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_way->isChecked()){
        QString condition= QString(" 审计方式='%1' ").arg(ui->comboBox_way->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_mainCom->isChecked()){
        QString condition= QString(" 责任主体名称='%1' ").arg(ui->comboBox_mainCom->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_pro->isChecked()){
        QString condition= QString(" 审计项目='%1' ").arg(ui->comboBox_pro->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_proName->isChecked()){
        QString condition= QString(" 审计项目名称='%1' ").arg(ui->comboBox_proName->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_qtype->isChecked()){
        QString condition= QString(" 问题类别='%1' ").arg(ui->comboBox_qtype->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_qdx->isChecked()){
        QString condition= QString(" 问题定性='%1'").arg(ui->comboBox_qdx->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_about_money->isChecked()){
        QString condition= QString(" 涉及金额 >= %1 and 涉及金额 <= %2").arg(ui->comboBox_about_bgMonney->currentText()).arg(ui->comboBox_about_edMoney->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_changeMoney->isChecked()){
        QString condition= QString(" 整改金额>=%1 and 整改金额<=%2").arg(ui->comboBox_change_bgMoney->currentText()).arg(ui->comboBox_change_edMoney->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_change_over_time->isChecked()){
        QString condition= QString(" 整改完成时间='%1' ").arg(ui->dateEdit_change_over_time->text());
        vecCon.append(condition);
    }
    if(ui->checkBox_change_expected_time->isChecked()){
        QString condition= QString(" 整改预计完成时间='%1' ").arg(ui->dateEdit_change_expected_time->text());
        vecCon.append(condition);
    }
    QString condition;
    if(vecCon.size() == 1){
        condition += QString(" where %1").arg(vecCon.at(0));
    }else if(vecCon.size() > 1){
        condition += QString(" where %1").arg(vecCon.at(0));
        for(int i=1;i<vecCon.size();++i){
            condition += QString(" and %1 ").arg(vecCon.at(i));
        }
    }
    sql += condition;
    qDebug()<<sql;
    QVector<QVector<QString>> res;
    int rows = selectSQL(sql,res);
    if(rows > 0){
        ui->tableWidget->setRowCount(rows);
        for(int i=0;i<res.size();++i){
            for(int j=0;j<res.at(0).size()-1;++j){ // 去掉记录时间
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(res[i][j]));
            }
        }
    }else{
        QMessageBox::information(this,"查询失败","可能查询的内容不正确或者没有记录相应的数据");
    }
}
void ThreeMergeProblemList::on_pushButton_multiSearch_clicked()
{
    static int cnt=0;
    if(cnt%2 == 1){
        ui->groupBox->hide();
        ui->pushButton_multiSearch->setText("多维度数据查询👆");
    }else{
        ui->groupBox->show();
        ui->pushButton_multiSearch->setText("多维度数据查询👇");
    }
    cnt++;
}
void ThreeMergeProblemList::showSaveFile()
{
    int row = ui->tableWidget->currentRow();
    auto item = ui->tableWidget->currentItem();
    if(row>=0 && item){
        qDebug()<<"row"<<row;
        // 取下标  13  17  23
        auto item_13 = ui->tableWidget->item(row,13+2);
        auto item_17 = ui->tableWidget->item(row,17+2);
        auto item_23 = ui->tableWidget->item(row,23+2);
        if(item_13){
            qDebug()<<item_13->text();
            QString text = item_13->text();
            QStringList listPath = text.split("/");
            if(listPath.size() > 2){
                qDebug()<<"发现文件"<<listPath.back();
                QString type = listPath.back().split(".").back();
                qDebug()<<"type"<<type;
                if(type == "pdf"){
                    loadPdfFile(text);
                }
            }
        }
        if(item_17){
            qDebug()<<item_17->text();
        }
        if(item_23){
            qDebug()<<item_23->text();
        }
    }
}
void ThreeMergeProblemList::updateComboList(QMap<QString, ComInfo> & nameAndComInfos)
{
    ui->comboBox_company->clear();
    for(auto it = nameAndComInfos.begin();it != nameAndComInfos.end();++it){
        ui->comboBox_company->addItem(it.key());
    }
}
void ThreeMergeProblemList::on_pushButton_save_export_clicked()
{
    qDebug()<<"三合一导出保存";
}