wumu
2025-04-27 20ffcfb5507daf34f81346ca3dfa4c031e7b2fe3
internal_system_v1/threemergeproblemlist.cpp
@@ -6,6 +6,12 @@
#include <QMessageBox>
#include <QDir>
#include <QFileDevice>
#include <QDesktopServices>
#include <QFileDialog>
#include "noedititemdelegate.h"
#pragma execution_character_set("utf-8")
ThreeMergeProblemList::ThreeMergeProblemList(QWidget *parent) :
    QMainWindow(parent),
@@ -14,6 +20,7 @@
    ui->setupUi(this);
    m_fdd = new FileDialogDelegate;
    //m_noEdit = new ThreeComboBox;
    ui->statusbar->hide();
    ui->menubar->hide();
@@ -40,10 +47,15 @@
    ui->groupBox->hide(); // 首次先隐藏
    // pdf文件相关
    //m_pdfView = new QWebEngineView();
}
ThreeMergeProblemList::~ThreeMergeProblemList()
{
    //delete m_noEdit;
    delete ui;
}
@@ -95,6 +107,15 @@
        qDebug()<<"当前行首为空"<<row;
        return 0;
    }
    // 处理为空的非首列单元,自动补零
    for(int i=3;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;
@@ -104,17 +125,17 @@
        // 存在,则更新内容即可
        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())
                      ",审计项目='%6',审计项目名称='%7',问题类别='%8',问题定性='%9',问题描述='%10',问题定性法规依据='%11',审计发现问题金额定性='%12',审计发现问题个数定性='%13',涉及金额=%14,问题描述佐证资料='%15'"
                      ",审计期间已整改='%16',整改金额=%17,整改情况1='%18',整改情况佐证资料1='%19',整改结果='%20',整改完成时间='%21',尚未整改到位的原因='%22',整改预计完成时间='%23'"
                      ",整改情况2='%24',整改情况佐证资料2='%25',处分类型='%26',处分人数=%27,移送详细信息='%28',处理结果='%29',涉案人员=%30,整改检查结果_检查时间='%31',整改检查结果_检查方式='%32',整改检查结果_检查结果='%33',已整改_纠正问题='%34',已整改_完善制度='%35',已整改_完成时间='%36'"
                      ",正在整改_主要原因='%37',正在整改_完成时限='%38',尚未整改_主要原因='%39',尚未整改_责任部门或责任人='%40',尚未整改_完成时限='%41',整改成果_金额类整改成果='%42',整改成果_金额=%43,整改成果_非金额类整改成果='%44'"
                      ",整改成果_数量=%45 where id=%46").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());
                .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,12+2)->text().toDouble()).arg(ui->tableWidget->item(row,13+2)->text()).arg(ui->tableWidget->item(row,14+2)->text()).arg(ui->tableWidget->item(row,15+2)->text().toDouble()).arg(ui->tableWidget->item(row,16+2)->text())
                .arg(ui->tableWidget->item(row,17+2)->text()).arg(ui->tableWidget->item(row,18+2)->text()).arg(ui->tableWidget->item(row,19+2)->text()).arg(ui->tableWidget->item(row,20+2)->text()).arg(ui->tableWidget->item(row,21+2)->text()).arg(ui->tableWidget->item(row,22+2)->text())
                .arg(ui->tableWidget->item(row,23+2)->text()).arg(ui->tableWidget->item(row,24+2)->text()).arg(ui->tableWidget->item(row,25+2)->text().toInt()).arg(ui->tableWidget->item(row,26+2)->text()).arg(ui->tableWidget->item(row,27+2)->text()).arg(ui->tableWidget->item(row,28+2)->text().toInt()).arg(ui->tableWidget->item(row,24+5+2)->text()).arg(ui->tableWidget->item(row,25+5+2)->text()).arg(ui->tableWidget->item(row,26+5+2)->text()).arg(ui->tableWidget->item(row,27+5+2)->text()).arg(ui->tableWidget->item(row,28+5+2)->text())
                .arg(ui->tableWidget->item(row,29+5+2)->text()).arg(ui->tableWidget->item(row,30+5+2)->text()).arg(ui->tableWidget->item(row,31+5+2)->text()).arg(ui->tableWidget->item(row,32+5+2)->text()).arg(ui->tableWidget->item(row,33+5+2)->text()).arg(ui->tableWidget->item(row,34+5+2)->text())
                .arg(ui->tableWidget->item(row,35+5+2)->text()).arg(ui->tableWidget->item(row,36+5+2)->text().toDouble()).arg(ui->tableWidget->item(row,37+5+2)->text()).arg(ui->tableWidget->item(row,38+5+2)->text().toInt()).arg(ui->tableWidget->item(row,0)->text());
        qDebug()<<sql;
        rows = changeSQL(sql);
        if(rows > 0){
@@ -131,18 +152,18 @@
        // 不存在,则需要新增插入
        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())
                      ",整改情况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','%41','%42',%43,'%44',%45,'%46')").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"));
                .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,12+2)->text().toDouble()).arg(ui->tableWidget->item(row,13+2)->text()).arg(ui->tableWidget->item(row,14+2)->text()).arg(ui->tableWidget->item(row,15+2)->text().toDouble()).arg(ui->tableWidget->item(row,16+2)->text())
                .arg(ui->tableWidget->item(row,17+2)->text()).arg(ui->tableWidget->item(row,18+2)->text()).arg(ui->tableWidget->item(row,19+2)->text()).arg(ui->tableWidget->item(row,20+2)->text()).arg(ui->tableWidget->item(row,21+2)->text()).arg(ui->tableWidget->item(row,22+2)->text())
                .arg(ui->tableWidget->item(row,23+2)->text()).arg(ui->tableWidget->item(row,24+2)->text()).arg(ui->tableWidget->item(row,25+2)->text().toInt()).arg(ui->tableWidget->item(row,26+2)->text()).arg(ui->tableWidget->item(row,27+2)->text()).arg(ui->tableWidget->item(row,28+2)->text().toInt()).arg(ui->tableWidget->item(row,24+5+2)->text()).arg(ui->tableWidget->item(row,25+5+2)->text()).arg(ui->tableWidget->item(row,26+5+2)->text()).arg(ui->tableWidget->item(row,27+5+2)->text()).arg(ui->tableWidget->item(row,28+5+2)->text())
                .arg(ui->tableWidget->item(row,29+5+2)->text()).arg(ui->tableWidget->item(row,30+5+2)->text()).arg(ui->tableWidget->item(row,31+5+2)->text()).arg(ui->tableWidget->item(row,32+5+2)->text()).arg(ui->tableWidget->item(row,33+5+2)->text()).arg(ui->tableWidget->item(row,34+5+2)->text())
                .arg(ui->tableWidget->item(row,35+5+2)->text()).arg(ui->tableWidget->item(row,36+5+2)->text().toDouble()).arg(ui->tableWidget->item(row,37+5+2)->text()).arg(ui->tableWidget->item(row,38+5+2)->text().toInt()).arg(QDateTime::currentDateTime().toString("yyyy/MM/dd HH:mm:ss"));
        qDebug()<<sql;
        rows = changeSQL(sql);
        if(rows > 0){
@@ -157,7 +178,7 @@
// path 为文件完整路径
// id为子目录名字
int ThreeMergeProblemList::saveFile(QString path, QString id,QString &absSavePath)
int ThreeMergeProblemList::saveFile(QString path, QString id,QString &absSavePath,QString proName)
{
    // 根据id来指定子目录进行文件的拷贝和存储
    // 默认保存到当前evidence目录下的id子目录中
@@ -167,7 +188,7 @@
        return -1;
    }
    QString curPath = QString("./evidence/%1/").arg(id);
    QString curPath = QString("./evidence/%1_%2/").arg(id).arg(proName);
    QDir dir;
    if(!dir.exists(curPath)){
        // 则直接创建
@@ -190,12 +211,29 @@
    }
}
// 使用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->setRowCount(4); // 设置初始行数
    ui->tableWidget->setMinimumHeight(500);  // 整改台账
    ui->tableWidget_2->setMinimumHeight(500); // 整改结果
    ui->tableWidget_3->setMinimumHeight(500); // 问题清单
@@ -227,6 +265,7 @@
        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){
@@ -287,24 +326,150 @@
    m_cbb_way = new ComboBoxDelegate(proLabels,this);
    ui->tableWidget->setItemDelegateForColumn(6,m_cbb_way);
        // 审计发现问题金额定性
    QStringList moneyLabels;
    moneyLabels<<"其中:绩效类问题金额"<<"合规性问题金额"<<"其中:会计核算方面"<<"违规使用资金"<<"截留、沉淀资金"<<"损失浪费"<<"挪用资金"<<"偷漏税费"<<"违规取得收入"<<"其他";
    m_cbb_money = new ComboBoxDelegate(moneyLabels,this);
    ui->tableWidget->setItemDelegateForColumn(12,m_cbb_money);
        // 审计发现问题个数定性
    QStringList cntLabels;
    cntLabels<<"其中:金额类问题个数"<<"非金额类问题个数"<<"其中:国家政策措施落实方面"<<"发展规划与战略决策方面"<<"内部控制与风险管理方面"<<"其他";
    m_cbb_cnt = new ComboBoxDelegate(cntLabels,this);
    ui->tableWidget->setItemDelegateForColumn(13,m_cbb_cnt);
        // 整改结果
    QStringList resLabels;
    resLabels<<"立行整改"<<"分阶段整改"<<"尚未整改";
    m_cbb_result = new ComboBoxDelegate(resLabels,this);
    ui->tableWidget->setItemDelegateForColumn(20,m_cbb_result);
        // 处分类型
    QStringList typeLabels;
    typeLabels<<"其中:党纪处分"<<"政务处分"<<"内部纪律处分"<<"无处分";
    m_cbb_type = new ComboBoxDelegate(typeLabels,this);
    ui->tableWidget->setItemDelegateForColumn(26,m_cbb_type);
        // 检查结果
    QStringList checkResLabels;
    checkResLabels<<"已完成"<<"未完成";
    m_cbb_check_res = new ComboBoxDelegate(checkResLabels,this);
    ui->tableWidget->setItemDelegateForColumn(33,m_cbb_check_res);
        // 金额类整改成果
    QStringList moneyResLabels;
    moneyResLabels<<"其中:调整会计账目"<<"收回资金"<<"挽回损失"<<"归还原资金渠道"<<"补缴税费"<<"其他";
    m_cbb_money_res = new ComboBoxDelegate(moneyResLabels,this);
    ui->tableWidget->setItemDelegateForColumn(42,m_cbb_money_res);
        // 非金额类整改成果
    QStringList noMoneyResLabels;
    noMoneyResLabels<<"其中:新制定制度"<<"修订完善制度"<<"优化完善业务流程"<<"其他";
    m_cbb_no_money_res = new ComboBoxDelegate(noMoneyResLabels,this);
    ui->tableWidget->setItemDelegateForColumn(44,m_cbb_no_money_res);
        // 问题描述佐证资料(上传取证单) 录入或者上传
    //ui->tableWidget->setItemDelegateForColumn(13,m_fdd);
    QStringList fwLabels;
    fwLabels << "录入(直接输入后回车即可)"<<"上传";
    m_cbb_file_wri = new ComboBoxDelegate(fwLabels,this,true);
    ui->tableWidget->setItemDelegateForColumn(13,m_cbb_file_wri);
    ui->tableWidget->setItemDelegateForColumn(17,m_cbb_file_wri);
    ui->tableWidget->setItemDelegateForColumn(23,m_cbb_file_wri);
    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,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(21,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(24,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(29,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(31,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(34,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(19+2,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(21+2,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(24+2+5,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(29+2+5,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(31+2+5,m_date_ymd);
    ui->tableWidget->setItemDelegateForColumn(34+2+5,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,16,new QTableWidgetItem("整改情况"));
    // 处分结果(能自动统计综合审计统计表中:根据审计建议给予党纪、政务和内部纪律处分)
    ui->tableWidget->setItem(0,26,new QTableWidgetItem("处分结果"));
    // 移送信息(能自动统计综合审计统计表中:向司法机关移送或报告案件线索)
    ui->tableWidget->setItem(0,28,new QTableWidgetItem("移送信息"));
    ui->tableWidget->setItem(0,31,new QTableWidgetItem("整改检查结果"));
    ui->tableWidget->setItem(0,34,new QTableWidgetItem("整改类型"));
    ui->tableWidget->setItem(1,34,new QTableWidgetItem("已整改"));
    ui->tableWidget->setItem(1,37,new QTableWidgetItem("正在整改"));
    ui->tableWidget->setItem(1,39,new QTableWidgetItem("尚未整改"));
    ui->tableWidget->setItem(0,42,new QTableWidgetItem("整改成果"));
    ui->tableWidget->setItem(1,42,new QTableWidgetItem("问题整改(金额类)"));
    ui->tableWidget->setItem(1,44,new QTableWidgetItem("问题整改(非金额类)"));
    ui->tableWidget->setSpan(0,1,2,15); // 发现问题
    ui->tableWidget->item(0,1)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(0,16,2,10); // 整改情况
    ui->tableWidget->item(0,16)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(0,26,2,2); // 处分结果
    ui->tableWidget->item(0,26)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(0,28,2,3); // 移送信息
    ui->tableWidget->item(0,28)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(0,31,2,3); // 整改检查结果
    ui->tableWidget->item(0,31)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(0,34,1,8); // 整改类型
    ui->tableWidget->item(0,34)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(1,34,1,3); // 已整改
    ui->tableWidget->item(1,34)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(1,37,1,2); // 正在整改
    ui->tableWidget->item(1,37)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(1,39,1,3); // 尚未整改
    ui->tableWidget->item(1,39)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(0,42,1,4); // 整改成果
    ui->tableWidget->item(0,42)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(1,42,1,2); // 问题整改(金额类)
    ui->tableWidget->item(1,42)->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setSpan(1,44,1,2); // 问题整改(非金额类)
    ui->tableWidget->item(1,44)->setTextAlignment(Qt::AlignCenter);
    // 隐藏列标题
    ui->tableWidget->horizontalHeader()->setVisible(false);
    // 加载公司名
    readCompanyFromSQL();
@@ -433,12 +598,14 @@
    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()));
}
@@ -583,25 +750,26 @@
        int rows = saveDataLine(row);
        if(rows>0){
            // 需要将文件拷贝到id目录
            QString fpath = ui->tableWidget->item(row,13)->text();
            QString spath = ui->tableWidget->item(row,17)->text();
            QString tpath = ui->tableWidget->item(row,23)->text();
            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();
            qDebug()<<"拷贝文件:"<<fid<<fpath;
            QString proName = ui->tableWidget->item(row,7)->text(); // 项目名称
            qDebug()<<"拷贝文件:"<<fid<<proName<<fpath;
            QString absSavePath1,absSavePath2,absSavePath3;
            int sflag1 = saveFile(fpath,fid,absSavePath1); // 保存第一个
            int sflag1 = saveFile(fpath,fid,absSavePath1,proName); // 保存第一个
            if(sflag1==1){
                ui->tableWidget->setItem(row,13,new QTableWidgetItem(absSavePath1));
                ui->tableWidget->setItem(row,13+2,new QTableWidgetItem(absSavePath1));
            }
            int sflag2 = saveFile(spath,fid,absSavePath2); // 保存第二个
            int sflag2 = saveFile(spath,fid,absSavePath2,proName); // 保存第二个
            if(sflag2==1){
                ui->tableWidget->setItem(row,17,new QTableWidgetItem(absSavePath2));
                ui->tableWidget->setItem(row,17+2,new QTableWidgetItem(absSavePath2));
            }
            int sflag3 = saveFile(tpath,fid,absSavePath3); // 保存第三个
            int sflag3 = saveFile(tpath,fid,absSavePath3,proName); // 保存第三个
            if(sflag3==1){
                ui->tableWidget->setItem(row,23,new QTableWidgetItem(absSavePath3));
                ui->tableWidget->setItem(row,23+2,new QTableWidgetItem(absSavePath3));
            }
            qDebug()<<"save falg:"<<sflag1<<sflag2<<sflag3;
            if(sflag1 || sflag2 || sflag3){
@@ -767,11 +935,11 @@
    }else if(curText == "涉及金额" || strcmp(curText.toLocal8Bit().data(),"涉及金额")==0){
        qDebug()<<"涉及金额";
        condition = QString(" where 涉及金额='%1'").arg(ui->lineEdit_sbook_condition->text());
        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());
        condition = QString(" where 整顿金额 <=%1").arg(ui->lineEdit_sbook_condition->text());
    }
@@ -781,10 +949,10 @@
    QVector<QVector<QString>> res;
    int rows = selectSQL(sql,res);
    if(rows > 0){
        ui->tableWidget->setRowCount(rows);
        ui->tableWidget->setRowCount(rows+3);
        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]));
                ui->tableWidget->setItem(i+3,j,new QTableWidgetItem(res[i][j]));
            }
        }
    }else{
@@ -796,31 +964,32 @@
void ThreeMergeProblemList::on_pushButton_save_3_clicked()
{
    int hasContentRow=0;
    for(int i=0;i<ui->tableWidget->rowCount();++i){
    for(int i=3;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 fpath = ui->tableWidget->item(i,13+2)->text();
            QString spath = ui->tableWidget->item(i,17+2)->text();
            QString tpath = ui->tableWidget->item(i,23+2)->text();
            QString fid = ui->tableWidget->item(i,0)->text();
            qDebug()<<"拷贝文件:"<<fid<<fpath;
            QString proName = ui->tableWidget->item(i,7)->text(); // 项目名称
            qDebug()<<"拷贝文件:"<<fid<<proName<<fpath;
            QString absSavePath1,absSavePath2,absSavePath3;
            int sflag1 = saveFile(fpath,fid,absSavePath1); // 保存第一个
            int sflag1 = saveFile(fpath,fid,absSavePath1,proName); // 保存第一个
            if(sflag1==1){
                ui->tableWidget->setItem(i,13,new QTableWidgetItem(absSavePath1));
                ui->tableWidget->setItem(i,13+2,new QTableWidgetItem(absSavePath1));
            }
            int sflag2 = saveFile(spath,fid,absSavePath2); // 保存第二个
            int sflag2 = saveFile(spath,fid,absSavePath2,proName); // 保存第二个
            if(sflag2==1){
                ui->tableWidget->setItem(i,17,new QTableWidgetItem(absSavePath2));
                ui->tableWidget->setItem(i,17+2,new QTableWidgetItem(absSavePath2));
            }
            int sflag3 = saveFile(tpath,fid,absSavePath3); // 保存第三个
            int sflag3 = saveFile(tpath,fid,absSavePath3,proName); // 保存第三个
            if(sflag3==1){
                ui->tableWidget->setItem(i,23,new QTableWidgetItem(absSavePath3));
                ui->tableWidget->setItem(i,23+2,new QTableWidgetItem(absSavePath3));
            }
            qDebug()<<"save falg:"<<sflag1<<sflag2<<sflag3;
            if(sflag1 || sflag2 || sflag3){
@@ -829,8 +998,8 @@
        }
    }
    QMessageBox::information(this,"保存提示",QString("总行数为%1,成功%2行,失败%3行。").arg(ui->tableWidget->rowCount())
                             .arg(hasContentRow).arg(ui->tableWidget->rowCount()-hasContentRow));
    QMessageBox::information(this,"保存提示",QString("总行数为%1,成功%2行,失败%3行。").arg(ui->tableWidget->rowCount()-3)
                             .arg(hasContentRow).arg(ui->tableWidget->rowCount()-3-hasContentRow));
}
void ThreeMergeProblemList::on_pushButton_moreSearch_clicked()
@@ -872,15 +1041,15 @@
        vecCon.append(condition);
    }
    if(ui->checkBox_qdx->isChecked()){
        QString condition= QString(" 问题定性='%1' ").arg(ui->comboBox_qdx->currentText());
        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());
        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());
        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()){
@@ -891,6 +1060,17 @@
        QString condition= QString(" 整改预计完成时间='%1' ").arg(ui->dateEdit_change_expected_time->text());
        vecCon.append(condition);
    }
    if(ui->checkBox_punish_type->isChecked()){
        QString condition= QString(" 处分类型='%1' ").arg(ui->comboBox_punish_type->currentText());
        vecCon.append(condition);
    }
    if(ui->checkBox_transfer->isChecked()){
        QString condition= QString(" 移送详细信息='%1' ").arg(ui->comboBox_transfer->currentText());
        vecCon.append(condition);
    }
    QString condition;
    if(vecCon.size() == 1){
        condition += QString(" where %1").arg(vecCon.at(0));
@@ -906,10 +1086,10 @@
    QVector<QVector<QString>> res;
    int rows = selectSQL(sql,res);
    if(rows > 0){
        ui->tableWidget->setRowCount(rows);
        ui->tableWidget->setRowCount(rows+3);
        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]));
                ui->tableWidget->setItem(i+3,j,new QTableWidgetItem(res[i][j]));
            }
        }
    }else{
@@ -930,3 +1110,229 @@
    }
    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();
        }
    }
    // 以系统默认的方式打开指定的文件
    QUrl file_path = QFileDialog::getOpenFileUrl();
    if(QDesktopServices::openUrl(file_path)){
        qDebug()<<"open ok:"<<file_path;
    }else{
        qDebug()<<"open fail:"<<file_path;
    }
}
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()<<"三合一导出保存";
    QVector<ThreeMergeInfo> infos;
    QString name = ui->comboBox_company->currentText();
    // 获取表格数据,添加到信息中
    for(int i=3;i<ui->tableWidget->rowCount();++i){ // 从第三行开始
        // 先对空项进行特殊处理
        for(int j=0;j<ui->tableWidget->columnCount();++j){
            if(ui->tableWidget->item(i,j) == nullptr){
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(" "));
                qDebug()<<"save find out empty:"<<i<<j;
            }
        }
        ThreeMergeInfo rowInfo;
        rowInfo.id = ui->tableWidget->item(i,0)->text().toInt();
        // 发现问题
        strcpy(rowInfo.audit_type,ui->tableWidget->item(i,1)->text().toLocal8Bit().data());
        strcpy(rowInfo.audit_year,ui->tableWidget->item(i,2)->text().toLocal8Bit().data());
        strcpy(rowInfo.audit_unit,ui->tableWidget->item(i,3)->text().toLocal8Bit().data());
        strcpy(rowInfo.audit_method,ui->tableWidget->item(i,4)->text().toLocal8Bit().data());
        strcpy(rowInfo.responsible_subject_name,ui->tableWidget->item(i,5)->text().toLocal8Bit().data());
        strcpy(rowInfo.audit_item,ui->tableWidget->item(i,6)->text().toLocal8Bit().data());
        strcpy(rowInfo.audit_item_name,ui->tableWidget->item(i,7)->text().toLocal8Bit().data());
        strcpy(rowInfo.pro_type,ui->tableWidget->item(i,8)->text().toLocal8Bit().data());
        strcpy(rowInfo.problem_qualification,ui->tableWidget->item(i,9)->text().toLocal8Bit().data());
        strcpy(rowInfo.problem_desript,ui->tableWidget->item(i,10)->text().toLocal8Bit().data());
        strcpy(rowInfo.problem_qualifi_basis,ui->tableWidget->item(i,11)->text().toLocal8Bit().data());
        strcpy(rowInfo.problem_money_basis,ui->tableWidget->item(i,12)->text().toLocal8Bit().data());
        strcpy(rowInfo.problem_num_basis,ui->tableWidget->item(i,13)->text().toLocal8Bit().data());
        rowInfo.money_involved = ui->tableWidget->item(i,14)->text().toDouble();
        strcpy(rowInfo.problem_desript_evidence_material,ui->tableWidget->item(i,15)->text().toLocal8Bit().data());
        // 整改情况
        strcpy(rowInfo.audit_rectified,ui->tableWidget->item(i,16)->text().toLocal8Bit().data());
        rowInfo.rectify_money = ui->tableWidget->item(i,17)->text().toDouble();
        strcpy(rowInfo.rectify_situation_1,ui->tableWidget->item(i,18)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_situation_evidence_mat_1,ui->tableWidget->item(i,19)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_res,ui->tableWidget->item(i,20)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_complete_time,ui->tableWidget->item(i,21)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_not_over_reason,ui->tableWidget->item(i,22)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_will_complete_time,ui->tableWidget->item(i,23)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_situation_2,ui->tableWidget->item(i,24)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_situation_evidence_mat_2,ui->tableWidget->item(i,25)->text().toLocal8Bit().data());
        // 处分结果
        strcpy(rowInfo.punish_type,ui->tableWidget->item(i,26)->text().toLocal8Bit().data());
        rowInfo.punish_person_num = ui->tableWidget->item(i,27)->text().toInt();
        // 移送信息
        strcpy(rowInfo.transfer_info,ui->tableWidget->item(i,28)->text().toLocal8Bit().data());
        strcpy(rowInfo.punish_res,ui->tableWidget->item(i,29)->text().toLocal8Bit().data());
        rowInfo.involved_person_num = ui->tableWidget->item(i,30)->text().toInt();
        // 整个检查结果
        strcpy(rowInfo.rectify_check_time,ui->tableWidget->item(i,31)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_check_mothod,ui->tableWidget->item(i,32)->text().toLocal8Bit().data());
        strcpy(rowInfo.rectify_check_res,ui->tableWidget->item(i,33)->text().toLocal8Bit().data());
        // 整改类型-已整改
        strcpy(rowInfo.correct_problem,ui->tableWidget->item(i,34)->text().toLocal8Bit().data());
        strcpy(rowInfo.improve_the_system,ui->tableWidget->item(i,35)->text().toLocal8Bit().data());
        strcpy(rowInfo.complete_time,ui->tableWidget->item(i,36)->text().toLocal8Bit().data());
        // 整改类型-正在整改
        strcpy(rowInfo.during_main_reason,ui->tableWidget->item(i,37)->text().toLocal8Bit().data());
        strcpy(rowInfo.during_end_complete_time,ui->tableWidget->item(i,38)->text().toLocal8Bit().data());
        // 整改类型-尚未整改
        strcpy(rowInfo.not_main_reason,ui->tableWidget->item(i,39)->text().toLocal8Bit().data());
        strcpy(rowInfo.departen_or_person,ui->tableWidget->item(i,40)->text().toLocal8Bit().data());
        strcpy(rowInfo.not_end_complete_time,ui->tableWidget->item(i,41)->text().toLocal8Bit().data());
        // 整改结果-问题整改(金额类)
        strcpy(rowInfo.money_res,ui->tableWidget->item(i,42)->text().toLocal8Bit().data());
        rowInfo.money_res_money = ui->tableWidget->item(i,43)->text().toDouble();
        // 整改结果-问题整改(非金额类)
        strcpy(rowInfo.no_money_res,ui->tableWidget->item(i,44)->text().toLocal8Bit().data());
        rowInfo.no_money_res_num = ui->tableWidget->item(i,45)->text().toInt();
        // 放到vector中
        infos.append(rowInfo);
    }
    ExportToFile etf;
    etf.saveToExcelFromThreeMergePro(name,infos);
}
void ThreeMergeProblemList::on_tableWidget_cellChanged(int row, int column)
{
    qDebug()<<"cellChanged:"<<row<<column;
    QTableWidgetItem *item = ui->tableWidget->item(row,5);
    if(row < 3 || !item) return; // 防止异常
    if(column == 26) // 表示是处分类型被修改了,那就可以自动去获取数据库中的数据出来,同步到同一行去了
    {
        QString rectify_type = ui->tableWidget->item(row,column)->text();
        QString name = ui->tableWidget->item(row,5)->text();
        QMap<QString,QString> typeInfos;
        typeInfos["其中:党纪处分"] = "_030901";
        typeInfos["政务处分"] = "_030902";
        typeInfos["内部纪律处分"] = "_030903";
        QString sql = QString("select %1,_031001 from comprehensive_entry_info where name='%2'").arg(typeInfos[rectify_type]).arg(name);
        qDebug()<<"sql:"<<sql;
        QSqlQuery query;
        if(query.exec(sql)){
            qDebug()<<"执行成果,记录结果 处分类型:"<<rectify_type;
            int cnt=0;
            int involved_person_cnt = 0;
            while(query.next()){
                cnt += query.value(0).toInt();
                involved_person_cnt += query.value(1).toInt();
            }
            qDebug()<<"查到cnt="<<cnt <<" 涉案人员:"<<involved_person_cnt;
            ui->tableWidget->setItem(row,27,new QTableWidgetItem(QString::number(cnt)));
            ui->tableWidget->setItem(row,30,new QTableWidgetItem(QString::number(involved_person_cnt)));
        }else {
            qDebug()<<"查询失败 处分类型"<<rectify_type;
        }
    }else if(column == 42) // 表示是金额类整改成果触发了
    {
        QMap<QString,QString> moneyInfos;
        moneyInfos["其中:调整会计账目"] = "_030701";
        moneyInfos["收回资金"] = "_030702";
        moneyInfos["挽回损失"] = "_030703";
        moneyInfos["归还原资金渠道"] = "_030704";
        moneyInfos["补缴税费"] = "_030705";
        moneyInfos["其他"] = "_030706";
        QString currentText = ui->tableWidget->item(row,42)->text();
        QString name = ui->tableWidget->item(row,5)->text();
        QString sql = QString("select %1 from comprehensive_entry_info where name='%2'").arg(moneyInfos[currentText]).arg(name);
        qDebug()<<"sql:"<<sql;
        QSqlQuery query;
        if(query.exec(sql)){
            double cnt=0;
            while (query.next()) {
                cnt += query.value(0).toDouble();
            }
            ui->tableWidget->setItem(row,43,new QTableWidgetItem(QString::number(cnt)));
        }else{
            qDebug()<<"执行sql失败 审计发现问题整改(金额类)";
        }
    }else if(column == 44) // 表示是非金额类整改成果触发了
    {
        QMap<QString,QString> noMoneyInfos;
        noMoneyInfos["其中:新制定制度"] = "_030801";
        noMoneyInfos["修订完善制度"] = "_030802";
        noMoneyInfos["优化完善业务流程"] = "_030803";
        noMoneyInfos["其他"] = "_030804";
        QString currentText = ui->tableWidget->item(row,44)->text();
        QString name = ui->tableWidget->item(row,5)->text();
        QString sql = QString("select %1 from comprehensive_entry_info where name='%2'").arg(noMoneyInfos[currentText]).arg(name);
        qDebug()<<"sql:"<<sql;
        QSqlQuery query;
        if(query.exec(sql)){
            int cnt=0;
            while (query.next()) {
                cnt += query.value(0).toInt();
            }
            ui->tableWidget->setItem(row,45,new QTableWidgetItem(QString::number(cnt)));
        }else{
            qDebug()<<"执行sql失败 审计发现问题整改(金额类)";
        }
    }
}