PtActivityForm.php 8.4 KB

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