sys_tables.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. package tools
  2. import (
  3. "IotAdmin/core/tools/utils"
  4. "strings"
  5. "IotAdmin/core/sdk/api"
  6. "IotAdmin/core/sdk/pkg"
  7. _ "IotAdmin/core/sdk/pkg/response"
  8. "github.com/gin-gonic/gin"
  9. "gorm.io/gorm"
  10. "IotAdmin/app/other/models/tools"
  11. )
  12. type SysTable struct {
  13. api.Api
  14. }
  15. // GetPage 查询代码生成表列表
  16. // @Summary 查询代码生成表列表
  17. // @Description 查询代码生成表列表
  18. // @Tags 系統接口 / 生成工具
  19. // @Param tableName query string false "tableName / 数据表名称"
  20. // @Param pageSize query int false "pageSize / 页条数"
  21. // @Param pageIndex query int false "pageIndex / 页码"
  22. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  23. // @Router /api/sys/gen-table [get]
  24. func (e SysTable) GetPage(c *gin.Context) {
  25. e.Context = c
  26. log := e.GetLogger()
  27. var data tools.SysTables
  28. var err error
  29. var pageSize = 10
  30. var pageIndex = 1
  31. if size := c.Request.FormValue("pageSize"); size != "" {
  32. pageSize, err = pkg.StringToInt(size)
  33. }
  34. if index := c.Request.FormValue("pageIndex"); index != "" {
  35. pageIndex, err = pkg.StringToInt(index)
  36. }
  37. db, err := e.GetOrm()
  38. if err != nil {
  39. log.Errorf("get db connection error, %s", err.Error())
  40. e.Error(500, err, "数据库连接获取失败")
  41. return
  42. }
  43. data.TBName = c.Request.FormValue("tableName")
  44. data.TableComment = c.Request.FormValue("tableComment")
  45. result, count, err := data.GetPage(db, pageSize, pageIndex)
  46. if err != nil {
  47. log.Errorf("GetPage error, %s", err.Error())
  48. e.Error(500, err, "")
  49. return
  50. }
  51. e.PageOK(result, count, pageIndex, pageSize, "查询成功")
  52. }
  53. // Get 获取代码生成表详情
  54. // @Summary 获取代码生成表详情
  55. // @Description 获取代码生成表详情
  56. // @Tags 系統接口 / 生成工具
  57. // @Param tableId path int true "tableId"
  58. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  59. // @Router /api/sys/gen-table/{tableId} [get]
  60. // @Security Bearer
  61. func (e SysTable) Get(c *gin.Context) {
  62. e.Context = c
  63. log := e.GetLogger()
  64. db, err := e.GetOrm()
  65. if err != nil {
  66. log.Errorf("get db connection error, %s", err.Error())
  67. e.Error(500, err, "数据库连接获取失败")
  68. return
  69. }
  70. var data tools.SysTables
  71. data.TableId, _ = pkg.StringToInt(c.Param("tableId"))
  72. result, err := data.Get(db, true)
  73. if err != nil {
  74. log.Errorf("Get error, %s", err.Error())
  75. e.Error(500, err, "")
  76. return
  77. }
  78. mp := make(map[string]interface{})
  79. mp["list"] = result.Columns
  80. mp["info"] = result
  81. e.OK(mp, "")
  82. }
  83. // GetSysTablesInfo 获取代码生成表详情(表名称)
  84. // @Summary 获取代码生成表详情(表名称)
  85. // @Description 获取代码生成表详情(表名称)
  86. // @Tags 系統接口 / 生成工具
  87. // @Param tableId path int true "tableId"
  88. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  89. // @Router /api/sys/gen-table/name [get]
  90. // @Security Bearer
  91. func (e SysTable) GetSysTablesInfo(c *gin.Context) {
  92. e.Context = c
  93. log := e.GetLogger()
  94. db, err := e.GetOrm()
  95. if err != nil {
  96. log.Errorf("get db connection error, %s", err.Error())
  97. e.Error(500, err, "数据库连接获取失败")
  98. return
  99. }
  100. var data tools.SysTables
  101. if c.Request.FormValue("tableName") != "" {
  102. data.TBName = c.Request.FormValue("tableName")
  103. }
  104. result, err := data.Get(db, true)
  105. if err != nil {
  106. log.Errorf("Get error, %s", err.Error())
  107. e.Error(500, err, "抱歉未找到相关信息")
  108. return
  109. }
  110. mp := make(map[string]interface{})
  111. mp["list"] = result.Columns
  112. mp["info"] = result
  113. e.OK(mp, "")
  114. //res.Data = mp
  115. //c.JSON(http.StatusOK, res.ReturnOK())
  116. }
  117. // GetSysTablesTree 查询关系表下拉树
  118. // @Summary 查询关系表下拉树
  119. // @Description 获取JSON
  120. // @Tags 系統接口 / 生成工具
  121. // @Param tableId path int true "tableId"
  122. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  123. // @Router /api/sys/gen-db-table-tree [get]
  124. // @Security Bearer
  125. func (e SysTable) GetSysTablesTree(c *gin.Context) {
  126. e.Context = c
  127. log := e.GetLogger()
  128. db, err := e.GetOrm()
  129. if err != nil {
  130. log.Errorf("get db connection error, %s", err.Error())
  131. e.Error(500, err, "数据库连接获取失败")
  132. return
  133. }
  134. var data tools.SysTables
  135. result, err := data.GetTree(db)
  136. if err != nil {
  137. log.Errorf("GetTree error, %s", err.Error())
  138. e.Error(500, err, "抱歉未找到相关信息")
  139. return
  140. }
  141. e.OK(result, "")
  142. }
  143. // Insert
  144. // @Summary 导入表
  145. // @Description 导入表
  146. // @Tags 系統接口 / 生成工具
  147. // @Accept application/json
  148. // @Product application/json
  149. // @Param tables query string false "tableName / 数据表名称"
  150. // @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
  151. // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
  152. // @Router /api/sys/gen-table [post]
  153. // @Security Bearer
  154. func (e SysTable) Insert(c *gin.Context) {
  155. e.Context = c
  156. log := e.GetLogger()
  157. db, err := e.GetOrm()
  158. if err != nil {
  159. log.Errorf("get db connection error, %s", err.Error())
  160. e.Error(500, err, "数据库连接获取失败")
  161. return
  162. }
  163. tablesList := strings.Split(c.Request.FormValue("tables"), ",")
  164. for i := 0; i < len(tablesList); i++ {
  165. data, err := genTableInit(db, tablesList, i, c)
  166. if err != nil {
  167. log.Errorf("genTableInit error, %s", err.Error())
  168. e.Error(500, err, "")
  169. return
  170. }
  171. _, err = data.Create(db)
  172. if err != nil {
  173. log.Errorf("Create error, %s", err.Error())
  174. e.Error(500, err, "")
  175. return
  176. }
  177. }
  178. e.OK(nil, "添加成功")
  179. }
  180. func genTableInit(tx *gorm.DB, tablesList []string, i int, c *gin.Context) (tools.SysTables, error) {
  181. var data tools.SysTables
  182. var dbTable tools.DBTables
  183. var dbColumn tools.DBColumns
  184. data.TBName = tablesList[i]
  185. data.CreateBy = 0
  186. dbTable.TableName = data.TBName
  187. table, err := dbTable.Get(tx)
  188. if err != nil {
  189. return data, err
  190. }
  191. dbColumn.TableName = data.TBName
  192. tableNameList := strings.Split(dbColumn.TableName, "_")
  193. for i := 0; i < len(tableNameList); i++ {
  194. // 大驼峰表名 结构体使用
  195. data.ClassName += utils.FirstUpper(tableNameList[i])
  196. // 小驼峰表名 js函数名和权限标识使用
  197. if i == 1 {
  198. data.BusinessName += utils.FirstLower(tableNameList[i])
  199. } else if i > 1 {
  200. data.BusinessName += utils.FirstUpper(tableNameList[i])
  201. }
  202. }
  203. if data.BusinessName == "" {
  204. data.BusinessName = utils.FirstLower(tableNameList[0])
  205. }
  206. data.PackageName = strings.ToLower(tableNameList[0])
  207. data.TplCategory = "crud"
  208. data.Crud = true
  209. // 中横线表名称,接口路径、前端文件夹名称和js名称使用
  210. data.ModuleName = strings.Replace(data.TBName, "_", "-", -1)
  211. colList, err := dbColumn.GetList(tx)
  212. data.CreateBy = 0
  213. data.TableComment = table.TableComment
  214. if table.TableComment == "" {
  215. data.TableComment = data.ClassName
  216. }
  217. data.FunctionName = data.TableComment
  218. data.IsActions = 2
  219. data.IsDataScope = 1
  220. data.IsAuth = 1
  221. data.FunctionAuthor = "YueYue"
  222. for i := 0; i < len(colList); i++ {
  223. var column tools.SysColumns
  224. column.ColumnComment = colList[i].ColumnComment
  225. column.ColumnName = colList[i].ColumnName
  226. column.ColumnType = colList[i].ColumnType
  227. column.Sort = i + 1
  228. column.IsInsert = "1"
  229. column.IsSort = "0"
  230. column.QueryType = "EQ"
  231. column.IsPk = "0"
  232. nameList := strings.Split(colList[i].ColumnName, "_")
  233. for i := 0; i < len(nameList); i++ {
  234. strStart := string([]byte(nameList[i])[:1])
  235. strEnd := string([]byte(nameList[i])[1:])
  236. column.GoField += strings.ToUpper(strStart) + strEnd
  237. if i == 0 {
  238. column.JsonField = strings.ToLower(strStart) + strEnd
  239. } else {
  240. column.JsonField += strings.ToUpper(strStart) + strEnd
  241. }
  242. }
  243. if strings.Contains(colList[i].ColumnKey, "PR") {
  244. column.IsPk = "1"
  245. column.Pk = true
  246. data.PkColumn = colList[i].ColumnName
  247. //column.GoField = strings.ToUpper(column.GoField)
  248. //column.JsonField = strings.ToUpper(column.JsonField)
  249. data.PkGoField = column.GoField
  250. data.PkJsonField = column.JsonField
  251. }
  252. column.IsRequired = "0"
  253. if strings.Contains(colList[i].IsNullable, "NO") {
  254. column.IsRequired = "1"
  255. column.Required = true
  256. }
  257. if strings.Contains(colList[i].ColumnType, "int") {
  258. if strings.Contains(colList[i].ColumnKey, "PR") {
  259. column.GoType = "int"
  260. } else {
  261. column.GoType = "string"
  262. }
  263. column.HtmlType = "input"
  264. } else if strings.Contains(colList[i].ColumnType, "timestamp") {
  265. column.GoType = "time.Time"
  266. column.HtmlType = "datetime"
  267. } else if strings.Contains(colList[i].ColumnType, "datetime") {
  268. column.GoType = "time.Time"
  269. column.HtmlType = "datetime"
  270. } else {
  271. column.GoType = "string"
  272. column.HtmlType = "input"
  273. }
  274. data.Columns = append(data.Columns, column)
  275. }
  276. return data, err
  277. }
  278. // Update
  279. // @Summary 修改表结构
  280. // @Description 修改表结构
  281. // @Tags 系統接口 / 生成工具
  282. // @Accept application/json
  283. // @Product application/json
  284. // @Param data body tools.SysTables true "body"
  285. // @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
  286. // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
  287. // @Router /api/sys/gen-table [put]
  288. // @Security Bearer
  289. func (e SysTable) Update(c *gin.Context) {
  290. var data tools.SysTables
  291. err := c.Bind(&data)
  292. pkg.HasError(err, "数据解析失败", 500)
  293. e.Context = c
  294. log := e.GetLogger()
  295. db, err := e.GetOrm()
  296. if err != nil {
  297. log.Errorf("get db connection error, %s", err.Error())
  298. e.Error(500, err, "数据库连接获取失败")
  299. return
  300. }
  301. data.UpdateBy = 0
  302. result, err := data.Update(db)
  303. if err != nil {
  304. log.Errorf("Update error, %s", err.Error())
  305. e.Error(500, err, "")
  306. return
  307. }
  308. e.OK(result, "修改成功")
  309. }
  310. // Delete
  311. // @Summary 删除表结构
  312. // @Description 删除表结构
  313. // @Tags 系統接口 / 生成工具
  314. // @Param tableId path int true "tableId"
  315. // @Success 200 {string} string "{"code": 200, "message": "删除成功"}"
  316. // @Success 200 {string} string "{"code": -1, "message": "删除失败"}"
  317. // @Router /api/sys/gen-table/{tableId} [delete]
  318. func (e SysTable) Delete(c *gin.Context) {
  319. e.Context = c
  320. log := e.GetLogger()
  321. db, err := e.GetOrm()
  322. if err != nil {
  323. log.Errorf("get db connection error, %s", err.Error())
  324. e.Error(500, err, "数据库连接获取失败")
  325. return
  326. }
  327. var data tools.SysTables
  328. IDS := pkg.IdsStrToIdsIntGroup("tableId", c)
  329. _, err = data.BatchDelete(db, IDS)
  330. if err != nil {
  331. log.Errorf("BatchDelete error, %s", err.Error())
  332. e.Error(500, err, "删除失败")
  333. return
  334. }
  335. e.OK(nil, "删除成功")
  336. }