// thirdPartyApi.js
|
const axios = require('axios');
|
|
const logger = require('./logger'); // 根据实际情况调整路径
|
// 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() {
|
logger.log('Check if the token exists')
|
if (cachedToken && tokenExpiresAt > Date.now()) {
|
return cachedToken;
|
}
|
|
// 如果 token 已经过期或不存在,则重新获取
|
logger.log('If the token has expired or does not exist, retrieve it again')
|
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();
|
logger.info(`get token====${token}`)
|
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) {
|
logger.error('Error fetching third-party data:', error.message)
|
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')
|
}
|
}
|