| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- package tools
- import (
- "IotAdmin/core/tools/utils"
- "strings"
- "IotAdmin/core/sdk/api"
- "IotAdmin/core/sdk/pkg"
- _ "IotAdmin/core/sdk/pkg/response"
- "github.com/gin-gonic/gin"
- "gorm.io/gorm"
- "IotAdmin/app/other/models/tools"
- )
- type SysTable struct {
- api.Api
- }
- // GetPage 查询代码生成表列表
- // @Summary 查询代码生成表列表
- // @Description 查询代码生成表列表
- // @Tags 系統接口 / 生成工具
- // @Param tableName query string false "tableName / 数据表名称"
- // @Param pageSize query int false "pageSize / 页条数"
- // @Param pageIndex query int false "pageIndex / 页码"
- // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
- // @Router /api/sys/gen-table [get]
- func (e SysTable) GetPage(c *gin.Context) {
- e.Context = c
- log := e.GetLogger()
- var data tools.SysTables
- var err error
- var pageSize = 10
- var pageIndex = 1
- if size := c.Request.FormValue("pageSize"); size != "" {
- pageSize, err = pkg.StringToInt(size)
- }
- if index := c.Request.FormValue("pageIndex"); index != "" {
- pageIndex, err = pkg.StringToInt(index)
- }
- db, err := e.GetOrm()
- if err != nil {
- log.Errorf("get db connection error, %s", err.Error())
- e.Error(500, err, "数据库连接获取失败")
- return
- }
- data.TBName = c.Request.FormValue("tableName")
- data.TableComment = c.Request.FormValue("tableComment")
- result, count, err := data.GetPage(db, pageSize, pageIndex)
- if err != nil {
- log.Errorf("GetPage error, %s", err.Error())
- e.Error(500, err, "")
- return
- }
- e.PageOK(result, count, pageIndex, pageSize, "查询成功")
- }
- // Get 获取代码生成表详情
- // @Summary 获取代码生成表详情
- // @Description 获取代码生成表详情
- // @Tags 系統接口 / 生成工具
- // @Param tableId path int true "tableId"
- // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
- // @Router /api/sys/gen-table/{tableId} [get]
- // @Security Bearer
- func (e SysTable) Get(c *gin.Context) {
- e.Context = c
- log := e.GetLogger()
- db, err := e.GetOrm()
- if err != nil {
- log.Errorf("get db connection error, %s", err.Error())
- e.Error(500, err, "数据库连接获取失败")
- return
- }
- var data tools.SysTables
- data.TableId, _ = pkg.StringToInt(c.Param("tableId"))
- result, err := data.Get(db, true)
- if err != nil {
- log.Errorf("Get error, %s", err.Error())
- e.Error(500, err, "")
- return
- }
- mp := make(map[string]interface{})
- mp["list"] = result.Columns
- mp["info"] = result
- e.OK(mp, "")
- }
- // GetSysTablesInfo 获取代码生成表详情(表名称)
- // @Summary 获取代码生成表详情(表名称)
- // @Description 获取代码生成表详情(表名称)
- // @Tags 系統接口 / 生成工具
- // @Param tableId path int true "tableId"
- // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
- // @Router /api/sys/gen-table/name [get]
- // @Security Bearer
- func (e SysTable) GetSysTablesInfo(c *gin.Context) {
- e.Context = c
- log := e.GetLogger()
- db, err := e.GetOrm()
- if err != nil {
- log.Errorf("get db connection error, %s", err.Error())
- e.Error(500, err, "数据库连接获取失败")
- return
- }
- var data tools.SysTables
- if c.Request.FormValue("tableName") != "" {
- data.TBName = c.Request.FormValue("tableName")
- }
- result, err := data.Get(db, true)
- if err != nil {
- log.Errorf("Get error, %s", err.Error())
- e.Error(500, err, "抱歉未找到相关信息")
- return
- }
- mp := make(map[string]interface{})
- mp["list"] = result.Columns
- mp["info"] = result
- e.OK(mp, "")
- //res.Data = mp
- //c.JSON(http.StatusOK, res.ReturnOK())
- }
- // GetSysTablesTree 查询关系表下拉树
- // @Summary 查询关系表下拉树
- // @Description 获取JSON
- // @Tags 系統接口 / 生成工具
- // @Param tableId path int true "tableId"
- // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
- // @Router /api/sys/gen-db-table-tree [get]
- // @Security Bearer
- func (e SysTable) GetSysTablesTree(c *gin.Context) {
- e.Context = c
- log := e.GetLogger()
- db, err := e.GetOrm()
- if err != nil {
- log.Errorf("get db connection error, %s", err.Error())
- e.Error(500, err, "数据库连接获取失败")
- return
- }
- var data tools.SysTables
- result, err := data.GetTree(db)
- if err != nil {
- log.Errorf("GetTree error, %s", err.Error())
- e.Error(500, err, "抱歉未找到相关信息")
- return
- }
- e.OK(result, "")
- }
- // Insert
- // @Summary 导入表
- // @Description 导入表
- // @Tags 系統接口 / 生成工具
- // @Accept application/json
- // @Product application/json
- // @Param tables query string false "tableName / 数据表名称"
- // @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
- // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
- // @Router /api/sys/gen-table [post]
- // @Security Bearer
- func (e SysTable) Insert(c *gin.Context) {
- e.Context = c
- log := e.GetLogger()
- db, err := e.GetOrm()
- if err != nil {
- log.Errorf("get db connection error, %s", err.Error())
- e.Error(500, err, "数据库连接获取失败")
- return
- }
- tablesList := strings.Split(c.Request.FormValue("tables"), ",")
- for i := 0; i < len(tablesList); i++ {
- data, err := genTableInit(db, tablesList, i, c)
- if err != nil {
- log.Errorf("genTableInit error, %s", err.Error())
- e.Error(500, err, "")
- return
- }
- _, err = data.Create(db)
- if err != nil {
- log.Errorf("Create error, %s", err.Error())
- e.Error(500, err, "")
- return
- }
- }
- e.OK(nil, "添加成功")
- }
- func genTableInit(tx *gorm.DB, tablesList []string, i int, c *gin.Context) (tools.SysTables, error) {
- var data tools.SysTables
- var dbTable tools.DBTables
- var dbColumn tools.DBColumns
- data.TBName = tablesList[i]
- data.CreateBy = 0
- dbTable.TableName = data.TBName
- table, err := dbTable.Get(tx)
- if err != nil {
- return data, err
- }
- dbColumn.TableName = data.TBName
- tableNameList := strings.Split(dbColumn.TableName, "_")
- for i := 0; i < len(tableNameList); i++ {
- // 大驼峰表名 结构体使用
- data.ClassName += utils.FirstUpper(tableNameList[i])
- // 小驼峰表名 js函数名和权限标识使用
- if i == 1 {
- data.BusinessName += utils.FirstLower(tableNameList[i])
- } else if i > 1 {
- data.BusinessName += utils.FirstUpper(tableNameList[i])
- }
- }
- if data.BusinessName == "" {
- data.BusinessName = utils.FirstLower(tableNameList[0])
- }
- data.PackageName = strings.ToLower(tableNameList[0])
- data.TplCategory = "crud"
- data.Crud = true
- // 中横线表名称,接口路径、前端文件夹名称和js名称使用
- data.ModuleName = strings.Replace(data.TBName, "_", "-", -1)
- colList, err := dbColumn.GetList(tx)
- data.CreateBy = 0
- data.TableComment = table.TableComment
- if table.TableComment == "" {
- data.TableComment = data.ClassName
- }
- data.FunctionName = data.TableComment
- data.IsActions = 2
- data.IsDataScope = 1
- data.IsAuth = 1
- data.FunctionAuthor = "YueYue"
- for i := 0; i < len(colList); i++ {
- var column tools.SysColumns
- column.ColumnComment = colList[i].ColumnComment
- column.ColumnName = colList[i].ColumnName
- column.ColumnType = colList[i].ColumnType
- column.Sort = i + 1
- column.IsInsert = "1"
- column.IsSort = "0"
- column.QueryType = "EQ"
- column.IsPk = "0"
- nameList := strings.Split(colList[i].ColumnName, "_")
- for i := 0; i < len(nameList); i++ {
- strStart := string([]byte(nameList[i])[:1])
- strEnd := string([]byte(nameList[i])[1:])
- column.GoField += strings.ToUpper(strStart) + strEnd
- if i == 0 {
- column.JsonField = strings.ToLower(strStart) + strEnd
- } else {
- column.JsonField += strings.ToUpper(strStart) + strEnd
- }
- }
- if strings.Contains(colList[i].ColumnKey, "PR") {
- column.IsPk = "1"
- column.Pk = true
- data.PkColumn = colList[i].ColumnName
- //column.GoField = strings.ToUpper(column.GoField)
- //column.JsonField = strings.ToUpper(column.JsonField)
- data.PkGoField = column.GoField
- data.PkJsonField = column.JsonField
- }
- column.IsRequired = "0"
- if strings.Contains(colList[i].IsNullable, "NO") {
- column.IsRequired = "1"
- column.Required = true
- }
- if strings.Contains(colList[i].ColumnType, "int") {
- if strings.Contains(colList[i].ColumnKey, "PR") {
- column.GoType = "int"
- } else {
- column.GoType = "string"
- }
- column.HtmlType = "input"
- } else if strings.Contains(colList[i].ColumnType, "timestamp") {
- column.GoType = "time.Time"
- column.HtmlType = "datetime"
- } else if strings.Contains(colList[i].ColumnType, "datetime") {
- column.GoType = "time.Time"
- column.HtmlType = "datetime"
- } else {
- column.GoType = "string"
- column.HtmlType = "input"
- }
- data.Columns = append(data.Columns, column)
- }
- return data, err
- }
- // Update
- // @Summary 修改表结构
- // @Description 修改表结构
- // @Tags 系統接口 / 生成工具
- // @Accept application/json
- // @Product application/json
- // @Param data body tools.SysTables true "body"
- // @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
- // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
- // @Router /api/sys/gen-table [put]
- // @Security Bearer
- func (e SysTable) Update(c *gin.Context) {
- var data tools.SysTables
- err := c.Bind(&data)
- pkg.HasError(err, "数据解析失败", 500)
- e.Context = c
- log := e.GetLogger()
- db, err := e.GetOrm()
- if err != nil {
- log.Errorf("get db connection error, %s", err.Error())
- e.Error(500, err, "数据库连接获取失败")
- return
- }
- data.UpdateBy = 0
- result, err := data.Update(db)
- if err != nil {
- log.Errorf("Update error, %s", err.Error())
- e.Error(500, err, "")
- return
- }
- e.OK(result, "修改成功")
- }
- // Delete
- // @Summary 删除表结构
- // @Description 删除表结构
- // @Tags 系統接口 / 生成工具
- // @Param tableId path int true "tableId"
- // @Success 200 {string} string "{"code": 200, "message": "删除成功"}"
- // @Success 200 {string} string "{"code": -1, "message": "删除失败"}"
- // @Router /api/sys/gen-table/{tableId} [delete]
- func (e SysTable) Delete(c *gin.Context) {
- e.Context = c
- log := e.GetLogger()
- db, err := e.GetOrm()
- if err != nil {
- log.Errorf("get db connection error, %s", err.Error())
- e.Error(500, err, "数据库连接获取失败")
- return
- }
- var data tools.SysTables
- IDS := pkg.IdsStrToIdsIntGroup("tableId", c)
- _, err = data.BatchDelete(db, IDS)
- if err != nil {
- log.Errorf("BatchDelete error, %s", err.Error())
- e.Error(500, err, "删除失败")
- return
- }
- e.OK(nil, "删除成功")
- }
|