StoreSeckillActiveDao.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. /**
  3. * @package merchant
  4. *
  5. * @author Qinii
  6. * @day 2020-07-30
  7. *
  8. *
  9. */
  10. namespace app\common\dao\store;
  11. use app\common\enum\store\SeckillActiveEnum;
  12. use app\common\model\store\StoreSeckillActive;
  13. use app\common\dao\BaseDao;
  14. use app\entity\data\store\SeckillActiveEntity;
  15. class StoreSeckillActiveDao extends BaseDao
  16. {
  17. /**
  18. * TODO
  19. * @return string
  20. * @author Qinii
  21. * @day 2020-07-30
  22. */
  23. protected function getModel(): string
  24. {
  25. return StoreSeckillActive::class;
  26. }
  27. /**
  28. * TODO 搜索
  29. * @param array $where
  30. * @return mixed
  31. * @author Qinii
  32. * @day 2020-08-05
  33. */
  34. public function search(array $where)
  35. {
  36. $query = $this->getModel()::getDB()
  37. ->when(isset($where['status']) && $where['status'] !== '',function($query) use($where){
  38. $query->where('status',$where['status']);
  39. })
  40. ->when(isset($where['start_day']) && $where['start_day'] !== '',function($query) use($where){
  41. $query->whereTime('start_day','<=',$where['start_day']);
  42. })
  43. ->when(isset($where['end_day']) && $where['end_day'] !== '',function($query) use($where){
  44. $query->whereTime('end_day','>',$where['end_day']);
  45. })
  46. ->when(isset($where['start_time']) && $where['start_time'] !== '',function($query) use($where){
  47. $query->whereTime('start_time','<=',$where['start_time']);
  48. })
  49. ->when(isset($where['end_time']) && $where['end_time'] !== '',function($query) use($where){
  50. $query ->whereTime('end_time','>',$where['end_time']);
  51. })
  52. ->when(isset($where['product_id']) && $where['product_id'] !== '',function($query) use($where){
  53. $query->where('product_id',$where['product_id']);
  54. })
  55. ->when(isset($where['day']) && $where['day'] !== '',function($query) use($where){
  56. $query->whereTime('start_day','<=',$where['day'])->whereTime('end_day','>',$where['day']);
  57. })
  58. ->when(isset($where['time']) && $where['time'] !== '',function($query) use($where){
  59. $query->whereTime('start_time','<=',$where['time'])->whereTime('end_time','>',$where['time']);
  60. });
  61. $query->order('start_time DESC');
  62. return $query;
  63. }
  64. /**
  65. * TODO
  66. * @param int $productId
  67. * @param array $data
  68. * @return mixed
  69. * @author Qinii
  70. * @day 2020-08-11
  71. */
  72. public function updateByProduct(int $productId,array $data)
  73. {
  74. return $this->getModel()::getDB()->where('product_id',$productId)->update($data);
  75. }
  76. /**
  77. * TODO
  78. * @author Qinii
  79. * @day 2020-08-11
  80. */
  81. public function valActiveStatus()
  82. {
  83. $day = date('Y-m-d',time());
  84. $_h = date('H',time());
  85. $id = $this->getModel()::getDB()->where('status',1)
  86. ->whereTime('end_day','<=',$day)
  87. ->whereTime('end_time','<',$_h)
  88. ->column('seckill_active_id');
  89. $this->getModel()::getDB()->where('seckill_active_id','in',$id)->update(['status' => -1]);
  90. }
  91. /**
  92. * TODO 不同状态商品
  93. * @param $status
  94. * @return mixed
  95. * @author Qinii
  96. * @day 2020-08-19
  97. */
  98. public function getStatus($status)
  99. {
  100. $day = date('Y-m-d',time());
  101. $_h = date('H',time());
  102. $query = $this->getModel()::getDB();
  103. if($status == 1) //未开始
  104. $query->where('status','<>',-1)->where(function($query)use ($day,$_h){
  105. $query->whereTime('start_day','>',$day)->whereOr(function($query)use($day,$_h){
  106. $query->whereTime('start_day','<=',$day)->where('start_time','>',$_h);
  107. });
  108. });
  109. if($status == 2)//进行中
  110. $query->where('status',1)
  111. ->whereTime('start_day','<=',$day)->whereTime('end_day','>',$day)
  112. ->where('start_time','<=',$_h)->where('end_time','>',$_h);
  113. if($status == 3) //结束
  114. $query->where('status',-1)->whereOr(function($query)use($day,$_h){
  115. $query->whereTime('end_day','<',$day)
  116. ->whereOr(function($query)use($day,$_h){
  117. $query->whereTime('start_day','<=',$day)->whereTime('end_day','>=',$day)->where('end_time','<=',$_h);
  118. });
  119. });
  120. return $query;
  121. }
  122. /**
  123. * 根据 商品ID 获取当前生效的 活动记录
  124. * @param int $productId
  125. * @return \app\entity\CommonEntity
  126. */
  127. public function getSeckillActiveEntityByProductIdInActive(int $productId): \app\entity\CommonEntity
  128. {
  129. $data = [];
  130. try {
  131. /** @var StoreSeckillActive $model */
  132. $model = $this->getModel();
  133. $dataRes = $model::getDB()
  134. ->where('product_id', '=', $productId)
  135. ->where("`start_time` <= '" . time() . "'")
  136. ->where("`end_time` >= '" . time() . "'")
  137. ->where("status", '=', SeckillActiveEnum::STATUS['Active']['code'])
  138. ->find();
  139. if (!empty($dataRes)) {
  140. $data = $dataRes->toArray();
  141. }
  142. } catch (\Exception $e) {
  143. }
  144. return SeckillActiveEntity::newInstance($data);
  145. }
  146. }