MysqlCreateGo.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. package util
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. // const base_url = "E:\\project\\kkc\\kkc-go\\"
  7. const base_url = "D:\\project\\study\\kkc\\kkc-go\\"
  8. // 修改mysql数据库对应的go类型
  9. func FormatSqlType(str string) string {
  10. str = strings.ToLower(str)
  11. switch str {
  12. case "varchar":
  13. return "string"
  14. case "char":
  15. return "string"
  16. case "int":
  17. return "int64"
  18. case "decimal":
  19. return "float64"
  20. case "datetime":
  21. return "time.Time"
  22. case "longblob":
  23. return "string"
  24. default:
  25. panic("未定义的类型:" + str)
  26. }
  27. }
  28. //----------------------------------------------------------
  29. // MysqlToStruct 根据mysql 生成对应的struct及String函数
  30. func MysqlToStruct() {
  31. var structString = "package domain\n\nimport (\n \"fmt\"\n \"time\"\n)\n\n"
  32. for _, mtable := range MTables {
  33. structString += fmt.Sprint("//", mtable.GreatHump, " ", mtable.Comment, "\n",
  34. "type ", mtable.GreatHump, " struct {\n")
  35. cols := mtable.MColumns
  36. var toString = ""
  37. for i := range cols {
  38. if cols[i].LittleHump == "id" && cols[i].IsKey {
  39. structString += fmt.Sprint(" ", cols[i].GreatHump, " int64 `json:\"", cols[i].LittleHump, "\"`",
  40. "// ", cols[i].Length, " ", cols[i].Length2, " 注释:", cols[i].Comment, "\n")
  41. toString += fmt.Sprint(cols[i].GreatHump, ":\", receiver.", cols[i].GreatHump, ", \",")
  42. } else {
  43. structString += fmt.Sprint(" ", cols[i].GreatHump, " ", cols[i].TypeName, " `xorm:\"", cols[i].Name, "\" json:\"", cols[i].LittleHump, "\"`",
  44. "// ", cols[i].Length, " ", cols[i].Length2, " 注释:", cols[i].Comment, "\n")
  45. toString += fmt.Sprint(cols[i].GreatHump, ":\", receiver.", cols[i].GreatHump, ", \",")
  46. }
  47. }
  48. structString += "}\n\n"
  49. structString += fmt.Sprint("func (receiver ", mtable.GreatHump, ") String() string {\n")
  50. structString += fmt.Sprint(" return fmt.Sprint(\"", mtable.GreatHump, "{", toString[0:len(toString)-1], "}\")\n}\n\n")
  51. fmt.Println(structString)
  52. }
  53. //fileUrl := base_url + "\\data\\domain\\DoMain.go"
  54. ////清空文件
  55. //os.Truncate(fileUrl, 0)
  56. //file, _ := os.OpenFile(fileUrl, os.O_CREATE|os.O_RDWR, 0666)
  57. //defer file.Close()
  58. //
  59. //writer := bufio.NewWriter(file)
  60. ////writer.WriteString("package domain\n\nimport (\n \"fmt\"\n \"time\"\n)\n\n")
  61. //writer.WriteString(structString)
  62. //writer.Flush()
  63. WriteFile(GetDomainUrl(), structString)
  64. //file.Write([]byte("package domain\n\nimport \"time\"\n"))
  65. //file.Write([]byte(structString))
  66. }
  67. // MysqlToDao 生成简单的CRUD dao层
  68. func MysqlToDao() {
  69. tables := MTables
  70. for _, table := range tables {
  71. var dao = ""
  72. fileName := table.GreatHump + "Dao.go"
  73. dao += "package manage\n\nimport (\n\t\"demo/configs\"\n\t\"demo/data/domain\"\n\t\"demo/data/domain/vo\"\n)\n"
  74. //get
  75. if table.Name == "role_authority" {
  76. fmt.Println(table.ExistId, "====================>")
  77. }
  78. var idColumn MColumn
  79. for _, column := range table.MColumns {
  80. if column.IsKey {
  81. idColumn = column
  82. break
  83. }
  84. }
  85. //没有id的不适用
  86. if table.ExistId {
  87. dao += "func Get" + table.GreatHump + "ById(id int64) (domain." + table.GreatHump + ", error) {" +
  88. "\n\tvar " + table.LittleHump + " domain." + table.GreatHump + "" +
  89. "\n\t_, err := configs.Engine.Table(\"" + table.Name + "\").Where(\"id = ?\", id).Get(&" + table.LittleHump + ")" +
  90. "\n\tif err != nil {" +
  91. "\n\t\treturn " + table.LittleHump + ", err" +
  92. "\n\t}" +
  93. "\n\treturn " + table.LittleHump + ", nil" +
  94. "\n}\n\n"
  95. }
  96. dao += "func Get" + table.GreatHump + "ListInId(ids []int64) ([]domain." + table.GreatHump + ", error) {" +
  97. "\n\trows, err := configs.Engine.Table(\"" + table.Name + "\").In(\"id\", ids).Rows(&domain." + table.GreatHump + "{})" +
  98. "\n\tif err != nil {" +
  99. "\n\t\treturn make([]domain." + table.GreatHump + ", 0), err" +
  100. "\n\t}" +
  101. "\n\tdefer rows.Close()" +
  102. "\n\tvar list []domain." + table.GreatHump + "" +
  103. "\n\tfor rows.Next() {" +
  104. "\n\t\tvar u domain." + table.GreatHump + "" +
  105. "\n\t\tlist = append(list, u)" +
  106. "\n\t}" +
  107. "\n\treturn list, nil" +
  108. "\n}\n\n"
  109. //list
  110. dao += "func Get" + table.GreatHump + "List(" + table.LittleHump + " domain." + table.GreatHump + ", pageNum, pageSize int) (vo.BaseListVo, error) {" +
  111. "\n\tvar arr []domain." + table.GreatHump +
  112. "\n\tCount, err := configs.Engine.Table(\"" + table.Name + "\").Limit(pageSize, (pageNum-1)*pageSize).FindAndCount(&arr, &" + table.LittleHump + ")" +
  113. "\n\tvar vo vo.BaseListVo" +
  114. "\n\tif err != nil {" +
  115. "\n\t\treturn vo, err" +
  116. "\n\t}" +
  117. "\n\tif err != nil {" +
  118. "\n\t\treturn vo, err" +
  119. "\n\t}" +
  120. "\n\tvo.PageNum = pageNum" +
  121. "\n\tvo.PageSize = pageSize" +
  122. "\n\tvo.List = make([]any, len(arr))" +
  123. "\n\tfor i, v := range arr {" +
  124. "\n\t\tvo.List[i] = v" +
  125. "\n\t}" +
  126. "\n\tvo.Total = int(Count)" +
  127. "\n\treturn vo, nil" +
  128. "\n}\n\n"
  129. dao += "func Save" + table.GreatHump + "(" + table.LittleHump + " *domain." + table.GreatHump + ") (domain." + table.GreatHump + ", error) {" +
  130. "\n\t_, err := configs.Engine.Table(\"" + table.Name + "\").Insert(&" + table.LittleHump + ")" +
  131. "\n\tif err != nil {" +
  132. "\n\t\treturn *" + table.LittleHump + ", err" +
  133. "\n\t}" +
  134. "\n\treturn *" + table.LittleHump + ", nil" +
  135. "\n}\n\n"
  136. dao += "func Set" + table.GreatHump + "(" + table.LittleHump + "Map map[string]interface{}, id int64) (domain." + table.GreatHump + ", bool, error) {" +
  137. "\n\tvar " + table.LittleHump + " domain." + table.GreatHump + "" +
  138. "\n\t_, err := configs.Engine.Table(\"" + table.Name + "\").Where(\"" + idColumn.Name + " = ?\", id).Update(" + table.LittleHump + "Map)" +
  139. "\n\tif err != nil {" +
  140. "\n\t\treturn " + table.LittleHump + ", false, err" +
  141. "\n\t}" +
  142. "\n\treturn " + table.LittleHump + ", true, nil" +
  143. "\n}\n\n"
  144. if table.ExistId {
  145. dao += "func Delete" + table.GreatHump + "(id int64) bool {" +
  146. "\n\tvar " + table.LittleHump + " domain." + table.GreatHump +
  147. "\n\ti, err := configs.Engine.Table(\"" + table.Name + "\").Where(\"id = ?\", id).Delete(&" + table.LittleHump + ")" +
  148. "\n\tif err != nil {" +
  149. "\n\t\treturn false" +
  150. "\n\t}" +
  151. "\n\treturn i > 0" +
  152. "\n}"
  153. }
  154. //创建文件
  155. url := GetDaoUrl() + fileName
  156. WriteFile(url, dao)
  157. }
  158. }
  159. func MysqlToBaseCRUDRouter() {
  160. tables := MTables
  161. var template = "package router" +
  162. "\n" +
  163. "\nimport (\n\t\"demo/data/dao/manage\"\n\t\"demo/data/domain\"\n\t\"demo/share\"\n\t\"fmt\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/mitchellh/mapstructure\"\n\t\"github.com/spf13/cast\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n)" +
  164. "\n" +
  165. "func UtilStructToMap(m map[string]interface{}) map[string]interface{} {" +
  166. "\n\tres:= make(map[string]interface{})" +
  167. "\n\tfor s := range m {" +
  168. "\n\t\tresult:=\"\"" +
  169. "\n\t\tfor i, r := range s {" +
  170. "\n\t\t\tif unicode.IsUpper(r) && i > 0 {" +
  171. "\n\t\t\t\tresult += \"_\"" +
  172. "\n\t\t\t}" +
  173. "\n\t\t\tresult += strings.ToLower(string(r))" +
  174. "\n\t\t}" +
  175. "\n\t\tres[result] = m[s]" +
  176. "\n\t}\n\treturn res" +
  177. "\n}\n" +
  178. "\nfunc DateToString(date time.Time) string {" +
  179. "\n\treturn date.Format(\"2006-01-02 15:04:05\")" +
  180. "\n}\n\n"
  181. var routerHeader = ""
  182. var routerBody = ""
  183. var getRouterFunc = ""
  184. for i := range tables {
  185. table := tables[i]
  186. getRouterFunc += "//Base" + table.GreatHump + "Router(group)\n"
  187. routerHeader +=
  188. "\nfunc Base" + table.GreatHump + "Router(group *gin.RouterGroup) {" +
  189. "\n\tBase" + table.GreatHump + "Group := group.Group(\"/back/base\")" +
  190. "\n\tPushRouter(Base" + table.GreatHump + "Group, \"GET\", \"/" + table.LittleHump + "\", GetBase" + table.GreatHump + "ById)" +
  191. "\n\tPushRouter(Base" + table.GreatHump + "Group, \"POST\", \"/" + table.LittleHump + "/list\", GetBase" + table.GreatHump + "List)" +
  192. "\n\tPushRouter(Base" + table.GreatHump + "Group, \"POST\", \"/" + table.LittleHump + "/in\", GetBase" + table.GreatHump + "ListInId)" +
  193. "\n\tPushRouter(Base" + table.GreatHump + "Group, \"POST\", \"/" + table.LittleHump + "\", SaveBase" + table.GreatHump + ")" +
  194. "\n\tPushRouter(Base" + table.GreatHump + "Group, \"PUT\", \"/" + table.LittleHump + "\", UpdateBase" + table.GreatHump + ")" +
  195. "\n\tPushRouter(Base" + table.GreatHump + "Group, \"DELETE\", \"/" + table.LittleHump + "\", DeleteBase" + table.GreatHump + ")" +
  196. "\n}\n"
  197. routerBody +=
  198. "\nfunc GetBase" + table.GreatHump + "ById(c *gin.Context) {" +
  199. "\n\tid := c.Query(\"id\")" +
  200. "\n\t" + table.LittleHump + ", err := manage.Get" + table.GreatHump + "ById(cast.ToInt64(id))" +
  201. "\n\tif err != nil {" +
  202. "\n\t\tc.JSON(200, CreateResultError(500, \"用户查询不存在\"))" +
  203. "\n\t\treturn" +
  204. "\n\t}" +
  205. "\n\tc.JSON(200, CreateResultData(" + table.LittleHump + "))" +
  206. "\n\treturn" +
  207. "\n}" +
  208. "\n" +
  209. "\nfunc GetBase" + table.GreatHump + "List(c *gin.Context) {" +
  210. "\n\tdata := share.GetJsonAnyParam(c)" +
  211. "\n\tparam, _ := data(\"param\")" +
  212. "\n\tpageNum, _ := data(\"pageNum\")" +
  213. "\n\tpageSize, _ := data(\"pageSize\")" +
  214. "\n\t" + table.LittleHump + " := domain." + table.GreatHump + "{}" +
  215. //"\n\terr := json.Unmarshal([]byte(cast.ToString(param)), &" + table.LittleHump + ")" +
  216. "\n\terr := mapstructure.Decode(param, &" + table.LittleHump + ")" +
  217. "\n\tif err != nil {" +
  218. "\n\t\tc.JSON(200, CreateResultError(500, \"json转换错误\"))" +
  219. "\n\t\treturn" +
  220. "\n\t}" +
  221. "\n\tlist, err := manage.Get" + table.GreatHump + "List(" + table.LittleHump + ", cast.ToInt(pageNum), cast.ToInt(pageSize))" +
  222. "\n\tif err != nil {" +
  223. "\n\t\tc.JSON(200, CreateResultError(500, \"查询错误\"))" +
  224. "\n\t\treturn" +
  225. "\n\t}" +
  226. "\n\tc.JSON(200, CreateResultData(list))" +
  227. "\n}" +
  228. "\n" +
  229. "\nfunc GetBase" + table.GreatHump + "ListInId(c *gin.Context) {" +
  230. "\n\tdata := share.GetJsonAnyParam(c)" +
  231. "\n\tidsString, _ := data(\"ids\")" +
  232. "\n\tvar ids []int64" +
  233. "\n\terr := mapstructure.Decode([]byte(cast.ToString(idsString)), &ids)" +
  234. "\n\tlist, err := manage.Get" + table.GreatHump + "ListInId(ids)" +
  235. "\n\tif err != nil {" +
  236. "\n\t\tc.JSON(200, CreateResultError(500, \"查询错误\"))" +
  237. "\n\t\treturn" +
  238. "\n\t}" +
  239. "\n\tc.JSON(200, CreateResultData(list))" +
  240. "\n}" +
  241. "\n" +
  242. "\nfunc SaveBase" + table.GreatHump + "(c *gin.Context) {" +
  243. "\n\tdata := share.GetJsonAnyParam(c)" +
  244. "\n\t" + table.LittleHump + "Param, _ := data(\"" + table.LittleHump + "\")" +
  245. "\n\t" + table.LittleHump + " := domain." + table.GreatHump + "{}" +
  246. "\n\terr := mapstructure.Decode(" + table.LittleHump + "Param, &" + table.LittleHump + ")"
  247. //判断是否存在create和update
  248. existCreateBy := ""
  249. existCreateTime := ""
  250. existUpdateBy := ""
  251. existUpdateTime := ""
  252. for ci := range table.MColumns {
  253. columnName := strings.ToLower(table.MColumns[ci].GreatHump)
  254. if columnName == "createby" {
  255. if table.MColumns[ci].TypeName == "int64" {
  256. existCreateBy += "\n\t" + table.LittleHump + ".CreateBy = GetUserIdByToken(c)"
  257. } else {
  258. existCreateBy += "\n\t" + table.LittleHump + ".CreateBy = fmt.Sprint(GetUserIdByToken(c))"
  259. }
  260. continue
  261. }
  262. if columnName == "createtime" {
  263. existCreateTime += "\n\t" + table.LittleHump + ".CreateTime = time.Now()"
  264. continue
  265. }
  266. if columnName == "updateby" {
  267. if table.MColumns[ci].TypeName == "int64" {
  268. existUpdateBy += "\n\ttoMap[\"update_by\"] = \"GetUserIdByToken(c)\""
  269. } else {
  270. existUpdateBy += "\n\ttoMap[\"update_by\"] = fmt.Sprint(GetUserIdByToken(c))"
  271. }
  272. continue
  273. }
  274. if columnName == "updatetime" {
  275. existUpdateTime += "\n\ttoMap[\"update_time\"] = DateToString(time.Now())"
  276. continue
  277. }
  278. }
  279. routerBody += existCreateBy + existCreateTime
  280. routerBody += "\n\tsave" + table.GreatHump + ", err := manage.Save" + table.GreatHump + "(&" + table.LittleHump + ")" +
  281. "\n\tif err != nil {" +
  282. "\n\t\tc.JSON(200, CreateResultError(500, \"保存错误\"))" +
  283. "\n\t\treturn" +
  284. "\n\t}" +
  285. "\n\tc.JSON(200, CreateResultData(save" + table.GreatHump + "))" +
  286. "\n}" +
  287. "\n" +
  288. "\nfunc UpdateBase" + table.GreatHump + "(c *gin.Context) {" +
  289. "\n\tdata := share.GetJsonAnyParam(c)" +
  290. "\n\t" + table.LittleHump + ", _ := data(\"" + table.LittleHump + "\")" +
  291. "\n\tid, _ := data(\"id\")" +
  292. "\n\ttoMap := UtilStructToMap(cast.ToStringMap(" + table.LittleHump + "))"
  293. if existUpdateBy != "" {
  294. routerBody += "\n\ttoMap[\"create_by\"] = nil"
  295. }
  296. if existUpdateTime != "" {
  297. routerBody += "\n\ttoMap[\"create_time\"] = nil"
  298. }
  299. routerBody += existUpdateBy + existUpdateTime
  300. routerBody += "\n\tset" + table.GreatHump + ", b, err := manage.Set" + table.GreatHump + "(toMap, cast.ToInt64(id))"
  301. // "\n\tset" + table.GreatHump + ", b, err := manage.Set" + table.GreatHump + "(UtilStructToMap(cast.ToStringMap(" + table.LittleHump + ")), cast.ToInt64(id))" +
  302. routerBody += "\n\tif err != nil || !b {" +
  303. "\n\t\tc.JSON(200, CreateResultError(500, \"修改错误\"))" +
  304. "\n\t\treturn" +
  305. "\n\t}" +
  306. "\n\tc.JSON(200, CreateResultData(set" + table.GreatHump + "))" +
  307. "\n}" +
  308. "\n" +
  309. "\nfunc DeleteBase" + table.GreatHump + "(c *gin.Context) {" +
  310. "\n\tid := c.Query(\"id\")" +
  311. "\n\tres := manage.Delete" + table.GreatHump + "(cast.ToInt64(id))" +
  312. "\n\tif !res {" +
  313. "\n\t\tc.JSON(200, CreateResultError(500, \"删除错误\"))" +
  314. "\n\t\treturn" +
  315. "\n\t}" +
  316. "\n\tc.JSON(200, CreateResult())" +
  317. "\n}" +
  318. "\n"
  319. }
  320. //url := "D:\\project\\study\\kkc\\go-xorm-create\\go-xorm-create\\text\\TextFile"
  321. WriteFile(GetRouterUrl(), template+getRouterFunc+routerHeader+routerBody)
  322. }