Pintuan.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\pintuan\shop\controller;
  11. use addon\pintuan\model\PintuanGroup;
  12. use addon\pintuan\model\PintuanOrder;
  13. use app\shop\controller\BaseShop;
  14. use addon\pintuan\model\Pintuan as PintuanModel;
  15. use addon\pintuan\model\PintuanGroup as PintuanGroupModel;
  16. /**
  17. * 拼团控制器
  18. */
  19. class Pintuan extends BaseShop
  20. {
  21. /*
  22. * 拼团活动列表
  23. */
  24. public function lists()
  25. {
  26. if (request()->isAjax()) {
  27. $model = new PintuanModel();
  28. $condition = [
  29. [ 'p.site_id', '=', $this->site_id ],
  30. [ 'g.goods_state', '=', 1 ],
  31. [ 'g.is_delete', '=', 0 ]
  32. ];
  33. $status = input('status', '');//拼团状态
  34. if ($status) {
  35. if ($status == 6) {
  36. $condition[] = [ 'p.status', '=', 0 ];
  37. } else {
  38. $condition[] = [ 'p.status', '=', $status ];
  39. }
  40. }
  41. $goods_name = input('goods_name', '');
  42. if ($goods_name) {
  43. $condition[] = [ 'g.goods_name', 'like', '%' . $goods_name . '%' ];
  44. }
  45. $start_time = input('start_time', '');
  46. $end_time = input('end_time', '');
  47. if ($start_time && !$end_time) {
  48. $condition[] = [ 'p.end_time', '>=', date_to_time($start_time) ];
  49. } elseif (!$start_time && $end_time) {
  50. $condition[] = [ 'p.start_time', '<=', date_to_time($end_time) ];
  51. } elseif ($start_time && $end_time) {
  52. $start_timestamp = date_to_time($start_time);
  53. $end_timestamp = date_to_time($end_time);
  54. $sql = "p.start_time between {$start_timestamp} and {$end_timestamp}";
  55. $sql .= " or p.end_time between {$start_timestamp} and {$end_timestamp}";
  56. $sql .= " or (p.start_time <= {$start_timestamp} and p.end_time >= {$end_timestamp})";
  57. $condition[] = [ '', 'exp', \think\facade\Db::raw($sql) ];
  58. }
  59. //排序
  60. $order = input('order', 'create_time');
  61. $sort = input('sort', 'desc');
  62. if ($order == 'create_time') {
  63. $order_by = 'p.' . $order . ' ' . $sort;
  64. } else {
  65. $order_by = 'p.' . $order . ' ' . $sort . ',p.create_time desc';
  66. }
  67. $page = input('page', 1);
  68. $page_size = input('page_size', PAGE_LIST_ROWS);
  69. $list = $model->getPintuanPageList($condition, $page, $page_size, $order_by);
  70. return $list;
  71. } else {
  72. $this->forthMenu();
  73. return $this->fetch("pintuan/lists");
  74. }
  75. }
  76. /**
  77. * 添加活动
  78. */
  79. public function add()
  80. {
  81. if (request()->isAjax()) {
  82. $pintuan_data = [
  83. 'site_id' => $this->site_id,
  84. 'site_name' => '',
  85. 'pintuan_name' => input('pintuan_name', ''),//活动名称
  86. 'is_virtual_goods' => input('is_virtual_goods', ''),//是否是虚拟商品
  87. 'pintuan_num' => input('pintuan_num', ''),//参团人数
  88. 'pintuan_time' => input('pintuan_time', ''),//拼团有效期
  89. 'remark' => input('remark', ''),// 活动规则
  90. 'is_recommend' => input('is_recommend', ''),//是否推荐
  91. 'start_time' => date_to_time(input('start_time', '')),//开始时间
  92. 'end_time' => date_to_time(input('end_time', '')),//结束时间
  93. 'buy_num' => input('buy_num', ''),//拼团限制购买
  94. 'is_single_buy' => input('is_single_buy', ''),//是否单独购买
  95. 'is_virtual_buy' => input('is_virtual_buy', ''),//是否虚拟成团
  96. 'is_promotion' => input('is_promotion', ''),//是否团长优惠
  97. 'pintuan_type' => input('pintuan_type', ''),
  98. 'pintuan_num_2' => input('pintuan_num_2', 0),
  99. 'pintuan_num_3' => input('pintuan_num_3', 0),
  100. ];
  101. $goods = [
  102. 'goods_ids' => input('goods_ids', ''),
  103. 'sku_ids' => input('sku_ids', ''),
  104. ];
  105. $sku_list = input('sku_list', '');
  106. $pintuan_model = new PintuanModel();
  107. return $pintuan_model->addPintuan($pintuan_data, $goods, $sku_list);
  108. } else {
  109. $pintuan_name = '拼团 ' . date('Y-m-d');
  110. $this->assign('pintuan_name', $pintuan_name);
  111. return $this->fetch("pintuan/add");
  112. }
  113. }
  114. /**
  115. * 编辑活动
  116. */
  117. public function edit()
  118. {
  119. $pintuan_model = new PintuanModel();
  120. if (request()->isAjax()) {
  121. $pintuan_data = [
  122. 'pintuan_id' => input('pintuan_id', ''),
  123. 'site_id' => $this->site_id,
  124. 'pintuan_name' => input('pintuan_name', ''),//活动名称
  125. 'goods_id' => input('goods_id', ''),//商品ID
  126. 'is_virtual_goods' => input('is_virtual_goods', ''),//是否是虚拟商品
  127. 'pintuan_num' => input('pintuan_num', ''),//参团人数
  128. 'pintuan_time' => input('pintuan_time', ''),//拼团有效期
  129. 'remark' => input('remark', ''),//活动规则
  130. 'is_recommend' => input('is_recommend', ''),//是否推荐
  131. 'start_time' => date_to_time(input('start_time', '')),//开始时间
  132. 'end_time' => date_to_time(input('end_time', '')),//结束时间
  133. 'buy_num' => input('buy_num', ''),//拼团限制购买
  134. 'is_single_buy' => input('is_single_buy', ''),//是否单独购买
  135. 'is_virtual_buy' => input('is_virtual_buy', ''),//是否虚拟成团
  136. 'is_promotion' => input('is_promotion', ''),//是否团长优惠
  137. 'pintuan_num_2' => input('pintuan_num_2', 0),
  138. 'pintuan_num_3' => input('pintuan_num_3', 0),
  139. ];
  140. $sku_list = input('sku_list', '');
  141. $goods = [
  142. 'goods_id' => input('goods_id', ''),
  143. 'sku_ids' => input('sku_ids', ''),
  144. ];
  145. return $pintuan_model->editPintuan($pintuan_data, $goods, $sku_list);
  146. } else {
  147. $pintuan_id = input('pintuan_id', '');
  148. //获取拼团信息
  149. $pintuan_info = $pintuan_model->getPintuanDetail($pintuan_id, $this->site_id);
  150. if (empty($pintuan_info[ 'data' ])) $this->error('未获取到活动数据', addon_url('pintuan://shop/pintuan/lists'));
  151. $this->assign('pintuan_info', $pintuan_info);
  152. return $this->fetch("pintuan/edit");
  153. }
  154. }
  155. /*
  156. * 拼团详情
  157. */
  158. public function detail()
  159. {
  160. $pintuan_model = new PintuanModel();
  161. $pintuan_id = input('pintuan_id', '');
  162. //获取拼团信息
  163. $pintuan_info = $pintuan_model->getPintuanJoinGoodsList($pintuan_id, $this->site_id)[ 'data' ] ?? [];
  164. if (empty($pintuan_info)) $this->error('未获取到活动数据', addon_url('pintuan://shop/pintuan/lists'));
  165. $this->assign('info', $pintuan_info);
  166. return $this->fetch("pintuan/detail");
  167. }
  168. /*
  169. * 删除拼团活动
  170. */
  171. public function delete()
  172. {
  173. $pintuan_id = input('pintuan_id', '');
  174. $pintuan_model = new PintuanModel();
  175. return $pintuan_model->deletePintuan($pintuan_id, $this->site_id);
  176. }
  177. /*
  178. * 拼团活动失效
  179. */
  180. public function invalid()
  181. {
  182. $pintuan_id = input('pintuan_id', '');
  183. $pintuan_model = new PintuanModel();
  184. return $pintuan_model->invalidPintuanTo($pintuan_id, $this->site_id);
  185. }
  186. /********************************** 开团团队 ******************************************************/
  187. /*
  188. * 开团团队列表
  189. */
  190. public function group()
  191. {
  192. $model = new PintuanGroupModel();
  193. $condition[] = [ 'pg.site_id', '=', $this->site_id ];
  194. $pintuan_id = input('pintuan_id', '');
  195. if ($pintuan_id) {
  196. $condition[] = [ 'pg.pintuan_id', '=', $pintuan_id ];
  197. }
  198. //获取续签信息
  199. if (request()->isAjax()) {
  200. $goods_name = input('goods_name', '');
  201. $nickname = input('nickname', '');
  202. $start_time = input('start_time', '');
  203. $end_time = input('end_time', '');
  204. $status = input('status', '');//拼团状态
  205. $page = input('page', 1);
  206. $page_size = input('page_size', PAGE_LIST_ROWS);
  207. if ($goods_name) {
  208. $condition[] = [ 'g.goods_name', 'like', '%' . $goods_name . '%' ];
  209. }
  210. if ($nickname) {
  211. $condition[] = [ 'm.nickname', 'like', '%' . $nickname . '%' ];
  212. }
  213. if ($start_time && !$end_time) {
  214. $condition[] = [ 'pg.create_time', '>=', date_to_time($start_time) ];
  215. } elseif (!$start_time && $end_time) {
  216. $condition[] = [ 'pg.create_time', '<=', date_to_time($end_time) ];
  217. } elseif ($start_time && $end_time) {
  218. $condition[] = [ 'pg.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
  219. }
  220. if ($status) {
  221. if ($status == 6) {
  222. $condition[] = [ 'pg.status', '=', 0 ];
  223. } else {
  224. $condition[] = [ 'pg.status', '=', $status ];
  225. }
  226. }
  227. $list = $model->getPintuanGroupPageList($condition, $page, $page_size, 'pg.group_id desc');
  228. return $list;
  229. } else {
  230. $this->assign('pintuan_id', $pintuan_id);
  231. $this->forthMenu();
  232. return $this->fetch("pintuan/group");
  233. }
  234. }
  235. /*
  236. * 拼团组成员订单列表
  237. */
  238. public function groupOrder()
  239. {
  240. $model = new PintuanOrder();
  241. $condition = [];
  242. $condition[] = [ 'ppo.pintuan_status', 'in', '2,3' ];
  243. $group_id = input('group_id', '');
  244. if ($group_id) {
  245. $condition[] = [ 'ppo.group_id', '=', $group_id ];
  246. }
  247. //获取续签信息
  248. if (request()->isAjax()) {
  249. $page = input('page', 1);
  250. $page_size = input('page_size', PAGE_LIST_ROWS);
  251. $list = $model->getPintuanOrderPageList($condition, $page, $page_size, 'ppo.id desc');
  252. return $list;
  253. } else {
  254. $this->assign('group_id', $group_id);
  255. //获取团长信息
  256. $pintuan_group_model = new PintuanGroupModel();
  257. $info = $pintuan_group_model->getPintuanGroupDetail([ [ 'pg.group_id', '=', $group_id ], [ 'pg.site_id', '=', $this->site_id ] ]);
  258. if (empty($info[ 'data' ])) $this->error('未获取到成团数据', addon_url('pintuan://shop/pintuan/group'));
  259. $this->assign('info', $info[ 'data' ]);
  260. return $this->fetch("pintuan/group_order");
  261. }
  262. }
  263. /**
  264. * 获取商品列表
  265. * @return array
  266. */
  267. public function getSkuList()
  268. {
  269. if (request()->isAjax()) {
  270. $pintuan_model = new PintuanModel();
  271. $pintuan_id = input('pintuan_id', '');
  272. $pintuan_info = $pintuan_model->getPintuanGoodsList($pintuan_id, $this->site_id);
  273. return $pintuan_info;
  274. }
  275. }
  276. /**
  277. * 拼团推广
  278. */
  279. public function pintuanUrl()
  280. {
  281. $pintuan_id = input('pintuan_id', '');
  282. $pintuan_model = new PintuanModel();
  283. $res = $pintuan_model->urlQrcode('/pages_promotion/pintuan/detail', [ 'id' => $pintuan_id ], 'pintuan', $this->site_id);
  284. return $res;
  285. }
  286. }