ExportProjectDlg.cpp 8.6 KB

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