wumu
2024-12-02 bbacbbede6a3c7265f165642ab19afb61bbcac8d
internal_system_v1/converinfo2.cpp
@@ -17,6 +17,7 @@
    //initUi();
    //readInfo(); // 加载表格
    addMenu(); // 增加菜单
    disableWheelEvent(); // 禁用下拉框的滚轮事件
    // 自适应处理
    ui->treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
@@ -63,12 +64,14 @@
    m_menu = new QMenu(this);
    m_menu->addAction("删除");
    m_menu->addAction("增加");
    m_menu->addAction("保存导出");
    ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->treeWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint)));
    connect(m_menu->actions().at(0),SIGNAL(triggered(bool)),this,SLOT(deleteInfo()));
    connect(m_menu->actions().at(1),SIGNAL(triggered(bool)),this,SLOT(addInfo()));
    connect(m_menu->actions().at(2),SIGNAL(triggered(bool)),this,SLOT(saveInfo()));
            // 单位内容修改
    // 右边可编辑内容
@@ -90,25 +93,92 @@
{
    if(m_curItem==nullptr)return;
    qDebug()<<"添加公司信息,在节点:"<<m_curItem->text(0);
    on_pushButton_laodFile_clicked();
}
void ConverInfo2::deleteInfo()
{
    if(m_curItem==nullptr)return;
    qDebug()<<"删除公司信息,节点:"<<m_curItem->text(0);
    auto resList = m_curItem->takeChildren();
    qDebug()<<"删除数量:"<<resList.size();
}
void ConverInfo2::saveInfo()
{
    if(m_curItem==nullptr)return;
    qDebug()<<"保存公司信息,节点:"<<m_curItem->text(0);
    QString name = m_curItem->text(0);
    if(name.contains("(本级)")){
        name = name.split("(本级)").at(0);
    }else if(name.contains("(汇总)")){
        name = name.split("(汇总)").at(0);
        name = name + "(汇总)";
    }
    qDebug()<<"保存公司名:"<<name;
    ComInfo cif = m_nameAndComInfos[name];
    ExportToFile etf(this);
    etf.saveToExcelFromComInfo(cif);
}
void ConverInfo2::on_treeWidget_doubleClicked(const QModelIndex &index)
{
    QString name = index.model()->data(index).toString();
    qDebug()<<"双击"<<index<<name;
    ComInfo curCominfo; // 不要直接给值,可能会导致多添加新的名字进来
    if(name.contains("(本级)")){
        QStringList sps = name.split("(本级)");
        name = sps.at(0);
        curCominfo = m_nameAndComInfos[name];
    }else if(name.contains("(汇总)")){
        name = name.split("(汇总)").at(0);
        qDebug()<<"汇总处理:";
        // 做一个汇总的处理,把所有下级的都累加起来
        ComInfo allCominfo = m_nameAndComInfos[name];
        for(QString cur:m_treeNodes[name]){
            if(name != cur){
                ComInfo &tmp = m_nameAndComInfos[cur];
                allCominfo.organazationNum += tmp.organazationNum;
                allCominfo.realNum += tmp.realNum;
                allCominfo.professionalNum += tmp.professionalNum;
                allCominfo.CIANum += tmp.CIANum;
                allCominfo.masterNum += tmp.masterNum;
                allCominfo.undergraduatesNum += tmp.undergraduatesNum;
                allCominfo.juniorNum += tmp.juniorNum;
                allCominfo.seniorNum += tmp.seniorNum;
                allCominfo.intermediateNum += tmp.intermediateNum;
                allCominfo.primaryNum += tmp.primaryNum;
                allCominfo.noTitleNum += tmp.noTitleNum;
                allCominfo.upFiftyOldNum += tmp.upFiftyOldNum;
                allCominfo.upThirtyOldNum += tmp.upThirtyOldNum;
                allCominfo.downThirtyOldNum += tmp.downThirtyOldNum;
                allCominfo.auditNum += tmp.auditNum;
                allCominfo.accountingNum += tmp.accountingNum;
                allCominfo.economyNum += tmp.economyNum;
                allCominfo.lawNum += tmp.lawNum;
                allCominfo.managerNum += tmp.managerNum;
                allCominfo.itNum += tmp.itNum;
                allCominfo.engineeringNum += tmp.engineeringNum;
                allCominfo.otherNum += tmp.otherNum;
            }
        }
        curCominfo = allCominfo;
        // 处理完了之后,还需要单独起一个汇总的名字
        name = name + "(汇总)";
        strcpy(curCominfo.name,name.toLocal8Bit().data());
        m_nameAndComInfos[name] = curCominfo;
        // 刷新组合下拉框的列表
        emit updateComboListSignal(m_nameAndComInfos);
    }else{
        curCominfo = m_nameAndComInfos[name];
    }
    ComInfo curCominfo = m_nameAndComInfos[name];
    //ComInfo curCominfo = m_nameAndComInfos[name];
    // 一、单位基本情况
    ui->lineEdit_creditCode->setText(curCominfo.creditCode);
    ui->lineEdit_name->setText(QString::fromLocal8Bit( curCominfo.name));
@@ -530,136 +600,137 @@
                // 四、内审人员配备基本情况
                // 编制数
                QVariant organazationNum = valRows[56].toList().at(4);
                //QVariant organazationNum = valRows[56].toList().at(4);
                QVariant organazationNum = valRows[60].toList().at(4);
                if(organazationNum.isValid()){
                    curComInfo.organazationNum = organazationNum.toInt();
                    qDebug()<<"organazationNum"<<organazationNum;
                }
                // 实有人员数
                QVariant realNum = valRows[56].toList().at(4);
                QVariant realNum = valRows[60].toList().at(6);
                if(realNum.isValid()){
                    curComInfo.realNum = realNum.toInt();
                    qDebug()<<"realNum"<<realNum;
                }
                // 专职人员数
                QVariant professionalNum = valRows[56].toList().at(4);
                QVariant professionalNum = valRows[60].toList().at(8);
                if(professionalNum.isValid()){
                    curComInfo.professionalNum = professionalNum.toInt();
                    qDebug()<<"professionalNum"<<professionalNum;
                }
                // 拥有CIA人员数
                QVariant CIANum = valRows[56].toList().at(4);
                QVariant CIANum = valRows[61].toList().at(6);
                if(CIANum.isValid()){
                    curComInfo.CIANum = CIANum.toInt();
                    qDebug()<<"CIANum"<<CIANum;
                }
                // 学历:硕士及以上 人员数
                QVariant masterNum = valRows[56].toList().at(4);
                QVariant masterNum = valRows[62].toList().at(6);
                if(masterNum.isValid()){
                    curComInfo.masterNum = masterNum.toInt();
                    qDebug()<<"masterNum"<<masterNum;
                }
                // 大学本科
                QVariant undergraduatesNum = valRows[56].toList().at(4);
                QVariant undergraduatesNum = valRows[63].toList().at(6);
                if(undergraduatesNum.isValid()){
                    curComInfo.undergraduatesNum = undergraduatesNum.toInt();
                    qDebug()<<"undergraduatesNum"<<undergraduatesNum;
                }
                // 专科及以下
                QVariant juniorNum = valRows[56].toList().at(4);
                QVariant juniorNum = valRows[64].toList().at(6);
                if(juniorNum.isValid()){
                    curComInfo.juniorNum = juniorNum.toInt();
                    qDebug()<<"juniorNum"<<juniorNum;
                }
                // 职称 高级职称
                QVariant seniorNum = valRows[56].toList().at(4);
                QVariant seniorNum = valRows[65].toList().at(6);
                if(seniorNum.isValid()){
                    curComInfo.seniorNum = seniorNum.toInt();
                    qDebug()<<"seniorNum"<<seniorNum;
                }
                // 中级职称
                QVariant intermediateNum = valRows[56].toList().at(4);
                QVariant intermediateNum = valRows[66].toList().at(6);
                if(intermediateNum.isValid()){
                    curComInfo.intermediateNum = intermediateNum.toInt();
                    qDebug()<<"intermediateNum"<<intermediateNum;
                }
                // 初级职称
                QVariant primaryNum = valRows[56].toList().at(4);
                QVariant primaryNum = valRows[67].toList().at(6);
                if(primaryNum.isValid()){
                    curComInfo.primaryNum = primaryNum.toInt();
                    qDebug()<<"primaryNum"<<primaryNum;
                }
                // 无职称
                QVariant noTitleNum = valRows[56].toList().at(4);
                QVariant noTitleNum = valRows[68].toList().at(6);
                if(noTitleNum.isValid()){
                    curComInfo.noTitleNum = noTitleNum.toInt();
                    qDebug()<<"noTitleNum"<<noTitleNum;
                }
                // 年龄结构 50岁以上
                QVariant upFiftyOldNum = valRows[56].toList().at(4);
                QVariant upFiftyOldNum = valRows[69].toList().at(6);
                if(upFiftyOldNum.isValid()){
                    curComInfo.upFiftyOldNum = upFiftyOldNum.toInt();
                    qDebug()<<"upFiftyOldNum"<<upFiftyOldNum;
                }
                // 30-50岁
                QVariant upThirtyOldNum = valRows[56].toList().at(4);
                QVariant upThirtyOldNum = valRows[70].toList().at(6);
                if(upThirtyOldNum.isValid()){
                    curComInfo.upThirtyOldNum = upThirtyOldNum.toInt();
                    qDebug()<<"upThirtyOldNum"<<upThirtyOldNum;
                }
                // 30岁以下
                QVariant downThirtyOldNum = valRows[56].toList().at(4);
                QVariant downThirtyOldNum = valRows[71].toList().at(6);
                if(downThirtyOldNum.isValid()){
                    curComInfo.downThirtyOldNum = downThirtyOldNum.toInt();
                    qDebug()<<"downThirtyOldNum"<<downThirtyOldNum;
                }
                // 知识结构 审计
                QVariant auditNum = valRows[56].toList().at(4);
                QVariant auditNum = valRows[72].toList().at(6);
                if(auditNum.isValid()){
                    curComInfo.auditNum = auditNum.toInt();
                    qDebug()<<"auditNum"<<auditNum;
                }
                // 会计
                QVariant accountingNum = valRows[56].toList().at(4);
                QVariant accountingNum = valRows[73].toList().at(6);
                if(accountingNum.isValid()){
                    curComInfo.accountingNum = accountingNum.toInt();
                    qDebug()<<"accountingNum"<<accountingNum;
                }
                // 经济
                QVariant economyNum = valRows[56].toList().at(4);
                QVariant economyNum = valRows[74].toList().at(6);
                if(economyNum.isValid()){
                    curComInfo.economyNum = economyNum.toInt();
                    qDebug()<<"economyNum"<<economyNum;
                }
                // 法律
                QVariant lawNum = valRows[56].toList().at(4);
                QVariant lawNum = valRows[75].toList().at(6);
                if(lawNum.isValid()){
                    curComInfo.lawNum = lawNum.toInt();
                    qDebug()<<"lawNum"<<lawNum;
                }
                // 管理
                QVariant managerNum = valRows[56].toList().at(4);
                QVariant managerNum = valRows[76].toList().at(6);
                if(managerNum.isValid()){
                    curComInfo.managerNum = managerNum.toInt();
                    qDebug()<<"managerNum"<<managerNum;
                }
                // 信息技术
                QVariant itNum = valRows[56].toList().at(4);
                QVariant itNum = valRows[77].toList().at(6);
                if(itNum.isValid()){
                    curComInfo.itNum = itNum.toInt();
                    qDebug()<<"itNum"<<itNum;
                }
                // 工程
                QVariant engineeringNum = valRows[56].toList().at(4);
                QVariant engineeringNum = valRows[78].toList().at(6);
                if(engineeringNum.isValid()){
                    curComInfo.engineeringNum = engineeringNum.toInt();
                    qDebug()<<"engineeringNum"<<engineeringNum;
                }
                // 其他
                QVariant otherNum = valRows[56].toList().at(4);
                QVariant otherNum = valRows[79].toList().at(6);
                if(otherNum.isValid()){
                    curComInfo.otherNum = otherNum.toInt();
                    qDebug()<<"otherNum"<<otherNum;
@@ -728,6 +799,9 @@
    // 发射 加载完成的信号
    emit loadFinished();
    // 更新其他界面的公司信息下拉框
    emit updateComboListSignal(m_nameAndComInfos);
//    QAxObject excel("./debug/Data/附件2_内审统01表_单位及内部审计机构基本情况表-1.301版(1).xls");
//    excel.setProperty("Visible",true);
//    excel.setProperty("DisplayAlerts",false);
@@ -744,12 +818,14 @@
    m_menu->addAction("删除");
    m_menu->addAction("增加");
    m_menu->addAction("保存导出");
    ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->treeWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint)));
    connect(m_menu->actions().at(0),SIGNAL(triggered(bool)),this,SLOT(deleteInfo()));
    connect(m_menu->actions().at(1),SIGNAL(triggered(bool)),this,SLOT(addInfo()));
    connect(m_menu->actions().at(2),SIGNAL(triggered(bool)),this,SLOT(saveInfo()));
}
void ConverInfo2::on_pushButton_commit_clicked()
@@ -1046,7 +1122,7 @@
    qDebug()<<"excel:"<<excel.className();
    QAxObject * wbs = excel.querySubObject("WorkBooks");
    qDebug()<<"wbs:"<<wbs->className();
    QAxObject * wb = wbs->querySubObject("Open(QString&)",path);
    QAxObject * wb = wbs->querySubObject("Open(QString&)",path); // 哪个对象是Open的返回值,哪个就可以保存
    //QAxObject* pWorkBook = excel.querySubObject("ActiveWorkBook");
    //QAxObject* pWorkSheets = pWorkBook->querySubObject("Sheets");//获取工作表
    //QAxObject * shs = wb->querySubObject("Sheets"); // WorkSheets 也可以
@@ -1338,6 +1414,30 @@
            qDebug()<<"financeDepartment"<<financeDepartment;
        }
        // 法务部门、内部控制部门、纪检部门、其他部门
        // 需要特殊获取
        QAxObject *checkBox = sheet->querySubObject("CheckBoxes(const QString&)", QString::fromLocal8Bit("财务部门"));
        if(checkBox){
            qDebug()<<"取到财务部门"<<checkBox->property("Value2").toInt()<<checkBox->property("Value").toInt()<<checkBox->property("Value2").toBool();
            if(checkBox->property("Value").toBool()){
                qDebug()<<"财务部门勾选";
            }else{
                qDebug()<<"财务部门未勾选";
            }
        }else{
            qDebug()<<"未取到财务部门";
        }
        QAxObject *checkBox1 = sheet->querySubObject("CheckBoxes(const QString&)", QString::fromLocal8Bit("法务部门"));
        if(checkBox1){
            qDebug()<<"取到法务部门"<<checkBox1->property("Value").toInt();
            if(checkBox1->property("Value").toBool()){
                qDebug()<<"法务部门勾选";
            }else{
                qDebug()<<"法务部门未勾选";
            }
        }else{
            qDebug()<<"未取到法务部门";
        }
        // 内审机构层级
        QVariant intavalAuditLeval = valRows[56].toList().at(4);
@@ -1535,6 +1635,7 @@
    excel.dynamicCall("Quit(void)");
    qDebug()<<"单位信息数量:"<<m_nameAndComInfos.size();
    emit updateComboListSignal(m_nameAndComInfos); // 更新组合下拉框的单位信息
}
void ConverInfo2::createTreeNode(){
@@ -1552,6 +1653,38 @@
        }
    }
}
void ConverInfo2::disableWheelEvent()
{
    ui->comboBox_ChiefDesignerLevel->installEventFilter(this);
    ui->comboBox_comType->installEventFilter(this);
    ui->comboBox_employmentMode->installEventFilter(this);
    ui->comboBox_hasChiefDesigner->installEventFilter(this);
    ui->comboBox_hasSetIntervalAudit->installEventFilter(this);
    ui->comboBox_hasSetSeparateIA->installEventFilter(this);
    ui->comboBox_hasUpLegal->installEventFilter(this);
    ui->comboBox_intavalAuditLeval->installEventFilter(this);
    ui->comboBox_leadingOrganization->installEventFilter(this);
    ui->comboBox_scale->installEventFilter(this);
    ui->comboBox_standardType->installEventFilter(this);
}
bool ConverInfo2::eventFilter(QObject *watched, QEvent *event)
{
    QString cls = watched->metaObject()->className();
    if(cls == "QComboBox"){
        //qDebug()<<"发现下拉框";
        if(event->type() == QEvent::Wheel){
            //qDebug()<<"使用了滚轮";
            return true;  // 返回真表示禁用,返回假则能用
        }
    }else{
        qDebug()<<"其他类型:"<<cls;
    }
    return QMainWindow::eventFilter(watched,event);
}
void ConverInfo2::addTreeWidgetNode(QVariant upName,QVariant name){
    // 添加左边树形图相关
    // 菜单相关  当上级公司为空上级时,自己当自己的上级,并且罗列进去当 本级
@@ -1563,7 +1696,8 @@
        for(int k=0;k<ui->treeWidget->topLevelItemCount();++k){
            QTreeWidgetItem *tmp = ui->treeWidget->topLevelItem(k);
            qDebug()<<k<<tmp->text(0)<<upName.toString();
            if(upName.toString()+"(汇总)" == tmp->text(0)){
            int pos = tmp->text(0).indexOf(upName.toString()+"(汇总)");
            if(upName.toString()+"(汇总)" == tmp->text(0) || pos != -1){
                top = tmp;
                break;
            }
@@ -1572,11 +1706,13 @@
            if(top){ // 存在,则添加到孩子列表中
                QTreeWidgetItem *top1 = new QTreeWidgetItem(top);
                top1->setText(0,name.toString());
                top->setText(0,upName.toString()+"(汇总)下级数:"+QString::number(top->childCount()-1));
            }else{ // 不存在,则新建一个列表
                QTreeWidgetItem *top1 = new QTreeWidgetItem(ui->treeWidget);
                top1->setText(0,name.toString()+"(汇总)");
                QTreeWidgetItem *top2 = new QTreeWidgetItem(top1);
                top2->setText(0,name.toString()+"(本级)");
                top1->setText(0,name.toString()+"(汇总)下级数:"+QString::number(top1->childCount()-1));
            }
        }
@@ -1588,6 +1724,7 @@
            top1->setText(0,name.toString()+"(汇总)");
            QTreeWidgetItem *top2 = new QTreeWidgetItem(top1);
            top2->setText(0,name.toString()+"(本级)");
            top1->setText(0,name.toString()+"(汇总)下级数:"+QString::number(top1->childCount()-1));
        }
    }
@@ -1605,3 +1742,15 @@
{
    readInfo(); // 加载表格
}
void ConverInfo2::on_pushButton_save_to_file_clicked()
{
    QString name = ui->lineEdit_name->text();
    if(name.size()== 0){
        QMessageBox::information(this,"单位名称为空,请先选中一家单位","请先选中一家单位");
        return;
    }
    ExportToFile etf(this);
    ComInfo cif = m_nameAndComInfos[name];
    etf.saveToExcelFromComInfo(cif);
}