34
chenyc
2024-12-23 eb9f025e3d66017d1140b228200663c6319a712d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// 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
};
 
// 插入数据
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')
  }
}