Room.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. namespace app\api\model\plus\live;
  3. use app\common\model\plus\live\Room as RoomModel;
  4. use app\api\model\settings\Setting as SettingModel;
  5. use app\api\model\supplier\Supplier as SupplierModel;
  6. use app\api\model\order\Order as OrderModel;
  7. use app\common\model\plus\live\RoomGift as RoomGiftModel;
  8. use app\api\model\user\Favorite as FavoriteModel;
  9. /**
  10. * 直播模型
  11. */
  12. class Room extends RoomModel
  13. {
  14. /**
  15. * 隐藏字段
  16. */
  17. protected $hidden = [
  18. 'is_delete',
  19. 'app_id',
  20. ];
  21. /**
  22. * 获取直播列表
  23. */
  24. public function getList($data,$user=false)
  25. {
  26. $model = $this;
  27. if(isset($data['category_id'])&&$data['category_id']){
  28. $model = $model->where('category_id','=',$data['category_id']);
  29. }
  30. if(isset($data['is_notice'])){
  31. $model = $model->where('is_notice', '=', $data['is_notice']);
  32. }
  33. if(isset($data['is_follow'])&&$data['is_follow']){
  34. if($user){
  35. $shop_supplier_id = (new FavoriteModel())->where('user_id','=',$user['user_id'])->where('type','=',10)->column('pid');
  36. $model = $model->where('shop_supplier_id', 'in', $shop_supplier_id);
  37. }
  38. }
  39. $model = $model->where('live_status','in','101,102,104');
  40. return $model->with(['share', 'user','cover','product.product.image.file'])->where('is_delete', '=', 0)
  41. ->order([ 'is_top' => 'desc','live_status' => 'asc', 'create_time' => 'desc'])
  42. ->paginate($data, false, [
  43. 'query' => \request()->request()
  44. ]);
  45. }
  46. /**
  47. * 获取直播中数据
  48. */
  49. public function getLive($data)
  50. {
  51. $model = $this;
  52. $model = $model->where('live_status','=',101);
  53. return $model->with(['share', 'user','cover','product.product.image.file'])->where('is_delete', '=', 0)
  54. ->order([ 'is_top' => 'desc','create_time' => 'desc'])
  55. ->limit(5)
  56. ->select();
  57. }
  58. /**
  59. * 获取diy直播列表
  60. */
  61. public function getDiyList($num)
  62. {
  63. $model = $this;
  64. $model = $model->where('live_status','in',[101,102,104]);
  65. return $model->with(['share', 'user'])->where('is_delete', '=', 0)
  66. ->order(['is_top' => 'desc','live_status' => 'asc', 'create_time' => 'desc'])
  67. ->limit($num)
  68. ->select();
  69. }
  70. /**
  71. * 获取直播列表
  72. */
  73. public function getMyList($user, $data, $show_delete = false)
  74. {
  75. $model = $this;
  76. if(isset($data['is_notice'])){
  77. $model = $model->where('is_notice', '=', $data['is_notice']);
  78. }
  79. if(!$show_delete){
  80. $model = $model->where('is_delete', '=', 0);
  81. }
  82. if(isset($data['is_end'])&&$data['is_end']){
  83. $model = $model->where('live_status', 'in', '101,103');
  84. }
  85. return $model->with(['cover', 'share'])->where('user_id', '=', $user['user_id'])
  86. ->order(['create_time' => 'desc'])
  87. ->paginate($data, false, [
  88. 'query' => \request()->request()
  89. ]);
  90. }
  91. /**
  92. * 保存
  93. */
  94. public function add($user, $data)
  95. {
  96. //保存直播
  97. $data['user_id'] = $user['user_id'];
  98. $live = SettingModel::getItem('live');
  99. $data['qcloud_room_id'] = 'room_' .$user['user_id'];
  100. $data['shop_supplier_id'] = $user['supplierUser']['shop_supplier_id'];
  101. $data['app_id'] = self::$app_id;
  102. //判断是否需要审核
  103. $is_audit = $live['is_audit'];
  104. $data['live_status'] = $is_audit==1?0:102;
  105. //查询供应商类目
  106. $supplier = SupplierModel::detail($data['shop_supplier_id']);
  107. $data['category_id'] = $supplier['category_id'];
  108. return $this->save($data);
  109. }
  110. /**
  111. * 预告
  112. */
  113. public function notice($user, $data)
  114. {
  115. $this->startTrans();
  116. try {
  117. //保存直播
  118. $data['user_id'] = $user['user_id'];
  119. $live = SettingModel::getItem('live');
  120. $data['room_name'] = 'channel_' .$user['supplierUser']['shop_supplier_id'];
  121. $data['start_time'] = strtotime($data['start_time']);
  122. $data['is_notice'] = 1;
  123. $data['app_id'] = self::$app_id;
  124. $data['shop_supplier_id'] = $user['supplierUser']['shop_supplier_id'];
  125. //判断是否需要审核
  126. $is_audit = $live['is_audit'];
  127. $data['live_status'] = $is_audit==1?0:102;
  128. //查询供应商类目
  129. $supplier = SupplierModel::detail($data['shop_supplier_id']);
  130. $data['category_id'] = $supplier['category_id'];
  131. $data['record_uid'] = time();
  132. $this->save($data);
  133. $this->commit();
  134. return true;
  135. } catch (\Exception $e) {
  136. $this->error = $e->getMessage();
  137. $this->rollback();
  138. return false;
  139. }
  140. }
  141. /**
  142. * 保存
  143. */
  144. public function edit($data)
  145. {
  146. //保存直播
  147. return $this->save($data);
  148. }
  149. /**
  150. * 真删
  151. */
  152. public function setDelete(){
  153. return $this->delete();
  154. }
  155. public static function getRoom($room_id, $user_id){
  156. return (new static())->where('room_id', '=', $room_id)
  157. ->where('user_id', '=', $user_id)
  158. ->find();
  159. }
  160. public function setProduct($product_id){
  161. return $this->save([
  162. 'product_id' => $product_id
  163. ]);
  164. }
  165. public function setStatus($status){
  166. $data['live_status'] = $status;
  167. if($status == 101){
  168. $data['is_notice'] = 0;
  169. $data['real_start_time'] = time();
  170. $data['real_end_time'] = time();
  171. }
  172. if($status == 103){
  173. $data['real_end_time'] = time();
  174. }
  175. return $this->save($data);
  176. }
  177. public function digg($num){
  178. return $this->inc('digg_num',$num)->update();
  179. }
  180. //直播数据
  181. public function livedata($shop_supplier_id){
  182. //总收入
  183. $OrderModel = new OrderModel();
  184. $order = $OrderModel->where('shop_supplier_id','=',$shop_supplier_id)
  185. ->where('room_id','>',0)
  186. ->where('pay_status','=',20)
  187. ->field("sum('order_id') as orderCount,sum(pay_price) as totalPrice")
  188. ->find();
  189. //礼物收入
  190. $RoomGiftModel = new RoomGiftModel();
  191. $gifPrice = $RoomGiftModel->where('shop_supplier_id','=',$shop_supplier_id)->sum('price');
  192. $data['totalPrice'] = $order['totalPrice']?$order['totalPrice']:0;
  193. $data['orderCount'] = $order['orderCount']?$order['orderCount']:0;
  194. $data['gifPrice'] = $gifPrice;
  195. return $data;
  196. }
  197. /**
  198. * 更新结束时间
  199. */
  200. public function updateEndTime(){
  201. return $this->save([
  202. 'real_end_time' => time()
  203. ]);
  204. }
  205. /**
  206. * 获取店铺直播列表
  207. */
  208. public function getStoreList($data)
  209. {
  210. $model = $this;
  211. if(isset($data['shop_supplier_id'])&&$data['shop_supplier_id']){
  212. $model = $model->where('shop_supplier_id', '=', $data['shop_supplier_id']);
  213. }
  214. return $model->with(['cover', 'share'])
  215. ->order([ 'is_top' => 'desc','live_status' => 'asc', 'create_time' => 'desc'])
  216. ->where('is_delete', '=', 0)
  217. ->where('live_status', 'in', '101,102,103,104')
  218. ->paginate($data, false, [
  219. 'query' => \request()->request()
  220. ]);
  221. }
  222. }