baseModule.lua 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. --[[
  2. Descripttion:基础模块类
  3. version:
  4. Author: Neo,Huang
  5. Date: 2022-07-04 19:07:54
  6. LastEditors: Neo,Huang
  7. LastEditTime: 2022-07-04 19:13:19
  8. --]]
  9. local lib_game_redis = require("lib_game_redis")
  10. local lib_game_mysql = require("lib_game_mysql")
  11. local root = class("base")
  12. function root:ctor(uid, mdlName, keyName)
  13. self.uid = uid
  14. self.mdlName = mdlName
  15. self.keyName = keyName
  16. end
  17. -- 模块sql属性
  18. function root:mysql_get_init_columns()
  19. return {}
  20. end
  21. -- 初始化模块表
  22. function root:mysql_get_table_info()
  23. return {
  24. mdlName = self.mdlName,
  25. keyName = self.keyName,
  26. columnNameOptions = self:mysql_get_init_columns()
  27. }
  28. end
  29. -- 字段类型 - json
  30. function root:is_json(column)
  31. return string.match(string.upper(column), "JSON")
  32. end
  33. -- 字段类型 - int
  34. function root:is_number(column)
  35. return string.match(string.upper(column), "INT")
  36. end
  37. -- 字段值
  38. function root:get_column_db_value(column)
  39. if is_empty(column) then
  40. return
  41. end
  42. local key = string.format("mdl:%s:%s", tostring(self.mdlName), tostring(self.uid))
  43. local val = lib_game_redis:hget(key, column)
  44. if self:is_json(column) then
  45. val = string.format("'%s'", cjson_encode(val))
  46. elseif self:is_number(column) then
  47. val = tonumber(val or 0)
  48. else
  49. val = string.format("'%s'", val)
  50. end
  51. return val
  52. end
  53. -- 备份模块数据
  54. function root:backup_to_db()
  55. local options = self:mysql_get_init_columns()
  56. if is_empty(options) then
  57. return false
  58. end
  59. local colums = {}
  60. local values = {}
  61. for k, v in ipairs(options) do
  62. table.insert(colums, k)
  63. table.include(values, self:get_column_db_value(k))
  64. end
  65. local tbName = string.format("mdl_%s", tostring(self.mdlName))
  66. local sql =
  67. string.format("replace into %s (%s) value (%s);", tbName, table.concat(colums, ","), table.concat(values, ","))
  68. lib_game_mysql:query(sql)
  69. end
  70. return root