ShareCouponService.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/3/21
  6. * Time: 9:51
  7. */
  8. namespace app\frontend\modules\coupon\services;
  9. use app\common\exceptions\ShopException;
  10. use app\common\models\Coupon;
  11. use app\common\models\coupon\ShoppingShareCouponLog;
  12. use app\common\models\MemberCoupon;
  13. use app\frontend\modules\coupon\models\ShoppingShareCoupon;
  14. use app\frontend\models\Member;
  15. class ShareCouponService
  16. {
  17. public static function fen($share_model)
  18. {
  19. $coupon_ids = $share_model->share_coupon;
  20. $key = array_rand($coupon_ids,1);
  21. $couponModel = Coupon::find($coupon_ids[$key]);
  22. //dd($couponModel);
  23. $getTotal = MemberCoupon::uniacid()->where("coupon_id", $coupon_ids[$key])->count();
  24. $lastTotal = $couponModel->total - $getTotal;
  25. $share_log = ShoppingShareCouponLog::uniacid()->shareCouponId($share_model->id)->shareUid($share_model->member_id)->receiveUid(\YunShop::app()->getMemberId())->first();
  26. if ($share_log) {
  27. return self::toData('RT', '已领取不可重复领取');
  28. } elseif(!$couponModel->status) {
  29. return self::toData('RT', '该优惠券已领完');
  30. } elseif (($couponModel->total != -1) && (1 > $lastTotal)) {
  31. return self::toData('RT', '已经被抢光了');
  32. } elseif ((!$share_model->obtain_restriction) && $share_model->member_id == \YunShop::app()->getMemberId()) {
  33. return self::toData('RT', '分享者不可领取');
  34. }
  35. $bool = self::sendCoupon($share_model,$couponModel,\YunShop::app()->getMemberId(),$key);
  36. if ($bool) {
  37. return self::toData('YES', '成功' , $couponModel->toArray());
  38. }
  39. return self::toData('ER', '数据保存失败');
  40. }
  41. protected static function sendCoupon($share_model, $couponModel, $receiveUid, $coupon_key)
  42. {
  43. //return true;
  44. $data = [
  45. 'uniacid' => \YunShop::app()->uniacid,
  46. 'uid' => $receiveUid,
  47. 'coupon_id' => $couponModel->id,
  48. 'get_type' => 0,
  49. 'used' => 0,
  50. 'get_time' => strtotime('now'),
  51. ];
  52. $logData = [
  53. 'uniacid' => \YunShop::app()->uniacid,
  54. 'share_uid' => $share_model->member_id,
  55. 'order_id' => $share_model->order_id,
  56. 'share_coupon_id' => $share_model->id,
  57. 'receive_uid' => $receiveUid,
  58. 'coupon_id' => $couponModel->id,
  59. 'coupon_name' => $couponModel->name,
  60. 'remark' => $couponModel->coupon_method == 1 ? '¥'.$couponModel->deduct : $couponModel->discount.'折',
  61. ];
  62. $member_coupon = MemberCoupon::create($data);
  63. //写入log
  64. if ($member_coupon) { //发放优惠券成功
  65. $logData['log'] = '用户( ID 为 ' . $receiveUid . ' )通过用户( ID为 ' . $share_model->member_id . ' )的分享领取 1 张优惠券(ID 为 ' . $couponModel->id . ' )';
  66. } else { //发放优惠券失败
  67. $logData['log'] = '分享领取失败:用户( ID 为 ' . $receiveUid . ' )通过用户( ID为 ' . $share_model->member_id . ' )的分享领取 1 张优惠券(ID 为 ' . $couponModel->id . ' )';
  68. \Log::debug($logData['log']);
  69. return false;
  70. }
  71. ShoppingShareCouponLog::create($logData);
  72. $share_model->receive_coupon = array_merge( isset($share_model->receive_coupon)?$share_model->receive_coupon: [], [$share_model->share_coupon[$coupon_key]]);
  73. $share_model->share_coupon = self::handleArray($share_model->share_coupon, $coupon_key, 'cut');
  74. $share_model->status = count($share_model->share_coupon) > 0 ?0:1;
  75. $bool = $share_model->save();
  76. if ($bool) {
  77. return true;
  78. } else {
  79. return false;
  80. }
  81. }
  82. /**
  83. * @param $coupon_ids array 优惠券数组
  84. * @param $key int 数组下标
  85. * @param string $type 处理方式
  86. * @return array
  87. */
  88. protected static function handleArray($coupon_ids, $key, $type = 'cut')
  89. {
  90. array_splice($coupon_ids, $key, 1);
  91. return $coupon_ids;
  92. }
  93. protected static function toData($state = '999999', $error = '', $data = [])
  94. {
  95. return [
  96. 'state' => $state,
  97. 'msg' => $error,
  98. 'data' => $data,
  99. ];
  100. }
  101. /**
  102. * 支付是否显示分享页
  103. * @param array|string $order_ids
  104. * @return bool
  105. */
  106. public static function showIndex($order_ids,$member_id)
  107. {
  108. if (!is_array($order_ids)) {
  109. if (strpos($order_ids, '_') !== false) {
  110. $order_ids = explode('_', rtrim($order_ids, '_'));
  111. } else {
  112. $order_ids = explode(',', rtrim($order_ids, ','));
  113. }
  114. }
  115. $share_model = ShoppingShareCoupon::whereIn('order_id', $order_ids)->get();
  116. $member = Member::with(['yzMember'])->find($member_id);
  117. if ($share_model->isEmpty() || (!$member)) {
  118. return false;
  119. }
  120. $set = \Setting::get('coupon.shopping_share');
  121. //拥有推广资格的会员才可以分享
  122. if ($set['share_limit'] == 1) {
  123. if (!$member->yzMember->is_agent) {
  124. return false;
  125. }
  126. }
  127. return true;
  128. }
  129. }