|
@@ -0,0 +1,543 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "github.com/xuri/excelize/v2"
|
|
|
+ "log"
|
|
|
+ "regexp"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+// 循环外:私营企业code集合
|
|
|
+var privateCodes = map[string]bool{
|
|
|
+ "1130": true, "1151": true, "1152": true, "1212": true, "1222": true,
|
|
|
+ "2130": true, "2151": true, "2152": true, "2212": true, "2222": true,
|
|
|
+ "4531": true, "4532": true, "4533": true, "4540": true, "4551": true,
|
|
|
+ "4552": true, "4553": true, "4560": true,
|
|
|
+}
|
|
|
+
|
|
|
+// dealZhuTi 处理经营主体
|
|
|
+func dealZhuTi() {
|
|
|
+ // 打开 Excel
|
|
|
+ filePath := "经营主体类型.xlsx" // TODO: 改成真实的 xlsx 文件路径
|
|
|
+ f, err := excelize.OpenFile(filePath)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalf("打开文件失败: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 假设只有一个 sheet
|
|
|
+ sheetName := f.GetSheetName(0)
|
|
|
+ // 先构造代码 -> 名称 map
|
|
|
+ codeNameMap := make(map[string]string)
|
|
|
+
|
|
|
+ rows, err := f.GetRows(sheetName)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalf("读取行失败: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ for idx, row := range rows {
|
|
|
+ // 跳过表头
|
|
|
+ if idx == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if len(row) < 2 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ code := strings.TrimSpace(row[0])
|
|
|
+ name := strings.TrimSpace(row[1])
|
|
|
+ // 替换中文括号为英文括号
|
|
|
+ name = strings.ReplaceAll(name, "(", "(")
|
|
|
+ name = strings.ReplaceAll(name, ")", ")")
|
|
|
+ codeNameMap[code] = name
|
|
|
+ }
|
|
|
+
|
|
|
+ // 遍历数据行,新增四列
|
|
|
+ for idx, row := range rows {
|
|
|
+ if idx == 0 {
|
|
|
+ // 表头
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("D%d", idx+1), "第一位名称")
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("E%d", idx+1), "第二位名称")
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("F%d", idx+1), "第三位名称")
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("G%d", idx+1), "第四位名称")
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("H%d", idx+1), "层级")
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("I%d", idx+1), "标签1")
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if len(row) < 2 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ code := strings.TrimSpace(row[0])
|
|
|
+ name := strings.TrimSpace(row[1])
|
|
|
+ name = strings.ReplaceAll(name, "(", "(")
|
|
|
+ name = strings.ReplaceAll(name, ")", ")")
|
|
|
+
|
|
|
+ // 判断标签
|
|
|
+ tag := "内资企业"
|
|
|
+ if strings.HasPrefix(code, "5") || strings.HasPrefix(code, "7") || code == "8500" {
|
|
|
+ tag = "外企"
|
|
|
+ } else if strings.HasPrefix(code, "6") {
|
|
|
+ tag = "外企-港澳台"
|
|
|
+ } else if strings.HasPrefix(code, "91") || strings.HasPrefix(code, "92") {
|
|
|
+ tag = "农合"
|
|
|
+ } else if strings.HasPrefix(code, "95") {
|
|
|
+ tag = "个体工商户"
|
|
|
+ } else if privateCodes[code] {
|
|
|
+ tag = "私营企业"
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(code) != 4 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ // 层级判断
|
|
|
+ level := 4
|
|
|
+ if strings.HasSuffix(code, "000") {
|
|
|
+ level = 1
|
|
|
+ } else if strings.HasSuffix(code, "00") {
|
|
|
+ level = 2
|
|
|
+ } else if strings.HasSuffix(code, "0") {
|
|
|
+ level = 3
|
|
|
+ }
|
|
|
+
|
|
|
+ // 各层级代码
|
|
|
+ firstCode := code[:1] + "000"
|
|
|
+ secondCode := code[:2] + "00"
|
|
|
+ thirdCode := code[:3] + "0"
|
|
|
+ fourthCode := code
|
|
|
+
|
|
|
+ firstName := ""
|
|
|
+ secondName := ""
|
|
|
+ thirdName := ""
|
|
|
+ fourthName := ""
|
|
|
+
|
|
|
+ // 根据层级决定填哪些
|
|
|
+ if level >= 1 {
|
|
|
+ firstName = codeNameMap[firstCode]
|
|
|
+ }
|
|
|
+ if level >= 2 {
|
|
|
+ secondName = codeNameMap[secondCode]
|
|
|
+ }
|
|
|
+ if level >= 3 {
|
|
|
+ thirdName = codeNameMap[thirdCode]
|
|
|
+ }
|
|
|
+ if level == 4 {
|
|
|
+ fourthName = codeNameMap[fourthCode]
|
|
|
+ }
|
|
|
+
|
|
|
+ // B列加缩进
|
|
|
+ indent := strings.Repeat(" ", level-1) // 每层两个空格
|
|
|
+ newName := indent + name
|
|
|
+ rowNum := idx + 1
|
|
|
+ // 写回新的名称到 B 列
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("B%d", rowNum), newName)
|
|
|
+
|
|
|
+ // 写层级名称列
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("D%d", rowNum), firstName)
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("E%d", rowNum), secondName)
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("F%d", rowNum), thirdName)
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("G%d", rowNum), fourthName)
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("H%d", rowNum), level)
|
|
|
+ _ = f.SetCellValue(sheetName, fmt.Sprintf("I%d", rowNum), tag)
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存新文件
|
|
|
+ err = f.SaveAs("经营主体类型-result3.xlsx")
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalf("保存文件失败: %v", err)
|
|
|
+ }
|
|
|
+ fmt.Println("处理完成,结果保存在 经营主体类型-result3.xlsx")
|
|
|
+}
|
|
|
+
|
|
|
+// matchCompanyType 根据企业类型,返回标准经营主体代码
|
|
|
+func matchCompanyType() {
|
|
|
+ // ⚙️ Excel 文件名
|
|
|
+ inputFile := "company_types.xlsx"
|
|
|
+ outputFile := "company_types_out.xlsx"
|
|
|
+
|
|
|
+ // 📂 打开 Excel 文件
|
|
|
+ f, err := excelize.OpenFile(inputFile)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalf("无法打开文件: %v", err)
|
|
|
+ }
|
|
|
+ defer f.Close()
|
|
|
+
|
|
|
+ // ✅ 加载经营主体类型 Sheet
|
|
|
+ codeMap, err := loadCodeMap(f, "经营主体类型")
|
|
|
+ nameMap, err := loadNameMap(f, "经营主体类型")
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalf("加载经营主体类型失败: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 🔍 正则,用于提取4位数字
|
|
|
+ re4 := regexp.MustCompile(`\d{4}`)
|
|
|
+
|
|
|
+ // 📄 遍历 Sheet2
|
|
|
+ sheetName := "Sheet2"
|
|
|
+ rows, err := f.GetRows(sheetName)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalf("读取 Sheet2 失败: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ for idx, row := range rows {
|
|
|
+ if len(row) == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ originText := strings.TrimSpace(row[0])
|
|
|
+ if originText == "" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ var code string
|
|
|
+ // 去除引号
|
|
|
+ cleanText := strings.ReplaceAll(originText, `"`, "")
|
|
|
+ cleanText = strings.TrimSpace(cleanText)
|
|
|
+ // 替换中文括号为英文括号
|
|
|
+ cleanText = strings.ReplaceAll(cleanText, "(", "(")
|
|
|
+ cleanText = strings.ReplaceAll(cleanText, ")", ")")
|
|
|
+ cleanText = strings.ReplaceAll(cleanText, "外资比例低于25%", "")
|
|
|
+
|
|
|
+ // 判断是不是日期(如 2008/10/31)
|
|
|
+ if matched, _ := regexp.MatchString(`^\d{4}/\d{1,2}/\d{1,2}$`, cleanText); matched {
|
|
|
+ log.Printf("跳过日期行: %s", cleanText)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // 如果包含“年”/“月”/“日”等,也跳过(不提取数字)
|
|
|
+ if strings.Contains(cleanText, "年") || strings.Contains(cleanText, "月") || strings.Contains(cleanText, "日") {
|
|
|
+ log.Printf("跳过含日期描述的行: %s", cleanText)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ // 优先提取4位数字
|
|
|
+ if m := re4.FindString(cleanText); m != "" {
|
|
|
+ code = m
|
|
|
+ } else {
|
|
|
+ // 去除引号后完全匹配
|
|
|
+ if c, ok := codeMap[cleanText]; ok {
|
|
|
+ code = c
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //匹配不到时,需要 提取信息;然后重新匹配
|
|
|
+ code = getCodeByCompanyType(cleanText, codeMap)
|
|
|
+
|
|
|
+ // ✏️ 如果匹配到,就写到 B 列
|
|
|
+ if code != "" {
|
|
|
+ cell, _ := excelize.CoordinatesToCellName(2, idx+1) // B列
|
|
|
+ cell2, _ := excelize.CoordinatesToCellName(3, idx+1) // B列
|
|
|
+ if err := f.SetCellValue(sheetName, cell, code); err != nil {
|
|
|
+ log.Printf("写入单元格失败 %s: %v", cell, err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if err = f.SetCellValue(sheetName, cell2, nameMap[code]); err != nil {
|
|
|
+ log.Printf("写入单元格失败 %s: %v", cell2, err)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.Printf("未匹配: %s", originText)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 💾 保存结果
|
|
|
+ if err := f.SaveAs(outputFile); err != nil {
|
|
|
+ log.Fatalf("保存文件失败: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Printf("✅ 处理完成!输出文件:%s\n", outputFile)
|
|
|
+}
|
|
|
+
|
|
|
+// getCodeByCompanyType 根据企业类型,返回经营主体代码
|
|
|
+func getCodeByCompanyType(cleanText string, codeMap map[string]string) (code string) {
|
|
|
+ if code == "" {
|
|
|
+ //一人有限责任公司
|
|
|
+ if strings.Contains(cleanText, "一人有限责任公司分公司") {
|
|
|
+ cleanText = "一人有限责任公司分公司"
|
|
|
+ } else if strings.Contains(cleanText, "一人有限责任公司") {
|
|
|
+ cleanText = "一人有限责任公司"
|
|
|
+ } else if cleanText == "有限责任(公司)" {
|
|
|
+ cleanText = "有限责任公司"
|
|
|
+ } else if cleanText == "上市股份有限公司分公司" {
|
|
|
+ cleanText = "股份有限公司分公司(上市)"
|
|
|
+ } else if cleanText == "上市股份有限公司分公司(非上市)" {
|
|
|
+ cleanText = "股份有限公司分公司(非上市)"
|
|
|
+ } else if !strings.Contains(cleanText, "非个人") && !strings.Contains(cleanText, "非个体") {
|
|
|
+ if strings.Contains(cleanText, "个人") || strings.Contains(cleanText, "个体") || strings.Contains(cleanText, "户体商工个") {
|
|
|
+ cleanText = "个体工商户"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "中外合作") { // 中外合作企业 - 有限责任公司(中外合作)
|
|
|
+ if strings.Contains(cleanText, "非公司外商投资企业(中外合作)") {
|
|
|
+ cleanText = "非公司外商投资企业(中外合作)"
|
|
|
+ } else {
|
|
|
+ cleanText = "有限责任公司(中外合作)"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(中外合资)") { //有限责任公司(中外合资)
|
|
|
+ cleanText = "有限责任公司(中外合资)"
|
|
|
+ } else if strings.Contains(cleanText, "外商投资企业分支机构") { //非公司外商投资企业分支机构;外商投资企业分支机构
|
|
|
+ if strings.Contains(cleanText, "非公司") {
|
|
|
+ cleanText = "非公司外商投资企业分支机构"
|
|
|
+ } else {
|
|
|
+ cleanText = "外商投资企业分支机构"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "其他") {
|
|
|
+ //有限责任公司(港、澳、台)
|
|
|
+ if strings.Contains(cleanText, "港、澳、台") {
|
|
|
+ if strings.Contains(cleanText, "有限责任公司") {
|
|
|
+ cleanText = "有限责任公司(港、澳、台)"
|
|
|
+ } else if strings.Contains(cleanText, "非公司") {
|
|
|
+ code = "6300"
|
|
|
+ cleanText = "非公司"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(台港澳与境内合作)") {
|
|
|
+ cleanText = "有限责任公司(台港澳与境内合作)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(台港澳与境内合资)") {
|
|
|
+ cleanText = "有限责任公司(台港澳与境内合资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(台港澳与外国投资者合资)") {
|
|
|
+ cleanText = "有限责任公司(台港澳与外国投资者合资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(台港澳合资)") || (strings.Contains(cleanText, "台、港、澳资") && strings.Contains(cleanText, "有限责任公司")) {
|
|
|
+ cleanText = "有限责任公司(台港澳合资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(台港澳法人独资)") {
|
|
|
+ cleanText = "有限责任公司(港澳台法人独资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(台港澳自然人独资)") {
|
|
|
+ cleanText = "有限责任公司(港澳台自然人独资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(外商合资)") {
|
|
|
+ cleanText = "有限责任公司(外商合资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(外商投资") {
|
|
|
+ cleanText = "有限责任公司(外商投资、非独资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(外国法人独资)") {
|
|
|
+ cleanText = "有限责任公司(外国法人独资)"
|
|
|
+ } else if strings.Contains(cleanText, "外国非法人经济组织独资") {
|
|
|
+ cleanText = "外国非法人经济组织独资"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(外国自然人独资)") || strings.Contains(cleanText, "有限责任公司(外自然人独资)") {
|
|
|
+ cleanText = "有限责任公司(外国自然人独资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(法人独资)(外商投资企业投资)") {
|
|
|
+ cleanText = "有限责任公司分公司(外商投资企业法人独资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(港、澳、台)") || strings.Contains(cleanText, "有限责任公司(港澳台合资)") {
|
|
|
+ cleanText = "有限责任公司(台港澳合资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司") || strings.Contains(cleanText, "港澳台与境内合作") {
|
|
|
+ cleanText = "有限责任公司(台港澳与境内合作)"
|
|
|
+ } else if strings.Contains(cleanText, "港澳台与境内合资") && strings.Contains(cleanText, "有限责任公司") {
|
|
|
+ cleanText = "有限责任公司(台港澳与境内合资)"
|
|
|
+ } else
|
|
|
+ // 这个需要和贾老师确认
|
|
|
+ if strings.Contains(cleanText, "有限责任公司(法人独资") && strings.Contains(cleanText, "私营") {
|
|
|
+ cleanText = "有限责任公司(非自然人投资或控股的法人独资)"
|
|
|
+ } else if strings.Contains(cleanText, "港澳台与外国投资者合资") && strings.Contains(cleanText, "有限责任公司") {
|
|
|
+ cleanText = "有限责任公司(台港澳与外国投资者合资)"
|
|
|
+ } else if strings.Contains(cleanText, "港澳台法人独资") && strings.Contains(cleanText, "有限责任公司") {
|
|
|
+ cleanText = "有限责任公司(港澳台法人独资)"
|
|
|
+ } else if strings.Contains(cleanText, "港澳台自然人独资") && strings.Contains(cleanText, "有限责任公司") {
|
|
|
+ cleanText = "有限责任公司(港澳台自然人独资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司(港澳台非法人经济组织独资)") {
|
|
|
+ cleanText = "有限责任公司(台港澳非法人经济组织独资)"
|
|
|
+ } else if strings.Contains(cleanText, "港澳台投资、非独资") && strings.Contains(cleanText, "有限责任公司") {
|
|
|
+ cleanText = "有限责任公司(港澳台投资、非独资)"
|
|
|
+ } else if strings.Contains(cleanText, "港澳台合资") && strings.Contains(cleanText, "未上市") {
|
|
|
+ if strings.Contains(cleanText, "股份有限公司") {
|
|
|
+ code = "6230"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "集体所有制") {
|
|
|
+ cleanText = "集体所有制"
|
|
|
+ } else if strings.Contains(cleanText, "国有独资") {
|
|
|
+ if strings.Contains(cleanText, "有限责公司分公司") {
|
|
|
+ cleanText = "有限责任公司分公司(国有独资)"
|
|
|
+ } else if strings.Contains(cleanText, "有限责公司") {
|
|
|
+ cleanText = "有限责任公司(国有独资)"
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ //台、港、澳
|
|
|
+ if strings.Contains(cleanText, "台、港、澳") {
|
|
|
+ if strings.Contains(cleanText, "台、港、澳分公司") || strings.Contains(cleanText, "台、港、澳投资企业分公司") || strings.Contains(cleanText, "台、港、澳投资公司分公司") {
|
|
|
+ code = "6810"
|
|
|
+ }
|
|
|
+ if strings.Contains(cleanText, "台、港、澳办事处") {
|
|
|
+ code = "6830"
|
|
|
+ }
|
|
|
+ if strings.Contains(cleanText, "台、港、澳投资企业") {
|
|
|
+ code = "6000"
|
|
|
+ }
|
|
|
+ if strings.Contains(cleanText, "台、港、澳投资企业其他") {
|
|
|
+ code = "6190"
|
|
|
+ }
|
|
|
+ } else if cleanText == "股份有限公司分支机构(台港澳与境内合资)" {
|
|
|
+ code = "6220"
|
|
|
+ } else if strings.Contains(cleanText, "台港澳投资企业办事处") {
|
|
|
+ code = "6830"
|
|
|
+ } else if strings.Contains(cleanText, "台港澳投资有限合伙企业") {
|
|
|
+ code = "6400"
|
|
|
+ } else if strings.Contains(cleanText, "台港澳投资普通合伙企业分支机构") {
|
|
|
+ code = "6840"
|
|
|
+ } else if strings.Contains(cleanText, "台港澳投资特殊普通合伙企业分支机构") {
|
|
|
+ code = "6420"
|
|
|
+ } else if strings.Contains(cleanText, "台港澳股份有限公司") {
|
|
|
+ code = "6200"
|
|
|
+ } else if strings.Contains(cleanText, "台港澳非公司") {
|
|
|
+ code = "6300"
|
|
|
+ } else if cleanText == "国外投资" {
|
|
|
+ code = "5000"
|
|
|
+ } else if strings.Contains(cleanText, "国有事业单位营业") {
|
|
|
+ cleanText = "国有事业单位营业"
|
|
|
+ } else if strings.Contains(cleanText, "国有控股") {
|
|
|
+ if strings.Contains(cleanText, "非上市") {
|
|
|
+ if strings.Contains(cleanText, "股份有限公司分公司") {
|
|
|
+ code = "1223"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "上市") {
|
|
|
+ if strings.Contains(cleanText, "股份有限公司分公司") {
|
|
|
+ code = "2213"
|
|
|
+ cleanText = "股份有限公司分公司(上市、国有控股)"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司分公司") {
|
|
|
+ code = "2223"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司分公司") {
|
|
|
+ code = "2140"
|
|
|
+ } else if strings.Contains(cleanText, "有限责任公司") {
|
|
|
+ code = "1140"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "国有") {
|
|
|
+ if strings.Contains(cleanText, "经营单位") && strings.Contains(cleanText, "非法人") {
|
|
|
+ code = "4410"
|
|
|
+ cleanText = "国有经营单位(非法人)"
|
|
|
+ } else if strings.Contains(cleanText, "国有联营") {
|
|
|
+ code = "4600"
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ //合伙企业
|
|
|
+ if strings.Contains(cleanText, "合伙企业") {
|
|
|
+ if strings.Contains(cleanText, "特殊普通合伙") {
|
|
|
+ code = "4532"
|
|
|
+ } else if strings.Contains(cleanText, "普通合伙") {
|
|
|
+ code = "4530"
|
|
|
+ } else if strings.Contains(cleanText, "有限合伙") {
|
|
|
+ code = "4533"
|
|
|
+ } else if strings.Contains(cleanText, "合伙企业分支机构") {
|
|
|
+ code = "4550"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "合伙私营企业") {
|
|
|
+ code = "4530"
|
|
|
+ } else if cleanText == "内资企业法人联营" {
|
|
|
+ cleanText = "联营"
|
|
|
+ } else
|
|
|
+ //农民专业合作社分支机构
|
|
|
+ if strings.Contains(cleanText, "合作社") {
|
|
|
+ if strings.Contains(cleanText, "农民专业合作社分支机构") {
|
|
|
+ cleanText = "农民专业合作社分支机构"
|
|
|
+ } else if strings.Contains(cleanText, "农民专业合作社") {
|
|
|
+ cleanText = "农民专业合作社"
|
|
|
+ } else if strings.Contains(cleanText, "合作社分支机构") {
|
|
|
+ cleanText = "农民专业合作社分支机构"
|
|
|
+ } else {
|
|
|
+ cleanText = "农民专业合作社"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "非公司") {
|
|
|
+ if strings.Contains(cleanText, "港、澳、台投资企业分支机构") {
|
|
|
+ cleanText = "非公司台、港、澳投资企业分支机构"
|
|
|
+ code = "6820"
|
|
|
+ } else if strings.Contains(cleanText, "港、澳、台企业(港澳台合资)") {
|
|
|
+ cleanText = "非公司台、港、澳企业(台港澳与境内合作)"
|
|
|
+ code = "6310"
|
|
|
+ } else if strings.Contains(cleanText, "非公司外商投资企业") && strings.Contains(cleanText, "其他") {
|
|
|
+ code = "5390"
|
|
|
+ }
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(上市公司)") {
|
|
|
+ cleanText = "股份有限公司(上市)"
|
|
|
+ code = "1210"
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(中外合资、上市)") {
|
|
|
+ cleanText = "股份有限公司(中外合资、上市)"
|
|
|
+ code = "5220"
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(中外合资、未上市)") || strings.Contains(cleanText, "股份有限公司(中外合资,未上市)") {
|
|
|
+ cleanText = "股份有限公司(中外合资、未上市)"
|
|
|
+ code = "5210"
|
|
|
+ } else if cleanText == "股份有限公司(其他)" {
|
|
|
+ code = "5290"
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(其他台港澳股份有限公司)") {
|
|
|
+ code = "6290"
|
|
|
+ } else if cleanText == "股份有限公司(台、港、澳资)" {
|
|
|
+ code = "6270"
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(台港澳与境内合资、上市)") || strings.Contains(cleanText, "股份有限公司(台港澳与境内合资,上市)") {
|
|
|
+ cleanText = "股份有限公司(台港澳与境内合资、上市)"
|
|
|
+ code = "6220"
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(台港澳与境内合资、未上市)") {
|
|
|
+ cleanText = "股份有限公司(台港澳与境内合资、未上市)"
|
|
|
+ code = "6210"
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(台港澳与外国投资者合资、未上市)") {
|
|
|
+ cleanText = "股份有限公司(台港澳与外国投资者合资、未上市)"
|
|
|
+ code = "6250"
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(台港澳合资、上市)") {
|
|
|
+ cleanText = "股份有限公司(台港澳合资、上市)"
|
|
|
+ code = "6240"
|
|
|
+ } else if strings.Contains(cleanText, "股份有限公司(台港澳合资、未上市)") {
|
|
|
+ cleanText = "股份有限公司(台港澳合资、未上市)"
|
|
|
+ code = "6230"
|
|
|
+ } else if cleanText == "股份有限公司(港、澳、台)" {
|
|
|
+ code = "6200"
|
|
|
+ } else {
|
|
|
+
|
|
|
+ }
|
|
|
+ // 判断是不是日期(如 2008/10/31)
|
|
|
+ if matched, _ := regexp.MatchString(`^\d{4}/\d{1,2}/\d{1,2}$`, cleanText); matched {
|
|
|
+ log.Printf("跳过日期行: %s", cleanText)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 如果包含“年”/“月”/“日”等,也跳过(不提取数字)
|
|
|
+ if strings.Contains(cleanText, "年") || strings.Contains(cleanText, "月") || strings.Contains(cleanText, "日") {
|
|
|
+ log.Printf("跳过含日期描述的行: %s", cleanText)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ cleanText = strings.TrimSpace(cleanText)
|
|
|
+ cleanText = strings.ReplaceAll(cleanText, "(", "(")
|
|
|
+ cleanText = strings.ReplaceAll(cleanText, ")", ")")
|
|
|
+ if code == "" {
|
|
|
+ if c, ok := codeMap[cleanText]; ok {
|
|
|
+ code = c
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return code
|
|
|
+}
|
|
|
+
|
|
|
+// 📦 加载经营主体类型 Sheet,返回 名称=>代码 的映射
|
|
|
+func loadCodeMap(f *excelize.File, sheetName string) (map[string]string, error) {
|
|
|
+ codeMap := make(map[string]string)
|
|
|
+ rows, err := f.GetRows(sheetName)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ for idx, row := range rows {
|
|
|
+ if idx == 0 {
|
|
|
+ continue // 跳过表头
|
|
|
+ }
|
|
|
+ if len(row) >= 2 {
|
|
|
+ name := strings.TrimSpace(row[1])
|
|
|
+ code := strings.TrimSpace(row[0])
|
|
|
+ // 替换中文括号为英文括号
|
|
|
+ name = strings.ReplaceAll(name, "(", "(")
|
|
|
+ name = strings.ReplaceAll(name, ")", ")")
|
|
|
+ codeMap[name] = code
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return codeMap, nil
|
|
|
+}
|
|
|
+
|
|
|
+func loadNameMap(f *excelize.File, sheetName string) (map[string]string, error) {
|
|
|
+ codeMap := make(map[string]string)
|
|
|
+ rows, err := f.GetRows(sheetName)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ for idx, row := range rows {
|
|
|
+ if idx == 0 {
|
|
|
+ continue // 跳过表头
|
|
|
+ }
|
|
|
+ if len(row) >= 2 {
|
|
|
+ name := strings.TrimSpace(row[1])
|
|
|
+ code := strings.TrimSpace(row[0])
|
|
|
+ // 替换中文括号为英文括号
|
|
|
+ name = strings.ReplaceAll(name, "(", "(")
|
|
|
+ name = strings.ReplaceAll(name, ")", ")")
|
|
|
+ codeMap[code] = name
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return codeMap, nil
|
|
|
+}
|