dealcsv.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. var rowNum = 0;
  2. var totalTime = 0; // 心跳记录的总时长 秒
  3. var rsCount = 0;
  4. var rs = "";
  5. var intv = "";
  6. var intvTime = 1000; //数据处理间隔时间 毫秒
  7. var preHrTime = 0; //上次心率数据处理时间 毫秒
  8. var rowData = { //原始记录的当前行数据 每隔3-4秒一条数据
  9. hr_timestamp: 0,
  10. hr_value: 0,
  11. };
  12. var adjustRowData = { //校正后的当前行数据 每隔 intvTime 一条数据
  13. hr_timestamp: 0,
  14. hr_value: 0,
  15. };
  16. var hrAverage = 0;
  17. var hrAverageArr = [];
  18. var charData = [];
  19. var xAxisData = [];
  20. var dom_rowNum = "";
  21. var dom_totalTime = "";
  22. var dom_hrValue = "";
  23. var dom_endFlag = ""; //endFlag 0:未开始 1:已开始 2:已结束
  24. var dom_spIntensity = "";
  25. var dom_spIntensityLevelString= "";
  26. var dom_areaHr = "";
  27. function csvInit() {
  28. resetData();
  29. dom_rowNum = $("#rowNum");
  30. dom_totalTime = $("#totalTime");
  31. dom_hrValue = $("#hrValue");
  32. dom_endFlag = $("#endFlag");
  33. dom_spIntensity = $("#spIntensity");
  34. dom_spIntensityLevelString = $("#spIntensityLevelString");
  35. dom_areaHr = $("#areaHr");
  36. }
  37. function resetData() {
  38. $("#hrValue").text("--");
  39. $("#rowNum").val(0);
  40. $("#totalTime").val(0);
  41. $("#rsCount").val(0);
  42. $("#endFlag").val(0);
  43. preHrTime = 0;
  44. charData.length = 0;
  45. xAxisData.length = 0;
  46. }
  47. function loadCsvFile(csvfile) {
  48. $.ajax({
  49. url: csvfile,
  50. dataType: 'text',
  51. }).done(successFunction);
  52. }
  53. function successFunction(data) {
  54. data = data.trim();
  55. rs = data.split(/\r?\n|\r/);
  56. rsCount = rs.length;
  57. $("#rsCount").val(rsCount);
  58. console.log("rsCount " + rsCount);
  59. getDataTotalTime(); //秒
  60. dom_totalTime.val(totalTime);
  61. getXAxisData();
  62. dealData();
  63. }
  64. function getDataTotalTime() {
  65. let firstCell = rs[0].split(',');
  66. let lastCell = rs[rsCount-1].split(',');
  67. totalTime = lastCell[0] - firstCell[0];
  68. // console.log("firstCell: " + firstCell);
  69. // console.log("lastCell: " + lastCell);
  70. console.log("[getDataTotalTime] totalTime: " + totalTime);
  71. }
  72. //计算平均心率
  73. function getHrAverage(hr) {
  74. if (hrAverageArr.length >= 5) {
  75. hrAverageArr.shift(); //删除数组的第一个元素
  76. }
  77. hrAverageArr.push(hr);
  78. hrAverage = Math.round(sumArr(hrAverageArr) / hrAverageArr.length);
  79. // console.log("hrAverage: " + hrAverage);
  80. return hrAverage;
  81. }
  82. //获取图表的X轴数据集
  83. function getXAxisData() {
  84. let count = Math.ceil(totalTime * 1000 / intvTime); //向上取整
  85. xAxisData = getArrRange(0, count);
  86. console.log("[getXAxisData] xAxisData count: " + count);
  87. // console.log("xAxisData: " + xAxisData);
  88. }
  89. function getRowCell() {
  90. let rowCells = rs[rowNum].split(',');
  91. rowData.hr_timestamp = rowCells[0];
  92. rowData.hr_value = rowCells[2];
  93. }
  94. function dealData() {
  95. (async function() {
  96. console.log("[dealData] start " + new Date());
  97. dom_endFlag.val(1);
  98. let i = 0;
  99. while (rowNum < rsCount) {
  100. // console.log('[dealData]['+ i +'] rowNum: '+ rowNum +' ' + new Date());
  101. if (preHrTime > 0) {
  102. if (preHrTime >= rowData.hr_timestamp) {
  103. rowNum++;
  104. if (rowNum < rsCount) {
  105. getRowCell();
  106. }
  107. adjustRowData.hr_timestamp = preHrTime; //使用校正后的时间戳
  108. adjustRowData.hr_value = rowData.hr_value;
  109. }
  110. else { // 小于最新记录的时间戳,仍然显示上次的心率
  111. adjustRowData.hr_timestamp = preHrTime; //仅更新时间戳
  112. // adjustRowData.hr_value = rowData.hr_value;
  113. }
  114. }
  115. else { //首次加载数据
  116. getRowCell();
  117. preHrTime = parseFloat(rowData.hr_timestamp);
  118. adjustRowData.hr_timestamp = rowData.hr_timestamp;
  119. adjustRowData.hr_value = rowData.hr_value;
  120. }
  121. // console.log("preHrTime: "+preHrTime + " adjustRowData.hr_timestamp: " + adjustRowData.hr_timestamp + " rowData.hr_timestamp: " + rowData.hr_timestamp);
  122. // 使用校正后的数据
  123. let hr = adjustRowData.hr_value;
  124. sportInfo = getSportInfo(intvTime, hr); //cle.js
  125. getHrAverage(hr);
  126. charData.push(hrAverage); //加载平均心率
  127. // charData.push(hr); //加载心率
  128. // charData.push(Math.round(sportInfo.ei)); //加载EI
  129. dispData();
  130. await sleep(intvTime);
  131. preHrTime = parseFloat(preHrTime) + (intvTime / 1000);
  132. // console.log("[dealData]["+ i +"] adjustRowData.hr_value: " + adjustRowData.hr_value + " rowData.hr_value: " + rowData.hr_value + " " + new Date());
  133. i++;
  134. }
  135. dom_endFlag.val(2);
  136. dom_hrValue.text("--");
  137. console.log("[dealData] finished " + new Date());
  138. })();
  139. }
  140. function dispData() {
  141. dom_rowNum.val(rowNum);
  142. dom_hrValue.text(adjustRowData.hr_value);
  143. dom_spIntensity.text(sportInfo.intensity);
  144. dom_spIntensityLevelString.text(sportInfo.intensityLevelString);
  145. dom_areaHr.css("background-color", sportInfo.intensityLevelColor);
  146. dispStyle();
  147. dispChart();
  148. }
  149. function dispChart() {
  150. // console.log("charData: " + charData);
  151. var option = {
  152. xAxis: {
  153. data: xAxisData,
  154. show: false
  155. },
  156. yAxis: {
  157. // show: false
  158. },
  159. series: [{
  160. data: charData,
  161. }]
  162. };
  163. myChart.setOption(option);
  164. }
  165. function dispStyle() {
  166. var class_hrValue = '';
  167. if (sportInfo.intensity <= 30) {
  168. class_hrValue = 'slowJump';
  169. } else if (sportInfo.intensity > 30 && sportInfo.intensity <= 90) {
  170. class_hrValue = 'normalJump';
  171. } else if (sportInfo.intensity > 90) {
  172. class_hrValue = 'fastJump';
  173. }
  174. else {
  175. class_hrValue = '';
  176. }
  177. // console.log("class_hrValue: " + class_hrValue);
  178. dom_hrValue.removeClass(); //removeClass没有参数,则移除所有的Class
  179. dom_hrValue.addClass(class_hrValue);
  180. }