| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- var rowNum = 0;
- var totalTime = 0; // 心跳记录的总时长 秒
- var rsCount = 0;
- var rs = "";
- var intv = "";
- var intvTime = 1000; //数据处理间隔时间 毫秒
- var preHrTime = 0; //上次心率数据处理时间 毫秒
- var rowData = { //原始记录的当前行数据 每隔3-4秒一条数据
- hr_timestamp: 0,
- hr_value: 0,
- };
- var adjustRowData = { //校正后的当前行数据 每隔 intvTime 一条数据
- hr_timestamp: 0,
- hr_value: 0,
- };
- var hrAverage = 0;
- var hrAverageArr = [];
- var charData = [];
- var xAxisData = [];
- var dom_rowNum = "";
- var dom_totalTime = "";
- var dom_hrValue = "";
- var dom_endFlag = ""; //endFlag 0:未开始 1:已开始 2:已结束
- var dom_spIntensity = "";
- var dom_spIntensityLevelString= "";
- var dom_areaHr = "";
- function csvInit() {
- resetData();
- dom_rowNum = $("#rowNum");
- dom_totalTime = $("#totalTime");
- dom_hrValue = $("#hrValue");
- dom_endFlag = $("#endFlag");
- dom_spIntensity = $("#spIntensity");
- dom_spIntensityLevelString = $("#spIntensityLevelString");
- dom_areaHr = $("#areaHr");
- }
- function resetData() {
- $("#hrValue").text("--");
- $("#rowNum").val(0);
- $("#totalTime").val(0);
- $("#rsCount").val(0);
- $("#endFlag").val(0);
- preHrTime = 0;
- charData.length = 0;
- xAxisData.length = 0;
- }
- function loadCsvFile(csvfile) {
- $.ajax({
- url: csvfile,
- dataType: 'text',
- }).done(successFunction);
- }
- function successFunction(data) {
- data = data.trim();
- rs = data.split(/\r?\n|\r/);
- rsCount = rs.length;
- $("#rsCount").val(rsCount);
- console.log("rsCount " + rsCount);
- getDataTotalTime(); //秒
- dom_totalTime.val(totalTime);
- getXAxisData();
- dealData();
- }
- function getDataTotalTime() {
- let firstCell = rs[0].split(',');
- let lastCell = rs[rsCount-1].split(',');
- totalTime = lastCell[0] - firstCell[0];
- // console.log("firstCell: " + firstCell);
- // console.log("lastCell: " + lastCell);
- console.log("[getDataTotalTime] totalTime: " + totalTime);
- }
- //计算平均心率
- function getHrAverage(hr) {
- if (hrAverageArr.length >= 5) {
- hrAverageArr.shift(); //删除数组的第一个元素
- }
- hrAverageArr.push(hr);
- hrAverage = Math.round(sumArr(hrAverageArr) / hrAverageArr.length);
- // console.log("hrAverage: " + hrAverage);
- return hrAverage;
- }
- //获取图表的X轴数据集
- function getXAxisData() {
- let count = Math.ceil(totalTime * 1000 / intvTime); //向上取整
- xAxisData = getArrRange(0, count);
- console.log("[getXAxisData] xAxisData count: " + count);
- // console.log("xAxisData: " + xAxisData);
- }
- function getRowCell() {
- let rowCells = rs[rowNum].split(',');
- rowData.hr_timestamp = rowCells[0];
- rowData.hr_value = rowCells[2];
- }
- function dealData() {
- (async function() {
- console.log("[dealData] start " + new Date());
- dom_endFlag.val(1);
- let i = 0;
- while (rowNum < rsCount) {
- // console.log('[dealData]['+ i +'] rowNum: '+ rowNum +' ' + new Date());
- if (preHrTime > 0) {
- if (preHrTime >= rowData.hr_timestamp) {
- rowNum++;
- if (rowNum < rsCount) {
- getRowCell();
- }
- adjustRowData.hr_timestamp = preHrTime; //使用校正后的时间戳
- adjustRowData.hr_value = rowData.hr_value;
- }
- else { // 小于最新记录的时间戳,仍然显示上次的心率
- adjustRowData.hr_timestamp = preHrTime; //仅更新时间戳
- // adjustRowData.hr_value = rowData.hr_value;
- }
- }
- else { //首次加载数据
- getRowCell();
- preHrTime = parseFloat(rowData.hr_timestamp);
- adjustRowData.hr_timestamp = rowData.hr_timestamp;
- adjustRowData.hr_value = rowData.hr_value;
- }
- // console.log("preHrTime: "+preHrTime + " adjustRowData.hr_timestamp: " + adjustRowData.hr_timestamp + " rowData.hr_timestamp: " + rowData.hr_timestamp);
- // 使用校正后的数据
- let hr = adjustRowData.hr_value;
- sportInfo = getSportInfo(intvTime, hr); //cle.js
-
- getHrAverage(hr);
- charData.push(hrAverage); //加载平均心率
- // charData.push(hr); //加载心率
- // charData.push(Math.round(sportInfo.ei)); //加载EI
- dispData();
-
- await sleep(intvTime);
- preHrTime = parseFloat(preHrTime) + (intvTime / 1000);
- // console.log("[dealData]["+ i +"] adjustRowData.hr_value: " + adjustRowData.hr_value + " rowData.hr_value: " + rowData.hr_value + " " + new Date());
- i++;
- }
- dom_endFlag.val(2);
- dom_hrValue.text("--");
- console.log("[dealData] finished " + new Date());
- })();
- }
- function dispData() {
- dom_rowNum.val(rowNum);
- dom_hrValue.text(adjustRowData.hr_value);
- dom_spIntensity.text(sportInfo.intensity);
- dom_spIntensityLevelString.text(sportInfo.intensityLevelString);
- dom_areaHr.css("background-color", sportInfo.intensityLevelColor);
- dispStyle();
- dispChart();
- }
- function dispChart() {
- // console.log("charData: " + charData);
- var option = {
- xAxis: {
- data: xAxisData,
- show: false
- },
- yAxis: {
- // show: false
- },
- series: [{
- data: charData,
- }]
- };
- myChart.setOption(option);
- }
- function dispStyle() {
- var class_hrValue = '';
- if (sportInfo.intensity <= 30) {
- class_hrValue = 'slowJump';
- } else if (sportInfo.intensity > 30 && sportInfo.intensity <= 90) {
- class_hrValue = 'normalJump';
- } else if (sportInfo.intensity > 90) {
- class_hrValue = 'fastJump';
- }
- else {
- class_hrValue = '';
- }
- // console.log("class_hrValue: " + class_hrValue);
- dom_hrValue.removeClass(); //removeClass没有参数,则移除所有的Class
- dom_hrValue.addClass(class_hrValue);
- }
|