基于SpringBoot的河道水情大數據可視化分析平臺設計與實現(源碼+論文+部署講解等)

需要資料,請文末聯系

在這里插入圖片描述
在這里插入圖片描述

一、平臺介紹

水情監測數據大屏

-在這里插入圖片描述

平臺首頁

在這里插入圖片描述

日均水位

  • 在這里插入圖片描述

日均水速

二、論文內容

在這里插入圖片描述在這里插入圖片描述

在這里插入圖片描述

摘要(中文)

本文針對河道水情監測領域的數據管理和可視化分析需求,設計并實現了一套河道水情大數據可視化分析平臺。該平臺基于自研的低代碼開發框架,采用前后端分離架構,實現了水情數據的采集、存儲、分析和可視化展示功能。平臺集成了日均水位、日均水速監測、數據完整性評估、河流管理等核心功能,并提供了數據大屏、實時水情日報等直觀的可視化界面,為水務管理部門提供決策支持。本文詳細闡述了系統的需求分析、架構設計、數據庫設計、功能實現及測試過程,并對系統的應用效果進行了評估。實踐表明,該平臺能夠有效提升水情監測的信息化水平,為防洪減災和水資源管理提供有力支持。

關鍵詞:水情監測;大數據可視化;低代碼開發;前后端分離

摘要(英文)

This thesis designs and implements a river water condition big data visualization and analysis platform to address the data management and visualization analysis needs in river water monitoring. Based on a self-developed low-code development framework, the platform adopts a front-end and back-end separation architecture to realize the collection, storage, analysis, and visualization of water condition data. The platform integrates core functions such as daily average water level monitoring, daily average flow velocity monitoring, data integrity assessment, and river management. It also provides intuitive visualization interfaces such as data dashboards and real-time water condition daily reports to support decision-making for water management departments. This thesis elaborates on the system’s requirement analysis, architecture design, database design, function implementation, and testing process, and evaluates the application effects of the system. Practice shows that the platform can effectively improve the information level of water condition monitoring and provide strong support for flood control, disaster reduction, and water resource management.

Keywords: Water Condition Monitoring; Big Data Visualization; Low-Code Development; Front-end and Back-end Separation

第一章 緒論

1.1 研究背景與意義

隨著全球氣候變化的加速,水資源管理和防洪減災工作面臨著前所未有的挑戰。河道水情監測作為水資源管理的重要環節,對于保障城市安全、防范洪澇災害、優化水資源調配具有重要意義。傳統的水情監測方式主要依靠人工觀測和簡單的數據記錄,存在數據獲取不及時、分析手段單一、信息共享困難等問題,難以滿足現代水務管理的需求。

隨著物聯網、大數據、云計算等信息技術的快速發展,河道水情監測正在向數字化、智能化方向轉變。通過建立完善的水情監測網絡,實時采集水位、流速等關鍵數據,并結合大數據分析和可視化技術,可以實現水情數據的全面感知、智能分析和直觀展示,為水務管理決策提供科學依據。

在深圳市龍崗區等城市化程度高、河網密集的地區,建立高效的河道水情監測平臺尤為重要。一方面,該地區降雨集中,易發生暴雨洪澇災害;另一方面,城市化進程導致河道自然調蓄能力下降,增加了防洪壓力。因此,開發一套功能完善、性能穩定的河道水情大數據可視化分析平臺,對于提升水情監測能力、增強防災減災能力具有重要的現實意義。

1.2 國內外研究現狀

1.2.1 國外研究現狀

國外發達國家在水情監測領域起步較早,已形成較為完善的技術體系和應用模式:

  1. 美國:美國地質調查局(USGS)建立了全國水情信息系統(NWIS),覆蓋全美超過1.5萬個監測站點,實現了水文數據的實時采集、傳輸和共享。該系統采用分布式架構,支持多源數據融合和復雜水文模型計算,為防洪預警和水資源管理提供支持。

  2. 歐盟:歐盟水框架指令(WFD)推動了跨國水情監測網絡的建設,如歐洲洪水預警系統(EFAS)整合了多國水文氣象數據,提供7-10天的洪水預警。該系統注重數據可視化和決策支持功能,采用WebGIS技術實現空間數據展示。

  3. 日本:日本建立了高密度的水情監測網絡,結合雷達降雨監測系統,實現了分鐘級的洪水預警。其水情監測系統強調實時性和可靠性,廣泛應用物聯網技術和邊緣計算技術提升數據處理效率。

國外水情監測系統的特點是覆蓋范圍廣、監測精度高、數據處理自動化程度高,并注重數據可視化和決策支持功能。然而,這些系統多為定制開發,系統擴展性和適應性有限,且建設和維護成本較高。

1.2.2 國內研究現狀

我國水情監測信息化建設起步相對較晚,但發展迅速:

  1. 國家層面:水利部建立了全國水情信息管理系統,構建了覆蓋全國的水情監測網絡。"十三五"期間,我國加快了水利信息化建設,初步形成了水情監測、預報、預警的信息化體系。

  2. 地方實踐:各省市結合本地特點,開發了多種水情監測系統。如長江水利委員會的長江流域水情監測系統,珠江水利委員會的珠江流域水情信息系統等,這些系統在區域水情監測和防洪減災中發揮了重要作用。

  3. 技術發展:近年來,我國在水情監測領域積極應用物聯網、大數據、人工智能等新技術,如基于北斗衛星的水情監測系統、基于深度學習的水情預測模型等,技術水平不斷提升。

國內水情監測系統存在的主要問題包括:系統間數據共享不足、數據分析能力有限、可視化展示不夠直觀、系統開發效率低等。特別是在低代碼開發、大數據分析和可視化方面,與國外先進水平相比仍有差距。

1.3 研究內容與目標

本文旨在設計并實現一套基于自研框架的河道水情大數據可視化分析平臺,主要研究內容包括:

  1. 自研低代碼開發框架:設計一套適用于水情監測領域的低代碼開發框架,提高系統開發效率和可維護性。

  2. 水情數據采集與存儲:研究水情數據的采集、傳輸、存儲機制,實現對多源異構數據的統一管理。

  3. 水情數據分析與可視化:研究水情數據的分析方法和可視化技術,實現數據的多維分析和直觀展示。

  4. 系統架構與功能設計:研究適合水情監測的系統架構和功能模塊,實現系統的高可用性和可擴展性。

研究目標:

  1. 構建一套基于自研低代碼框架的河道水情大數據可視化分析平臺,實現水情數據的采集、存儲、分析和可視化展示。

  2. 提供日均水位、日均水速、數據完整性評估、河流管理等核心功能,滿足水情監測的業務需求。

  3. 實現數據大屏、實時水情日報等可視化界面,提升數據展示的直觀性和交互性。

  4. 建立完善的系統管理功能,包括用戶管理、角色管理、菜單管理、定時任務等,保障系統的安全性和可維護性。

  5. 通過系統應用,提升水情監測的信息化水平,為防洪減災和水資源管理提供決策支持。

1.4 論文結構安排

本文共分為六章,各章內容安排如下:

第一章 緒論:介紹研究背景與意義、國內外研究現狀、研究內容與目標,明確論文的研究范圍和方向。

第二章 相關技術介紹:介紹系統開發所涉及的關鍵技術,包括自研低代碼開發框架、前端技術棧、后端技術棧、數據可視化技術等。

第三章 系統需求分析:分析系統的業務需求、功能需求和非功能需求,明確系統開發的目標和范圍。

第四章 系統設計:詳細闡述系統的架構設計、數據庫設計、功能模塊設計和接口設計,為系統實現奠定了基礎。

第五章 系統實現與測試:介紹系統的開發環境、核心功能實現、數據可視化實現、系統部署過程以及系統測試,展示系統的實現效果并驗證系統的功能性和性能。

第六章 總結與展望:總結系統開發的成果和創新點,分析存在的不足,提出未來的改進方向。

第二章 相關技術介紹

2.1 自研低代碼開發框架

本系統采用自研的低代碼開發框架,該框架是一套面向企業級應用的開發平臺,具有以下特點:

  1. 低代碼開發:通過可視化設計器和豐富的組件庫,減少手工編碼量,提高開發效率。

  2. 前后端分離:采用前后端分離架構,前端負責界面展示和用戶交互,后端負責業務邏輯和數據處理,實現了前后端的解耦。

  3. 組件化設計:系統功能以組件形式封裝,支持組件的復用和擴展,提高了系統的可維護性。

  4. 插件化機制:支持功能插件的動態加載和卸載,便于系統功能的擴展和定制。

  5. 代碼生成器:提供強大的代碼生成功能,能夠根據數據庫表結構自動生成前后端代碼,大幅提高開發效率。

  6. 權限管理:內置完善的權限管理機制,支持細粒度的權限控制,保障系統安全。

該框架采用現代化的技術棧,前端基于Vue.js和Ant Design Vue,后端基于Spring Boot和MyBatis-Plus,數據庫支持MySQL、Oracle等主流數據庫,為系統開發提供了堅實的技術基礎。

三、主要流程圖

日均水位監測

在這里插入圖片描述

實時水情日報

在這里插入圖片描述

水位-流速年對比

在這里插入圖片描述

河流管理

在這里插入圖片描述

數據大屏

在這里插入圖片描述

四、論文目錄

基于開源框架的河道水情大數據可視化分析平臺設計與實現 3
封面和聲明頁 3
摘要(中文) 3
摘要(英文) 4
第一章 緒論 4
1.1 研究背景與意義 4
1.2 國內外研究現狀 5
1.3 研究內容與目標 6
1.4 論文結構安排 7
第二章 相關技術介紹 7
2.1 自研低代碼開發框架 7
2.2 前端技術棧 8
2.3 后端技術棧 9
2.4 數據可視化技術 10
2.5 本章小結 11
第三章 系統需求分析 11
3.1 業務需求分析 11
3.2 功能需求分析 12
3.3 非功能需求分析 14
3.4 本章小結 15
第四章 系統設計 15
4.1 系統架構設計 15
4.2 數據庫設計 17
4.3 功能模塊設計 20
4.4 接口設計 33
4.5 本章小結 37
4.2 數據庫設計 38
數據庫表結構設計 38

  1. 系統管理相關表 38
    1.1 用戶表(sys_user) 38
    1.2 角色表(sys_role) 39
    1.3 菜單表(sys_menu) 39
    1.4 用戶角色關聯表(sys_user_role) 40
    1.5 角色菜單關聯表(sys_role_menu) 40
    1.6 數據字典表(sys_dict) 40
    1.7 數據字典項表(sys_dict_item) 40
  2. 業務相關表 41
    2.1 河流表(river_info) 41
    2.2 監測站點表(monitor_station) 41
    2.3 水位數據表(water_level_data) 42
    2.4 流速數據表(water_flow_data) 42
    2.5 數據源表(data_source) 43
    2.6 定時任務表(sys_quartz_job) 43
    4.3 功能模塊設計 44
    功能流程圖設計 44
  3. 日均水位監測 44
  4. 日均水速監測 47
  5. 實時水情日報 50
  6. 水位-流速年對比 53
    功能流程圖設計 56
  7. 河流管理 56
  8. 監測站點管理 58
  9. 數據源管理 60
  10. 數據完整性評估 62
    功能流程圖設計 65
  11. 數據大屏 65
  12. 統計圖表 68
  13. GIS地圖 71
  14. 專題分析 73
    功能流程圖設計 76
  15. 用戶管理 76
  16. 角色管理 78
  17. 菜單管理 80
  18. 數據字典 82
  19. 定時任務 84
  20. 日志管理 87
  21. 性能監控 89
    功能描述 89
    4.4 接口設計 92
    4.5 本章小結 96
    第五章 系統實現 96
    5.1 開發環境搭建 96
    5.2 核心功能實現 99
    5.3 系統部署 133
    5.4 系統測試 138
    5.5 本章小結 140
    第六章 總結與展望 141
    6.1 研究總結 141
    5.3 系統部署 152
    5.4 系統測試 157
    5.5 本章小結 160
    第六章 總結與展望 160
    6.1 研究總結 160
    6.2 創新點 161
    6.3 未來展望 162
    o 提供開放API接口,支持第三方系統集成 162
    參考文獻 162

五、實現代碼

<template><div class="water-level-container"><a-form layout="inline" :model="queryParams" @submit="handleQuery"><a-form-item label="河流"><a-select v-model="queryParams.riverId" placeholder="請選擇河流" style="width: 200px"><a-select-option v-for="river in riverList" :key="river.riverId" :value="river.riverId">{{ river.riverName }}</a-select-option></a-select></a-form-item><a-form-item label="站點"><a-select v-model="queryParams.stationId" placeholder="請選擇站點" style="width: 200px"><a-select-option v-for="station in stationList" :key="station.stationId" :value="station.stationId">{{ station.stationName }}</a-select-option></a-select></a-form-item><a-form-item label="時間范圍"><a-range-picker v-model="queryParams.dateRange" style="width: 300px" /></a-form-item><a-form-item><a-button type="primary" html-type="submit">查詢</a-button><a-button style="margin-left: 8px" @click="resetQuery">重置</a-button></a-form-item></a-form><div class="chart-container" style="height: 400px" ref="chartContainer"></div><a-table :columns="columns" :dataSource="dataList" :pagination="pagination" @change="handleTableChange"><template slot="operation" slot-scope="text, record"><a @click="viewDetail(record)">查看詳情</a></template></a-table></div>
</template><script>
import { getWaterLevelData, getRiverList, getStationList } from '@/api/waterLevel';
import * as echarts from 'echarts';export default {name: 'WaterLevelMonitor',data() {return {queryParams: {riverId: undefined,stationId: undefined,dateRange: [],pageNum: 1,pageSize: 10},riverList: [],stationList: [],dataList: [],pagination: {current: 1,pageSize: 10,total: 0},columns: [{ title: '日期', dataIndex: 'dataTime', key: 'dataTime' },{ title: '河流', dataIndex: 'riverName', key: 'riverName' },{ title: '站點', dataIndex: 'stationName', key: 'stationName' },{ title: '水位(m)', dataIndex: 'waterLevel', key: 'waterLevel' },{ title: '警戒水位(m)', dataIndex: 'warningLevel', key: 'warningLevel' },{ title: '操作', key: 'operation', scopedSlots: { customRender: 'operation' } }],chart: null};},mounted() {this.initData();},methods: {async initData() {// 獲取河流列表const riverRes = await getRiverList();this.riverList = riverRes.data;// 獲取站點列表const stationRes = await getStationList();this.stationList = stationRes.data;// 初始化查詢this.handleQuery();},async handleQuery() {// 處理查詢參數const params = {riverId: this.queryParams.riverId,stationId: this.queryParams.stationId,startDate: this.queryParams.dateRange[0] ? this.queryParams.dateRange[0].format('YYYY-MM-DD') : undefined,endDate: this.queryParams.dateRange[1] ? this.queryParams.dateRange[1].format('YYYY-MM-DD') : undefined,pageNum: this.queryParams.pageNum,pageSize: this.queryParams.pageSize};// 調用接口獲取數據const res = await getWaterLevelData(params);this.dataList = res.data.records;this.pagination.total = res.data.total;// 更新圖表this.updateChart();},resetQuery() {this.queryParams = {riverId: undefined,stationId: undefined,dateRange: [],pageNum: 1,pageSize: 10};this.handleQuery();},handleTableChange(pagination) {我將繼續編寫論文的第五章系統實現部分,接著前面的內容進行。```markdown:d:\個人資料\論文資料\基于JeecgBoot的河道水情大數據可視化分析平臺設計與實現\論文.mdthis.queryParams.pageNum = pagination.current;this.queryParams.pageSize = pagination.pageSize;this.handleQuery();},updateChart() {// 初始化圖表if (!this.chart) {this.chart = echarts.init(this.$refs.chartContainer);}// 準備圖表數據const dates = this.dataList.map(item => item.dataTime);const waterLevels = this.dataList.map(item => item.waterLevel);const warningLevels = this.dataList.map(item => item.warningLevel);// 設置圖表配置const option = {title: {text: '水位監測數據'},tooltip: {trigger: 'axis'},legend: {data: ['水位', '警戒水位']},xAxis: {type: 'category',data: dates},yAxis: {type: 'value',name: '水位(m)'},series: [{name: '水位',type: 'line',data: waterLevels,itemStyle: {color: '#1890ff'}},{name: '警戒水位',type: 'line',data: warningLevels,lineStyle: {type: 'dashed',color: '#ff4d4f'},itemStyle: {color: '#ff4d4f'}}]};// 渲染圖表this.chart.setOption(option);},viewDetail(record) {// 查看詳情邏輯this.$router.push({path: '/water-level/detail',query: {id: record.id}});}}
};
</script>```

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75297.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Knife4j文檔請求異常 空指針

打開swagger文檔報空指針異常 java.lang.NullPointerException: nullat springfox.documentation.oas.mappers.SchemaMapper.model(SchemaMapper.java:97)at springfox.documentation.oas.mappers.SchemaMapper.mapModel(SchemaMapper.java:85)at springfox.documentation.oas…

車輛選擇解決方案

車輛選擇解決方案 /* * Purpose: 添加車輛選擇的功能 -> 用戶在選擇不同的車輛時&#xff0c;重新初始化系統狀態&#xff0c;清除之前的定時器&#xff0c;并根據新選擇的車輛設置新的定時器&#xff0c;以實現對新車輛狀態的實時加載。 * File Name: 車輛選擇解決方案 * …

魔塔社區使用llamafactory微調AI閱卷試題系統

啟動 LLaMA-Factory 1. 安裝 LLaMA-Factory 執行安裝指令 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e ".[torch,metrics]"解決依賴沖突 如果遇到依賴沖突&#xff0c;可使用以下命令安裝&#xff0c;不…

程序化廣告行業(51/89):Cookie映射與移動設備ID映射解析

程序化廣告行業&#xff08;51/89&#xff09;&#xff1a;Cookie映射與移動設備ID映射解析 在當今數字化營銷的浪潮中&#xff0c;程序化廣告已經成為企業精準觸達目標客戶的重要手段。作為一名對程序化廣告充滿興趣的學習者&#xff0c;我希望通過這篇博客和大家一起深入探索…

內網服務器centos7安裝jdk17

1. 下載 JDK 17 安裝包&#xff08;在外網環境操作&#xff09; 在可聯網的機器上下載 JDK 17 的壓縮包&#xff08;推薦使用 OpenJDK&#xff09;&#xff1a; OpenJDK 官方源&#xff1a; Adoptium Eclipse Temurin Azul Zulu 直接下載命令示例&#xff08;在外網機器上執行…

【學Rust寫CAD】21 2D 點(point.rs)

源碼 //matrix/point.rs use std::ops::Mul; use super::algebraic_units::{Zero, One}; use super::generic::Matrix;/// 點坐標結構體 #[derive(Debug, Clone, Copy, PartialEq)] pub struct Point<X, Y>(Matrix<X, Y, One, Zero, Zero, One>);impl<X, Y>…

《AI大模型應知應會100篇》第7篇:Prompt Engineering基礎:如何與大模型有效溝通

第7篇&#xff1a;Prompt Engineering基礎&#xff1a;如何與大模型有效溝通 摘要 Prompt Engineering&#xff08;提示工程&#xff09;是與大模型高效溝通的關鍵技能。通過精心設計的Prompt&#xff0c;可以讓模型生成更準確、更有用的結果。本文將從基礎知識到高級策略&…

Java高頻面試題1:Java SE

一、Java概述 1. Java語言的特點&#xff1f; 面向對象&#xff1a;封裝、繼承、多態。跨平臺&#xff1a;通過JVM實現“一次編寫&#xff0c;到處運行”。內存管理&#xff1a;自動垃圾回收&#xff08;GC&#xff09;&#xff0c;避免手動內存管理。多線程&#xff1a;內置…

基于RapidIO接口的DSP+GPU工業AI實時計算解決方案

基于RapidIO接口的DSPGPU工業AI實時計算解決方案是一種面向高性能、低延遲工業應用的異構計算架構&#xff0c;適用于工業自動化、機器視覺、預測性維護、機器人控制等場景。以下是該方案的核心設計思路和技術要點&#xff1a; 1. 方案背景與目標 工業需求&#xff1a; 工業…

SQL DB 數據類型

SQL DB 數據類型 引言 在數據庫管理系統中,數據類型是定義和存儲數據的方式。SQL(結構化查詢語言)數據庫中的數據類型決定了數據的存儲格式、大小、取值范圍以及如何處理數據。合理選擇和使用數據類型對于確保數據庫性能、數據完整性和應用程序的準確性至關重要。 SQL 數…

常見電源模塊設計

目錄 1. 5V電源模塊 2. 3.3V電源模塊 3. 1.9V電源模塊 4. 220V轉12V電源模塊 1. 5V電源模塊 參考電路 電路說明&#xff1a; 這個電路采用的是穩壓芯片78L05&#xff0c;我是用的12V的電源模塊轉成為5V,為后續的供電。 2. 3.3V電源模塊 參考電路&#xff1a; 電路說明…

python操作es

1、常用操作 ### 創建索引 bash curl -u elastic:123 -X PUT -H "Content-Type: application/json" -d mapping.json "http://0.0.0.0:9200/ai_kg_extraction_new_lower_tag_index" ### 刪除索引 bash curl -u elastic:123 -X DELETE "http://0.0…

記一個.NET AOT交叉編譯時的坑

記一個.NET AOT交叉編譯時的坑 背景&#xff1a; 使用.NET9開發的Avalonia項目需要部署到Linux-arm64 踩坑&#xff1a; 根據官方AOT交叉編譯文檔配置后執行打包 dotnet publish -r linux-arm64提示error : The PrivateSdkAssemblies ItemGroup is required for _ComputeA…

【Linux篇】探索進程地址空間:計算機背后的虛擬世界

進程地址空間的奧秘&#xff1a;讓你理解程序如何在計算機中生存 一. 程序地址空間1.1 基本概念1.2 虛擬內存管理1.3 為什么存在虛擬地址空間1.3.1 意義 2. 最后 本文將介紹進程地址空間的基本概念與結構&#xff0c;幫助讀者理解操作系統如何管理和分配內存。進程地址空間指的…

17查詢文檔的方式

目錄 1.鼠標放在你要查詢的地方或者選中&#xff0c;按FnF1 2Assistant文檔 3幫助菜單界面 1.鼠標放在你要查詢的地方或者選中&#xff0c;按FnF1 2Assistant文檔 3幫助菜單界面 大家一定要有 查詢文檔 的意識!! 未來實際開發中,一定會用到很多的第三方庫和框架的. 很可能用到的…

壹起航:引領中國工廠邁向全球市場的先鋒

在全球化的浪潮中&#xff0c;中國工廠正積極尋求拓展海外市場的新機遇。面對激烈的國際競爭&#xff0c;如何脫穎而出&#xff0c;成為行業翹楚&#xff1f;壹起航憑借其深厚的行業積淀和創新的營銷理念&#xff0c;為中國工廠提供了全方位的出海解決方案。 一、構建國際化外…

“數據導航儀”:企業遷移知識庫如何賦能精準決策

在全球化與區域經濟一體化的浪潮下&#xff0c;企業遷移已成為經濟發展的重要現象。 無論是為了拓展市場、降低成本&#xff0c;還是為了尋找更好的政策環境&#xff0c;企業遷移都牽動著無數從業者的心。 然而&#xff0c;面對海量且分散的企業遷移信息&#xff0c;金融機構…

理解激活函數,多個網絡層之間如何連接

1. 激活函數如何在兩個層之間作用 如果不在兩個層之間添加激活函數&#xff0c;模型將無法學習非線性關系&#xff0c;表現出像線性模型一樣的局限性。 LeakyReLU(0.2) 是一個激活函數&#xff0c;它的作用是對每一層的輸出進行非線性轉換。激活函數通常在神經網絡中用于增加網…

紅帽Linux怎么重置密碼

完整流程 ●重啟操作系統&#xff0c;進入啟動界面 ●然后按進入選擇項界面 ●找到linux單詞開頭的那一行&#xff0c;然后移動到該行末尾&#xff08;方向鍵移動或者使用鍵盤上的end&#xff09;&#xff0c;在末尾加入rd.break ●按ctrl x進入rd.break模式 ●在該模式下依次…

pycharm與python版本

python 3.6-3.9 pycharm 2021版本搭配最好 python 3.8 pycharm 2019版本搭配最好 pycharm各版本下載