Browse Source

部署后相关BUG解决

lamphua 3 weeks ago
parent
commit
b9187ba369

+ 14
- 16
cmc-temperature-back/cmc-monitoring/src/main/java/com/ruoyi/monitoring/service/impl/CmcTemperatureServiceImpl.java View File

28
     @Inject
28
     @Inject
29
     CmcChannelMapper cmcChannelMapper;
29
     CmcChannelMapper cmcChannelMapper;
30
 
30
 
31
-    // 移除循环依赖注入,直接使用mapper
32
-    // @Inject
33
-    // ICmcTemperatureService cmcTemperatureService;
34
-
35
     /**
31
     /**
36
      * 查询水温监测列表信息
32
      * 查询水温监测列表信息
37
      * @param cmcTemperature 水温监测信息
33
      * @param cmcTemperature 水温监测信息
44
         int channelSize = cmcChannelMapper.listChannel(cmcChannel).size();
40
         int channelSize = cmcChannelMapper.listChannel(cmcChannel).size();
45
         QueryWrapper qw = getQW(cmcTemperature, cmcChannel);
41
         QueryWrapper qw = getQW(cmcTemperature, cmcChannel);
46
         List<CmcTemperature> records = cmcTemperatureMapper.selectListByQuery(qw);
42
         List<CmcTemperature> records = cmcTemperatureMapper.selectListByQuery(qw);
47
-
48
-        if (records.isEmpty()) {
43
+        if (records == null || records.isEmpty()) {
49
             return new ArrayList<>();
44
             return new ArrayList<>();
50
         }
45
         }
51
 
46
 
61
                 if (diffInMillis / 1000 / 60 > 15) {
56
                 if (diffInMillis / 1000 / 60 > 15) {
62
                     // 使用更安全的方式删除数据,避免内存泄漏
57
                     // 使用更安全的方式删除数据,避免内存泄漏
63
                     int removeStart = Math.max(0, records.size() - channelSize + 30);
58
                     int removeStart = Math.max(0, records.size() - channelSize + 30);
64
-                    records = records.subList(0, removeStart);
59
+                    records = new ArrayList<>(records.subList(0, removeStart));
65
                 }
60
                 }
66
             }
61
             }
67
 
62
 
68
             // 第1条数据与0时时间差 毫秒
63
             // 第1条数据与0时时间差 毫秒
69
-            if (records.size() > 0 && cmcTemperature.getStartTime() != null) {
64
+            if (!records.isEmpty() && cmcTemperature.getStartTime() != null) {
70
                 diffInMillis = records.get(0).getDatetime().getTime() - cmcTemperature.getStartTime().getTime();
65
                 diffInMillis = records.get(0).getDatetime().getTime() - cmcTemperature.getStartTime().getTime();
71
                 if (diffInMillis / 1000 / 60 > 15) {
66
                 if (diffInMillis / 1000 / 60 > 15) {
72
                     int removeStart = Math.max(0, records.size() - channelSize);
67
                     int removeStart = Math.max(0, records.size() - channelSize);
73
-                    records = records.subList(0, removeStart);
68
+                    records = new ArrayList<>(records.subList(0, removeStart));
74
                 }
69
                 }
75
             }
70
             }
76
 
71
 
83
             QueryWrapper qw1 = getQW(temperature, cmcChannel);
78
             QueryWrapper qw1 = getQW(temperature, cmcChannel);
84
             List<CmcTemperature> previousData = cmcTemperatureMapper.selectListByQuery(qw1);
79
             List<CmcTemperature> previousData = cmcTemperatureMapper.selectListByQuery(qw1);
85
 
80
 
86
-            // 合并数据,避免重复创建列表
87
-            temperatureList.addAll(previousData);
88
-            temperatureList.addAll(records);
89
-
90
-            // 优化数据处理逻辑
91
-            if (channelSize > 30 && temperatureList.size() > channelSize) {
92
-                processTemperatureData(temperatureList, channelSize);
81
+            if (previousData != null && !previousData.isEmpty()) {
82
+                // 合并数据,避免重复创建列表
83
+                temperatureList.addAll(previousData);
93
             }
84
             }
94
         }
85
         }
95
 
86
 
87
+        temperatureList.addAll(records);
88
+
89
+        // 优化数据处理逻辑
90
+        if (channelSize > 30 && temperatureList.size() > channelSize) {
91
+            processTemperatureData(temperatureList, channelSize);
92
+        }
93
+
96
         return temperatureList;
94
         return temperatureList;
97
     }
95
     }
98
 
96
 

+ 9
- 15
cmc-temperature-back/ruoyi-admin/src/main/resources/app-dev.yml View File

168
       jdbcUrl: jdbc:sqlite::resource:static/cmc-temperature.db?date_string_format=yyyy-MM-dd HH:mm:ss
168
       jdbcUrl: jdbc:sqlite::resource:static/cmc-temperature.db?date_string_format=yyyy-MM-dd HH:mm:ss
169
       username:
169
       username:
170
       password:
170
       password:
171
-      # 添加连接池优化配置
172
-      maximumPoolSize: 5
173
-      minimumIdle: 1
174
-      connectionTimeout: 180000
175
-      idleTimeout: 600000
176
-      maxLifetime: 1800000
177
     access:
171
     access:
178
       type: com.zaxxer.hikari.HikariDataSource
172
       type: com.zaxxer.hikari.HikariDataSource
179
       driverClassName: net.ucanaccess.jdbc.UcanaccessDriver
173
       driverClassName: net.ucanaccess.jdbc.UcanaccessDriver
180
-#      jdbcUrl: jdbc:ucanaccess://D:/temperature/Data/SKREC_ID1.accdb
181
-      jdbcUrl: jdbc:ucanaccess://E:/Java/cmc-temperature/cmc-temperature-back/sql/Data/SKREC_ID1.accdb
174
+#      jdbcUrl: jdbc:ucanaccess:///home/cmcgis/projects/cmc-temperature/Data/SKREC_ID1.accdb;showSchema=false;sysSchema=false;memory=false;keepMirror=true;immediatelyReleaseResources=true;openExclusive=false;net.ucanaccess.metadata=ignore;ignoreCase=true;logLevel=WARNING;newDatabaseVersion=V2007
175
+      jdbcUrl: jdbc:ucanaccess://E:/Java/cmc-temperature/cmc-temperature-back/sql/Data/SKREC_ID1.accdb;memory=false;keepMirror=true;immediatelyReleaseResources=true;ignorecase=true;showschema=false;sysschema=false;openExclusive=false
182
       username:
176
       username:
183
       password:
177
       password:
184
-      # 添加连接池优化配置
185
-      maximumPoolSize: 5
186
-      minimumIdle: 1
187
-      connectionTimeout: 180000
188
-      idleTimeout: 600000
189
-      maxLifetime: 1800000
190
 #      type: com.zaxxer.hikari.HikariDataSource
178
 #      type: com.zaxxer.hikari.HikariDataSource
191
 #      driverClassName: com.mysql.cj.jdbc.Driver
179
 #      driverClassName: com.mysql.cj.jdbc.Driver
192
 #      jdbcUrl: jdbc:mysql://127.0.0.1:3306/ry-vue?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
180
 #      jdbcUrl: jdbc:mysql://127.0.0.1:3306/ry-vue?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
226
 # Redis配置
214
 # Redis配置
227
 redis:
215
 redis:
228
   cache_source:
216
   cache_source:
217
+#    config: |
218
+#      singleServerConfig:
219
+#        address: redis://cmc-redis:6379
220
+#        password:
221
+#        database: 7
222
+#      codec: !<org.redisson.codec.JsonJacksonCodec> {}
229
     config: |
223
     config: |
230
       singleServerConfig:
224
       singleServerConfig:
231
-        address: redis://127.0.0.1:6379
225
+        address: redis://localhost:6379
232
         password:
226
         password:
233
         database: 7
227
         database: 7
234
       codec: !<org.redisson.codec.JsonJacksonCodec> {}
228
       codec: !<org.redisson.codec.JsonJacksonCodec> {}

+ 3
- 0
cmc-temperature-ui/src/layout/components/Navbar.vue View File

31
               <router-link to="/user/profile">
31
               <router-link to="/user/profile">
32
                 <el-dropdown-item>个人中心</el-dropdown-item>
32
                 <el-dropdown-item>个人中心</el-dropdown-item>
33
               </router-link>
33
               </router-link>
34
+              <router-link to="/index">
35
+                <el-dropdown-item>返回主页</el-dropdown-item>
36
+              </router-link>
34
               <el-dropdown-item v-if="settingsStore.showSettings" command="setLayout">
37
               <el-dropdown-item v-if="settingsStore.showSettings" command="setLayout">
35
                 <span>布局设置</span>
38
                 <span>布局设置</span>
36
               </el-dropdown-item>
39
               </el-dropdown-item>

+ 3
- 3
cmc-temperature-ui/src/utils/request.js View File

17
   // axios中请求配置有baseURL选项,表示请求URL公共部分
17
   // axios中请求配置有baseURL选项,表示请求URL公共部分
18
   baseURL: import.meta.env.VITE_APP_BASE_API,
18
   baseURL: import.meta.env.VITE_APP_BASE_API,
19
   // 超时
19
   // 超时
20
-  timeout: 100000
20
+  timeout: 200000
21
 })
21
 })
22
 
22
 
23
 // request拦截器
23
 // request拦截器
89
     }
89
     }
90
     return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
90
     return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
91
   } else if (code === 500) {
91
   } else if (code === 500) {
92
-    ElMessage({ message: msg, type: 'error' })
92
+    // ElMessage({ message: msg, type: 'error' })
93
     return Promise.reject(new Error(msg))
93
     return Promise.reject(new Error(msg))
94
   } else if (code === 601) {
94
   } else if (code === 601) {
95
     ElMessage({ message: msg, type: 'warning' })
95
     ElMessage({ message: msg, type: 'warning' })
111
   } else if (message.includes('Request failed with status code')) {
111
   } else if (message.includes('Request failed with status code')) {
112
     message = '系统接口' + message.substr(message.length - 3) + '异常'
112
     message = '系统接口' + message.substr(message.length - 3) + '异常'
113
   }
113
   }
114
-  ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
114
+  // ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
115
   return Promise.reject(error)
115
   return Promise.reject(error)
116
 })
116
 })
117
 
117
 

+ 35
- 26
cmc-temperature-ui/src/views/temperature/temMonitor.vue View File

127
 
127
 
128
 // 搜索表单数据
128
 // 搜索表单数据
129
 const today = ref(parseTime(new Date(), '{y}-{m}-{d}'))
129
 const today = ref(parseTime(new Date(), '{y}-{m}-{d}'))
130
-const yesterday = ref(parseTime(new Date(new Date().setDate(new Date().getDate()-1)), '{y}-{m}-{d}'))
130
+const yesterday = ref(parseTime(new Date(new Date().setDate(new Date().getDate() - 1)), '{y}-{m}-{d}'))
131
 const searchForm = reactive({
131
 const searchForm = reactive({
132
   timeRange: [yesterday.value, today.value],
132
   timeRange: [yesterday.value, today.value],
133
   Info: '',
133
   Info: '',
158
 const chartSensorColumns = ref([])
158
 const chartSensorColumns = ref([])
159
 const allDataList = ref([])
159
 const allDataList = ref([])
160
 
160
 
161
-const getDeviceList = () => {
162
-  channelInfoList().then(res => {
163
-    deviceOptions.value = res.map(item => ({
164
-      label: item,
165
-      value: item
166
-    }))
167
-  })
168
-  recentOperLog({createBy: userStore.userId}).then(res => {
161
+const getDeviceList = async () => {
162
+  try {
163
+    const deviceRes = await channelInfoList()
164
+    if (deviceRes && Array.isArray(deviceRes)) {
165
+      deviceOptions.value = deviceRes.map(item => ({
166
+        label: item,
167
+        value: item
168
+      }))
169
+    }
170
+  }
171
+  catch (error) {
172
+    ElMessage.warning('监测数据已更新,请刷新当前页面')
173
+  }
174
+}
175
+// 在组件挂载时调用
176
+onMounted(() => {
177
+  getDeviceList()
178
+  recentOperLog({ operName: userStore.name }).then(res => {
169
     if (res.operParam) {
179
     if (res.operParam) {
170
       searchForm.Info = res.operParam.split('Info\', values=[')[1].split(']')[0]
180
       searchForm.Info = res.operParam.split('Info\', values=[')[1].split(']')[0]
171
     }
181
     }
172
   })
182
   })
173
-}
174
-getDeviceList()
183
+})
175
 
184
 
176
 // 处理图表数据,使用全部数据
185
 // 处理图表数据,使用全部数据
177
 const processChartData = (dataList) => {
186
 const processChartData = (dataList) => {
252
     const sensorName = item.channel?.info || `传感器${item.sensorNo}`
261
     const sensorName = item.channel?.info || `传感器${item.sensorNo}`
253
     timeGroups[item.datetime][sensorName] = item.data
262
     timeGroups[item.datetime][sensorName] = item.data
254
   })
263
   })
255
-  
264
+
256
   // 转换为数组并排序
265
   // 转换为数组并排序
257
   const allTableData = Object.values(timeGroups)
266
   const allTableData = Object.values(timeGroups)
258
 
267
 
317
       Info: searchForm.Info
326
       Info: searchForm.Info
318
     })
327
     })
319
 
328
 
320
-    // 为图表和表格准备全部数据
321
-    const allData = allDataRes.list || allDataRes
322
-    totalCount.value = Number(allDataRes.total)
329
+    if (allDataRes) {
330
+      // 为图表和表格准备全部数据
331
+      const allData = allDataRes.list || allDataRes
332
+      totalCount.value = Number(allDataRes.total)
323
 
333
 
324
-    // 存储全部数据
325
-    allDataList.value = allData
334
+      // 存储全部数据
335
+      allDataList.value = allData
326
 
336
 
327
-    // 处理全部数据,生成图表数据
328
-    processChartData(allData)
337
+      // 处理全部数据,生成图表数据
338
+      processChartData(allData)
329
 
339
 
330
-    // 处理全部数据,生成表格数据(前端分页)
331
-    processTableData()
332
-
333
-    ElMessage.success('查询成功')
340
+      // 处理全部数据,生成表格数据(前端分页)
341
+      processTableData()
334
 
342
 
343
+      ElMessage.success('查询成功')
344
+    }
335
   } catch (error) {
345
   } catch (error) {
336
-    ElMessage.error('查询失败')
337
-    console.error('查询错误:', error)
346
+    ElMessage.warning('监测数据已更新,请刷新当前页面')
338
   } finally {
347
   } finally {
339
     loading.value = false
348
     loading.value = false
340
   }
349
   }
362
 
371
 
363
   // ElMessage.success('导出功能开发中...')
372
   // ElMessage.success('导出功能开发中...')
364
   // 这里可以添加导出逻辑
373
   // 这里可以添加导出逻辑
365
-  proxy.$download('monitoring/temperature/export', {    
374
+  proxy.$download('monitoring/temperature/export', {
366
     startTime: searchForm.timeRange[0] + ' 00:00:00',
375
     startTime: searchForm.timeRange[0] + ' 00:00:00',
367
     endTime: searchForm.timeRange[1] + ' 23:59:59',
376
     endTime: searchForm.timeRange[1] + ' 23:59:59',
368
     Info: searchForm.Info
377
     Info: searchForm.Info

Loading…
Cancel
Save