chartController.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import { successResponse, errorResponse } from "../utils/response.js";
  2. import { generateBarChart } from "../utils/chartsCom/BarChart.js";
  3. import { generateLineChart } from "../utils/chartsCom/lineChartsFen.js";
  4. import { generateLineAndChildLine } from "../utils/chartsCom/lineAndChildLine.js";
  5. import { generateHeatmapChart } from "../utils/chartsCom/HeatmapCharts.js";
  6. import { generate3DDrawingChart } from "../utils/chartsCom/3DDrawingChart.js";
  7. import { generateTime3DChart } from "../utils/chartsCom/Time3DChart.js";
  8. import { generateTwoDMarkersChart } from "../utils/chartsCom/TwoDMarkersChart.js";
  9. import { generateTwoDMarkersChart1 } from "../utils/chartsCom/TwoDMarkersChart1.js";
  10. import { generateColorbarInitTwoDmarkersChart } from "../utils/chartsCom/ColorbarInitTwoDmarkersChart.js";
  11. import { generatepowerMarkers2DCharts } from "../utils/chartsCom/powerMarkers2DCharts.js";
  12. import axios from "axios";
  13. // 提取公共逻辑到辅助函数
  14. const handleChartGeneration = async (
  15. req,
  16. res,
  17. generateChartFn,
  18. successMessage,
  19. additionalParams = {}
  20. ) => {
  21. try {
  22. const { fileAddr } = req.body;
  23. if (!fileAddr) {
  24. return errorResponse(res, "缺少数据URL", 400);
  25. }
  26. // 从URL获取数据
  27. const response = await axios.get(fileAddr);
  28. let data = [];
  29. // console.log("获取到的数据:", data);/
  30. if (typeof response.data === "string") {
  31. let dataString = response.data;
  32. dataString = dataString.trim(); // 去除前后空格
  33. dataString = dataString.replace(/Infinity/g, '"Infinity"'); // 替换 Infinity 为 "Infinity"
  34. try {
  35. const parsedData = JSON.parse(dataString);
  36. data = parsedData;
  37. } catch (error) {
  38. console.error("JSON 解析失败:", error);
  39. }
  40. } else {
  41. data = response.data;
  42. }
  43. console.log(data, " data");
  44. // 验证数据格式
  45. if (
  46. !data ||
  47. !data.data ||
  48. !data.data[0] ||
  49. !data.data[0].xData ||
  50. !data.data[0].yData
  51. ) {
  52. return errorResponse(res, "获取的数据格式不正确", 400);
  53. }
  54. // 生成图表并上传
  55. const imageUrl = await generateChartFn(
  56. data,
  57. ...Object.values(additionalParams)
  58. );
  59. successResponse(
  60. res,
  61. {
  62. imageUrl: imageUrl,
  63. },
  64. successMessage
  65. );
  66. } catch (error) {
  67. console.error(`${successMessage.replace("生成成功", "生成失败")}:`, error);
  68. if (error.response) {
  69. errorResponse(
  70. res,
  71. `获取数据失败: ${error.response.status}`,
  72. error.response.status
  73. );
  74. } else {
  75. errorResponse(
  76. res,
  77. `${successMessage.replace("生成成功", "生成失败")}`,
  78. 500
  79. );
  80. }
  81. }
  82. };
  83. export const createBarChart = async (req, res) => {
  84. await handleChartGeneration(req, res, generateBarChart, "柱状图生成成功");
  85. };
  86. export const createLineChart = async (req, res) => {
  87. const { fieldEngineCode } = req.body;
  88. await handleChartGeneration(req, res, generateLineChart, "折线图生成成功", {
  89. fieldEngineCode,
  90. });
  91. };
  92. export const createLineAndChildLine = async (req, res) => {
  93. await handleChartGeneration(
  94. req,
  95. res,
  96. generateLineAndChildLine,
  97. "折线图生成成功"
  98. );
  99. };
  100. export const createHeatmapCharts = async (req, res) => {
  101. await handleChartGeneration(req, res, generateHeatmapChart, "热力图生成成功");
  102. };
  103. export const create3DDrawingChart = async (req, res) => {
  104. await handleChartGeneration(req, res, generate3DDrawingChart, "3D图生成成功");
  105. };
  106. export const createTime3DChart = async (req, res) => {
  107. await handleChartGeneration(req, res, generateTime3DChart, "3D 分图生成成功");
  108. };
  109. export const createTwoDMarkersChart = async (req, res) => {
  110. await handleChartGeneration(
  111. req,
  112. res,
  113. generateTwoDMarkersChart,
  114. "2D 分图生成成功"
  115. );
  116. };
  117. export const createTwoDMarkersChart1 = async (req, res) => {
  118. await handleChartGeneration(
  119. req,
  120. res,
  121. generateTwoDMarkersChart1,
  122. "2D 分图生成成功"
  123. );
  124. };
  125. //
  126. export const createColorbarInitTwoDmarkersChart = async (req, res) => {
  127. await handleChartGeneration(
  128. req,
  129. res,
  130. generateColorbarInitTwoDmarkersChart,
  131. "2D 分图生成成功"
  132. );
  133. };
  134. export const createpowerMarkers2DCharts = async (req, res) => {
  135. await handleChartGeneration(
  136. req,
  137. res,
  138. generatepowerMarkers2DCharts,
  139. "2D 分图生成成功"
  140. );
  141. };
  142. //