// thirdPartyApi.js const axios = require('axios'); // BASIC_API = 'https://hemobs.icoldchain.cn/' const BASIC_API = 'http://testbs.ihemodialysis.com/' let cachedToken = null; let tokenExpiresAt = null; // 获取 Token 的函数 async function getAccessToken() { try { const formData = new FormData(); formData.append('user_no', 'data_cyc'); formData.append('user_password', 'cheng0624'); const response = await axios.post(`${BASIC_API}/user/info/login`, formData, { headers: { 'Content-Type': 'multipart/form-data', // 通常不需要手动设置,axios 会自动处理 } }); // 假设响应中包含 token 字段和 expires_in 秒数 const { data } = response.data; const expires_in=3600 return { data ,expires_in}; } catch (error) { console.error('Error getting access token:', error.message); throw error; } } // 获取缓存或新的 Token async function getCachedOrNewToken() { if (cachedToken && tokenExpiresAt > Date.now()) { return cachedToken; } // 如果 token 已经过期或不存在,则重新获取 const { data, expires_in } = await getAccessToken(); cachedToken = data; tokenExpiresAt = Date.now() + (expires_in - 60) * 1000; // 提前 60 秒刷新 token return cachedToken; } // 构建 URL 函数 function buildUrl(base, pathParams) { let url = BASIC_API+base; Object.keys(pathParams).forEach(key => { url = url.replace(`:${key}`, encodeURIComponent(pathParams[key])); }); return url; } // 发起第三方 API 请求 不需要token async function fetchThirdPartyDataNoToke(url, method = 'GET', headers = {}, data = null, queryParams = {}, pathParams = {}) { try { const fullUrl = buildUrl(url, pathParams); const response = await axios({ url: fullUrl, method, headers: { ...headers }, params: queryParams, // 查询字符串参数 data // 请求体参数 }); return response.data; } catch (error) { console.error('Error fetching third-party data:', error.message); throw error; } } // 发起第三方 API 请求 async function fetchThirdPartyData(url, method = 'GET', headers = {}, data = null, queryParams = {}, pathParams = {}) { try { const token = await getCachedOrNewToken(); console.log('得到了token------------------------',token) const fullUrl = buildUrl(url, pathParams); const response = await axios({ url: fullUrl, method, headers: { ...headers, Authorization: `Bearer ${token}` }, params: queryParams, // 查询字符串参数 data // 请求体参数 }); return response.data; } catch (error) { console.error('Error fetching third-party data:', error.message); throw error; } } module.exports = { fetchThirdPartyDataNoToke, fetchThirdPartyData, getAccessToken }; // 插入数据 const installData=async (mode)=>{ console.log(mode) try{ let selectSql=`SELECT * FROM patient_rtcf_result WHERE code='${mode.recordNo}'` const [rows] = await pool.promise().query(selectSql); if(rows.length>0){ let updateSql='' if(mode.fatFree){ updateSql=`UPDATE patient_rtcf_result SET rtcf_json_bf ='${JSON.stringify(mode)}'` }else if (mode.bmi){ updateSql=`UPDATE patient_rtcf_result SET rtcf_json_bmi ='${JSON.stringify(mode)}'` } if(updateSql){ console.log(`-------------------------更新${updateSql}---------`) console.log(updateSql) await pool.promise().query(updateSql) } }else{ console.log('34') // 临时的人体成分分析 let bf='' // 临时的身高体重 let bmi='' if(mode.fatFree){ bf=JSON.stringify(mode) } if(mode.bmi){ bmi=JSON.stringify(mode) } console.log(`bf=${bf},bmi=====${bmi}`) let sqlStr=`INSERT INTO patient_rtcf_result (id, code, patient_code,`+ `comm_time,rtcf_json_bmi,`+ `rtcf_json_bf,`+ `create_time)`+ `VALUES (0, '${mode.recordNo}', '${mode.userID}', '${mode.measureTime}','${bmi}','${bf}','${moment(new Date()).format('YYYY-MM-DD HH:mm:ss')}')` console.log(sqlStr) await pool.promise().query(sqlStr) } }catch(err){ console.log('数据写入异常22') } }