ShareCouponController.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/3/20
  6. * Time: 11:07
  7. */
  8. namespace app\frontend\modules\coupon\controllers;
  9. use app\common\components\ApiController;
  10. use app\common\events\order\AfterOrderPaidImmediatelyEvent;
  11. use app\common\models\coupon\ShoppingShareCouponLog;
  12. use app\common\models\Order;
  13. use app\common\exceptions\AppException;
  14. use app\common\models\Coupon;
  15. use app\frontend\models\Member;
  16. use app\frontend\modules\coupon\models\ShoppingShareCoupon;
  17. use app\frontend\modules\coupon\services\ShareCouponService;
  18. use Carbon\Carbon;
  19. use Yunshop\Hotel\common\models\CouponHotel;
  20. class ShareCouponController extends ApiController
  21. {
  22. protected $set;
  23. protected $share_model;
  24. protected $member;
  25. public function preAction()
  26. {
  27. parent::preAction();
  28. $this->getData();
  29. }
  30. //分享页面
  31. public function share()
  32. {
  33. //event(new AfterOrderPaidImmediatelyEvent(Order::find(801)));
  34. //dd(1);
  35. //拥有推广资格的会员才可以分享
  36. if ($this->set['share_limit'] == 1) {
  37. if (!$this->member->yzMember->is_agent) {
  38. throw new AppException('拥有推广资格的会员才可以分享');
  39. }
  40. $share_limit = $this->member->yzMember->is_agent ? 1 : 0;
  41. } else {
  42. $share_limit = 0;
  43. }
  44. $this->share_model->map(function ($model) {
  45. $model->coupon_num = count($model->share_coupon);
  46. });
  47. $data = [
  48. 'set' => $this->set,
  49. 'share_limit' => $share_limit,
  50. 'coupon_num' => $this->share_model->sum('coupon_num'),
  51. ];
  52. return $this->successJson('share', $data);
  53. }
  54. //领取页面
  55. public function receive()
  56. {
  57. foreach ($this->share_model as $model) {
  58. $result = ShareCouponService::fen($model);
  59. if ($result['state'] == 'YES' || $result['state'] == 'ER') {
  60. break;
  61. }
  62. }
  63. if ($result['state'] == 'ER') {
  64. throw new AppException($result['msg']);
  65. }
  66. $data = [
  67. 'set' => $this->set,
  68. 'member_name' => $this->member->nickname?:$this->member->realname,
  69. 'code' => $result['state'],
  70. 'msg' => $result['msg'],
  71. 'coupon' => $this->handleCoupon($result['data']),
  72. ];
  73. return $this->successJson('share', $data);
  74. }
  75. public function logList()
  76. {
  77. $order_ids = explode('_', rtrim(\YunShop::request()->order_ids, '_'));
  78. $log_model = ShoppingShareCouponLog::yiLog($order_ids)->paginate(15)->toArray();
  79. $this->share_model->map(function ($model) {
  80. $model->coupon_num = count($model->share_coupon);
  81. });
  82. $coupon_num = $this->share_model->sum('coupon_num');
  83. $returnData = [
  84. 'remainder' => $coupon_num,
  85. 'total' => $log_model['total'],
  86. 'current_page' => $log_model['current_page'],
  87. 'last_page' => $log_model['last_page'],
  88. 'per_page' => $log_model['per_page'],
  89. 'data' => $log_model['data'],
  90. ];
  91. return $this->successJson('成功', $returnData);
  92. }
  93. protected function handleCoupon($data)
  94. {
  95. if (empty($data)) return [];
  96. $data['api_limit'] = $this->handleCouponUseType($data);
  97. $now = strtotime('now');
  98. if ($data['time_limit'] == Coupon::COUPON_SINCE_RECEIVE) { //时间限制类型是"领取后几天有效"
  99. $end = $now + ($data['time_days'] * 24 * 3600);
  100. if ($data['time_days'] == 0) {
  101. $data['time_start'] = '不限时间使用'; //前端需要起止时间
  102. $data['time_end'] = ''; //前端需要起止时间
  103. } else {
  104. $data['time_start'] = date('Y-m-d', $now); //前端需要起止时间
  105. $data['time_end'] = date('Y-m-d', $end); //前端需要起止时间
  106. }
  107. } elseif ($data['time_limit'] == Coupon::COUPON_DATE_TIME_RANGE) { //时间限制类型是"时间范围"
  108. $data['time_start'] = substr($data['time_start'], 0, 10); //为了和前面保持一致
  109. $data['time_end'] = substr($data['time_end'], 0, 10); //为了和前面保持一致
  110. } else {
  111. $data['time_start'] = '优惠券已经失效了'; //为了和前面保持一致
  112. $data['time_end'] = '';
  113. }
  114. return $data;
  115. }
  116. protected function handleCouponUseType($couponInArrayFormat)
  117. {
  118. switch ($couponInArrayFormat['use_type']) {
  119. case Coupon::COUPON_SHOP_USE:
  120. return ('商城通用');
  121. break;
  122. case Coupon::COUPON_CATEGORY_USE:
  123. $res = '适用于下列分类: ';
  124. $res .= implode(',', $couponInArrayFormat['categorynames']);
  125. return $res;
  126. break;
  127. case Coupon::COUPON_GOODS_USE:
  128. $res = '适用于下列商品: ';
  129. $res .= implode(',', $couponInArrayFormat['goods_names']);
  130. return $res;
  131. break;
  132. case Coupon::COUPON_SUPPLIER_USE:
  133. $res = '适用于下列供应商: ';
  134. $res .= implode(',', $couponInArrayFormat['suppliernames']);
  135. return $res;
  136. break;
  137. case Coupon::COUPON_STORE_USE:
  138. case 5:
  139. $res = '适用于下列门店: ';
  140. $res .= implode(',', $couponInArrayFormat['storenames']);
  141. return $res;
  142. break;
  143. case Coupon::COUPON_ONE_HOTEL_USE:
  144. $res = '适用于酒店:';
  145. if(app('plugins')->isEnabled('hotel')){
  146. $coupon_hotel = CouponHotel::where('coupon_id',$couponInArrayFormat['id'])->with('hotel',function ($query){
  147. $query->select('hotel_name');
  148. })->first();
  149. $res .= $coupon_hotel->hotel->hotel_name;
  150. }
  151. return $res;
  152. break;
  153. case Coupon::COUPON_MORE_HOTEL_USE:
  154. $res = '适用于下列酒店: ';
  155. if(app('plugins')->isEnabled('hotel')){
  156. $hotel_arr = [];
  157. $coupon_hotels = CouponHotel::where('coupon_id',$couponInArrayFormat['id'])->with('hotel',function ($query){
  158. $query->select('hotel_name');
  159. })->get();
  160. foreach ($coupon_hotels as $v){
  161. $hotel_arr[] = $v->hotel->hotel_name;
  162. }
  163. $res .= implode(',', $hotel_arr);
  164. }
  165. return $res;
  166. break;
  167. default:
  168. return ('Enjoy shopping');
  169. }
  170. }
  171. protected function getData()
  172. {
  173. $order_ids = explode('_', rtrim(\YunShop::request()->order_ids, '_'));
  174. $share_model = ShoppingShareCoupon::whereIn('order_id', $order_ids)->get();
  175. if ($share_model->isEmpty()) {
  176. throw new AppException('无分享优惠券');
  177. }
  178. $set = \Setting::get('coupon.shopping_share');
  179. array_set($set, 'banner', yz_tomedia($set['banner']));
  180. $this->member = Member::with(['yzMember'])->find(\YunShop::app()->getMemberId());
  181. $this->set = $set;
  182. $this->share_model = $share_model;
  183. }
  184. }