GroupPanelWidget.cpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. #include "GroupPanelWidget.h"
  2. #include "GroupTableWidget.h"
  3. #include "dbService/DBServiceSet.h"
  4. #include "dbService/UserService.h"
  5. #include "dbService/UserConfigService.h"
  6. #include "ui_GroupPanelWidget.h"
  7. #include <QDebug>
  8. GroupPanelWidget::GroupPanelWidget(QWidget *parent) : QWidget(parent), ui(new Ui::GroupPanelWidget)
  9. {
  10. ui->setupUi(this);
  11. firstLayout = new QGridLayout;
  12. firstPlainWidget = nullptr;
  13. ui->stackedWidget->widget(0)->setLayout(firstLayout);
  14. }
  15. GroupPanelWidget::~GroupPanelWidget()
  16. {
  17. if (currentMindNodes) {
  18. delete currentMindNodes;
  19. }
  20. if (classifiedNodes) {
  21. delete classifiedNodes;
  22. }
  23. if (indexsRefClassifiedNodes) {
  24. delete indexsRefClassifiedNodes;
  25. }
  26. delete ui;
  27. }
  28. void GroupPanelWidget::init(const QStringList &indexsRef, const QStringList &indexs, int engineerId)
  29. {
  30. indexsRefClassifiedNodes = nullptr;
  31. if (!indexsRef.isEmpty()) {
  32. MindNodeManager *indexsRefNodes = new MindNodeManager(); //是否参考指标体系
  33. getMindNodes(indexsRefNodes, indexsRef);
  34. indexsRefClassifiedNodes = new QList<QList<MindNodeManager::NodeMessage>>;
  35. sortMindNodes(*indexsRefNodes, indexsRefClassifiedNodes);
  36. delete indexsRefNodes;
  37. } else {
  38. indexsRefClassifiedNodes = nullptr;
  39. }
  40. if (!indexs.isEmpty()) {
  41. currentMindNodes = new MindNodeManager();
  42. classifiedNodes = new QList<QList<MindNodeManager::NodeMessage>>;
  43. getMindNodes(currentMindNodes, indexs);
  44. sortMindNodes(*currentMindNodes, classifiedNodes);
  45. } else {
  46. currentMindNodes = nullptr;
  47. classifiedNodes = nullptr;
  48. }
  49. initPlainWidget(engineerId);
  50. }
  51. void GroupPanelWidget::setViewType(int type)
  52. {
  53. analysisViewType = type;
  54. }
  55. void GroupPanelWidget::setArithmeticMethod(QString method)
  56. {
  57. arithmeticMethod = method;
  58. }
  59. //节点排序
  60. void GroupPanelWidget::sortMindNodes(const MindNodeManager &manager,
  61. QList<QList<MindNodeManager::NodeMessage>> *classify)
  62. {
  63. for (MindNodeManager::NodeMessage msg : manager.getMindNodes()) {
  64. QStringList nodePonit = msg.node.split(".");
  65. while (nodePonit.count() - 1 > classify->count()) {
  66. (*classify) << QList<MindNodeManager::NodeMessage>();
  67. }
  68. (*classify)[nodePonit.count() - 2] << msg;
  69. }
  70. }
  71. //获取脑图节点
  72. void GroupPanelWidget::getMindNodes(MindNodeManager *manager, QStringList listNodes)
  73. {
  74. int sn[16];
  75. memset(sn, 0, sizeof(int) * 16);
  76. int spaceNum = -1;
  77. int level = 0;
  78. MindNodeManager::NodeMessage temp;
  79. manager->setMindName(listNodes[0].trimmed());
  80. for (int i = 1; i < listNodes.count(); i++) {
  81. int tempSpace = 0;
  82. for (QString s : listNodes[i]) {
  83. if (s == " ") {
  84. tempSpace++;
  85. } else {
  86. break;
  87. }
  88. }
  89. tempSpace /= 4;
  90. if (tempSpace == 1) { //一级
  91. spaceNum = tempSpace;
  92. level = 0;
  93. sn[level]++;
  94. memset((void *)&sn[1], 0, sizeof(int) * 15);
  95. } else {
  96. if (spaceNum < tempSpace) { //空格增加
  97. spaceNum = tempSpace;
  98. level++;
  99. sn[level]++;
  100. } else if (spaceNum == tempSpace) { //同一级
  101. sn[level]++;
  102. } else {
  103. memset((void *)&sn[tempSpace], 0, sizeof(int) * (16 - tempSpace));
  104. level -= spaceNum - tempSpace;
  105. spaceNum = tempSpace;
  106. sn[level]++;
  107. }
  108. }
  109. QString node = "1";
  110. for (int l : sn) {
  111. if (l > 0) {
  112. node += QString(".%1").arg(l);
  113. } else {
  114. break;
  115. }
  116. }
  117. if (listNodes[i].trimmed().isEmpty()) {
  118. temp.name = QString("NULL(节点%1)").arg(node);
  119. temp.node = node;
  120. temp.remark = "";
  121. manager->pushNewMind(temp);
  122. } else {
  123. temp.name = listNodes[i].trimmed().split("\t")[0];
  124. temp.node = node;
  125. temp.remark = listNodes[i].trimmed().split("\t")[1];
  126. manager->pushNewMind(temp);
  127. }
  128. }
  129. }
  130. QStringList GroupPanelWidget::getFirstIndexNodes(const MindNodeManager &manager)
  131. {
  132. QList<QList<MindNodeManager::NodeMessage>> classify;
  133. for (MindNodeManager::NodeMessage msg : manager.getMindNodes()) {
  134. QStringList nodePonit = msg.node.split(".");
  135. while (nodePonit.count() - 1 > classify.count()) {
  136. classify << QList<MindNodeManager::NodeMessage>();
  137. }
  138. classify[nodePonit.count() - 2] << msg;
  139. }
  140. QStringList firstNodes;
  141. for (MindNodeManager::NodeMessage msg : classify.first()) {
  142. firstNodes << msg.name;
  143. }
  144. return firstNodes;
  145. }
  146. QStringList GroupPanelWidget::getLastIndexNodes(const MindNodeManager &manager)
  147. {
  148. QList<QList<MindNodeManager::NodeMessage>> classify;
  149. for (MindNodeManager::NodeMessage msg : manager.getMindNodes()) {
  150. QStringList nodePonit = msg.node.split(".");
  151. while (nodePonit.count() - 1 > classify.count()) {
  152. classify << QList<MindNodeManager::NodeMessage>();
  153. }
  154. classify[nodePonit.count() - 2] << msg;
  155. }
  156. QStringList lastNodes;
  157. for (MindNodeManager::NodeMessage msg : classify.last()) {
  158. lastNodes << msg.name;
  159. }
  160. return lastNodes;
  161. }
  162. void GroupPanelWidget::initPlainWidget(int engineerId)
  163. {
  164. demandLists.clear();
  165. technicalImportLists.clear();
  166. //准备第一页,非tab的
  167. GroupTableWidget *table = new GroupTableWidget;
  168. connect(table, &GroupTableWidget::returnModel, this, &GroupPanelWidget::getTableModel);
  169. //获取专家
  170. QList<QFUser *> userInfoList;
  171. if (!UserService().QueryUserListByEngineerId(&userInfoList, engineerId)) {
  172. // QMessageBox::critical(this, "异常", "数据库访问异常!");
  173. return;
  174. }
  175. //获取技术措施指标权重
  176. for (int i = 0; i < userInfoList.size(); i++) {
  177. const QFUser *user = userInfoList.at(i);
  178. QString str = "专家" + QString::number(i + 1) + "-" + user->userName;
  179. UserConfig userConfig;
  180. UserConfigService().QueryUserConfigListInfoByUserIdAndEngineerId(&userConfig, user->id, engineerId);
  181. table->addColNode(QString::number(user->id), str, QString::number(userConfig.weight / 100));
  182. if (analysisViewType == IndexType::IndexTech) {
  183. QList<DemandWeight *> nodeValueInfoList;
  184. DBServiceSet().QuerySecondDemandWeightByEngineerId(&nodeValueInfoList, userInfoList.at(i)->id, engineerId,
  185. "能力重要度评估指标体系");
  186. demandLists.append(nodeValueInfoList);
  187. } else if (analysisViewType == IndexType::SchemaEval) {
  188. QList<DemandWeight *> nodeValueInfoList;
  189. DBServiceSet().QueryLastPageDemandWeightByEngineerId(&nodeValueInfoList,
  190. QString::number(userInfoList.at(i)->id), engineerId,
  191. "方案评估指标体系", (classifiedNodes->count() - 1));
  192. demandLists.append(nodeValueInfoList);
  193. } else {
  194. QList<TechnicalImport *> nodeValueInfoList;
  195. DBServiceSet().QueryTechnicalImportInfoByEngineerId(&nodeValueInfoList, userInfoList.at(i)->id, engineerId);
  196. technicalImportLists.append(nodeValueInfoList);
  197. }
  198. }
  199. if (classifiedNodes->isEmpty()) {
  200. return;
  201. }
  202. if (analysisViewType == IndexType::IndexTech || analysisViewType == SchemaEval) {
  203. for (MindNodeManager::NodeMessage msg : classifiedNodes->last()) {
  204. table->addRowNode(msg.node, msg.name, msg.remark);
  205. }
  206. table->paintDemandTable(demandLists, arithmeticMethod);
  207. } else if (analysisViewType == IndexType::TechMessaure) {
  208. for (MindNodeManager::NodeMessage msg : classifiedNodes->first()) {
  209. table->addRowNode(msg.node, msg.name, msg.remark);
  210. }
  211. table->paintTechnicalTable(technicalImportLists, arithmeticMethod);
  212. } else {
  213. for (MindNodeManager::NodeMessage msg : classifiedNodes->first()) {
  214. table->addRowNode(msg.node, msg.name, msg.remark);
  215. }
  216. table->setTableType(analysisViewType);
  217. table->paintDemandTable(demandLists, arithmeticMethod);
  218. }
  219. firstLayout->addWidget(table);
  220. qDeleteAll(userInfoList);
  221. }
  222. void GroupPanelWidget::getTableModel(QStandardItemModel *item)
  223. {
  224. emit returnModel(item);
  225. }