| 
					
				 | 
			
			
				@@ -22,10 +22,11 @@ def parse_region_table_excel(file_path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         print(f"文件读取失败:{file_path}\n错误:{str(e)}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    params = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    params_old = []  # 老逻辑的数据(非地级市) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    params_new = []  # 新逻辑的地级市数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # SQL模板使用命名占位符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sql_template = """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sql_template_old = """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    INSERT INTO `t_yujin_crossborder_region_trade` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    (`year_month`, `region_code`, `region_name`, `region_type`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     `monthly_total`, `monthly_export`, `monthly_import`, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,6 +47,22 @@ def parse_region_table_excel(file_path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ,create_time = NOW() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # SQL模板2:新表 - t_yujin_crossborder_prov_region_trade 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sql_template_new = """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        INSERT INTO `t_yujin_crossborder_prov_region_trade` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (`crossborder_year`, `crossborder_year_month`, `prov_code`, `prov_name`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         `city_code`, `city_name`, `monthly_total`, `monthly_import`, `monthly_export`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VALUES  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (:crossborder_year, :crossborder_year_month, :prov_code, :prov_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         :city_code, :city_name, :monthly_total, :monthly_import, :monthly_export) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ON DUPLICATE KEY UPDATE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            monthly_total = VALUES(monthly_total), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            monthly_import = VALUES(monthly_import), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            monthly_export = VALUES(monthly_export), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            create_time = NOW() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 从第7行开始读取(索引6) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for row_idx in range(6, sheet.nrows): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,20 +85,39 @@ def parse_region_table_excel(file_path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     print(f"⚠️ 地区匹配失败:{region_name}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            # 构建参数字典 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            param_dict = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "year_month": year_month, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "region_code": region_info['code'],  # region_code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "region_name": region_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "region_type": region_info['type'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "monthly_total": parse_value(row[2]),  # monthly_total 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "monthly_import": parse_value(row[4]),  # monthly_import 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "monthly_export": parse_value(row[6]),  # monthly_export 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "ytd_total": parse_value(row[8]),  # ytd_total 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "ytd_import": parse_value(row[9]),  # ytd_import 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "ytd_export": parse_value(row[10])  # ytd_export 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            params.append(param_dict) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            is_municipality = region_name in ["北京市","天津市","上海市","重庆市"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            is_city = region_name.endswith("市") and not is_municipality 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if is_city: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # ✅ 地级市(非直辖市),写入新表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                param_dict_new = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "crossborder_year": year, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "crossborder_year_month": year_month, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "prov_code": region_info['province_code'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "prov_name": region_info['province_name'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "city_code": region_info['code'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "city_name": region_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "monthly_total": parse_value(row[2]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "monthly_import": parse_value(row[6]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "monthly_export": parse_value(row[4]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                params_new.append(param_dict_new) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # ❌ 非地级市(含省、自治区、直辖市等),写入老表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                param_dict_old = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "year_month": year_month, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "region_code": region_info['code'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "region_name": region_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "region_type": region_info['type'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "monthly_total": parse_value(row[2]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "monthly_import": parse_value(row[6]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "monthly_export": parse_value(row[4]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "ytd_total": parse_value(row[8]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "ytd_import": parse_value(row[10]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "ytd_export": parse_value(row[9]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                params_old.append(param_dict_old) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         except Exception as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             print(f"行{row_idx}处理失败:{str(e)}") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -89,15 +125,21 @@ def parse_region_table_excel(file_path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 使用DBHelper执行批量SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if params: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            row_count = db.execute_sql_with_params(sql_template, params) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            print(f"✅ 成功处理 {len(params)} 条记录,插入/更新 {row_count} 行") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return row_count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print(f"⚠️ 未找到有效数据:{file_path}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if params_old: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            row_count = db.execute_sql_with_params(sql_template_old, params_old) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            print(f"✅ 成功处理 {len(params_old)} 条记录(老表),插入/更新 {row_count} 行") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     except Exception as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print(f"数据库操作失败:{str(e)}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(f"数据库操作失败(老表):{str(e)}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # 执行新表插入 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if params_new: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            row_count = db.execute_sql_with_params(sql_template_new, params_new) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            print(f"✅ 成功处理 {len(params_new)} 条记录(新表),插入/更新 {row_count} 行") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    except Exception as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(f"数据库操作失败(新表):{str(e)}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return len(params_old) + len(params_new) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if __name__ == "__main__": 
			 |