product_task.lua 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. --书籍任务
  2. local M = {}
  3. local mysqldbx = require "mysqldbx"
  4. local tools = require "tools"
  5. local skynet = require "skynet"
  6. local cjson = require "cjson"
  7. local config = require "run_config"
  8. local mysql = require "skynet.db.mysql"
  9. local db
  10. local mysqldtaskbx = {}
  11. function M.task()
  12. -- skynet.error("执行一次task")
  13. local sql = string.format("SELECT * FROM video_product where status = 10 AND list_time is not null ")
  14. local res = mysqldtaskbx.Singleton().query(sql)
  15. -- 获取当前服务器时间戳
  16. local current_timestamp = os.time()
  17. if #res >0 then
  18. -- tools.dump(res)
  19. for i = 1, #res, 1 do
  20. local mysql_time_str = res[i].list_time
  21. local id = res[i].id
  22. -- 将MySQL时间字符串转换为时间戳
  23. local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)"
  24. local year, month, day, hour, min, sec = mysql_time_str:match(pattern)
  25. local mysql_timestamp = os.time({
  26. year = year,
  27. month = month,
  28. day = day,
  29. hour = hour,
  30. min = min,
  31. sec = sec
  32. })
  33. if mysql_timestamp < current_timestamp then
  34. -- skynet.error("mysql_timestamp:",mysql_timestamp)
  35. -- skynet.error("current_timestamp:",current_timestamp)
  36. sql = string.format("UPDATE video_product SET status = 1 WHERE id = %d ",id)
  37. -- skynet.error("sql:",sql)
  38. -- tools.dump(res[i])
  39. mysqldtaskbx.Singleton().query(sql)
  40. else
  41. --还没到时间
  42. end
  43. end
  44. end
  45. skynet.timeout(500, M.task)
  46. end
  47. function mysqldtaskbx.start()
  48. local function on_connect(db)
  49. db:query("set charset utf8mb4");
  50. end
  51. local conf = config.db_cnf.book_server.mysqldb_task_cnf
  52. db = mysql.connect{
  53. host=conf.ip,
  54. port=conf.port,
  55. database=conf.db,
  56. user=conf.user,
  57. password=conf.password,
  58. charset="utf8mb4",
  59. max_packet_size = 1024 * 1024,
  60. on_connect = on_connect
  61. }
  62. if not db then
  63. skynet.error("mysql connect fail")
  64. end
  65. end
  66. function mysqldtaskbx.Singleton()
  67. if db == nil then
  68. mysqldtaskbx.start()
  69. end
  70. return mysqldtaskbx
  71. end
  72. function mysqldtaskbx.query(sql)
  73. return db:query(sql)
  74. end
  75. skynet.start(function () --skynet.start启动一个timeout来执行function,创建了一个协程
  76. skynet.timeout(500, M.task) --由于function函数还没用完协程,所有这个timeout又创建了一个协程
  77. end)
  78. return M