From aca663f6f4604644914fb0f71830606dda4120d7 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Mon, 16 Jun 2025 08:22:10 +0800 Subject: [PATCH] 'commit' --- ...°æ®ç»¼åˆåˆ†æžæŠ¥å‘Š_20250616_081924.txt | 91 +++++++++++++++ .../java/com/dsideal/base/AI/TestMax32K.java | 108 +++++++++--------- 2 files changed, 142 insertions(+), 57 deletions(-) create mode 100644 WebRoot/upload/教育数æ®ç»¼åˆåˆ†æžæŠ¥å‘Š_20250616_081924.txt diff --git a/WebRoot/upload/教育数æ®ç»¼åˆåˆ†æžæŠ¥å‘Š_20250616_081924.txt b/WebRoot/upload/教育数æ®ç»¼åˆåˆ†æžæŠ¥å‘Š_20250616_081924.txt new file mode 100644 index 00000000..7c4bc341 --- /dev/null +++ b/WebRoot/upload/教育数æ®ç»¼åˆåˆ†æžæŠ¥å‘Š_20250616_081924.txt @@ -0,0 +1,91 @@ +# **云å—çœæ–‡å±±å·žä¸Žæ¥šé›„州教育数æ®ç»¼åˆåˆ†æžæŠ¥å‘Šï¼ˆ2012-2035年)** + +## **一ã€å¼•言** +云å—çœæ–‡å±±å·žä¸Žæ¥šé›„州作为边疆民æ—地区,其教育å‘å±•çŠ¶å†µå¯¹åŒºåŸŸç»æµŽç¤¾ä¼šè¿›æ­¥å…·æœ‰é‡è¦æ„义。本报告基于2012-2035年的教育数æ®ï¼Œä»Žå­¦å‰æ•™è‚²ã€ä¹‰åŠ¡æ•™è‚²ï¼ˆå°å­¦ã€åˆä¸­ï¼‰åˆ°é«˜ä¸­é˜¶æ®µæ•™è‚²çš„æ‹›ç”Ÿã€åœ¨æ ¡ç”Ÿè§„模ã€åŸŽä¹¡åˆ†å¸ƒåŠèµ„æºä¾›éœ€ç­‰æ–¹é¢è¿›è¡Œç»¼åˆåˆ†æžï¼Œæ­ç¤ºä¸¤å·žæ•™è‚²å‘展的核心趋势与挑战,并æå‡ºä¼˜åŒ–建议。 + +--- + +## **二ã€å…³é”®æ•°æ®åˆ†æž** + +### **1. 学剿•™è‚²ï¼ˆ2012-2035年)** +#### **(1)总在园人数å˜åŒ–** +- **文山州**:2012å¹´8.22万人æŒç»­å¢žé•¿è‡³2022å¹´16.88万人(峰值),éšåŽç¼“慢下é™è‡³2035å¹´14.83万人,呈现“倒Uåž‹â€è¶‹åŠ¿ã€‚2020年出现显著跃å‡ï¼ˆ15.82万人),å¯èƒ½ä¸Žæ™®æƒ æ€§å¹¼å„¿å›­æ”¿ç­–推动有关。 +- **楚雄州**:规模较å°ï¼Œä»Ž2012å¹´5.11万人增至2022å¹´7.5万人(峰值),2035å¹´é™è‡³6.64万人,增速较文山州缓和。 + +#### **(2)城乡结构** +- **城区**:两州å‡ç¨³æ­¥å¢žé•¿ã€‚æ–‡å±±å·žåŸŽåŒºå æ¯”从12.7%(2012年)å‡è‡³16.3%(2035年);楚雄州从18.2%å‡è‡³35.5%ï¼Œåæ˜ åŸŽé•‡åŒ–坹学剿•™è‚²çš„æ‹‰åŠ¨ä½œç”¨ã€‚ +- **乡æ‘**:文山州乡æ‘在园人数2020年激增(8.14万人),åŽé€æ­¥å›žè½ï¼›æ¥šé›„州则æŒç»­ä¸‹é™ï¼Œ2035å¹´å æ¯”ä»…12.2%,凸显乡æ‘生æºèŽç¼©é—®é¢˜ã€‚ + +#### **(3)区域差异** +- 文山州总规模约为楚雄州的2å€ï¼Œä½†æ¥šé›„州城区教育å‘展更快(2035å¹´åŸŽåŒºå æ¯”高出文山州19个百分点)。 +- æ–‡å±±å·žä¹¡æ‘æ•™è‚²éœ€æ±‚更显著,而楚雄州乡æ‘ç”Ÿæºæµå¤±æ˜Žæ˜¾ï¼ˆ2035年人数仅为2012å¹´çš„35.5%)。 + +### **2. 义务教育(å°å­¦ã€åˆä¸­ï¼‰** +#### **(1)招生总é‡** +- **å°å­¦é˜¶æ®µ**: + - 文山州:2012-2021年波动上å‡ï¼ˆ5.41万→6.49万),2022年起显著下é™ï¼ˆ2035年预测4.8万)。 + - 楚雄州:æŒç»­ä¸‹é™ï¼ˆ2012å¹´2.79万→2035å¹´2.01万),é™å¹…28%。 +- **åˆä¸­é˜¶æ®µ**: + - 文山州:2012-2022å¹´å…ˆé™åŽå‡ï¼ˆ5.65万→6.49万),2035年预测5.7万。 + - 楚雄州:整体下é™ï¼ˆ2012å¹´3.42万→2035å¹´2.26万),é™å¹…34%。 + +#### **(2)在校生规模** +- **文山州å°å­¦**:2012-2021å¹´æŒç»­å¢žé•¿ï¼ˆ34.54万→38.2万),2035å¹´é™è‡³32.02万。 +- **楚雄州å°å­¦**:2012å¹´19.25万→2035å¹´13.12万,é™å¹…31.8%。 +- **城乡分化**: + - åŸŽåŒºåœ¨æ ¡ç”Ÿå æ¯”显著æå‡ï¼ˆæ–‡å±±å·žå°å­¦åŸŽåŒºå æ¯”从5.4%å‡è‡³14.5%)。 + - 乡æ‘在校生é”å‡ï¼ˆæ¥šé›„å·žåˆä¸­ä¹¡æ‘生æºä»Ž3.66万→0.24万,2035å¹´å æ¯”ä»…3.6%)。 + +### **3. 高中阶段教育** +#### **(1)招生规模** +- **文山州**:2012å¹´1.7万人→2021年峰值3.11万人→2035年回è½è‡³2.78万人。 +- **楚雄州**:2012å¹´1.53万人→2022å¹´1.8万人→2035年回è½è‡³1.53万人。 + +#### **(2)城乡分布** +- ä¸¤å·žåœ¨æ ¡ç”Ÿä»¥é•‡åŒºä¸ºä¸»ï¼ˆæ–‡å±±å·žé•‡åŒºå æ¯”è¶…80%),城区次之,乡æ‘å æ¯”æžä½Žã€‚ +- æ¥šé›„å·žåŸŽåŒºæ‹›ç”Ÿå æ¯”显著æå‡ï¼ˆ2012å¹´36%→2035å¹´54%)。 + +--- + +## **ä¸‰ã€æ ¸å¿ƒé—®é¢˜ä¸ŽæŒ‘战** + +### **1. 城镇化驱动的城乡教育失衡** +- **城区压力增大**ï¼šä¸¤å·žåŸŽåŒºåœ¨æ ¡ç”Ÿå æ¯”æŒç»­ä¸Šå‡ï¼ˆå¦‚楚雄州åˆä¸­åŸŽåŒºå æ¯”从12.3%å‡è‡³30.5%),导致学ä½ç´§å¼ ã€‚ +- **乡æ‘资æºé—²ç½®**:乡æ‘生æºé”å‡ï¼ˆå¦‚楚雄州乡æ‘åˆä¸­ç”Ÿæº2035年仅剩0.07万),部分学校é¢ä¸´æ•´åˆæˆ–关闭。 + +### **2. 人å£ç»“æž„å˜åŒ–影哿•™è‚²éœ€æ±‚** +- **学龄人å£ä¸‹é™**:两州å°å­¦ã€åˆä¸­æ‹›ç”Ÿæ€»é‡å‡å‘ˆä¸‹é™è¶‹åŠ¿ï¼ˆå¦‚æ¥šé›„å·žå°å­¦æ‹›ç”Ÿå‡å°‘28%),需调整师资与设施é…置。 +- **低生育率与人å£å¤–æµ**:楚雄州义务教育阶段总规模èŽç¼©æ˜Žæ˜¾ï¼Œå¯èƒ½åæ˜ æœ¬åœ°ç”Ÿè‚²çŽ‡ä¸‹é™æˆ–é’壮年外æµã€‚ + +### **3. 教育资æºç»“构性矛盾** +- **师资供需失衡**: + - 文山州å°å­¦å¸ˆèµ„富余(2035年富余2100人),但高中师资缺å£800人。 + - 楚雄州å°å­¦å¸ˆèµ„富余801人,高中缺å£500人。 +- **æ ¡èˆåˆ©ç”¨çއä¸å‡**:å°å­¦ã€åˆä¸­ç”¨æˆ¿å¯Œä½™ï¼ˆæ–‡å±±å·žå°å­¦å¯Œä½™52.07万㎡),但需优化城乡布局。 + +--- + +## **å››ã€æ”¿ç­–建议** + +### **1. 优化城乡教育资æºé…ç½®** +- **城区扩容**:增加城区学ä½ä¾›ç»™ï¼Œæ‰©å»ºæˆ–新建学校应对人å£é›†èšã€‚ +- **ä¹¡æ‘æ•´åˆ**:推动å°è§„模学校集约化å‘展,探索“中心校+æ•™å­¦ç‚¹â€æ¨¡å¼ã€‚ + +### **2. 动æ€è°ƒæ•´å¸ˆèµ„与设施** +- **教师转岗培训**:引导富余å°å­¦æ•™å¸ˆå‘高中或紧缺学科转岗。 +- **æ ¡èˆåŠŸèƒ½è½¬åž‹**ï¼šé—²ç½®ä¹¡æ‘æ ¡èˆå¯æ”¹é€ ä¸ºç¤¾åŒºæ•™è‚²ä¸­å¿ƒæˆ–普惠性幼儿园。 + +### **3. 加强人å£ç›‘测与规划** +- **建立学龄人å£é¢„警机制**:结åˆç”Ÿè‚²çއã€è¿ç§»æ•°æ®åЍæ€è°ƒæ•´æ•™è‚²èµ„æºã€‚ +- **中长期规划**:文山州需关注高中资æºè¡¥å……,楚雄州应优化镇区学校布局。 + +### **4. ä¿éšœæ•™è‚²å…¬å¹³ä¸Žè´¨é‡** +- **倾斜支æŒä¹¡æ‘教育**:加强留守儿童关爱,æå‡è¾¹ç–†å­¦æ ¡ï¼ˆå¦‚文山州“国门学校â€ï¼‰ä¿éšœæ°´å¹³ã€‚ +- **推动教师æµåЍ**:鼓励城区教师支教乡æ‘,å‡è¡¡å¸ˆèµ„é…置。 + +--- + +## **五ã€ç»“论** +文山州与楚雄州的教育å‘展呈现明显的城镇化驱动特å¾ï¼Œä¹¡æ‘生æºèŽç¼©ä¸ŽåŸŽåŒºèµ„æºç´§å¼ å¹¶å­˜ã€‚未æ¥éœ€é€šè¿‡ç²¾å‡†è§„划ã€åЍæ€è°ƒæ•´å’Œç»“构性改é©ï¼Œå®žçŽ°æ•™è‚²èµ„æºçš„高效é…ç½®ï¼Œç¡®ä¿æ•™è‚²å…¬å¹³ä¸Žè´¨é‡åŒæ­¥æå‡ï¼Œä¸ºåŒºåŸŸå¯æŒç»­å‘展æä¾›äººåŠ›æ”¯æ’‘ã€‚ + +(字数:2980) \ No newline at end of file diff --git a/src/main/java/com/dsideal/base/AI/TestMax32K.java b/src/main/java/com/dsideal/base/AI/TestMax32K.java index aa3cdccf..427a3f52 100644 --- a/src/main/java/com/dsideal/base/AI/TestMax32K.java +++ b/src/main/java/com/dsideal/base/AI/TestMax32K.java @@ -5,6 +5,7 @@ import com.dsideal.base.Util.LocalMysqlConnectUtil; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import com.dsideal.base.Util.CallDeepSeek; + import java.util.List; import java.util.Map; import java.util.Set; @@ -13,7 +14,9 @@ import java.util.ArrayList; import java.util.concurrent.CountDownLatch; import java.text.SimpleDateFormat; import java.util.Date; + import cn.hutool.core.io.FileUtil; + import java.io.File; public class TestMax32K { @@ -21,27 +24,27 @@ public class TestMax32K { public static void main(String[] args) { LocalMysqlConnectUtil.Init(); - + // 直接调用生æˆç»¼åˆæŠ¥å‘Š String report = generateComprehensiveReport(); System.out.println("\n=== 最终报告 ==="); System.out.println(report); } - + /** * 分割过大的å•è¡¨æ•°æ® */ - private static List splitLargeTable(String tableName, Set fieldNames, - List allTableData, int maxSize) { + private static List splitLargeTable(Set fieldNames, + List allTableData, int maxSize) { List chunks = new ArrayList<>(); StringBuilder currentTableChunk = new StringBuilder(); - + for (Record dataRecord : allTableData) { Map columns = dataRecord.getColumns(); StringBuilder rowData = new StringBuilder(); rowData.append("["); - + boolean first = true; for (String fieldName : fieldNames) { if (!first) rowData.append(","); @@ -54,7 +57,7 @@ public class TestMax32K { first = false; } rowData.append("]\n"); - + // 检查是å¦è¶…过é™åˆ¶ if (currentTableChunk.length() + rowData.length() > maxSize) { if (currentTableChunk.length() > 0) { @@ -64,59 +67,50 @@ public class TestMax32K { } currentTableChunk.append(rowData); } - + if (currentTableChunk.length() > 0) { chunks.add(currentTableChunk.toString()); } - + return chunks; } - - /** - * 获å–åˆ†å—æ•°æ®çš„æ–¹æ³•(å¯ä¾›å…¶ä»–类调用) - */ - public static String[] getDataChunks() { - // 这里å¯ä»¥å°†main方法中的逻辑æå–出æ¥ï¼Œè¿”å›žåˆ†å—æ•°æ® - // ä¸ºäº†ç®€åŒ–ï¼Œè¿™é‡Œåªæ˜¯ç¤ºä¾‹ - return new String[]{"示例数æ®å—1", "示例数æ®å—2"}; - } - + public static String generateComprehensiveReport() { String[] regions = {"文山州", "楚雄州"}; String sql = "select table_name as TABLE_NAME from core_dataset_table where dataset_group_id in (select id from core_dataset_group where pid='1036317909951057920')"; List tableList = Db.use(DataEaseModel.DB_NAME).find(sql); - + // 获å–åˆ†å—æ•°æ® String[] dataChunks = getDataChunks(regions, tableList); List chunkAnalyses = new ArrayList<>(); - + System.out.println("å¼€å§‹åˆ†æž " + dataChunks.length + " 个数æ®å—..."); - + // 第一阶段:æµå¼åˆ†æžå„个数æ®å— for (int i = 0; i < dataChunks.length; i++) { final int chunkIndex = i; final StringBuilder chunkResult = new StringBuilder(); final CountDownLatch latch = new CountDownLatch(1); - + String prompt = "请对以下教育数æ®è¿›è¡Œç®€è¦åˆ†æžï¼Œé‡ç‚¹å…³æ³¨å…³é”®æŒ‡æ ‡å’Œè¶‹åŠ¿ï¼ŒæŽ§åˆ¶åœ¨500字以内:\n" + dataChunks[i]; - + System.out.println("\n=== 正在分æžç¬¬ " + (i + 1) + " 个数æ®å— ==="); - + CallDeepSeek.callDeepSeekStream(prompt, new CallDeepSeek.SSEListener() { @Override public void onData(String data) { System.out.print(data); chunkResult.append(data); } - + @Override public void onComplete(String fullResponse) { System.out.println("\n--- 第 " + (chunkIndex + 1) + " 个数æ®å—分æžå®Œæˆ ---\n"); chunkAnalyses.add(chunkResult.toString()); latch.countDown(); } - + @Override public void onError(String error) { System.err.println("分æžç¬¬ " + (chunkIndex + 1) + " 个数æ®å—时出错: " + error); @@ -124,7 +118,7 @@ public class TestMax32K { latch.countDown(); } }); - + try { // 等待当å‰å—分æžå®Œæˆ latch.await(); @@ -133,47 +127,47 @@ public class TestMax32K { System.err.println("等待分æžç»“果时被中断: " + e.getMessage()); } } - + // 第二阶段:æµå¼ç”Ÿæˆç»¼åˆæŠ¥å‘Š System.out.println("\n=== 开始生æˆç»¼åˆåˆ†æžæŠ¥å‘Š ==="); - + StringBuilder combinedAnalysis = new StringBuilder(); combinedAnalysis.append("基于以下分å—分æžç»“果,请生æˆä¸€ä»½å®Œæ•´çš„æ•™è‚²æ•°æ®ç»¼åˆåˆ†æžæŠ¥å‘Šï¼ˆ3000字以内):\n\n"); - + for (int i = 0; i < chunkAnalyses.size(); i++) { combinedAnalysis.append("æ•°æ®å—").append(i + 1).append("分æžï¼š\n"); combinedAnalysis.append(chunkAnalyses.get(i)).append("\n\n"); } - + final StringBuilder finalReport = new StringBuilder(); final CountDownLatch finalLatch = new CountDownLatch(1); - + CallDeepSeek.callDeepSeekStream(combinedAnalysis.toString(), new CallDeepSeek.SSEListener() { @Override public void onData(String data) { System.out.print(data); finalReport.append(data); } - + @Override public void onComplete(String fullResponse) { System.out.println("\n\n=== 综åˆåˆ†æžæŠ¥å‘Šç”Ÿæˆå®Œæˆ ==="); - + // ä¿å­˜æŠ¥å‘Šåˆ°æ–‡ä»¶ try { String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String fileName = "教育数æ®ç»¼åˆåˆ†æžæŠ¥å‘Š_" + timestamp + ".txt"; String filePath = "WebRoot/upload/" + fileName; - + FileUtil.writeString(finalReport.toString(), new File(filePath), "UTF-8"); System.out.println("报告已ä¿å­˜åˆ°: " + filePath); } catch (Exception e) { System.err.println("ä¿å­˜æŠ¥å‘Šæ—¶å‡ºé”™: " + e.getMessage()); } - + finalLatch.countDown(); } - + @Override public void onError(String error) { System.err.println("生æˆç»¼åˆæŠ¥å‘Šæ—¶å‡ºé”™: " + error); @@ -181,41 +175,41 @@ public class TestMax32K { finalLatch.countDown(); } }); - + try { finalLatch.await(); } catch (InterruptedException e) { System.err.println("等待最终报告时被中断: " + e.getMessage()); } - + return finalReport.toString(); } - + /** * æå–æ•°æ®åˆ†å—逻辑为独立方法 */ private static String[] getDataChunks(String[] regions, List tableList) { List dataChunks = new ArrayList<>(); StringBuilder currentChunk = new StringBuilder(); - + String header = "æ•°æ®è¯´æ˜Ž: 以下是云å—çœæ•™è‚²æ•°æ®çš„压缩格å¼\n" + - "æ ¼å¼: 表å -> 字段列表 -> æ•°æ®è¡Œ(数组格å¼)\n" + - "地区范围: " + String.join(",", regions) + "\n\n"; + "æ ¼å¼: 表å -> 字段列表 -> æ•°æ®è¡Œ(数组格å¼)\n" + + "地区范围: " + String.join(",", regions) + "\n\n"; currentChunk.append(header); - + // é历所有相关数æ®è¡¨ for (Record record : tableList) { String tableName = record.getStr("TABLE_NAME"); - + // 为当å‰è¡¨æ”¶é›†æ‰€æœ‰æ•°æ® List allTableData = new ArrayList<>(); Set fieldNames = new LinkedHashSet<>(); - + // 为æ¯ä¸ªåœ°åŒºæ”¶é›†æ•°æ® for (String region : regions) { String sql = "select * from `" + tableName + "` where `行政区划`=?"; List listContent = Db.use(DataEaseModel.DB_NAME).find(sql, region); - + if (!listContent.isEmpty()) { allTableData.addAll(listContent); // 收集字段å(使用第一æ¡è®°å½•的字段结构) @@ -224,18 +218,18 @@ public class TestMax32K { } } } - + if (!allTableData.isEmpty()) { // 构建当å‰è¡¨çš„完整数æ®å— StringBuilder tableData = new StringBuilder(); tableData.append("\n表: ").append(tableName).append("\n"); tableData.append("字段: ").append(String.join(",", fieldNames)).append("\n"); - + // 输出压缩格å¼çš„æ•°æ® for (Record dataRecord : allTableData) { Map columns = dataRecord.getColumns(); tableData.append("["); - + boolean first = true; for (String fieldName : fieldNames) { if (!first) tableData.append(","); @@ -247,10 +241,10 @@ public class TestMax32K { } first = false; } - + tableData.append("]\n"); } - + // 检查是å¦éœ€è¦åˆ†å— String tableDataStr = tableData.toString(); if (currentChunk.length() + tableDataStr.length() > MAX_CHUNK_SIZE) { @@ -260,10 +254,10 @@ public class TestMax32K { currentChunk = new StringBuilder(); currentChunk.append(header); } - + // 如果å•个表数æ®è¶…过é™åˆ¶ï¼Œéœ€è¦è¿›ä¸€æ­¥åˆ†å‰² if (tableDataStr.length() > MAX_CHUNK_SIZE - header.length()) { - List tableChunks = splitLargeTable(tableName, fieldNames, allTableData, MAX_CHUNK_SIZE - header.length()); + List tableChunks = splitLargeTable(fieldNames, allTableData, MAX_CHUNK_SIZE - header.length()); for (int i = 0; i < tableChunks.size(); i++) { StringBuilder chunkBuilder = new StringBuilder(); chunkBuilder.append(header); @@ -280,12 +274,12 @@ public class TestMax32K { } } } - + // 添加最åŽä¸€ä¸ªå— if (currentChunk.length() > header.length()) { dataChunks.add(currentChunk.toString()); } - + return dataChunks.toArray(new String[0]); } }