CDK.lua 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. local DB = require("common.DB")
  2. local CommonDB = require("common.CommonDB")
  3. local CdkFixExcel = require("excel.cdkFix")
  4. local LuaMongo = _G.lua_mongo
  5. local Lang = require("common.Lang")
  6. local Code = {"0","7","9","8","1","4","3","2","5","6"}
  7. local batchList = {6,7,8} -- 批次位置
  8. local idxList = {3,4,5} -- 序号位置
  9. local CodeMap = {
  10. ["0"] = 1,
  11. ["7"] = 2,
  12. ["9"] = 3,
  13. ["8"] = 4,
  14. ["1"] = 5,
  15. ["4"] = 6,
  16. ["3"] = 7,
  17. ["2"] = 8,
  18. ["5"] = 9,
  19. ["6"] = 10,
  20. }
  21. local function checkCDKParam(finishTime,cdkID)
  22. local now = os.time()
  23. if now > finishTime then
  24. return
  25. end
  26. return true
  27. end
  28. local function genCDKBatch(cnt,useCnt,cdkID)
  29. local bat = assert(CommonDB.getCDKBatch(),"assert : cdk batch not found")
  30. local db = {
  31. batch = bat + 1,
  32. cnt = cnt,
  33. useCnt = useCnt,
  34. info = cdkID,
  35. useCDKList = {},
  36. }
  37. LuaMongo.insert(DB.db_cdk, db)
  38. CommonDB.setCDKBatch(bat + 1) -- 将最新的cdkBatch保存
  39. return bat
  40. end
  41. local function transNumber(num)
  42. local first,second = 0,0
  43. if num >= 100 then
  44. first = math.floor(num / 100)
  45. end
  46. if num >= 10 then
  47. local t = num - (first * 100)
  48. second = math.floor(t / 10)
  49. end
  50. local thrid = num - (first * 100) - (second * 10)
  51. return Code[first + 1] .. Code[second + 1] .. Code[thrid + 1]
  52. end
  53. local function genCDKCode(batch,index)
  54. return Code[math.random(2,10)] .. Code[math.random(10)] ..transNumber(index) .. transNumber(batch) .. Code[math.random(10)] .. Code[math.random(10)]
  55. end
  56. local function deCDKCode(cdk)
  57. local num = (CodeMap[string.sub(cdk,3,3) ] - 1) * 100 + (CodeMap[string.sub(cdk,4,4)] - 1) * 10 + (CodeMap[string.sub(cdk,5,5) ] - 1)
  58. local batch = (CodeMap[string.sub(cdk,6,6) ] - 1) * 100 + (CodeMap[string.sub(cdk,7,7) ] - 1) * 10 + (CodeMap[string.sub(cdk,8,8) ] - 1)
  59. return num,batch
  60. end
  61. -- 生成一个批次的激活码
  62. -- 批次最大999 ,每次最多生成999个激活码
  63. --[[
  64. param1 = cnt 生成CDK数量
  65. param2 = useCnt 当前批次能够使用最大数量
  66. param3 = cdkId 道具信息
  67. ]]
  68. function genCDK(cnt,useCnt,cdkId)
  69. useCnt = useCnt or 1
  70. cnt = cnt < 1000 and cnt or 999
  71. local bat = genCDKBatch(cnt,useCnt,cdkId)
  72. local fileName = "cdk"..bat
  73. local f,err = io.open(fileName,"w")
  74. if not f then
  75. print("open file failed ",err)
  76. return
  77. end
  78. local idx = 0
  79. local data = "cdk : \n"
  80. while true do
  81. if idx > cnt then
  82. break
  83. end
  84. local cdk = genCDKCode(bat,idx)
  85. data = data .. cdk .. "\n"
  86. idx = idx + 1
  87. end
  88. f:write(data)
  89. end
  90. -- 使用cdk
  91. function useCDK(cdkBatchData,cdk)
  92. local _,batch = deCDKCode(cdk)
  93. QueryCDK = { batch = { ["$eq"] = batch}}
  94. LuaMongo.update(DB.db_cdk,QueryCDK,{
  95. ["$set"] = {
  96. ["useCDKList"] = cdkBatchData.useCDKList
  97. },
  98. ["$unset"] = nil
  99. })
  100. end
  101. -- 检查CDK
  102. function checkCDK(cdk)
  103. local num,batch = deCDKCode(cdk)
  104. local curBatch = assert(CommonDB.getCDKBatch(),"assert : cdk batch not found")
  105. if curBatch < batch then
  106. return Lang.CDK_BATCH_ERR
  107. end
  108. QueryCDK = { batch = { ["$eq"] = batch} }
  109. LuaMongo.find(DB.db_cdk,QueryCDK)
  110. local cdkBatchData = {}
  111. LuaMongo.next(cdkBatchData)
  112. if cdkBatchData.cnt < num then
  113. return Lang.CDK_INVALID_ERR
  114. end
  115. if cdkBatchData.useCDKList[num] then
  116. return Lang.CDK_ERR4
  117. end
  118. return nil, cdkBatchData
  119. end