2021-06-04 03:03:48 +08:00
package code
import (
2022-03-13 01:12:29 +08:00
. "code.hoteas.com/golang/hotime/common"
"code.hoteas.com/golang/hotime/db"
2021-06-04 03:03:48 +08:00
"errors"
2021-06-04 10:04:37 +08:00
"fmt"
2021-06-04 03:03:48 +08:00
"io/ioutil"
"net/http"
"os"
"path/filepath"
2022-03-13 05:06:28 +08:00
"sort"
2021-06-04 10:04:37 +08:00
"strings"
2021-09-16 04:33:10 +08:00
"time"
2021-06-04 03:03:48 +08:00
)
type MakeCode struct {
2022-03-13 05:06:28 +08:00
FileConfig Map
2021-06-12 13:33:35 +08:00
IndexMenus Map
TableConfig Map
TableColumns map [ string ] map [ string ] Map
SearchColumns map [ string ] map [ string ] Map
Config Map
2022-03-13 05:06:28 +08:00
RuleConfig [] Map
2021-06-04 03:03:48 +08:00
Error
}
2022-03-13 05:06:28 +08:00
func ( that * MakeCode ) Db2JSON ( db * db . HoTimeDB , config Map ) {
2021-06-05 02:18:56 +08:00
isMake := false
2022-07-18 19:44:00 +08:00
//hasConfigFile := false
2021-06-05 02:18:56 +08:00
idSlice := Slice {}
2022-03-13 05:06:28 +08:00
that . FileConfig = config
2021-06-04 03:03:48 +08:00
if that . TableColumns == nil {
that . TableColumns = make ( map [ string ] map [ string ] Map )
}
2021-06-12 13:33:35 +08:00
if that . SearchColumns == nil {
that . SearchColumns = make ( map [ string ] map [ string ] Map )
}
2021-06-04 03:03:48 +08:00
//加载配置文件
2022-07-18 19:44:00 +08:00
//btes, err := ioutil.ReadFile(config.GetString("config"))
var err error
2021-06-04 03:03:48 +08:00
that . Config = DeepCopyMap ( Config ).( Map )
2022-03-13 05:06:28 +08:00
that . Config [ "name" ] = config . GetString ( "table" )
//加载规则文件
btesRule , errRule := ioutil . ReadFile ( config . GetString ( "rule" ))
that . RuleConfig = [] Map {}
if errRule == nil {
//cmap := Map{}
//文件是否损坏
ruleLis := ObjToSlice ( string ( btesRule ), & that . Error )
//cmap.JSON()
for k , _ := range ruleLis {
that . RuleConfig = append ( that . RuleConfig , ruleLis . GetMap ( k ))
2021-06-04 03:03:48 +08:00
}
} else {
2022-10-19 03:37:52 +08:00
for _ , v := range RuleConfig {
that . RuleConfig = append ( that . RuleConfig , ObjToMap ( DeepCopyMap ( v )))
2022-03-13 05:06:28 +08:00
}
2022-03-13 05:13:32 +08:00
if db != nil {
_ = os . MkdirAll ( filepath . Dir ( config . GetString ( "rule" )), os . ModeDir )
err = ioutil . WriteFile ( config . GetString ( "rule" ), [] byte ( ObjToStr ( that . RuleConfig )), os . ModePerm )
if err != nil {
that . Error . SetError ( err )
}
}
2022-03-13 05:06:28 +08:00
that . Error . SetError ( errors . New ( "rule配置文件不存在,或者配置出错,使用缺省默认配置" ))
2021-06-04 03:03:48 +08:00
}
2022-03-13 05:06:28 +08:00
2022-07-18 19:44:00 +08:00
that . IndexMenus = Map {}
2021-06-06 07:50:58 +08:00
that . TableConfig = that . Config . GetMap ( "tables" )
if that . TableConfig == nil {
that . TableConfig = Map {}
}
for tableName , _ := range that . TableConfig {
columns := that . TableConfig . GetMap ( tableName ). GetSlice ( "columns" )
2021-06-12 13:33:35 +08:00
search := that . TableConfig . GetMap ( tableName ). GetSlice ( "search" )
2021-06-04 03:03:48 +08:00
//初始化
if that . TableColumns [ tableName ] == nil {
that . TableColumns [ tableName ] = map [ string ] Map {}
}
2021-06-12 13:33:35 +08:00
//初始化搜索项
if that . SearchColumns [ tableName ] == nil {
that . SearchColumns [ tableName ] = map [ string ] Map {}
}
2021-06-04 03:03:48 +08:00
//注入源数据
2021-06-06 07:50:58 +08:00
for index , _ := range columns {
columnsName := columns . GetMap ( index ). GetString ( "name" )
that . TableColumns [ tableName ][ columnsName ] = columns . GetMap ( index )
2021-06-04 03:03:48 +08:00
}
2021-06-12 13:33:35 +08:00
//注入search源数据
for index , _ := range search {
searchName := search . GetMap ( index ). GetString ( "name" )
that . SearchColumns [ tableName ][ searchName ] = search . GetMap ( index )
}
2021-06-04 03:03:48 +08:00
}
2021-09-16 04:33:10 +08:00
if db == nil {
2021-09-12 05:35:14 +08:00
return
}
//数据库反哺
2022-03-13 05:06:28 +08:00
myInit := strings . Replace ( InitTpt , "{{name}}" , config . GetString ( "table" ), - 1 )
2021-06-04 10:04:37 +08:00
ctrList := ""
2021-06-05 02:18:56 +08:00
nowTables := make ([] Map , 0 )
if db . Type == "mysql" {
nowTables = db . Select ( "INFORMATION_SCHEMA.TABLES" , "TABLE_NAME as name,TABLE_COMMENT as label" , Map { "TABLE_SCHEMA" : db . DBName })
}
2021-06-04 03:03:48 +08:00
if db . Type == "sqlite" {
2023-04-06 11:37:03 +08:00
nowTables = db . Select ( "sqlite_master" , "name" , Map { "type" : "table" })
2021-06-05 02:18:56 +08:00
}
2026-03-20 10:46:51 +08:00
if db . Type == "dm" || db . Type == "dameng" {
nowTables = db . Query ( `SELECT TABLE_NAME AS "name", COMMENTS AS "label" FROM USER_TAB_COMMENTS WHERE TABLE_TYPE='TABLE'` )
}
2021-06-05 02:18:56 +08:00
//idSlice=append(idSlice,nowTables)
for _ , v := range nowTables {
2026-01-25 05:14:18 +08:00
// if v.GetString("name") == "cached" {
// continue
// }
2021-06-05 02:18:56 +08:00
if that . TableConfig . GetMap ( v . GetString ( "name" )) == nil {
if v . GetString ( "label" ) == "" {
2021-06-11 08:06:44 +08:00
v [ "label" ] = v . GetString ( "name" )
2021-06-05 02:18:56 +08:00
}
that . TableConfig [ v . GetString ( "name" )] = Map {
"label" : v . GetString ( "label" ),
"table" : v . GetString ( "name" ),
2022-08-01 03:40:09 +08:00
"auth" : [] string { "show" , "add" , "delete" , "edit" , "info" , "download" },
2021-06-05 02:18:56 +08:00
"columns" : [] Map {},
"search" : [] Map {
2022-08-19 17:58:18 +08:00
{ "type" : "search" , "name" : "keywordtable" , "label" : "筛选" , "options" : Slice { Map { "name" : "无" , "value" : nil }}, "value" : nil },
{ "type" : "search" , "name" : "daterangetable" , "label" : "筛选" , "options" : Slice { Map { "name" : "无" , "value" : nil }}, "value" : nil },
2021-06-13 03:08:43 +08:00
{ "type" : "search" , "name" : "keyword" , "label" : "请输入关键词" , "value" : nil },
{ "type" : "search" , "name" : "daterange" , "label" : "时间段" , "value" : nil },
{ "type" : "search" , "name" : "sort" , "label" : "排序" , "value" : nil },
2021-06-05 02:18:56 +08:00
},
2021-06-04 03:03:48 +08:00
}
2022-08-01 16:45:24 +08:00
if v . GetString ( "name" ) == "logs" {
that . TableConfig . GetMap ( v . GetString ( "name" ))[ "auth" ] = [] string { "show" , "download" }
}
2021-06-05 02:18:56 +08:00
}
2021-09-16 04:33:10 +08:00
2021-06-05 02:18:56 +08:00
//初始化
if that . TableColumns [ v . GetString ( "name" )] == nil {
that . TableColumns [ v . GetString ( "name" )] = make ( map [ string ] Map )
}
2021-06-11 08:06:44 +08:00
2021-06-12 13:33:35 +08:00
//初始化
if that . SearchColumns [ v . GetString ( "name" )] == nil {
that . SearchColumns [ v . GetString ( "name" )] = make ( map [ string ] Map )
}
2021-06-05 02:18:56 +08:00
tableInfo := make ([] Map , 0 )
if db . Type == "mysql" {
2025-04-10 22:09:53 +08:00
tableInfo = db . Select ( "INFORMATION_SCHEMA.COLUMNS" , "COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value" , Map { "AND" : Map { "TABLE_SCHEMA" : db . DBName , "TABLE_NAME" : v . GetString ( "name" )}, "ORDER" : "ORDINAL_POSITION" })
2021-06-05 02:18:56 +08:00
}
if db . Type == "sqlite" {
tableInfo = db . Query ( "pragma table_info([" + v . GetString ( "name" ) + "]);" )
}
2026-03-20 10:46:51 +08:00
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 USER_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" ) + `' ORDER BY c.COLUMN_ID` )
}
2021-06-04 03:03:48 +08:00
2021-06-05 02:18:56 +08:00
idSlice = append ( idSlice , tableInfo )
2022-01-17 04:47:39 +08:00
for _ , info1 := range tableInfo {
info := DeepCopyMap ( info1 ).( Map )
2021-06-05 02:18:56 +08:00
if info . GetString ( "label" ) == "" {
2021-06-11 08:06:44 +08:00
info [ "label" ] = info . GetString ( "name" )
2021-06-04 03:03:48 +08:00
}
2021-06-06 07:50:58 +08:00
coloum := that . TableColumns [ v . GetString ( "name" )][ info . GetString ( "name" )]
2021-06-05 02:18:56 +08:00
2021-06-06 07:50:58 +08:00
if coloum == nil {
2021-06-07 11:32:47 +08:00
//根据类型判断真实类型
2021-09-16 04:33:10 +08:00
for k , v1 := range ColumnDataType {
2022-11-17 17:17:07 +08:00
if strings . Contains ( info . GetString ( "type" ), k ) {
2021-09-16 04:33:10 +08:00
info [ "type" ] = v1
2022-11-17 17:17:07 +08:00
break
2021-06-07 11:32:47 +08:00
}
}
2021-08-30 07:36:17 +08:00
2021-06-06 07:50:58 +08:00
coloum = Map {
2021-06-05 02:18:56 +08:00
"name" : info . GetString ( "name" ),
"type" : info . GetString ( "type" ),
"label" : info . GetString ( "label" ),
//"add": false, "info": false, "edit": false, "list": true,
2021-06-07 11:32:47 +08:00
//"must": false,
2021-06-05 02:18:56 +08:00
}
2022-01-17 04:47:39 +08:00
2023-04-06 11:37:03 +08:00
if info . GetString ( "must" ) == "NO" {
coloum [ "must" ] = true
}
if info [ "dflt_value" ] != nil {
coloum [ "default" ] = info [ "dflt_value" ]
}
if info [ "pk" ] != nil && info . GetCeilInt64 ( "pk" ) == 1 {
coloum [ "must" ] = true
}
2021-06-12 13:33:35 +08:00
//备注以空格隔开,空格后的是其他备注
2022-01-17 04:47:39 +08:00
indexNum := strings . Index ( info . GetString ( "label" ), " " )
if indexNum > - 1 {
2021-06-12 13:33:35 +08:00
coloum [ "label" ] = info . GetString ( "label" )[: indexNum ]
}
2022-10-08 17:32:37 +08:00
psStart := strings . Index ( info . GetString ( "label" ), "{" )
psEnd := strings . Index ( info . GetString ( "label" ), "}" )
if psStart != - 1 && psEnd > psStart {
coloum [ "ps" ] = info . GetString ( "label" )[ psStart + 1 : psEnd ]
}
2022-01-17 04:47:39 +08:00
//去除数据信息,是用:号分割的
indexNum = strings . Index ( coloum . GetString ( "label" ), ":" )
if indexNum > - 1 {
coloum [ "label" ] = coloum . GetString ( "label" )[: indexNum ]
}
2021-06-04 03:03:48 +08:00
2022-03-13 05:06:28 +08:00
for _ , ColumnName := range that . RuleConfig {
if ( ColumnName . GetBool ( "strict" ) && coloum . GetString ( "name" ) == ColumnName . GetString ( "name" )) ||
2022-10-19 03:37:52 +08:00
(! ColumnName . GetBool ( "strict" ) && strings . Contains ( coloum . GetString ( "name" ), ColumnName . GetString ( "name" ))) ||
2022-10-21 04:28:51 +08:00
( v . GetString ( "name" ) + "." + coloum . GetString ( "name" ) == ColumnName . GetString ( "name" )) {
2021-06-07 11:32:47 +08:00
//全部都不需要则不加入
2022-03-13 05:06:28 +08:00
if ColumnName . GetBool ( "edit" ) == false && ColumnName . GetBool ( "list" ) == false && ColumnName . GetBool ( "info" ) == false {
2021-06-07 11:32:47 +08:00
coloum [ "notUse" ] = true
2021-09-16 04:33:10 +08:00
//continue
2021-06-07 11:32:47 +08:00
}
2022-03-13 05:06:28 +08:00
coloum [ "info" ] = ColumnName . GetBool ( "info" )
coloum [ "edit" ] = ColumnName . GetBool ( "edit" )
2022-10-19 03:37:52 +08:00
coloum [ "add" ] = ColumnName [ "add" ]
2022-03-13 05:06:28 +08:00
coloum [ "list" ] = ColumnName . GetBool ( "list" )
2023-04-06 11:37:03 +08:00
//coloum["must"] = ColumnName.GetBool("must")
if coloum [ "must" ] == nil {
coloum [ "must" ] = ColumnName . GetBool ( "must" )
} else {
if ColumnName [ "must" ] != nil {
coloum [ "must" ] = ColumnName . GetBool ( "must" )
}
}
2021-09-16 04:33:10 +08:00
2022-03-13 05:06:28 +08:00
if ColumnName . GetBool ( "info" ) {
2021-09-16 04:33:10 +08:00
delete ( coloum , "info" )
2021-06-07 11:32:47 +08:00
}
2022-03-13 05:06:28 +08:00
if ColumnName . GetBool ( "edit" ) {
2021-09-16 04:33:10 +08:00
delete ( coloum , "edit" )
2022-10-19 03:37:52 +08:00
}
if ColumnName [ "add" ] == nil || ColumnName . GetBool ( "add" ) {
2021-09-16 04:33:10 +08:00
delete ( coloum , "add" )
2021-06-07 11:32:47 +08:00
}
2022-03-13 05:06:28 +08:00
if ColumnName . GetBool ( "list" ) {
2021-09-16 04:33:10 +08:00
delete ( coloum , "list" )
2021-06-07 11:32:47 +08:00
}
2022-03-26 16:53:40 +08:00
if ! ColumnName . GetBool ( "must" ) {
2021-09-16 04:33:10 +08:00
delete ( coloum , "must" )
2021-06-07 11:32:47 +08:00
}
2021-09-16 04:33:10 +08:00
2022-03-13 05:06:28 +08:00
if ColumnName . GetString ( "type" ) != "" {
2022-04-25 19:58:49 +08:00
if ColumnName . GetString ( "type" ) == "time" && coloum [ "type" ] == "number" {
coloum [ "type" ] = "unixTime"
} else {
coloum [ "type" ] = ColumnName . GetString ( "type" )
}
2021-06-07 11:32:47 +08:00
}
2022-03-13 05:06:28 +08:00
if ColumnName . GetBool ( "strict" ) && coloum . GetString ( "name" ) == ColumnName . GetString ( "name" ) {
2021-09-16 04:33:10 +08:00
break
}
2021-06-07 11:32:47 +08:00
}
}
2021-06-12 13:33:35 +08:00
2021-06-13 03:08:43 +08:00
//如果是select类型需要设置options
if coloum . GetString ( "type" ) == "number" {
coloum [ "sortable" ] = true
}
2021-09-16 04:33:10 +08:00
//if !coloum.GetBool("notUse") {
that . TableConfig . GetMap ( v . GetString ( "name" ))[ "columns" ] = append ( that . TableConfig . GetMap ( v . GetString ( "name" )). GetSlice ( "columns" ), coloum )
//}
2021-06-12 13:33:35 +08:00
//如果是select类型需要设置options
2021-07-14 00:48:34 +08:00
//if coloum.GetString("type") == "select" {
2021-06-12 13:33:35 +08:00
2021-07-14 00:48:34 +08:00
options := Slice {}
2021-08-28 13:05:12 +08:00
comments := strings . Split ( info . GetString ( "label" ), ":" )
2021-07-14 00:48:34 +08:00
if len ( comments ) >= 2 {
optionComment := strings . Split ( comments [ 1 ], "," )
for _ , v := range optionComment {
optionSlice := strings . Split ( v , "-" )
if len ( optionSlice ) >= 2 {
options = append ( options , Map { "name" : optionSlice [ 1 ], "value" : optionSlice [ 0 ]})
2021-06-12 13:33:35 +08:00
}
}
}
2021-07-14 00:48:34 +08:00
if coloum . GetString ( "type" ) == "select" {
2022-03-26 16:53:40 +08:00
//coloum["must"] = true
2021-07-14 00:48:34 +08:00
coloum [ "options" ] = options
} else if len ( options ) > 0 {
2022-03-26 16:53:40 +08:00
//coloum["must"] = true
2021-07-14 00:48:34 +08:00
coloum [ "options" ] = options
coloum [ "type" ] = "select"
2021-06-04 10:04:37 +08:00
}
2021-07-14 00:48:34 +08:00
//}
2021-06-04 10:04:37 +08:00
2021-06-07 11:32:47 +08:00
}
//暂时不关闭参数,保证表数据完全读取到
2021-06-06 07:50:58 +08:00
that . TableColumns [ v . GetString ( "name" )][ info . GetString ( "name" )] = coloum
2021-06-04 10:04:37 +08:00
2021-06-04 03:03:48 +08:00
}
2021-06-04 10:04:37 +08:00
2022-03-13 05:06:28 +08:00
if config . GetInt ( "mode" ) != 0 {
2021-12-27 20:40:16 +08:00
//创建模块文件
//判断文件是否存在
//_, err := os.OpenFile(name+"/"+v.GetString("name"), os.O_RDONLY, os.ModePerm)
2022-03-13 05:06:28 +08:00
_ , err := os . Stat ( config . GetString ( "name" ) + "/" + v . GetString ( "name" ) + ".go" )
2021-12-27 20:40:16 +08:00
if err != nil { //文件不存在,则根据模板创建
2022-03-13 05:06:28 +08:00
myCtr := strings . Replace ( CtrTpt , "{{name}}" , config . GetString ( "name" ), - 1 )
2021-12-27 20:40:16 +08:00
myCtr = strings . Replace ( myCtr , "{{table}}" , v . GetString ( "name" ), - 1 )
2022-03-13 05:06:28 +08:00
_ = os . MkdirAll ( config . GetString ( "name" ), os . ModeDir )
err = ioutil . WriteFile ( config . GetString ( "name" ) + "/" + v . GetString ( "name" ) + ".go" , [] byte ( myCtr ), os . ModePerm )
2021-12-27 20:40:16 +08:00
if err != nil {
that . Error . SetError ( err )
}
isMake = true
2021-06-04 03:03:48 +08:00
}
2021-06-04 10:04:37 +08:00
2021-12-27 20:40:16 +08:00
ctrList = ctrList + `"` + v . GetString ( "name" ) + `":` + v . GetString ( "name" ) + "Ctr,\r\n "
}
2021-06-05 02:18:56 +08:00
}
2021-06-06 07:50:58 +08:00
that . Config [ "tables" ] = that . TableConfig
2021-06-05 02:18:56 +08:00
2021-06-07 11:32:47 +08:00
//生成id,判断数据库是否有改变,以保证数据库和配置文件匹配唯一
2021-06-05 02:18:56 +08:00
id := Md5 ( ObjToStr ( idSlice ))
2022-07-11 19:13:20 +08:00
//if id == that.Config.GetString("id") {
if isMake { //有生成包文件
fmt . Println ( "有新的业务代码生成,请重新运行" )
os . Exit ( - 1 )
2021-06-04 10:04:37 +08:00
return
}
2022-07-11 19:13:20 +08:00
//}
2021-06-11 08:06:44 +08:00
//数据生成完后进一步解析
2021-06-07 11:32:47 +08:00
for fk , fv := range that . TableColumns {
2021-06-11 08:06:44 +08:00
//目录没有收录
2022-07-11 19:13:20 +08:00
//if !isMenusGet {
2022-07-18 19:44:00 +08:00
//if !hasConfigFile {
tablePrefixCode := strings . Index ( fk , "_" )
isNewPrefix := false //假定表名没有前缀
prefixName := ""
//并且代表有前缀,根据数据表分库设定使用
if tablePrefixCode != - 1 {
prefixName = fk [: tablePrefixCode ]
} else {
prefixName = fk
}
//if tablePrefixCode != -1 {
for ck , _ := range that . TableColumns {
//判断不止一个前缀相同
if ( strings . Index ( ck , prefixName ) == 0 || strings . Index ( prefixName , ck ) == 4 ) && ck != fk {
isNewPrefix = true
break
2021-06-11 08:06:44 +08:00
}
2022-07-18 19:44:00 +08:00
}
//}
2021-11-15 03:26:54 +08:00
2022-07-18 19:44:00 +08:00
prefixName = DefaultMenuParentName + ":" + prefixName
2021-11-15 03:26:54 +08:00
2022-08-04 12:14:18 +08:00
menuIns := Map { "label" : that . TableConfig . GetMap ( fk ). GetString ( "label" ), "table" : fk , "auth" : that . TableConfig . GetMap ( fk ). GetSlice ( "auth" )}
2022-07-18 19:44:00 +08:00
//多耗费一点内存
2022-08-19 17:58:18 +08:00
mMenu := Map { "menus" : Slice { menuIns }, "auth" : Slice { "show" }, "label" : that . TableConfig . GetMap ( fk ). GetString ( "label" ), "name" : prefixName , "icon" : "Setting" }
2022-07-18 19:44:00 +08:00
//表名有前缀
if ! isNewPrefix {
//是否已有对应前缀,已经有对应的menu只需要push进去即可
prefixName = DefaultMenuParentName
2022-08-19 17:58:18 +08:00
mMenu = Map { "menus" : Slice { menuIns }, "auth" : Slice { "show" }, "label" : "系统管理" , "name" : prefixName , "icon" : "Setting" }
2022-07-18 19:44:00 +08:00
}
//没有新前缀
if that . IndexMenus [ prefixName ] != nil {
if that . IndexMenus [ prefixName + "/" + fk ] == nil {
that . IndexMenus . GetMap ( prefixName )[ "menus" ] = append ( that . IndexMenus . GetMap ( prefixName ). GetSlice ( "menus" ), menuIns )
that . IndexMenus [ prefixName + "/" + fk ] = menuIns
} else {
for k , v := range menuIns {
that . IndexMenus . GetMap ( prefixName + "/" + fk )[ k ] = v
2022-01-17 04:47:39 +08:00
}
2022-07-18 19:44:00 +08:00
}
2022-01-17 04:47:39 +08:00
2022-07-18 19:44:00 +08:00
} else {
2021-06-11 08:06:44 +08:00
2022-07-18 19:44:00 +08:00
that . Config [ "menus" ] = append ( that . Config . GetSlice ( "menus" ), mMenu ) //注入配置
//写入Index
that . IndexMenus [ prefixName ] = mMenu
that . IndexMenus [ prefixName + "/" + fk ] = menuIns
2021-06-11 08:06:44 +08:00
}
2022-07-18 19:44:00 +08:00
//}
2022-08-19 17:58:18 +08:00
search := that . TableConfig . GetMap ( fk ). GetSlice ( "search" )
2021-06-07 11:32:47 +08:00
for k , v := range fv {
2021-06-12 13:33:35 +08:00
2022-08-19 17:58:18 +08:00
//虚招后缀是_id结尾的表字段 假设org_id
if !( len ( k ) <= 3 || strings . LastIndex ( k , "_id" ) != len ( k ) - 3 ) {
//普通表匹配 org_id匹配为org
oldTableName := k [: len ( k ) - 3 ]
//上级ID匹配
if oldTableName == "parent" {
oldTableName = fk
}
//如果本身匹配则不再继续精简匹配
if that . TableConfig [ oldTableName ] == nil {
//如果依然找不到则查询system_org是否存在
if that . TableConfig [ DefaultMenuParentName + "_" + oldTableName ] != nil {
oldTableName = DefaultMenuParentName + "_" + oldTableName
}
//字段有动词前缀,自动进行解析
prefixColumn := strings . Index ( oldTableName , "_" )
//sys_org_id oldTableName即为sys此处判断为org表存在
if prefixColumn > - 1 && that . TableConfig [ oldTableName [ prefixColumn + 1 :]] != nil {
oldTableName = oldTableName [ prefixColumn + 1 :]
}
if prefixColumn >= len ( oldTableName ) {
prefixColumn = - 1
}
//如果依然找不到则查询system_org是否存在
if prefixColumn > - 1 && that . TableConfig [ DefaultMenuParentName + "_" + oldTableName [ prefixColumn + 1 :]] != nil {
oldTableName = DefaultMenuParentName + "_" + oldTableName [ prefixColumn + 1 :]
}
}
//普通方式查询不到,则转换为大型项目模块划分,暂时只支持一级模块划分,
//比如表sys_user 字段org_id,查询不到sys_org表则查询org表,org表查询不到则查询默认前缀system_org表
//都查询不到则找不到,
prefix := strings . Index ( fk , "_" )
tableName := oldTableName
if prefix > 0 {
//表模块前缀sys_user sys即为前缀 sys_org
tableName = fk [: prefix + 1 ] + oldTableName
if that . TableConfig [ tableName ] == nil || that . TableConfig [ oldTableName ] != nil {
//不存在则改为org
tableName = oldTableName
}
//表前缀+去除字段前缀
prefixColumn := strings . Index ( oldTableName , "_" )
if prefixColumn > - 1 {
tableName = fk [: prefix + 1 ] + oldTableName [ prefixColumn + 1 :]
if that . TableConfig [ tableName ] == nil {
tableName = oldTableName
}
}
}
//如果数据匹配则写入到配置中
if that . TableConfig [ tableName ] != nil {
v [ "link" ] = tableName
//一般查询name字段或者label字段,如果没有name字段则默认第二个地段
if that . TableColumns [ tableName ][ "name" ] != nil {
v [ "value" ] = "name"
continue
}
if that . TableColumns [ tableName ][ "label" ] != nil {
v [ "value" ] = "label"
continue
}
tempC := that . TableConfig . GetMap ( tableName ). GetSlice ( "columns" )
isGet := true
for k2 , _ := range tempC {
if strings . Contains ( tempC . GetMap ( k2 ). GetString ( "name" ), "name" ) || strings . Contains ( tempC . GetMap ( k2 ). GetString ( "name" ), "title" ) {
v [ "value" ] = tempC . GetMap ( k2 ). GetString ( "name" )
isGet = false
break
}
}
if isGet && len ( that . TableConfig . GetMap ( tableName ). GetSlice ( "columns" )) > 2 {
v [ "value" ] = that . TableConfig . GetMap ( tableName ). GetSlice ( "columns" ). GetMap ( 1 ). GetString ( "name" )
continue
}
}
}
2021-06-12 13:33:35 +08:00
//搜索服务
if that . SearchColumns [ fk ][ v . GetString ( "name" )] == nil &&
v . GetString ( "type" ) == "select" {
2022-08-19 17:58:18 +08:00
//search := that.TableConfig.GetMap(fk).GetSlice("search")
2021-06-12 13:33:35 +08:00
sv := DeepCopyMap ( v ).( Map )
sv [ "value" ] = nil
sv [ "options" ] = append ( sv . GetSlice ( "options" ), Map { "name" : "全部" , "value" : nil })
2022-08-19 17:58:18 +08:00
search = append ( search , sv )
that . TableConfig . GetMap ( fk )[ "search" ] = search
2021-06-16 06:10:57 +08:00
that . SearchColumns [ fk ][ k ] = sv
2021-06-12 13:33:35 +08:00
}
2022-08-19 17:58:18 +08:00
//搜索关键字
if strings . Contains ( v . GetString ( "type" ), "text" ) || v . GetString ( "name" ) == "id" {
keyWordSearchData := search . GetMap ( 0 )
2021-07-07 04:08:40 +08:00
2022-08-19 17:58:18 +08:00
keyWordSearchData [ "options" ] = append ( keyWordSearchData . GetSlice ( "options" ), Map { "name" : v . GetString ( "label" ), "value" : v . GetString ( "name" )})
search [ 0 ] = keyWordSearchData
2021-06-11 09:41:23 +08:00
}
2022-08-19 17:58:18 +08:00
if v . GetString ( "link" ) != "" &&
v . GetString ( "name" ) != "parent_id" {
2021-06-11 09:41:23 +08:00
2022-08-19 17:58:18 +08:00
keyWordSearchData := search . GetMap ( 0 )
name := strings . Replace ( that . TableConfig . GetMap ( v . GetString ( "link" )). GetString ( "label" ), "管理" , "" , - 1 )
keyWordSearchData [ "options" ] = append ( keyWordSearchData . GetSlice ( "options" ), Map { "name" : name , "value" : v . GetString ( "name" )})
search [ 0 ] = keyWordSearchData
2021-06-07 11:32:47 +08:00
}
2022-08-19 17:58:18 +08:00
//搜索时间
if strings . Contains ( v . GetString ( "type" ), "time" ) {
daterangeData := search . GetMap ( 1 )
2021-06-07 11:32:47 +08:00
2022-08-19 17:58:18 +08:00
daterangeData [ "options" ] = append ( daterangeData . GetSlice ( "options" ), Map { "name" : v . GetString ( "label" ), "value" : v . GetString ( "name" )})
search [ 1 ] = daterangeData
2021-06-07 11:32:47 +08:00
}
}
}
2022-10-19 21:29:38 +08:00
flow := Map {}
//"user": {"table": "user", "stop": true,
// "SQL": {
// "role_id": "role_id",
// "admin_id": "admin_id",
// "parent_ids": "%,user_id,%"}}
2021-06-16 06:10:57 +08:00
//搜索增加树节点
for fk , fv := range that . TableColumns {
for k , v := range fv {
if v . GetString ( "link" ) != "" && that . SearchColumns [ fk ][ k ] == nil &&
that . TableColumns [ v . GetString ( "link" )][ "parent_id" ] != nil {
//搜索服务
search := that . TableConfig . GetMap ( fk ). GetSlice ( "search" )
sv := Map { "type" : "tree" , "label" : v [ "label" ], "name" : v [ "name" ], "value" : v [ "value" ], "link" : v [ "link" ]}
that . TableConfig . GetMap ( fk )[ "search" ] = append ( search , sv )
that . SearchColumns [ fk ][ k ] = sv
}
2022-08-04 02:41:41 +08:00
2022-10-19 21:29:38 +08:00
//if fk == that.FileConfig.GetString("table") && v["link"] != nil && that.TableColumns[v.GetString("link")]["parent_id"] != nil {
// that.Config["stop"] = append(that.Config.GetSlice("stop"), v.GetString("link"))
// //that.
//}
for _ , av := range that . TableColumns [ that . FileConfig . GetString ( "table" )] {
//同字段
if av [ "link" ] != nil && av . GetString ( "link" ) == v . GetString ( "link" ) {
if flow [ fk ] == nil {
flow [ fk ] = Map { "table" : fk , "stop" : false , "sql" : Map {}}
}
sql := flow . GetMap ( fk ). GetMap ( "sql" )
if k == "parent_id" {
2023-03-10 15:22:03 +08:00
sql [ "parent_ids[~]" ] = "," + av . GetString ( "name" ) + ","
2022-10-19 21:29:38 +08:00
} else {
sql [ k ] = k
}
flow . GetMap ( fk )[ "sql" ] = sql
}
//同表
if av [ "link" ] != nil && av . GetString ( "link" ) == fk {
if flow [ fk ] == nil {
flow [ fk ] = Map { "table" : fk , "stop" : false , "sql" : Map {}}
}
ta := flow . GetMap ( fk )
ta [ "stop" ] = true
flow [ fk ] = ta
2022-10-20 09:00:44 +08:00
if k == "id" && that . TableColumns [ fk ][ "parent_id" ] == nil {
sql := flow . GetMap ( fk ). GetMap ( "sql" )
sql [ k ] = av . GetString ( "name" )
flow . GetMap ( fk )[ "sql" ] = sql
}
2022-10-19 21:29:38 +08:00
}
}
if k == that . FileConfig . GetString ( "table" ) + "_id" {
if flow [ fk ] == nil {
flow [ fk ] = Map { "table" : fk , "stop" : false , "sql" : Map {}}
}
sql := flow . GetMap ( fk ). GetMap ( "sql" )
sql [ k ] = "id"
flow . GetMap ( fk )[ "sql" ] = sql
}
//当前用户
if k == "parent_id" && that . FileConfig . GetString ( "table" ) == fk {
if flow [ fk ] == nil {
flow [ fk ] = Map { "table" : fk , "stop" : false , "sql" : Map {}}
}
sql := flow . GetMap ( fk ). GetMap ( "sql" )
2023-03-10 15:22:03 +08:00
sql [ "parent_ids[~]" ] = ",id,"
2022-10-19 21:29:38 +08:00
flow . GetMap ( fk )[ "sql" ] = sql
2022-08-04 02:41:41 +08:00
}
2022-10-19 21:29:38 +08:00
2021-06-16 06:10:57 +08:00
}
}
2022-10-19 21:29:38 +08:00
//fmt.Println(flow)
that . Config [ "flow" ] = flow
2022-07-11 19:13:20 +08:00
//fmt.Println(id, "---", that.Config.GetString("id"))
//that.Config["id"] = id
2021-12-27 20:40:16 +08:00
2022-03-13 05:06:28 +08:00
if config . GetInt ( "mode" ) != 0 {
2021-12-27 20:40:16 +08:00
//init文件初始化
2022-07-11 19:13:20 +08:00
//myInit = strings.Replace(myInit, "{{id}}", id, -1)
2021-12-27 20:40:16 +08:00
myInit = strings . Replace ( myInit , "{{tablesCtr}}" , ctrList , - 1 )
2022-03-13 05:06:28 +08:00
_ = os . MkdirAll ( config . GetString ( "name" ), os . ModeDir )
err = ioutil . WriteFile ( config . GetString ( "name" ) + "/init.go" , [] byte ( myInit ), os . ModePerm )
2021-12-27 20:40:16 +08:00
if err != nil {
that . Error . SetError ( err )
}
2021-06-04 03:03:48 +08:00
}
2022-07-18 19:44:00 +08:00
//配置文件
if config . GetString ( "configDB" ) != "" {
that . Config [ "id" ] = id
_ = os . MkdirAll ( filepath . Dir ( config . GetString ( "configDB" )), os . ModeDir )
err = ioutil . WriteFile ( config . GetString ( "configDB" ), [] byte ( that . Config . ToJsonString ()), os . ModePerm )
if err != nil {
that . Error . SetError ( err )
}
that . Logger . Warn ( "新建" )
}
//不存在配置文件则生成,存在则不管
_ , err = ioutil . ReadFile ( config . GetString ( "config" ))
if err != nil {
2022-07-11 19:13:20 +08:00
that . Config [ "id" ] = id
_ = os . MkdirAll ( filepath . Dir ( config . GetString ( "config" )), os . ModeDir )
2022-07-18 19:44:00 +08:00
newConfig := DeepCopyMap ( that . Config ).( Map )
delete ( newConfig , "tables" )
err = ioutil . WriteFile ( config . GetString ( "config" ), [] byte ( newConfig . ToJsonString ()), os . ModePerm )
2022-07-11 19:13:20 +08:00
if err != nil {
that . Error . SetError ( err )
}
that . Logger . Warn ( "新建" )
2022-03-13 05:06:28 +08:00
2022-07-11 19:13:20 +08:00
}
//fmt.Println("有新的代码生成,请重新运行")
//os.Exit(-1)
2021-12-27 20:40:16 +08:00
2021-06-04 03:03:48 +08:00
}
2021-06-07 11:32:47 +08:00
2021-09-17 04:00:49 +08:00
func ( that * MakeCode ) Info ( table string , userData Map , db * db . HoTimeDB ) ( string , Map ) {
2021-06-04 03:03:48 +08:00
reStr := ""
2021-09-17 04:00:49 +08:00
data := Map {}
var ruleData Map
2022-03-13 05:06:28 +08:00
testQu := [] string {}
testQuData := that . TableColumns [ table ]
for key , _ := range testQuData {
//fmt.Println(key, ":", value)
testQu = append ( testQu , key )
}
sort . Strings ( testQu )
for _ , k := range testQu {
v := testQuData [ k ]
2021-06-07 11:32:47 +08:00
if v == nil {
continue
}
2021-09-17 04:00:49 +08:00
//准备加入索引权限
if v . GetString ( "link" ) != "" &&
userData != nil &&
that . TableColumns [ v . GetString ( "link" )][ "parent_id" ] != nil {
//初始化ruleData
if ruleData == nil {
ruleData = Map {}
2022-05-06 11:35:40 +08:00
for _ , v := range that . TableColumns [ that . FileConfig . GetString ( "table" )] {
2021-09-17 04:00:49 +08:00
if v . GetString ( "link" ) != "" &&
v . GetString ( "name" ) != "parent_id" &&
userData . Get ( v . GetString ( "name" )) != nil {
ruleData [ v . GetString ( "link" )] = userData . Get ( v . GetString ( "name" ))
}
}
}
if ruleData [ v . GetString ( "link" )] != nil {
2022-07-26 17:37:17 +08:00
parent_idsStr := ""
parent_ids := that . TableColumns [ v . GetString ( "link" )][ "parent_ids" ]
if parent_ids != nil {
parent_idsStr = "parent_ids[~]"
}
index := that . TableColumns [ v . GetString ( "link" )][ "index" ]
if index != nil {
parent_idsStr = "index[~]"
}
2021-09-17 04:00:49 +08:00
if v . GetString ( "name" ) == "parent_id" {
2022-07-26 17:37:17 +08:00
data [ parent_idsStr ] = "," + ruleData . GetString ( v . GetString ( "link" )) + ","
2021-09-17 04:00:49 +08:00
} else {
2022-07-26 17:37:17 +08:00
idMap := db . Select ( v . GetString ( "link" ), "id" , Map { parent_idsStr : "," + ruleData . GetString ( v . GetString ( "link" )) + "," })
2021-09-17 04:00:49 +08:00
ids := Slice { ruleData . GetCeilInt ( v . GetString ( "link" ))}
for _ , v := range idMap {
ids = append ( ids , v . GetCeilInt ( "id" ))
}
data [ v . GetString ( "name" )] = ids
}
}
}
2021-06-04 03:03:48 +08:00
if v . Get ( "info" ) == nil || v . GetBool ( "info" ) {
2021-07-07 04:08:40 +08:00
reStr += "`" + v . GetString ( "name" ) + "`,"
2021-06-04 03:03:48 +08:00
}
}
if len ( reStr ) != 0 {
reStr = reStr [: len ( reStr ) - 1 ]
}
2021-09-17 04:00:49 +08:00
return reStr , data
2021-06-04 03:03:48 +08:00
}
2022-04-25 19:58:49 +08:00
func ( that * MakeCode ) Add ( table string , user Map , req * http . Request ) Map {
2021-06-04 03:03:48 +08:00
data := Map {}
for _ , v := range that . TableColumns [ table ] {
2021-06-07 11:32:47 +08:00
//不可使用,未在前端展示,但在内存中保持有
if v . GetBool ( "notUse" ) {
2021-09-17 04:00:49 +08:00
if v . GetString ( "type" ) == "index" && that . TableColumns [ table ][ "parent_id" ] != nil {
2021-10-21 22:52:40 +08:00
data [ v . GetString ( "name" )] = ","
2021-09-17 04:00:49 +08:00
}
2021-06-07 11:32:47 +08:00
continue
}
2021-06-04 03:03:48 +08:00
if v . Get ( "add" ) == nil || v . GetBool ( "add" ) {
2021-07-07 04:08:40 +08:00
2022-07-27 17:09:56 +08:00
if len ( req . Form [ v . GetString ( "name" )]) == 0 || req . FormValue ( v . GetString ( "name" )) == "" {
2022-03-26 16:53:40 +08:00
2022-07-27 17:09:56 +08:00
if v [ "link" ] != nil && user [ v . GetString ( "name" )] != nil {
2022-03-26 16:53:40 +08:00
data [ v . GetString ( "name" )] = user [ v . GetString ( "name" )]
continue
}
2022-04-25 19:58:49 +08:00
if that . FileConfig . GetString ( "table" ) + "_id" == v . GetString ( "name" ) {
2022-03-26 16:53:40 +08:00
data [ v . GetString ( "name" )] = user [ "id" ]
continue
}
2022-10-20 15:49:49 +08:00
//if user[v.GetString("name")] != nil {
//
// data[v.GetString("name")] = user[v.GetString("name")]
// continue
//
//}
2022-07-27 17:09:56 +08:00
2021-12-27 14:01:04 +08:00
if v . GetBool ( "must" ) {
return nil
} else {
continue
}
2021-06-04 03:03:48 +08:00
}
2022-07-27 17:09:56 +08:00
2022-11-05 01:55:11 +08:00
if req . Form [ v . GetString ( "name" )] == nil {
continue
}
2021-07-07 04:08:40 +08:00
reqValue := req . FormValue ( v . GetString ( "name" ))
2022-11-05 01:55:11 +08:00
if reqValue == "null" {
2021-07-07 04:08:40 +08:00
data [ v . GetString ( "name" )] = nil
2022-11-05 01:55:11 +08:00
continue
}
2021-08-30 07:36:17 +08:00
2022-11-05 01:55:11 +08:00
if v . GetString ( "type" ) == "password" {
data [ v . GetString ( "name" )] = Md5 ( reqValue )
continue
2021-07-07 04:08:40 +08:00
}
2022-11-05 01:55:11 +08:00
data [ v . GetString ( "name" )] = reqValue
2021-09-16 04:33:10 +08:00
}
2022-07-26 17:37:17 +08:00
//sn则自动生成
if v . GetString ( "name" ) == "sn" {
reqValue := req . FormValue ( v . GetString ( "name" ))
if reqValue == "" {
data [ v . GetString ( "name" )] = Md5 ( ObjToStr ( time . Now (). UnixNano ()))
} else {
data [ v . GetString ( "name" )] = reqValue
}
2021-12-27 18:21:41 +08:00
2022-07-26 17:37:17 +08:00
}
2021-09-16 04:33:10 +08:00
if v . GetString ( "name" ) == "create_time" {
2022-04-25 19:58:49 +08:00
if v . GetString ( "type" ) == "unixTime" {
data [ v . GetString ( "name" )] = time . Now (). Unix ()
}
if v . GetString ( "type" ) == "time" {
data [ v . GetString ( "name" )] = time . Now (). Format ( "2006-01-02 15-04-05" )
}
2021-09-16 04:33:10 +08:00
continue
}
2021-12-27 18:21:41 +08:00
2021-09-16 04:33:10 +08:00
if v . GetString ( "name" ) == "modify_time" {
2022-04-25 19:58:49 +08:00
if v . GetString ( "type" ) == "unixTime" {
data [ v . GetString ( "name" )] = time . Now (). Unix ()
}
if v . GetString ( "type" ) == "time" {
data [ v . GetString ( "name" )] = time . Now (). Format ( "2006-01-02 15-04-05" )
}
2021-06-04 03:03:48 +08:00
}
}
if len ( data ) == 0 {
return nil
}
return data
}
func ( that * MakeCode ) Edit ( table string , req * http . Request ) Map {
data := Map {}
for _ , v := range that . TableColumns [ table ] {
2021-06-07 11:32:47 +08:00
//不可使用,未在前端展示,但在内存中保持有
if v . GetBool ( "notUse" ) {
2022-08-25 05:01:50 +08:00
//if v.GetString("type") == "index" && that.TableColumns[table]["parent_id"] != nil {
// data[v.GetString("name")] = ","
//}
2021-06-07 11:32:47 +08:00
continue
}
2021-09-17 04:00:49 +08:00
2021-06-04 03:03:48 +08:00
if v . Get ( "edit" ) == nil || v . GetBool ( "edit" ) {
2022-11-05 01:55:11 +08:00
2022-08-25 03:44:58 +08:00
if len ( req . Form [ v . GetString ( "name" )]) == 0 {
continue
}
2022-11-05 01:55:11 +08:00
2021-06-04 03:03:48 +08:00
reqValue := req . FormValue ( v . GetString ( "name" ))
2022-08-25 03:44:58 +08:00
if reqValue == "null" {
2022-11-05 01:55:11 +08:00
data [ v . GetString ( "name" )] = nil
continue
}
if v . GetString ( "type" ) == "number" && reqValue == "" {
data [ v . GetString ( "name" )] = nil
2021-06-04 03:03:48 +08:00
continue
}
2022-11-05 01:55:11 +08:00
2021-08-30 07:36:17 +08:00
if v . GetString ( "type" ) == "password" {
data [ v . GetString ( "name" )] = Md5 ( reqValue )
} else {
data [ v . GetString ( "name" )] = reqValue
}
2021-06-04 03:03:48 +08:00
}
2022-07-26 17:37:17 +08:00
2021-09-16 04:33:10 +08:00
if v . GetString ( "name" ) == "modify_time" {
2022-07-26 17:37:17 +08:00
if v . GetString ( "type" ) == "unixTime" {
data [ v . GetString ( "name" )] = time . Now (). Unix ()
}
if v . GetString ( "type" ) == "time" {
data [ v . GetString ( "name" )] = time . Now (). Format ( "2006-01-02 15-04-05" )
}
2021-09-16 04:33:10 +08:00
}
2021-06-04 03:03:48 +08:00
}
if len ( data ) == 0 {
return nil
}
return data
}
2021-09-17 04:00:49 +08:00
func ( that * MakeCode ) Delete ( table string , req * http . Request ) Map {
data := Map {}
2022-08-25 05:01:50 +08:00
//for _, v := range that.TableColumns[table] {
// //不可使用,未在前端展示,但在内存中保持有
// if v.GetBool("notUse") {
// //if v.GetString("type") == "index" && that.TableColumns[table]["parent_id"] != nil {
// // data[v.GetString("name")] = ","
// //}
// continue
// }
//
//}
2021-09-17 04:00:49 +08:00
return data
}
2021-06-04 03:03:48 +08:00
2022-11-04 02:12:07 +08:00
func ( that * MakeCode ) Search ( table string , userData Map , data Map , req * http . Request , db * db . HoTimeDB ) ( string , Map ) {
2021-06-04 03:03:48 +08:00
reStr := ""
2022-11-04 02:12:07 +08:00
//leftJoin := Map{}
2022-10-19 21:29:38 +08:00
//data := Map{}
if data == nil {
data = Map {}
}
2021-06-13 10:40:19 +08:00
keyword := Map {}
daterange := Map {}
2022-03-13 05:06:28 +08:00
sortMap := Map {}
2022-10-20 09:00:44 +08:00
//var ruleData Map
2021-10-21 23:19:32 +08:00
hasUser := false
2021-06-13 10:40:19 +08:00
keywordStr := req . FormValue ( "keyword" )
2022-08-19 17:58:18 +08:00
keywordTableStr := req . FormValue ( "keywordtable" )
daterangeTableStr := req . FormValue ( "daterangetable" )
2022-03-13 05:06:28 +08:00
testQu := [] string {}
testQuData := that . TableColumns [ table ]
for key , _ := range testQuData {
//fmt.Println(key, ":", value)
testQu = append ( testQu , key )
}
sort . Strings ( testQu )
for _ , k := range testQu {
v := testQuData [ k ]
2021-06-07 11:32:47 +08:00
//不可使用,未在前端展示,但在内存中保持有
if v . GetBool ( "notUse" ) {
2021-09-17 04:00:49 +08:00
2021-06-07 11:32:47 +08:00
continue
}
2022-08-08 02:37:15 +08:00
2021-06-13 10:40:19 +08:00
if v [ "list" ] != false {
2022-11-04 02:12:07 +08:00
//if v.GetString("link") != "" &&
// v.GetString("name") != "parent_id" {
//
// reStr += table + "." + v.GetString("name") + ","
// //+
// // v.GetString("link") + "." + v.GetString("value") + " AS " +
// // v.GetString("link") + "_" + v.GetString("name") + "_" + v.GetString("value") + ","
//
// if v.GetString("value") == "name" && that.TableColumns[v.GetString("link")]["nickname"] != nil {
// reStr += v.GetString("link") + ".nickname AS " +
// v.GetString("link") + "_" + v.GetString("name") + "_nickname,"
// }
//
// if that.TableColumns[v.GetString("link")]["phone"] != nil {
// reStr += v.GetString("link") + ".phone AS " +
// v.GetString("link") + "_" + v.GetString("name") + "_phone,"
// }
//
// leftJoin["[>]"+v.GetString("link")] =
// table + "." + v.GetString("name") + "=" +
// v.GetString("link") + ".id"
//
// if v.GetString("link") == "admin" {
// hasUser = true
// }
//
2022-11-04 02:55:58 +08:00
reqValue := req.FormValue(v.GetString("name"))
2022-11-04 03:22:00 +08:00
if v . GetString ( "name" ) != "parent_id" && reqValue != "" {
2022-11-05 01:55:11 +08:00
data [ v . GetString ( "name" )] = reqValue
2022-11-04 02:55:58 +08:00
}
2022-11-04 02:12:07 +08:00
//
//} else {
2022-11-06 06:37:44 +08:00
reStr += "`" + v . GetString ( "name" ) + "`,"
2022-11-04 02:12:07 +08:00
//}
2021-06-13 10:40:19 +08:00
2022-11-04 02:12:07 +08:00
//if v["name"] == "parent_id" && v.GetString("link") != "" {
// leftJoin["[>]"+v.GetString("link")+" selfParent"] =
// "selfParent.id=" +
// v.GetString("link") + "." + v.GetString("name")
// reStr += "selfParent." + v.GetString("value") + " AS " + v.GetString("link") + "_" + v.GetString("name") + "_" + v.GetString("value") + ","
//}
2022-08-08 04:34:26 +08:00
2021-09-17 04:00:49 +08:00
//准备加入索引权限
if v . GetString ( "link" ) != "" &&
userData != nil &&
that . TableColumns [ v . GetString ( "link" )][ "parent_id" ] != nil {
//初始化ruleData
2022-10-20 09:00:44 +08:00
//if ruleData == nil {
// ruleData = Map{}
// for _, v := range that.TableColumns[that.FileConfig.GetString("table")] {
// if v.GetString("link") != "" &&
// v.GetString("name") != "parent_id" &&
// userData.Get(v.GetString("name")) != nil {
// ruleData[v.GetString("link")] = userData.Get(v.GetString("name"))
// }
// }
//}
//if ruleData[v.GetString("link")] != nil {
// parent_idsStr := ""
// parent_ids := that.TableColumns[v.GetString("link")]["parent_ids"]
// if parent_ids != nil {
// parent_idsStr = "parent_ids[~]"
// }
// index := that.TableColumns[v.GetString("link")]["index"]
// if index != nil {
// parent_idsStr = "index[~]"
// }
//
// if v.GetString("name") == "parent_id" {
//
// data[table+"."+parent_idsStr] = "," + ruleData.GetString(v.GetString("link")) + ","
//
// } else {
// idMap := db.Select(v.GetString("link"), "id", Map{parent_idsStr: "," + ruleData.GetString(v.GetString("link")) + ","})
// ids := Slice{ruleData.GetCeilInt(v.GetString("link"))}
// for _, v := range idMap {
// ids = append(ids, v.GetCeilInt("id"))
// }
// data[table+"."+v.GetString("name")] = ids
// }
//
//}
2021-09-17 04:00:49 +08:00
}
2022-08-25 03:44:58 +08:00
}
2022-08-08 02:37:15 +08:00
2022-08-25 03:44:58 +08:00
if strings . Contains ( v . GetString ( "type" ), "text" ) {
reqValue := req . FormValue ( v . GetString ( "name" ))
if reqValue != "" {
2022-11-05 01:55:11 +08:00
data [ v . GetString ( "name" ) + "[~]" ] = reqValue
2022-08-08 02:37:15 +08:00
}
2022-08-25 03:44:58 +08:00
}
2022-08-19 17:58:18 +08:00
2022-08-25 03:44:58 +08:00
if v . GetString ( "type" ) == "unixtime" {
2022-08-19 17:58:18 +08:00
2022-08-25 03:44:58 +08:00
if len ( req . Form [ v . GetString ( "name" )]) == 1 {
2022-11-05 01:55:11 +08:00
daterange [ v . GetString ( "name" ) + "[>]" ] = req . FormValue ( "daterange" )
2022-08-25 03:44:58 +08:00
} else if len ( req . Form [ v . GetString ( "name" )]) == 2 {
2022-11-05 01:55:11 +08:00
daterange [ v . GetString ( "name" ) + "[<>]" ] = ObjToSlice ( req . Form [ "daterange" ])
2022-08-08 02:37:15 +08:00
}
2022-08-25 03:44:58 +08:00
//fmt.Println(req.Form["daterange"])
2022-08-08 02:37:15 +08:00
2022-08-25 03:44:58 +08:00
}
2022-08-08 02:37:15 +08:00
2022-08-25 03:44:58 +08:00
if v . GetString ( "type" ) == "time" {
//fmt.Println(req.Form["daterange"])
2022-08-08 02:37:15 +08:00
2022-08-25 03:44:58 +08:00
if len ( req . Form [ v . GetString ( "name" )]) == 1 {
t := time . Unix ( ObjToCeilInt64 ( req . FormValue ( v . GetString ( "name" ))), 0 ). Format ( "2006-01-02 15:04:05" )
2022-08-19 17:58:18 +08:00
2022-11-05 01:55:11 +08:00
daterange [ v . GetString ( "name" ) + "[>]" ] = t
2022-08-19 17:58:18 +08:00
2022-08-25 03:44:58 +08:00
} else if len ( req . Form [ v . GetString ( "name" )]) == 2 {
t1 := time . Unix ( ObjToCeilInt64 ( req . Form [ v . GetString ( "name" )][ 0 ]), 0 ). Format ( "2006-01-02 15:04:05" )
t2 := time . Unix ( ObjToCeilInt64 ( req . Form [ v . GetString ( "name" )][ 1 ]), 0 ). Format ( "2006-01-02 15:04:05" )
2022-11-05 01:55:11 +08:00
daterange [ v . GetString ( "name" ) + "[<>]" ] = Slice { t1 , t2 }
2021-06-13 10:40:19 +08:00
}
2021-06-04 03:03:48 +08:00
}
2022-08-25 03:44:58 +08:00
2021-06-04 03:03:48 +08:00
}
if len ( reStr ) != 0 {
reStr = reStr [: len ( reStr ) - 1 ]
}
2021-06-13 03:08:43 +08:00
search := that . TableConfig . GetMap ( table ). GetSlice ( "search" )
2021-06-04 03:03:48 +08:00
for k , _ := range search {
2022-07-25 05:37:19 +08:00
searchItem := search . GetMap ( k )
searchItemName := searchItem . GetString ( "name" )
2022-10-20 09:00:44 +08:00
//if data[table+"."+searchItemName] != nil {
// delete(data, table+"."+searchItemName)
//}
2022-08-25 13:02:44 +08:00
reqValue := req . Form [ searchItemName ]
parent_idsStr := ""
if searchItem . GetString ( "link" ) != "" {
2022-07-25 05:37:19 +08:00
2022-08-25 13:02:44 +08:00
parent_ids := that . TableColumns [ searchItem . GetString ( "link" )][ "parent_ids" ]
if parent_ids != nil {
parent_idsStr = "parent_ids[~]"
}
index := that . TableColumns [ searchItem . GetString ( "link" )][ "index" ]
if index != nil {
parent_idsStr = "index[~]"
}
2022-07-25 05:37:19 +08:00
2022-08-25 13:02:44 +08:00
//reqValue := req.FormValue(search.GetMap(k).GetString("name"))
if len ( reqValue ) == 0 || reqValue [ 0 ] == "" {
2022-07-25 05:37:19 +08:00
2022-08-25 13:02:44 +08:00
if parent_idsStr != "" && userData [ searchItem . GetString ( "name" )] != nil {
2023-03-10 15:22:03 +08:00
if data [ searchItemName ] == nil {
continue
}
2022-08-25 13:02:44 +08:00
where := Map { parent_idsStr : "," + ObjToStr ( userData . GetCeilInt64 ( searchItem . GetString ( "name" ))) + "," }
r := db . Select ( searchItem . GetString ( "link" ), "id" , where )
reqValue = [] string {}
for _ , v := range r {
reqValue = append ( reqValue , v . GetString ( "id" ))
}
2023-03-10 15:22:03 +08:00
data [ searchItemName ] = reqValue
2022-07-25 05:37:19 +08:00
2022-08-25 13:02:44 +08:00
}
continue
2022-07-25 05:37:19 +08:00
}
2021-06-04 03:03:48 +08:00
}
2021-06-13 10:40:19 +08:00
//columns := that.TableConfig.GetMap(table).GetSlice("columns")
2021-06-13 03:08:43 +08:00
if searchItem . GetString ( "type" ) == "search" {
2021-06-13 10:40:19 +08:00
for _ , v := range that . TableColumns [ table ] {
2022-08-25 03:44:58 +08:00
//if v["list"] == false {
// continue
//}
2021-06-13 03:08:43 +08:00
//日期类型
2022-05-06 11:35:40 +08:00
if searchItemName == "daterange" {
2022-08-25 03:44:58 +08:00
if daterangeTableStr != "" && daterangeTableStr != v . GetString ( "name" ) {
continue
}
2022-05-06 11:35:40 +08:00
if v . GetString ( "type" ) == "unixtime" {
//fmt.Println(req.Form["daterange"])
2022-08-25 13:02:44 +08:00
if len ( req . Form [ "daterange" ]) == 1 && req . Form [ "daterange" ][ 0 ] != "" {
2022-11-05 01:55:11 +08:00
daterange [ v . GetString ( "name" ) + "[>]" ] = req . FormValue ( "daterange" )
2022-05-06 11:35:40 +08:00
} else if len ( req . Form [ "daterange" ]) == 2 {
2022-11-05 01:55:11 +08:00
daterange [ v . GetString ( "name" ) + "[<>]" ] = ObjToSlice ( req . Form [ "daterange" ])
2022-05-06 11:35:40 +08:00
}
}
if v . GetString ( "type" ) == "time" {
//fmt.Println(req.Form["daterange"])
2022-08-25 13:02:44 +08:00
if len ( req . Form [ "daterange" ]) == 1 && req . Form [ "daterange" ][ 0 ] != "" {
2022-05-06 11:35:40 +08:00
t := time . Unix ( ObjToCeilInt64 ( req . FormValue ( "daterange" )), 0 ). Format ( "2006-01-02 15:04:05" )
2022-11-05 01:55:11 +08:00
daterange [ v . GetString ( "name" ) + "[>]" ] = t
2022-03-26 16:53:40 +08:00
2022-05-06 11:35:40 +08:00
} else if len ( req . Form [ "daterange" ]) == 2 {
t1 := time . Unix ( ObjToCeilInt64 ( req . Form [ "daterange" ][ 0 ]), 0 ). Format ( "2006-01-02 15:04:05" )
t2 := time . Unix ( ObjToCeilInt64 ( req . Form [ "daterange" ][ 1 ]), 0 ). Format ( "2006-01-02 15:04:05" )
2022-11-05 01:55:11 +08:00
daterange [ v . GetString ( "name" ) + "[<>]" ] = Slice { t1 , t2 }
2022-05-06 11:35:40 +08:00
}
2022-03-26 16:53:40 +08:00
}
2022-05-06 11:35:40 +08:00
2021-06-13 03:08:43 +08:00
}
2022-08-25 03:44:58 +08:00
if searchItemName == "keyword" && keywordStr != "" {
if keywordTableStr != "" {
if keywordTableStr == v . GetString ( "name" ) {
2022-11-05 01:55:11 +08:00
data [ keywordTableStr + "[~]" ] = keywordStr
2022-08-25 03:44:58 +08:00
}
if keywordTableStr == v . GetString ( "value" ) {
childs := db . Select ( v . GetString ( "link" ), "id" , Map { v . GetString ( "value" ) + "[~]" : keywordStr })
childIds := Slice {}
2023-03-10 15:22:03 +08:00
2022-08-25 03:44:58 +08:00
for _ , cv := range childs {
2023-03-10 15:22:03 +08:00
2022-11-07 01:40:24 +08:00
childIds = append ( childIds , cv . GetCeilInt64 ( "id" ))
2022-08-25 03:44:58 +08:00
}
if len ( childIds ) != 0 {
2022-11-07 01:40:24 +08:00
data [ v . GetString ( "name" )] = childIds
2022-08-25 03:44:58 +08:00
}
}
continue
}
if strings . Contains ( v . GetString ( "type" ), "text" ) {
2022-11-05 01:55:11 +08:00
keyword [ v . GetString ( "name" ) + "[~]" ] = keywordStr
2022-08-25 03:44:58 +08:00
}
if v . GetString ( "name" ) == "id" {
2022-11-05 01:55:11 +08:00
keyword [ v . GetString ( "name" )] = keywordStr
2022-08-25 03:44:58 +08:00
}
if v . GetString ( "link" ) != "" &&
v . GetString ( "name" ) != "parent_id" {
childs := db . Select ( v . GetString ( "link" ), "id" , Map { v . GetString ( "value" ) + "[~]" : keywordStr })
childIds := Slice {}
for _ , cv := range childs {
2022-11-07 01:40:24 +08:00
childIds = append ( childIds , cv . GetCeilInt64 ( "id" ))
2022-08-25 03:44:58 +08:00
}
if len ( childIds ) != 0 {
2022-11-07 01:40:24 +08:00
keyword [ v . GetString ( "name" )] = childIds
2022-08-25 03:44:58 +08:00
}
}
}
2021-06-13 03:08:43 +08:00
}
2022-08-25 13:02:44 +08:00
if len ( reqValue ) != 0 && searchItem . GetString ( "name" ) == "sort" && reqValue [ 0 ] != "" {
2022-11-05 01:55:11 +08:00
sortMap [ "ORDER" ] = reqValue [ 0 ]
2021-06-13 03:08:43 +08:00
}
continue
}
2022-08-25 13:02:44 +08:00
2021-06-18 04:56:22 +08:00
//树节点模式搜索
if searchItemName == "parent_id" {
parentID := ObjToInt ( req . FormValue ( "parent_id" ))
if parentID == 0 {
2021-09-17 04:00:49 +08:00
parentID = userData . GetCeilInt ( table + "_id" )
2022-11-05 01:55:11 +08:00
data [ "OR" ] = Map { "id" : parentID , "parent_id" : nil }
2021-06-18 04:56:22 +08:00
} else {
2022-09-16 07:10:45 +08:00
//是否展示全部子级
where := Map {}
if req . FormValue ( "showall" ) == "1" {
2022-08-21 03:49:56 +08:00
2022-08-25 13:02:44 +08:00
for _ , v := range reqValue {
if len ( where ) == 0 {
2022-11-05 01:55:11 +08:00
where [ parent_idsStr ] = "," + v + ","
2022-08-25 13:02:44 +08:00
continue
}
2022-11-05 01:55:11 +08:00
where = Map { "OR" : where , parent_idsStr : "," + v + "," }
2022-08-25 13:02:44 +08:00
}
2022-09-16 07:10:45 +08:00
} else {
2022-11-05 01:55:11 +08:00
where [ "parent_id" ] = reqValue
2022-09-16 07:10:45 +08:00
}
//是否展示自己
if req . FormValue ( "showself" ) == "1" {
if len ( where ) == 0 {
2022-11-05 01:55:11 +08:00
data [ "OR" ] = Map { "id" : reqValue }
2022-09-16 07:10:45 +08:00
} else {
2022-11-05 01:55:11 +08:00
data [ "OR" ] = Map { "OR" : where , "id" : reqValue }
2022-09-16 07:10:45 +08:00
}
2022-08-25 05:01:50 +08:00
} else {
2022-09-16 07:10:45 +08:00
if len ( where ) != 0 {
data [ "OR" ] = where
}
2022-08-25 05:01:50 +08:00
}
2022-08-21 03:49:56 +08:00
2021-06-18 04:56:22 +08:00
}
continue
}
2022-07-25 05:37:19 +08:00
//如果是树节点则需要判断是否符合权限
if searchItem . GetString ( "type" ) == "tree" {
2021-06-13 03:08:43 +08:00
2022-07-25 05:37:19 +08:00
if parent_idsStr != "" {
2022-11-05 01:55:11 +08:00
//where := Map{}
2022-09-16 07:10:45 +08:00
//是否全部展示
if req . FormValue ( "showall" ) != "1" {
2022-11-05 01:55:11 +08:00
if len ( reqValue ) != 0 {
data [ searchItem . GetString ( "name" )] = reqValue
}
2022-08-25 13:02:44 +08:00
} else {
2022-11-05 01:55:11 +08:00
ls := [] int64 {}
2022-08-25 13:02:44 +08:00
for _ , v := range reqValue {
2022-11-05 01:55:11 +08:00
ls1 := db . Select ( searchItem . GetString ( "link" ), "id" , Map { "OR" : Map { parent_idsStr : "," + v + "," , "id" : v }})
for _ , vls1 := range ls1 {
ls = append ( ls , vls1 . GetCeilInt64 ( "id" ))
2022-08-25 13:02:44 +08:00
}
2022-11-05 01:55:11 +08:00
}
if len ( ls ) != 0 {
data [ searchItem . GetString ( "name" )] = ls
2022-07-25 05:37:19 +08:00
}
}
2022-09-16 07:10:45 +08:00
2022-07-25 05:37:19 +08:00
//用户
2022-11-05 01:55:11 +08:00
//if userData[searchItem.GetString("name")] != nil {
//
// where = Map{"AND": Map{searchItem.GetString("link") + "." + parent_idsStr: "," + ObjToStr(userData.GetCeilInt64(searchItem.GetString("name"))) + ",", "OR": where}}
//}
//if len(where)!=0{
// data["OR"] = where
//}
2022-08-25 13:02:44 +08:00
continue
//r := db.Select(searchItem.GetString("link"), "id", where)
//for _, v := range r {
// reqValue = append(reqValue, v.GetString("id"))
//}
2022-07-25 05:37:19 +08:00
}
2022-08-25 13:02:44 +08:00
}
2022-07-25 05:37:19 +08:00
2022-08-25 13:02:44 +08:00
if len ( reqValue ) != 0 && reqValue [ 0 ] != "" {
2022-11-05 01:55:11 +08:00
data [ searchItemName ] = reqValue
2022-07-25 05:37:19 +08:00
}
2021-06-14 01:19:05 +08:00
}
2022-07-25 05:37:19 +08:00
2022-03-13 05:06:28 +08:00
if sortMap [ "ORDER" ] == nil {
2022-11-05 01:55:11 +08:00
sortMap [ "ORDER" ] = "id DESC"
2021-10-18 04:49:55 +08:00
}
2021-06-14 01:19:05 +08:00
2021-06-13 03:08:43 +08:00
where := Map {}
2022-10-19 21:29:38 +08:00
//if where==nil{
// where=Map{}
//}
2021-06-13 03:08:43 +08:00
if len ( keyword ) == 1 {
for k , v := range keyword {
data [ k ] = v
}
}
2022-08-30 03:30:27 +08:00
2022-08-30 06:21:46 +08:00
if len ( keyword ) > 1 {
if data [ "OR" ] != nil {
data = Map { "AND" : data , "OR" : keyword }
2021-06-14 01:19:05 +08:00
} else {
2022-08-30 06:21:46 +08:00
data [ "OR" ] = keyword
2021-06-14 01:19:05 +08:00
}
2021-06-13 03:08:43 +08:00
}
if len ( daterange ) == 1 {
for k , v := range daterange {
data [ k ] = v
}
}
if len ( daterange ) > 1 {
2022-05-06 11:35:40 +08:00
if data == nil || len ( data ) == 0 {
data = Map { "OR" : daterange }
} else {
data = Map { "AND" : Map { "AND" : data , "OR" : daterange }}
}
2021-06-13 03:08:43 +08:00
}
2021-06-04 03:03:48 +08:00
2021-06-13 03:08:43 +08:00
if len ( data ) > 1 {
where [ "AND" ] = data
}
2021-06-04 03:03:48 +08:00
2021-06-13 03:08:43 +08:00
if len ( data ) == 1 {
where = data
}
2021-10-21 23:19:32 +08:00
if len ( where ) == 0 && hasUser {
2022-01-03 01:42:35 +08:00
//where["admin.id"] = userData["id"]
2021-10-21 23:19:32 +08:00
}
2022-03-13 05:06:28 +08:00
if len ( sortMap ) != 0 {
for k , v := range sortMap {
2021-06-13 03:08:43 +08:00
where [ k ] = v
}
2021-06-04 03:03:48 +08:00
}
2022-11-04 02:12:07 +08:00
return reStr , where
2021-06-04 03:03:48 +08:00
}