AuctionProduct.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. /**
  3. *
  4. * @author: xaboy<365615158@qq.com>
  5. * @day: 2017/11/02
  6. */
  7. namespace app\models\auction;
  8. use crmeb\traits\ModelTrait;
  9. use crmeb\basic\BaseModel;
  10. /**
  11. * 竞拍上坪 Model
  12. * Class WechatNews
  13. * @package app\admin\model\wechat
  14. */
  15. class AuctionProduct extends BaseModel
  16. {
  17. use ModelTrait;
  18. protected $pk = 'id';
  19. protected $name = 'auction_product';
  20. protected $autoWriteTimestamp = true;
  21. /**
  22. * 竞拍商品列表
  23. * @param $data
  24. * @param $uid
  25. * @return array
  26. * @throws \think\db\exception\DataNotFoundException
  27. * @throws \think\db\exception\DbException
  28. * @throws \think\db\exception\ModelNotFoundException
  29. */
  30. public static function list($data, $uid){
  31. $model = self::where('is_show', 1)->where('auction_id', $data['id'])->order('id DESC');
  32. if ($data['name']) $model->where('name', 'like', '%'.$data['name'].'%');
  33. $list = $model->select();
  34. $list = empty($list)? [] : $list->toArray();
  35. $lists = [];
  36. $auction = Auction::where('id', $data['id'])->find();
  37. if ($list){
  38. foreach ($list as $k => $v) {
  39. $order = AuctionOrder::where('product_id', $v['id'])->where('status', '>', 0)->where('frequency', $auction['frequency'])->find();
  40. if ($order){
  41. $list[$k]['status'] = 2;// 已被购买
  42. $list[$k]['str'] = '已卖完';
  43. }else{
  44. $list[$k]['status'] = 1;// 能购买
  45. $list[$k]['str'] = '购买';
  46. }
  47. if ($v['is_admin'] == 2){
  48. $time = AuctionTime::where([['auction_id', '=', $auction['id']], ['product_id', '=', $v['id']], ['add_time', '=', strtotime(date('Y-m-d', time()))]])->find();
  49. if (!$time){
  50. unset($list[$k]);
  51. } else{
  52. $lists[] = $list[$k];
  53. }
  54. }else{
  55. $lists[] = $list[$k];
  56. }
  57. }
  58. $productId = AuctionProduct::where('auction_id', $data['id'])->column('id');
  59. $orderList = AuctionOrder::alias('a')
  60. ->field('p.*')
  61. ->leftJoin('auction_product p', 'a.product_id = p.id')
  62. ->where([['a.product_id', 'in', $productId], ['a.frequency', '=', $auction['frequency']], ['a.status', '=', 3]])
  63. ->select();
  64. }else{
  65. $productId = AuctionProduct::where('auction_id', $data['id'])->column('id');
  66. $orderList = AuctionOrder::alias('a')
  67. ->field('p.*')
  68. ->leftJoin('auction_product p', 'a.product_id = p.id')
  69. ->where([['a.product_id', 'in', $productId], ['a.frequency', '=', $auction['frequency']], ['a.status', '=', 3]])
  70. ->select();
  71. }
  72. $a = [];
  73. $b = [];
  74. foreach ($lists as $k => $v){
  75. if ($v['status'] == 1) $a[] = $v; // 未卖出的商品
  76. if ($v['status'] == 2) $b[] = $v; // 卖出的商品
  77. }
  78. foreach ($b as $k => $v){
  79. array_push($a, $v); // 卖出商品到最后
  80. }
  81. if (isset($orderList) and !empty($orderList)){
  82. $orderList = count($orderList) == 0? [] : $orderList->toArray();
  83. foreach ($orderList as $v){
  84. $v['status'] = 2;// 已被购买
  85. $v['str'] = '已卖完';
  86. array_push($a, $v);
  87. }
  88. }
  89. $data['page'] = ($data['page'] - 1)*$data['limit'];
  90. $List = array_slice($a, $data['page'], $data['limit']);
  91. return $List;
  92. }
  93. /**
  94. * 用户商品
  95. * @param $data
  96. * @param $uid
  97. * @return array
  98. * @throws \think\db\exception\DataNotFoundException
  99. * @throws \think\db\exception\DbException
  100. * @throws \think\db\exception\ModelNotFoundException
  101. */
  102. public static function user_product($data, $uid){
  103. $model = self::where('uid', $uid)->order('id DESC');
  104. $model->page($data['page'], $data['limit']);
  105. $list = $model->select();
  106. $list = empty($list)? [] : $list->toArray();
  107. return $list;
  108. }
  109. /**
  110. * 场次时间到期用户未出售商品下架
  111. * @return void
  112. */
  113. public static function off_the_shelf(){
  114. $auction = Auction::where('rend_time', '<', date('H:i:s'))->select();
  115. if ($auction){
  116. foreach ($auction as $k => $v) {
  117. $productId = AuctionTime::where('auction_id', '=', $v['id'])->where('add_time', '=', strtotime(date('Y-m-d', time())))->column('product_id');
  118. if ($productId){
  119. $orderId = AuctionOrder::where('product_id', 'in', $productId)->where('frequency', '=', $v['frequency'])->where('status','>', 0)->column('product_id');
  120. if ($orderId){
  121. foreach ($orderId as $value){
  122. if (in_array($value, $productId))unset($productId[$value]);
  123. }
  124. }
  125. $order = AuctionProduct::where([['id', 'in', $productId], ['auction_id', '=', $v['id']], ['is_admin', '=', 2]])->column('order');// 查找今天场次没买出去的商品订单
  126. AuctionOrder::where('order_id', 'in', $order)->save(['is_gs' => 0]);//订单为未挂售状态
  127. AuctionProduct::where([['id', 'in', $productId], ['auction_id', '=', $v['id']], ['is_admin', '=', 2]])->save(['is_show' => 0]);// 查找今天场次没买出去的商品下架
  128. AuctionTime::where('auction_id', '=', $v['id'])->where('add_time', '<=', strtotime(date('Y-m-d', time())))->delete(); // 清除今天挂售时间
  129. }
  130. }
  131. }
  132. }
  133. public static function bs($id)
  134. {
  135. $product = AuctionProduct::where('id',$id)->find();
  136. $auction = Auction::where('id', $product['auction_id'])->find();
  137. if (!$product) return app('json')->fail('商品不存在');
  138. $data['time'] = explode(',', $auction['site']);
  139. $date = date('w', time()); // 今天星期几
  140. $data['gs_time'] = '';
  141. $bs = 0;
  142. if (in_array(1, $data['time'])){
  143. if ($date >= 1 and $date <= 2){
  144. $data['gs_time'] = date('Y-m-d H:i:s', strtotime("Wednesday")); // 星期三
  145. $bs = 2;
  146. }elseif ($date >= 3 and $date <= 4){
  147. $data['gs_time'] = date('Y-m-d H:i:s', strtotime("Friday")); // 星期五
  148. $bs = 2;
  149. }elseif ($date >= 5 or $date == 0){
  150. $data['gs_time'] = date('Y-m-d H:i:s', strtotime("Monday")); // 下个星期一
  151. $bs = 3;
  152. }
  153. }else if (in_array(2, $data['time'])){
  154. if ($date >= 2 and $date <= 3){
  155. $data['gs_time'] = date('Y-m-d H:i:s', strtotime("Thursday")); // 星期四
  156. $bs = 2;
  157. }elseif ($date >= 4 and $date <= 5){
  158. $data['gs_time'] = date('Y-m-d H:i:s', strtotime("Saturday")); // 星期六
  159. $bs = 2;
  160. }elseif ($date >= 6 or $date == 0 or $date == 1){
  161. $data['gs_time'] = date('Y-m-d H:i:s', strtotime("Tuesday")); // 下个星期二
  162. $bs = 3;
  163. }
  164. }
  165. $hanging_price = round($product['hanging_price'] * $product['rise']/100, 2); // 溢价
  166. $anticipate = round($product['hanging_price'] * $product['deduct']/100, 2); // 扣除
  167. $give = round($product['hanging_price'] * $product['give']/100);// 赠送趣豆
  168. $data['price'] = $product['hanging_price'];
  169. $data['hanging_price'] = (int)$product['hanging_price'] + ($hanging_price * $bs);
  170. $data['anticipate'] = $anticipate*2;
  171. $data['give'] = $give;
  172. return $data;
  173. }
  174. }