From 3e08b20698da3663fe373edd40142c991de592eb Mon Sep 17 00:00:00 2001 From: hoteas <925970985@qq.com> Date: Fri, 24 Jul 2026 05:36:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(makecode):=20=E8=BE=BE=E6=A2=A6=E5=88=97?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8C=89=20OWNER=20=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E5=85=BC=E5=AE=B9=E9=80=89=E9=A1=B9=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E8=BE=B9=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同时修复新增默认 state、导出 sheet 名长度与目录权限。 Co-authored-by: Cursor --- code.go | 35 +++++++++++++++++++++++++---------- code/makecode.go | 34 +++++++++++++++++++++++++++++----- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/code.go b/code.go index d2a8cee..c469f16 100644 --- a/code.go +++ b/code.go @@ -209,6 +209,17 @@ var TptProject = Proj{ } } + columns := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(tableName).GetSlice("columns") + for k := range columns { + if columns.GetMap(k).GetString("name") == "state" { + stateVal := inData["state"] + if stateVal == nil || ObjToStr(stateVal) == "" { + inData["state"] = 0 + } + break + } + } + re := that.Db.Insert(tableName, inData) if re == 0 { @@ -604,9 +615,13 @@ var TptProject = Proj{ if download == 1 { tableNameLabel := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(tableName).GetString("label") + sheetName := tableNameLabel + if sheetName == "" || len(sheetName) > 31 { + sheetName = tableName + } f := excelize.NewFile() // 创建一个工作表 - f.NewSheet(tableNameLabel) + f.NewSheet(sheetName) f.DeleteSheet("Sheet1") columns := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(tableName).GetSlice("columns") @@ -622,21 +637,21 @@ var TptProject = Proj{ //单行 for k1, v1 := range reData { if k1 == 0 { - f.SetCellValue(tableNameLabel, convertToTitle(n)+"1", v.GetString("label")) + f.SetCellValue(sheetName, convertToTitle(n)+"1", v.GetString("label")) } if v.GetString("link") != "" { - f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString(v.GetString("link")+"_"+v.GetString("name")+"_"+v.GetString("value"))) + f.SetCellValue(sheetName, convertToTitle(n)+ObjToStr(k1+2), v1.GetString(v.GetString("link")+"_"+v.GetString("name")+"_"+v.GetString("value"))) continue } if v.GetString("name") == "table" { - f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString("table_"+v.GetString("name")+"_name")) + f.SetCellValue(sheetName, convertToTitle(n)+ObjToStr(k1+2), v1.GetString("table_"+v.GetString("name")+"_name")) continue } if v.GetString("name") == "table_id" { - f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString("table_"+v.GetString("name")+"_name")) + f.SetCellValue(sheetName, convertToTitle(n)+ObjToStr(k1+2), v1.GetString("table_"+v.GetString("name")+"_name")) continue } @@ -647,7 +662,7 @@ var TptProject = Proj{ for ok, _ := range options { ov := options.GetMap(ok) if ov.GetString("value") == v1.GetString(v.GetString("name")) { - f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), ov.GetString("name")) + f.SetCellValue(sheetName, convertToTitle(n)+ObjToStr(k1+2), ov.GetString("name")) isEnd = true break } @@ -659,7 +674,7 @@ var TptProject = Proj{ } - f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString(v.GetString("name"))) + f.SetCellValue(sheetName, convertToTitle(n)+ObjToStr(k1+2), v1.GetString(v.GetString("name"))) } } filePath := that.Config.GetString("filePath") @@ -668,7 +683,7 @@ var TptProject = Proj{ } //path := time.Now().Format(filePath) - e := os.MkdirAll(that.Config.GetString("tpt")+filePath, os.ModeDir) + e := os.MkdirAll(that.Config.GetString("tpt")+filePath, 0755) if e != nil { that.Display(3, e) return @@ -677,7 +692,7 @@ var TptProject = Proj{ // 根据指定路径保存文件 if err := f.SaveAs(that.Config.GetString("tpt") + filePath); err != nil { - fmt.Println(err) + fmt.Printf("SaveAs failed: %v\n", err) that.Display(4, "输出异常") return } @@ -875,7 +890,7 @@ var TptProject = Proj{ } path := time.Now().Format(filePath) - e := os.MkdirAll(that.Config.GetString("tpt")+path, os.ModeDir) + e := os.MkdirAll(that.Config.GetString("tpt")+path, 0755) if e != nil { that.Display(3, e) return diff --git a/code/makecode.go b/code/makecode.go index b7ac3e1..41f71cc 100644 --- a/code/makecode.go +++ b/code/makecode.go @@ -175,7 +175,9 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) { tableInfo = db.Query("pragma table_info([" + v.GetString("name") + "]);") } if db.Type == "dm" || db.Type == "dameng" { - tableInfo = db.Query(`SELECT c.COLUMN_NAME AS "name", c.DATA_TYPE AS "type", m.COMMENTS AS "label", c.NULLABLE AS "must", c.DATA_DEFAULT AS "dflt_value" FROM ALL_TAB_COLUMNS c LEFT JOIN USER_COL_COMMENTS m ON c.TABLE_NAME=m.TABLE_NAME AND c.COLUMN_NAME=m.COLUMN_NAME WHERE c.TABLE_NAME='` + v.GetString("name") + `' AND c.OWNER='` + db.DBName + `' ORDER BY c.COLUMN_ID`) + // 必须用 ALL_COL_COMMENTS 并按 OWNER 对齐:USER_COL_COMMENTS 无 schema, + // 在 SYSDBA 下常混入同名表空注释或读不到业务库(如 login_config)列备注。 + tableInfo = db.Query(`SELECT c.COLUMN_NAME AS "name", c.DATA_TYPE AS "type", m.COMMENTS AS "label", c.NULLABLE AS "must", c.DATA_DEFAULT AS "dflt_value" FROM ALL_TAB_COLUMNS c LEFT JOIN ALL_COL_COMMENTS m ON c.OWNER=m.OWNER AND c.TABLE_NAME=m.TABLE_NAME AND c.COLUMN_NAME=m.COLUMN_NAME WHERE c.TABLE_NAME='` + v.GetString("name") + `' AND c.OWNER='` + db.DBName + `' ORDER BY c.COLUMN_ID`) } idSlice = append(idSlice, tableInfo) @@ -303,11 +305,33 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) { options := Slice{} comments := strings.Split(info.GetString("label"), ":") if len(comments) >= 2 { - optionComment := strings.Split(comments[1], ",") + // 截掉空格后附加说明 / {} 提示,避免污染 options 解析 + optPart := comments[1] + if idx := strings.Index(optPart, " "); idx > -1 { + optPart = optPart[:idx] + } + for _, pair := range [][2]string{{"{", "}"}, {"(", ")"}, {"(", ")"}} { + if start := strings.Index(optPart, pair[0]); start != -1 { + optPart = optPart[:start] + break + } + } + optionComment := strings.Split(optPart, ",") for _, v := range optionComment { - optionSlice := strings.Split(v, "-") - if len(optionSlice) >= 2 { - options = append(options, Map{"name": optionSlice[1], "value": optionSlice[0]}) + v = strings.TrimSpace(v) + if v == "" { + continue + } + // 兼容规范「值-名称」与存量「值=名称」 + sep := -1 + for i, r := range v { + if r == '-' || r == '=' { + sep = i + break + } + } + if sep > 0 && sep < len(v)-1 { + options = append(options, Map{"name": strings.TrimSpace(v[sep+1:]), "value": strings.TrimSpace(v[:sep])}) } } }