ExportProjectDlg.cpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #include "ExportProjectDlg.h"
  2. #include "ui_ExportProjectDlg.h"
  3. #include <qcheckbox.h>
  4. #include <qgridlayout.h>
  5. #include <dbService/DBServiceSet.h>
  6. #include "FileUtil.h"
  7. #include <QDebug>
  8. #include <QFileDialog>
  9. #include <QPushButton>
  10. #include <QMessageBox>
  11. ExportProjectDlg::ExportProjectDlg(QWidget *parent) : QDialog(parent), ui(new Ui::ExportProjectDlg)
  12. {
  13. ui->setupUi(this);
  14. setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint);
  15. this->setWindowTitle("导出工程资源包");
  16. this->setAttribute(Qt::WA_DeleteOnClose);
  17. this->resize(1000, 600);
  18. init();
  19. }
  20. void ExportProjectDlg::init()
  21. {
  22. ui->tableWidget->setFont(QFont("宋体", 12));
  23. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  24. ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  25. QStringList header;
  26. header << "ID"
  27. << "工程名称"
  28. << "工程描述"
  29. << "操作";
  30. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
  31. ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  32. ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
  33. ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); //填充表格
  34. QHeaderView *vheader = ui->tableWidget->verticalHeader();
  35. // vheader->setHidden(true); // 隐藏行号
  36. ui->tableWidget->setColumnCount(header.count());
  37. ui->tableWidget->setHorizontalHeaderLabels(header);
  38. for (int i = 0; i < header.size(); i++) {
  39. ui->tableWidget->horizontalHeader()->setSectionResizeMode(i, QHeaderView::ResizeToContents);
  40. }
  41. refreshEngineerList();
  42. }
  43. void ExportProjectDlg::refreshEngineerList()
  44. {
  45. ui->tableWidget->clearContents();
  46. QList<EngineerInfo *> engineers;
  47. if (!DBServiceSet().QueryEngineerList(&engineers)) {
  48. qDebug() << "工程列表查询失败";
  49. return;
  50. }
  51. ui->tableWidget->setRowCount(engineers.count());
  52. QPushButton *exportPro = nullptr;
  53. QCheckBox *check = nullptr;
  54. QWidget *widget = nullptr;
  55. QGridLayout *layout = nullptr;
  56. int row = 0;
  57. foreach (auto *info, engineers) {
  58. //把查出的第一个字段放到任务名称列
  59. int id = info->engineerId;
  60. QString name = info->engineerName;
  61. widget = new QWidget;
  62. layout = new QGridLayout;
  63. check = new QCheckBox;
  64. layout->setSpacing(0);
  65. layout->setMargin(0);
  66. layout->addWidget(check);
  67. layout->setAlignment(check, Qt::AlignCenter); //居中
  68. widget->setLayout(layout);
  69. // ui->tableWidget->setCellWidget(row, 0, widget);
  70. ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(id)));
  71. ui->tableWidget->item(row, 0)->setTextAlignment(Qt::AlignCenter);
  72. ui->tableWidget->item(row, 0)->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  73. ui->tableWidget->setItem(row, 1, new QTableWidgetItem(info->engineerName));
  74. ui->tableWidget->item(row, 1)->setTextAlignment(Qt::AlignCenter);
  75. ui->tableWidget->item(row, 1)->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  76. ui->tableWidget->setItem(row, 2, new QTableWidgetItem(info->remark));
  77. // ui->tableWidget->item(row, 2)->setTextAlignment(Qt::AlignCenter);
  78. widget = new QWidget;
  79. layout = new QGridLayout;
  80. exportPro = new QPushButton;
  81. exportPro->setText("导出资源包");
  82. exportPro->setMaximumWidth(100);
  83. exportPro->setMinimumWidth(100);
  84. connect(exportPro, &QPushButton::clicked, [=]() { exportProject(id, name); });
  85. layout->setSpacing(0);
  86. layout->setMargin(0);
  87. layout->addWidget(exportPro);
  88. widget->setLayout(layout);
  89. ui->tableWidget->setCellWidget(row, 3, widget);
  90. row++;
  91. }
  92. qDeleteAll(engineers);
  93. engineers.clear();
  94. }
  95. void ExportProjectDlg::exportProject(int engineerId, QString name)
  96. {
  97. //判断方案是否填写完整
  98. EngineerInfo info;
  99. if (DBServiceSet().QueryEngineerByEngineerId(&info, engineerId)) {
  100. QString dbPath = QCoreApplication::applicationDirPath() + "/data/data.db";
  101. QString dbName = "mindData";
  102. QString remark = info.remark;
  103. if (remark == "能力与技术重要度评估") {
  104. if (info.indexSetId == -1) {
  105. QMessageBox::warning(this, "警告", "未创建能力需求体系,请创建后再导出!");
  106. return;
  107. } else {
  108. if (!DBServiceSet().QueryChlidNodeByPId(info.indexSetId, dbName, dbPath)) {
  109. QMessageBox::warning(this, "警告", "未创建能力需求体系,请创建后再导出!");
  110. return;
  111. }
  112. }
  113. if (info.measureFunctionId == -1) {
  114. QMessageBox::warning(this, "警告", "未创建技术措施评估体系,请创建后再导出!");
  115. return;
  116. } else {
  117. if (!DBServiceSet().QueryChlidNodeByPId(info.measureFunctionId, dbName, dbPath)) {
  118. QMessageBox::warning(this, "警告", "未创建技术措施评估体系,请创建后再导出!");
  119. return;
  120. }
  121. }
  122. }
  123. if (remark == ("技术方案评估")) {
  124. if (info.schemaEvalId == -1) {
  125. QMessageBox::warning(this, "警告", "未创建技术方案体系,请创建后再导出!");
  126. return;
  127. } else {
  128. if (!DBServiceSet().QueryChlidNodeByPId(info.schemaEvalId, dbName, dbPath)) {
  129. QMessageBox::warning(this, "警告", "未创建技术方案体系,请创建后再导出!");
  130. return;
  131. }
  132. }
  133. }
  134. if (remark == "技术方案评估,能力与技术重要度评估" || remark == "能力与技术重要度评估,技术方案评估") {
  135. if (info.schemaEvalId == -1) {
  136. QMessageBox::warning(this, "警告", "未创建技术方案体系,请创建后再导出!");
  137. return;
  138. } else {
  139. if (!DBServiceSet().QueryChlidNodeByPId(info.schemaEvalId, dbName, dbPath)) {
  140. QMessageBox::warning(this, "警告", "未创建技术方案体系,请创建后再导出!");
  141. return;
  142. }
  143. }
  144. if (info.indexSetId == -1) {
  145. QMessageBox::warning(this, "警告", "能力需求体系未创建,请创建后再导出!");
  146. return;
  147. } else {
  148. if (!DBServiceSet().QueryChlidNodeByPId(info.indexSetId, dbName, dbPath)) {
  149. QMessageBox::warning(this, "警告", "能力需求体系未创建,请创建后再导出!");
  150. return;
  151. }
  152. }
  153. if (info.measureFunctionId == -1) {
  154. QMessageBox::warning(this, "警告", "技术措施体系未创建,请创建后再导出!");
  155. return;
  156. } else {
  157. if (!DBServiceSet().QueryChlidNodeByPId(info.measureFunctionId, dbName, dbPath)) {
  158. QMessageBox::warning(this, "警告", "技术措施体系未创建,请创建后再导出!");
  159. return;
  160. }
  161. }
  162. }
  163. }
  164. //判断是否配置过专家
  165. QList<UserConfig *> list;
  166. if (DBServiceSet().QueryUserConfigListInfoByEngineerId(&list, engineerId)) {
  167. if (list.isEmpty()) {
  168. QMessageBox::warning(this, "警告", "请先给该工程配置专家!");
  169. return;
  170. }
  171. }
  172. QFileDialog::Options options;
  173. options |= QFileDialog::DontUseNativeDialog;
  174. //文件夹路径
  175. QString srcDirPath = QFileDialog::getExistingDirectory(nullptr, "导出资源包", "/", options);
  176. if (srcDirPath.isEmpty()) {
  177. return;
  178. }
  179. srcDirPath += "/";
  180. srcDirPath += name;
  181. qDebug() << "srcDirPath---" << srcDirPath;
  182. QString sysDbPath = QCoreApplication::applicationDirPath();
  183. sysDbPath += "/data";
  184. // qDebug() << "filePath---" << sysDbPath;
  185. bool result = FileUtil().copyDirectoryFiles(srcDirPath, sysDbPath, true);
  186. // TODO 删除其他多余数据只保留选中工程
  187. if (result) {
  188. DBServiceSet().DeleteEngineerNotInId(engineerId, srcDirPath + "/qfd.db");
  189. }
  190. if (result) {
  191. QMessageBox::information(this, "成功", tr("导出成功"));
  192. } else {
  193. QMessageBox::warning(this, "失败", tr("导出失败"));
  194. }
  195. }
  196. ExportProjectDlg::~ExportProjectDlg()
  197. {
  198. delete ui;
  199. }