瀏覽代碼

部署后相关BUG解决

lamphua 3 週之前
父節點
當前提交
b9187ba369

+ 14
- 16
cmc-temperature-back/cmc-monitoring/src/main/java/com/ruoyi/monitoring/service/impl/CmcTemperatureServiceImpl.java 查看文件

@@ -28,10 +28,6 @@ public class CmcTemperatureServiceImpl extends ServiceImpl<CmcTemperatureMapper,
28 28
     @Inject
29 29
     CmcChannelMapper cmcChannelMapper;
30 30
 
31
-    // 移除循环依赖注入,直接使用mapper
32
-    // @Inject
33
-    // ICmcTemperatureService cmcTemperatureService;
34
-
35 31
     /**
36 32
      * 查询水温监测列表信息
37 33
      * @param cmcTemperature 水温监测信息
@@ -44,8 +40,7 @@ public class CmcTemperatureServiceImpl extends ServiceImpl<CmcTemperatureMapper,
44 40
         int channelSize = cmcChannelMapper.listChannel(cmcChannel).size();
45 41
         QueryWrapper qw = getQW(cmcTemperature, cmcChannel);
46 42
         List<CmcTemperature> records = cmcTemperatureMapper.selectListByQuery(qw);
47
-
48
-        if (records.isEmpty()) {
43
+        if (records == null || records.isEmpty()) {
49 44
             return new ArrayList<>();
50 45
         }
51 46
 
@@ -61,16 +56,16 @@ public class CmcTemperatureServiceImpl extends ServiceImpl<CmcTemperatureMapper,
61 56
                 if (diffInMillis / 1000 / 60 > 15) {
62 57
                     // 使用更安全的方式删除数据,避免内存泄漏
63 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 63
             // 第1条数据与0时时间差 毫秒
69
-            if (records.size() > 0 && cmcTemperature.getStartTime() != null) {
64
+            if (!records.isEmpty() && cmcTemperature.getStartTime() != null) {
70 65
                 diffInMillis = records.get(0).getDatetime().getTime() - cmcTemperature.getStartTime().getTime();
71 66
                 if (diffInMillis / 1000 / 60 > 15) {
72 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,16 +78,19 @@ public class CmcTemperatureServiceImpl extends ServiceImpl<CmcTemperatureMapper,
83 78
             QueryWrapper qw1 = getQW(temperature, cmcChannel);
84 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 94
         return temperatureList;
97 95
     }
98 96
 

+ 9
- 15
cmc-temperature-back/ruoyi-admin/src/main/resources/app-dev.yml 查看文件

@@ -168,25 +168,13 @@ mybatis-flex:
168 168
       jdbcUrl: jdbc:sqlite::resource:static/cmc-temperature.db?date_string_format=yyyy-MM-dd HH:mm:ss
169 169
       username:
170 170
       password:
171
-      # 添加连接池优化配置
172
-      maximumPoolSize: 5
173
-      minimumIdle: 1
174
-      connectionTimeout: 180000
175
-      idleTimeout: 600000
176
-      maxLifetime: 1800000
177 171
     access:
178 172
       type: com.zaxxer.hikari.HikariDataSource
179 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 176
       username:
183 177
       password:
184
-      # 添加连接池优化配置
185
-      maximumPoolSize: 5
186
-      minimumIdle: 1
187
-      connectionTimeout: 180000
188
-      idleTimeout: 600000
189
-      maxLifetime: 1800000
190 178
 #      type: com.zaxxer.hikari.HikariDataSource
191 179
 #      driverClassName: com.mysql.cj.jdbc.Driver
192 180
 #      jdbcUrl: jdbc:mysql://127.0.0.1:3306/ry-vue?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
@@ -226,9 +214,15 @@ mybatis-flex:
226 214
 # Redis配置
227 215
 redis:
228 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 223
     config: |
230 224
       singleServerConfig:
231
-        address: redis://127.0.0.1:6379
225
+        address: redis://localhost:6379
232 226
         password:
233 227
         database: 7
234 228
       codec: !<org.redisson.codec.JsonJacksonCodec> {}

+ 3
- 0
cmc-temperature-ui/src/layout/components/Navbar.vue 查看文件

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

+ 3
- 3
cmc-temperature-ui/src/utils/request.js 查看文件

@@ -17,7 +17,7 @@ const service = axios.create({
17 17
   // axios中请求配置有baseURL选项,表示请求URL公共部分
18 18
   baseURL: import.meta.env.VITE_APP_BASE_API,
19 19
   // 超时
20
-  timeout: 100000
20
+  timeout: 200000
21 21
 })
22 22
 
23 23
 // request拦截器
@@ -89,7 +89,7 @@ service.interceptors.response.use(res => {
89 89
     }
90 90
     return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
91 91
   } else if (code === 500) {
92
-    ElMessage({ message: msg, type: 'error' })
92
+    // ElMessage({ message: msg, type: 'error' })
93 93
     return Promise.reject(new Error(msg))
94 94
   } else if (code === 601) {
95 95
     ElMessage({ message: msg, type: 'warning' })
@@ -111,7 +111,7 @@ error => {
111 111
   } else if (message.includes('Request failed with status code')) {
112 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 115
   return Promise.reject(error)
116 116
 })
117 117
 

+ 35
- 26
cmc-temperature-ui/src/views/temperature/temMonitor.vue 查看文件

@@ -127,7 +127,7 @@ const userStore = useUserStore()
127 127
 
128 128
 // 搜索表单数据
129 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 131
 const searchForm = reactive({
132 132
   timeRange: [yesterday.value, today.value],
133 133
   Info: '',
@@ -158,20 +158,29 @@ const chartData = ref([])
158 158
 const chartSensorColumns = ref([])
159 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 179
     if (res.operParam) {
170 180
       searchForm.Info = res.operParam.split('Info\', values=[')[1].split(']')[0]
171 181
     }
172 182
   })
173
-}
174
-getDeviceList()
183
+})
175 184
 
176 185
 // 处理图表数据,使用全部数据
177 186
 const processChartData = (dataList) => {
@@ -252,7 +261,7 @@ const processTableData = () => {
252 261
     const sensorName = item.channel?.info || `传感器${item.sensorNo}`
253 262
     timeGroups[item.datetime][sensorName] = item.data
254 263
   })
255
-  
264
+
256 265
   // 转换为数组并排序
257 266
   const allTableData = Object.values(timeGroups)
258 267
 
@@ -317,24 +326,24 @@ const handleSearch = async () => {
317 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 345
   } catch (error) {
336
-    ElMessage.error('查询失败')
337
-    console.error('查询错误:', error)
346
+    ElMessage.warning('监测数据已更新,请刷新当前页面')
338 347
   } finally {
339 348
     loading.value = false
340 349
   }
@@ -362,7 +371,7 @@ const handleExport = () => {
362 371
 
363 372
   // ElMessage.success('导出功能开发中...')
364 373
   // 这里可以添加导出逻辑
365
-  proxy.$download('monitoring/temperature/export', {    
374
+  proxy.$download('monitoring/temperature/export', {
366 375
     startTime: searchForm.timeRange[0] + ' 00:00:00',
367 376
     endTime: searchForm.timeRange[1] + ' 23:59:59',
368 377
     Info: searchForm.Info

Loading…
取消
儲存