ShopData.lua 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. local ShopData = class('ShopData')
  2. local GoodsData = require('Shop/GoodsData')
  3. local function CompValidTimeData(a, b)
  4. if a and a > 0 then
  5. if not b or b > a then
  6. b = a
  7. end
  8. end
  9. return b
  10. end
  11. function ShopData:ctor()
  12. end
  13. function ShopData:Dispose()
  14. self.shopId = nil
  15. self.refreshTime = nil
  16. self.refreshCount = nil
  17. self.dayEndTime = nil
  18. self.weekEndTime = nil
  19. self.goodsDataMap = nil
  20. self.needRefreshTime = nil
  21. self.needRefreshDataTime = nil
  22. self.showGoodsDatas = nil
  23. end
  24. function ShopData:SetData(data,isBoliShop)
  25. local shopId = data.goods_type
  26. local refreshTime = data.refresh_time
  27. local refreshCount = data.refresh_count
  28. local dayEndTime = data.day_end
  29. local weekEndTime = data.week_end
  30. --- 初始化数据
  31. local goodsDataMap = {}
  32. local itemInfos = data.item_info
  33. if itemInfos then
  34. for i = 1, #itemInfos do
  35. local itemInfo = itemInfos[i]
  36. if itemInfo then
  37. local id = itemInfo.goods_id
  38. local cfgData = ManagerContainer.CfgMgr:GetShopCfgByGoodsId(id)
  39. if isBoliShop then
  40. cfgData = ManagerContainer.CfgMgr:GetBoliShopCfgById(id)
  41. end
  42. if cfgData then
  43. local goodsData = nil
  44. if self.goodsDataMap then
  45. goodsData = self.goodsDataMap[id]
  46. end
  47. if not goodsData then
  48. goodsData = GoodsData:new()
  49. goodsData:SetBaseData(itemInfo, cfgData, refreshTime, dayEndTime, weekEndTime)
  50. else
  51. goodsData:SetBaseData(itemInfo, cfgData, refreshTime, dayEndTime, weekEndTime)
  52. end
  53. if goodsDataMap[id] then
  54. LogWarning('[wboy] Find Same Goods Info !!! id = ' .. tostring(id))
  55. end
  56. goodsDataMap[id] = goodsData
  57. else
  58. LogError('[wboy] Config Not Find Goods Info !!! id = ' .. tostring(id))
  59. end
  60. end
  61. end
  62. end
  63. -- 记录购买过的数据
  64. local buyInfos = data.buy_info
  65. if buyInfos then
  66. for i = 1, #buyInfos do
  67. local buyInfo = buyInfos[i]
  68. if buyInfo then
  69. local id = buyInfo.goods_id
  70. local goodsData = goodsDataMap[id]
  71. if goodsData then
  72. goodsData:SetBuyData(buyInfo)
  73. else
  74. LogWarning('[wboy] buy_info has not exist goods, id = ' .. tostring(id))
  75. end
  76. end
  77. end
  78. end
  79. self.shopId = shopId
  80. self.refreshTime = refreshTime
  81. self.refreshCount = refreshCount
  82. self.dayEndTime = dayEndTime
  83. self.weekEndTime = weekEndTime
  84. self.goodsDataMap = goodsDataMap
  85. self:RefreshShowGoodsDatas()
  86. end
  87. function ShopData:RefreshBuyInfoData(data)
  88. local id = data.goods_id
  89. local goodsData = self.goodsDataMap[id]
  90. if goodsData then
  91. local isShow, refreshTime, refreshDataTime = goodsData:GetShowInfo()
  92. goodsData.buyNum = data.cur_num
  93. goodsData.buyLastTime = data.cur_buy_time
  94. local isShowNew, refreshTimeNew, refreshDataTimeNew = goodsData:GetShowInfo()
  95. if isShow ~= isShowNew or refreshTime ~= refreshTimeNew or refreshDataTime ~= refreshDataTimeNew then
  96. self:RefreshShowGoodsDatas()
  97. end
  98. end
  99. end
  100. --- 整理数据,获得需要显示的商品,下次商店需要刷新界面的时间, 下次商店需要刷新数据的时间
  101. function ShopData:RefreshShowGoodsDatas()
  102. local needRefreshTime = nil
  103. local needRefreshDataTime = nil
  104. local showGoodsDatas = {}
  105. for _, goodsData in pairs(self.goodsDataMap) do
  106. local isShow, refreshTime, refreshDataTime = goodsData:GetShowInfo()
  107. if isShow then
  108. showGoodsDatas[#showGoodsDatas+1] = goodsData
  109. end
  110. needRefreshTime = CompValidTimeData(refreshTime, needRefreshTime)
  111. needRefreshDataTime = CompValidTimeData(refreshDataTime, needRefreshDataTime)
  112. end
  113. needRefreshTime = CompValidTimeData(self.refreshTime, needRefreshTime)
  114. needRefreshDataTime = CompValidTimeData(self.refreshTime, needRefreshDataTime)
  115. needRefreshTime = CompValidTimeData(self.dayEndTime, needRefreshTime)
  116. needRefreshDataTime = CompValidTimeData(self.dayEndTime, needRefreshDataTime)
  117. needRefreshTime = CompValidTimeData(self.weekEndTime, needRefreshTime)
  118. needRefreshDataTime = CompValidTimeData(self.weekEndTime, needRefreshDataTime)
  119. self.needRefreshTime = needRefreshTime
  120. self.needRefreshDataTime = needRefreshDataTime
  121. self.showGoodsDatas = showGoodsDatas
  122. self:SortShowData()
  123. end
  124. function ShopData:SortShowData()
  125. if not self.showGoodsDatas then return end
  126. table.sort(self.showGoodsDatas, function (a, b)
  127. local isSoldOutA = a:IsSoldout()
  128. local isSoldOutB = b:IsSoldout()
  129. if isSoldOutA == isSoldOutB then
  130. return a:GetSortId() < b:GetSortId()
  131. else
  132. return not isSoldOutA
  133. end
  134. end)
  135. end
  136. function ShopData:GetGoodsDataById(id)
  137. return self.goodsDataMap[id]
  138. end
  139. function ShopData:GetShowGoodsDatas()
  140. return self.showGoodsDatas
  141. end
  142. function ShopData:GetNeedRefreshTime()
  143. return self.needRefreshTime
  144. end
  145. function ShopData:GetNeedRefreshDataTime()
  146. return self.needRefreshDataTime
  147. end
  148. function ShopData:GetRefreshTime()
  149. return self.refreshTime
  150. end
  151. function ShopData:GetRefreshCount()
  152. return self.refreshCount
  153. end
  154. return ShopData