PtActivityForm.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\client\models\v1\pt;
  8. use app\models\Goods;
  9. use app\models\PtActivity;
  10. use app\models\PtActivityBanner;
  11. use app\models\PtActivityGoods;
  12. use app\models\PtActivityGoodsCat;
  13. use app\models\PtActivityOrder;
  14. use app\models\PtActivityOrderDetail;
  15. use app\models\SaasUser;
  16. use app\models\User;
  17. use yii\base\Model;
  18. class PtActivityForm extends Model
  19. {
  20. //店铺id
  21. public $store_id;
  22. //分类id
  23. public $cat_id;
  24. //商品名称
  25. public $goods_name;
  26. public $goods_id;
  27. public function rules()
  28. {
  29. return [
  30. [['page', 'limit', 'type', 'cat_id'],'integer'],
  31. [['goods_name', 'goods_id'],'string']
  32. ];
  33. }
  34. //获取商品列表
  35. public function search() {
  36. try {
  37. $store_id = $this->store_id;
  38. $cat_id = $this->cat_id;
  39. $goods_name = $this->goods_name;
  40. $goods_id = $this->goods_id;
  41. $time = time();
  42. $pt_activity_id = PtActivity::find()->where(['is_delete' => 0, 'store_id' => $store_id, 'is_platform' => 0])
  43. ->andWhere(['AND', ['<', 'start_time', $time], ['>', 'end_time', $time]])->select('id')
  44. ->column();
  45. if (!empty($pt_activity_id)) {
  46. $query = PtActivityGoods::find()->alias('pag')->where(['pag.is_delete' => 0, 'g.status' => 1, 'g.is_delete' => 0])
  47. ->andWhere(['pag.activity_id' => $pt_activity_id])
  48. ->leftJoin(['g' => Goods::tableName()], 'pag.goods_id = g.id')
  49. ->select('g.id, g.name, g.cover_pic, g.price, pag.pt_price, pag.use_attr, pag.sale_num, pag.virtual_sales, pag.activity_id, pag.cat_id, pag.attr');
  50. if ($cat_id && (int)$cat_id !== -1) {
  51. $query->andWhere(['pag.cat_id' => $cat_id]);
  52. }
  53. if ($goods_name) {
  54. $query->andWhere(['LIKE', 'g.name', $goods_name]);
  55. }
  56. if ($goods_id) {
  57. if(is_string($goods_id)){
  58. $goods_id = explode(',', $goods_id);
  59. }
  60. $query->andWhere(['g.id' => $goods_id]);
  61. }
  62. $query->orderBy('pag.created_at desc');
  63. $list = pagination_make($query);
  64. foreach ($list['list'] as &$item) {
  65. $attr = json_decode($item['attr'], true);
  66. $attr = array_column($attr, 'pt_price');
  67. $attr = array_filter($attr);
  68. $attr = array_merge($attr, [$item['price']]);
  69. $item['pt_price'] = sprintf('%.2f', min($attr));
  70. $item['sale_num'] += $item['virtual_sales'];
  71. $pt_activity = PtActivity::findOne($item['activity_id']);
  72. $item['party_size'] = $pt_activity->party_size ?? 0;
  73. $item['party_type'] = $pt_activity->party_type ?? 0;
  74. $item['party_goods_count'] = $pt_activity->party_goods_count ?? 0;
  75. $diff_price = sprintf('%.2f', ($item['price'] - $item['pt_price']));
  76. if (strpos($diff_price, '.00') !== false) {
  77. $diff_price = str_replace('.00', '', $diff_price);
  78. }
  79. $item['diff_price'] = $diff_price;
  80. }
  81. }
  82. return [
  83. 'code' => 0,
  84. 'msg' => '',
  85. 'data' => [
  86. 'list' => $list['list'] ?? [],
  87. 'pageNo' => $list['pageNo'] ?? 0,
  88. 'totalCount' => $list['totalCount'] ?? 0
  89. ]
  90. ];
  91. } catch (\Exception $e) {
  92. return [
  93. 'code' => 1,
  94. 'msg' => $e->getMessage()
  95. ];
  96. }
  97. }
  98. public function getBanner() {
  99. try {
  100. $store_id = $this->store_id;
  101. $banner_list = PtActivityBanner::find()->where(['store_id' => $store_id, 'is_delete' => 0, 'status' => 1])
  102. ->orderBy('sort asc')->select('name, url, cover_pic')->asArray()->all();
  103. foreach ($banner_list as &$item) {
  104. $item['url'] = !empty($item['url']) ? json_decode($item['url'], true) : [
  105. 'name' => '',
  106. 'link' => '',
  107. 'open_type' => ''
  108. ];
  109. }
  110. return [
  111. 'code' => 0,
  112. 'msg' => "获取成功",
  113. 'data' => [
  114. 'list' => $banner_list
  115. ]
  116. ];
  117. } catch (\Exception $e) {
  118. return [
  119. 'code' => 1,
  120. 'msg' => $e->getMessage()
  121. ];
  122. }
  123. }
  124. public function getPtGoodsCat() {
  125. try {
  126. $store_id = $this->store_id;
  127. $goods_cat_list = PtActivityGoodsCat::find()->where(['store_id' => $store_id, 'is_delete' => 0, 'status' => 1])
  128. ->orderBy('created_at desc')->select('id, name')->asArray()->all();
  129. $goods_cat_list = array_values(array_merge([
  130. [
  131. 'id' => '-1',
  132. 'name' => '全部'
  133. ],
  134. ], $goods_cat_list));
  135. return [
  136. 'code' => 0,
  137. 'msg' => "获取成功",
  138. 'data' => [
  139. 'list' => $goods_cat_list
  140. ]
  141. ];
  142. } catch (\Exception $e) {
  143. return [
  144. 'code' => 1,
  145. 'msg' => $e->getMessage()
  146. ];
  147. }
  148. }
  149. //获取拼团广场数据
  150. public function getPtSquare() {
  151. try {
  152. //开团人员
  153. $query = PtActivityOrderDetail::find()->alias('pod')->where(['store_id' => get_store_id()])
  154. ->leftJoin(['po' => PtActivityOrder::tableName()], 'pod.order_id = po.id')
  155. ->andWhere(['po.pt_number' => 0, 'po.is_pay' => 1, 'po.is_pt_finish' => 0])
  156. ->select('po.id, pod.goods_id, pod.goods_name, pod.pic, pod.total_price pt_price, po.pay_time, pod.activity_id, po.user_id')
  157. ->andWhere(['po.pt_number' => 0]);
  158. $query->orderBy('num desc');
  159. $list = pagination_make($query);
  160. foreach ($list['list'] as &$item) {
  161. $pt_activity = PtActivity::findOne($item['activity_id']);
  162. $item['end_time'] = 0;
  163. if (($item['pay_time'] + ($pt_activity->split_time * 60 * 60)) > time()) {
  164. $item['end_time'] = ($item['pay_time'] + ($pt_activity->split_time * 60 * 60)) - time();
  165. }
  166. $user = User::find()->alias('u')->where(['u.id' => $item['user_id']])
  167. ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')->select('su.avatar')->asArray()->one();
  168. $item['avatar'] = $user['avatar'];
  169. }
  170. return [
  171. 'code' => 0,
  172. 'msg' => 'success',
  173. 'data' => [
  174. 'list' => $list['list'] ?? [],
  175. 'pageNo' => $list['pageNo'] ?? 0,
  176. 'totalCount' => $list['totalCount'] ?? 0
  177. ]
  178. ];
  179. } catch (\Exception $e) {
  180. return [
  181. 'code' => 1,
  182. 'msg' => $e->getMessage()
  183. ];
  184. }
  185. }
  186. }