Coupon.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\coupon\shop\controller;
  11. use addon\coupon\model\MemberCoupon;
  12. use app\shop\controller\BaseShop;
  13. use addon\coupon\model\CouponType as CouponTypeModel;
  14. use addon\coupon\model\Coupon as CouponModel;
  15. use think\facade\Db;
  16. /**
  17. * 优惠券
  18. * @author Administrator
  19. *
  20. */
  21. class Coupon extends BaseShop
  22. {
  23. public function __construct()
  24. {
  25. $this->app_module = input('app_module', SHOP_MODULE);
  26. if ($this->app_module == 'store') {
  27. $this->initConstructInfo(); // 加载构造函数重要信息
  28. } else {
  29. parent::__construct();
  30. }
  31. }
  32. /**
  33. * 添加活动
  34. */
  35. public function add()
  36. {
  37. if (request()->isAjax()) {
  38. $data = [
  39. 'site_id' => $this->site_id,
  40. 'coupon_name' => input('coupon_name', ''),//优惠券名称
  41. 'type' => input('type'),//优惠券类型
  42. 'goods_type' => input('goods_type', 1),
  43. 'goods_ids' => input('goods_ids', ''),
  44. 'sort' => input('sort', '0'), //优惠券排序
  45. 'money' => input('money', 0),//优惠券面额
  46. 'discount' => input('discount', 0),//优惠券折扣
  47. 'discount_limit' => input('discount_limit', 0),//最多优惠
  48. 'count' => input('count', ''),//发放数量
  49. 'max_fetch' => input('max_fetch', ''),//最大领取数量
  50. 'at_least' => input('at_least', ''),//满多少元可以使用
  51. 'end_time' => strtotime(input('end_time', '')),//活动结束时间
  52. 'image' => input('image', ''),//优惠券图片
  53. 'validity_type' => input('validity_type', ''),//有效期类型 0固定时间 1领取之日起
  54. 'fixed_term' => input('fixed_term', ''),//领取之日起N天内有效
  55. 'is_show' => input('is_show', 0),//是否允许直接领取 1:是 0:否 允许直接领取,用户才可以在手机端和PC端进行领取,否则只能以活动的形式发放。
  56. ];
  57. $coupon_type_model = new CouponTypeModel();
  58. return $coupon_type_model->addCouponType($data);
  59. } else {
  60. return $this->fetch("coupon/add");
  61. }
  62. }
  63. /**
  64. * 编辑活动
  65. */
  66. public function edit()
  67. {
  68. $coupon_type_model = new CouponTypeModel();
  69. if (request()->isAjax()) {
  70. $data = [
  71. 'site_id' => $this->site_id,
  72. 'coupon_name' => input('coupon_name', ''),//优惠券名称
  73. 'type' => input('type'),//优惠券类型
  74. 'goods_type' => input('goods_type', 1),
  75. 'goods_ids' => input('goods_ids', ''),
  76. 'money' => input('money', 0),//优惠券面额
  77. 'sort' => input('sort', 0),//优惠券面额
  78. 'discount' => input('discount', 0),//优惠券折扣
  79. 'discount_limit' => input('discount_limit', 0),//最多优惠
  80. 'count' => input('count', ''),//发放数量
  81. 'max_fetch' => input('max_fetch', ''),//最大领取数量
  82. 'at_least' => input('at_least', ''),//满多少元可以使用
  83. 'end_time' => strtotime(input('end_time', '')),//活动结束时间
  84. 'image' => input('image', ''),//优惠券图片
  85. 'validity_type' => input('validity_type', ''),//有效期类型 0固定时间 1领取之日起
  86. 'fixed_term' => input('fixed_term', ''),//领取之日起N天内有效
  87. 'is_show' => input('is_show', 0),//是否允许直接领取 1:是 0:否 允许直接领取,用户才可以在手机端和PC端进行领取,否则只能以活动的形式发放。
  88. ];
  89. $coupon_type_id = input('coupon_type_id', 0);
  90. return $coupon_type_model->editCouponType($data, $coupon_type_id);
  91. } else {
  92. $coupon_type_id = input('coupon_type_id', 0);
  93. $this->assign('coupon_type_id', $coupon_type_id);
  94. $coupon_type_info = $coupon_type_model->getCouponTypeInfo($coupon_type_id, $this->site_id);
  95. if (empty($coupon_type_info[ 'data' ])) $this->error('未获取到优惠券数据', addon_url('coupon://shop/coupon/lists'));
  96. $this->assign('coupon_type_info', $coupon_type_info[ 'data' ][ 0 ]);
  97. return $this->fetch("coupon/edit");
  98. }
  99. }
  100. /**
  101. * 活动详情
  102. */
  103. public function detail()
  104. {
  105. $coupon_type_id = input('coupon_type_id', 0);
  106. $coupon_type_model = new CouponTypeModel();
  107. $coupon_type_info = $coupon_type_model->getCouponTypeInfo($coupon_type_id, $this->site_id)[ 'data' ] ?? [];
  108. if (empty($coupon_type_info)) $this->error('未获取到优惠券数据', addon_url('coupon://shop/coupon/lists'));
  109. $this->assign('info', $coupon_type_info[ 0 ]);
  110. $this->assign('get_type', (new CouponModel())->getCouponGetType());
  111. return $this->fetch("coupon/detail");
  112. }
  113. /**
  114. * 活动列表
  115. */
  116. public function lists()
  117. {
  118. $coupon_type_model = new CouponTypeModel();
  119. if (request()->isAjax()) {
  120. $page = input('page', 1);
  121. $page_size = input('page_size', PAGE_LIST_ROWS);
  122. $coupon_name = input('coupon_name', '');
  123. $status = input('status', '');
  124. $inventory_count = input('inventory_count', '');#剩余数量
  125. $condition = [];
  126. if ($status !== "") {
  127. $condition[] = [ 'status', '=', $status ];
  128. }
  129. $type = input('type');
  130. if ($type) {
  131. $condition[] = [ 'type', '=', $type ];
  132. }
  133. //类型
  134. $validity_type = input('validity_type', '');
  135. if ($validity_type !== '') {
  136. $start_time = input('start_time', '');
  137. $end_time = input('end_time', '');
  138. switch ( $validity_type ) {
  139. case 0: //固定
  140. $condition[] = [ 'end_time', 'between', [ $start_time, $end_time ] ];
  141. break;
  142. case 1:
  143. $condition[] = [ 'fixed_term', 'between', [ $start_time, $end_time ] ];
  144. break;
  145. case 2:
  146. $condition[] = [ 'validity_type', '=', 2 ];
  147. break;
  148. }
  149. }
  150. if ($inventory_count) {
  151. $condition[] = [ '', "exp", Db::raw("(lead_count < count && count != -1) OR count = -1") ];
  152. }
  153. $condition[] = [ 'site_id', '=', $this->site_id ];
  154. $condition[] = [ 'coupon_name', 'like', '%' . $coupon_name . '%' ];
  155. $field = '*';
  156. //排序
  157. $link_sort = input('order', 'create_time');
  158. $sort = input('sort', 'desc');
  159. if ($link_sort == 'sort') {
  160. $order_by = $link_sort . ' ' . $sort;
  161. } else {
  162. $order_by = $link_sort . ' ' . $sort . ',sort desc';
  163. }
  164. $res = $coupon_type_model->getCouponTypePageList($condition, $page, $page_size, $order_by, $field);
  165. //获取优惠券状态
  166. $coupon_type_status_arr = $coupon_type_model->getCouponTypeStatus();
  167. foreach ($res[ 'data' ][ 'list' ] as $key => $val) {
  168. $res[ 'data' ][ 'list' ][ $key ][ 'status_name' ] = $coupon_type_status_arr[ $val[ 'status' ] ];
  169. }
  170. return $res;
  171. } else {
  172. $this->forthMenu();
  173. //优惠券状态
  174. $coupon_type_status_arr = $coupon_type_model->getCouponTypeStatus();
  175. $this->assign('coupon_type_status_arr', $coupon_type_status_arr);
  176. return $this->fetch("coupon/lists");
  177. }
  178. }
  179. /**
  180. * 排序
  181. * @return mixed
  182. */
  183. public function couponSort()
  184. {
  185. $sort = input('sort', 0);
  186. $coupon_type_id = input('coupon_type_id', 0);
  187. $coupon_type_model = new CouponTypeModel();
  188. return $coupon_type_model->couponSort($coupon_type_id, $sort);
  189. }
  190. /**
  191. * 优惠券推广
  192. */
  193. public function couponUrl()
  194. {
  195. $coupon_type_id = input('coupon_type_id', '');
  196. $coupon_model = new couponTypeModel();
  197. // $coupon_info = $coupon_model->getInfo([['coupon_type_id','=',$coupon_type_id]],'coupon_type_id,coupon_name,site_id');
  198. // $coupon_info = $coupon_info[ 'data' ];
  199. // $res = $coupon_model->spread($coupon_info[ 'coupon_type_id' ], $coupon_info[ 'coupon_name' ], $coupon_info[ 'site_id' ]);
  200. $res = $coupon_model->urlQrcode('/pages_tool/goods/coupon_receive', [ 'coupon_type_id' => $coupon_type_id ], 'coupon', $this->site_id);
  201. return $res;
  202. }
  203. /**
  204. * 发送优惠券
  205. */
  206. public function send()
  207. {
  208. $member_id = input('member_id');
  209. $coupon_type_model = new CouponTypeModel();
  210. if (request()->isAjax()) {
  211. $coupon_data = json_decode(input('coupon_data', '[]'), true);
  212. $get_type = input('get_type', 4);
  213. if (empty($coupon_data)) {
  214. return error('', 'REQUEST_COUPON_TYPE_ID');
  215. }
  216. $res = ( new CouponModel() )->giveCoupon($coupon_data, $this->site_id, $member_id, $get_type);
  217. return $res;
  218. } else {
  219. //优惠券状态
  220. $coupon_type_status_arr = $coupon_type_model->getCouponTypeStatus();
  221. $this->assign('coupon_type_status_arr', $coupon_type_status_arr);
  222. $this->assign('member_id', $member_id);
  223. return $this->fetch("coupon/send");
  224. }
  225. }
  226. /**
  227. * 活动列表
  228. */
  229. public function couponSelect()
  230. {
  231. $coupon_type_model = new CouponTypeModel();
  232. if (request()->isAjax()) {
  233. $page = input('page', 1);
  234. $page_size = input('page_size', PAGE_LIST_ROWS);
  235. $coupon_name = input('coupon_name', '');
  236. $condition[] = [ 'site_id', '=', $this->site_id ];
  237. $condition[] = [ 'status', '=', 1 ];
  238. $condition[] = [ 'coupon_name', 'like', '%' . $coupon_name . '%' ];
  239. $order = 'create_time desc';
  240. $field = '*';
  241. $res = $coupon_type_model->getCouponTypePageList($condition, $page, $page_size, $order, $field);
  242. //获取优惠券状态
  243. $coupon_type_status_arr = $coupon_type_model->getCouponTypeStatus();
  244. foreach ($res[ 'data' ][ 'list' ] as $key => $val) {
  245. $res[ 'data' ][ 'list' ][ $key ][ 'status_name' ] = $coupon_type_status_arr[ $val[ 'status' ] ];
  246. }
  247. return $res;
  248. } else {
  249. //优惠券状态
  250. $coupon_type_status_arr = $coupon_type_model->getCouponTypeStatus();
  251. $this->assign('coupon_type_status_arr', $coupon_type_status_arr);
  252. $select_id = input('select_id', '');
  253. $this->assign('select_id', $select_id);
  254. return $this->fetch("coupon/coupon_select");
  255. }
  256. }
  257. /**
  258. * 关闭活动
  259. */
  260. public function close()
  261. {
  262. if (request()->isAjax()) {
  263. $coupon_type_id = input('coupon_type_id', 0);
  264. $coupon_type_model = new CouponTypeModel();
  265. return $coupon_type_model->closeCouponType($coupon_type_id, $this->site_id);
  266. }
  267. }
  268. /**
  269. * 删除活动
  270. */
  271. public function delete()
  272. {
  273. if (request()->isAjax()) {
  274. $coupon_type_id = input('coupon_type_id', 0);
  275. $coupon_type_model = new CouponTypeModel();
  276. return $coupon_type_model->deleteCouponType($coupon_type_id, $this->site_id);
  277. }
  278. }
  279. /**
  280. * 优惠券领取记录
  281. * */
  282. public function receive()
  283. {
  284. $coupon_model = new CouponModel();
  285. if (request()->isAjax()) {
  286. $page = input('page', 1);
  287. $page_size = input('page_size', PAGE_LIST_ROWS);
  288. $coupon_type_id = input('coupon_type_id', 0);
  289. $state = input('state', '');
  290. $condition = [];
  291. $condition[] = [ 'npc.coupon_type_id', '=', $coupon_type_id ];
  292. $condition[] = [ 'npc.site_id', '=', $this->site_id ];
  293. if ($state !== '') {
  294. $condition[] = [ 'npc.state', '=', $state ];
  295. }
  296. $res = $coupon_model->getMemberCouponPageList($condition, $page, $page_size);
  297. return $res;
  298. } else {
  299. $coupon_type_id = input('coupon_type_id', 0);
  300. $this->assign('coupon_type_id', $coupon_type_id);
  301. $this->assign('get_type', $coupon_model->getCouponGetType());
  302. return $this->fetch("coupon/receive");
  303. }
  304. }
  305. /**
  306. * 优惠券回收
  307. */
  308. public function recoveryCoupon()
  309. {
  310. if (request()->isAjax()) {
  311. $conpon_list = json_decode(input('coupon_list', '[]'), true);
  312. return (new MemberCoupon())->recoveryCoupon($conpon_list, $this->site_id);
  313. }
  314. }
  315. }