168 lines
5.2 KiB
PHP
168 lines
5.2 KiB
PHP
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: Administrator
|
|
* Date: 2019/3/21
|
|
* Time: 9:51
|
|
*/
|
|
|
|
namespace app\frontend\modules\coupon\services;
|
|
|
|
|
|
use app\common\exceptions\ShopException;
|
|
use app\common\models\Coupon;
|
|
use app\common\models\coupon\ShoppingShareCouponLog;
|
|
use app\common\models\MemberCoupon;
|
|
use app\frontend\modules\coupon\models\ShoppingShareCoupon;
|
|
use app\frontend\models\Member;
|
|
|
|
class ShareCouponService
|
|
{
|
|
public static function fen($share_model)
|
|
{
|
|
$coupon_ids = $share_model->share_coupon;
|
|
|
|
$key = array_rand($coupon_ids,1);
|
|
|
|
$couponModel = Coupon::find($coupon_ids[$key]);
|
|
//dd($couponModel);
|
|
$getTotal = MemberCoupon::uniacid()->where("coupon_id", $coupon_ids[$key])->count();
|
|
|
|
$lastTotal = $couponModel->total - $getTotal;
|
|
|
|
$share_log = ShoppingShareCouponLog::uniacid()->shareCouponId($share_model->id)->shareUid($share_model->member_id)->receiveUid(\YunShop::app()->getMemberId())->first();
|
|
|
|
if ($share_log) {
|
|
return self::toData('RT', '已领取不可重复领取');
|
|
} elseif(!$couponModel->status) {
|
|
return self::toData('RT', '该优惠券已领完');
|
|
} elseif (($couponModel->total != -1) && (1 > $lastTotal)) {
|
|
return self::toData('RT', '已经被抢光了');
|
|
} elseif ((!$share_model->obtain_restriction) && $share_model->member_id == \YunShop::app()->getMemberId()) {
|
|
return self::toData('RT', '分享者不可领取');
|
|
}
|
|
|
|
|
|
$bool = self::sendCoupon($share_model,$couponModel,\YunShop::app()->getMemberId(),$key);
|
|
|
|
|
|
if ($bool) {
|
|
return self::toData('YES', '成功' , $couponModel->toArray());
|
|
}
|
|
return self::toData('ER', '数据保存失败');
|
|
}
|
|
|
|
protected static function sendCoupon($share_model, $couponModel, $receiveUid, $coupon_key)
|
|
{
|
|
//return true;
|
|
|
|
$data = [
|
|
'uniacid' => \YunShop::app()->uniacid,
|
|
'uid' => $receiveUid,
|
|
'coupon_id' => $couponModel->id,
|
|
'get_type' => 0,
|
|
'used' => 0,
|
|
'get_time' => strtotime('now'),
|
|
];
|
|
|
|
|
|
$logData = [
|
|
'uniacid' => \YunShop::app()->uniacid,
|
|
'share_uid' => $share_model->member_id,
|
|
'order_id' => $share_model->order_id,
|
|
'share_coupon_id' => $share_model->id,
|
|
'receive_uid' => $receiveUid,
|
|
'coupon_id' => $couponModel->id,
|
|
'coupon_name' => $couponModel->name,
|
|
'remark' => $couponModel->coupon_method == 1 ? '¥'.$couponModel->deduct : $couponModel->discount.'折',
|
|
];
|
|
|
|
$member_coupon = MemberCoupon::create($data);
|
|
//写入log
|
|
if ($member_coupon) { //发放优惠券成功
|
|
$logData['log'] = '用户( ID 为 ' . $receiveUid . ' )通过用户( ID为 ' . $share_model->member_id . ' )的分享领取 1 张优惠券(ID 为 ' . $couponModel->id . ' )';
|
|
|
|
} else { //发放优惠券失败
|
|
$logData['log'] = '分享领取失败:用户( ID 为 ' . $receiveUid . ' )通过用户( ID为 ' . $share_model->member_id . ' )的分享领取 1 张优惠券(ID 为 ' . $couponModel->id . ' )';
|
|
\Log::debug($logData['log']);
|
|
return false;
|
|
}
|
|
|
|
ShoppingShareCouponLog::create($logData);
|
|
|
|
$share_model->receive_coupon = array_merge( isset($share_model->receive_coupon)?$share_model->receive_coupon: [], [$share_model->share_coupon[$coupon_key]]);
|
|
|
|
$share_model->share_coupon = self::handleArray($share_model->share_coupon, $coupon_key, 'cut');
|
|
|
|
$share_model->status = count($share_model->share_coupon) > 0 ?0:1;
|
|
|
|
$bool = $share_model->save();
|
|
|
|
if ($bool) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* @param $coupon_ids array 优惠券数组
|
|
* @param $key int 数组下标
|
|
* @param string $type 处理方式
|
|
* @return array
|
|
*/
|
|
protected static function handleArray($coupon_ids, $key, $type = 'cut')
|
|
{
|
|
array_splice($coupon_ids, $key, 1);
|
|
|
|
return $coupon_ids;
|
|
}
|
|
|
|
protected static function toData($state = '999999', $error = '', $data = [])
|
|
{
|
|
return [
|
|
'state' => $state,
|
|
'msg' => $error,
|
|
'data' => $data,
|
|
];
|
|
}
|
|
|
|
|
|
/**
|
|
* 支付是否显示分享页
|
|
* @param array|string $order_ids
|
|
* @return bool
|
|
*/
|
|
public static function showIndex($order_ids,$member_id)
|
|
{
|
|
if (!is_array($order_ids)) {
|
|
if (strpos($order_ids, '_') !== false) {
|
|
$order_ids = explode('_', rtrim($order_ids, '_'));
|
|
} else {
|
|
$order_ids = explode(',', rtrim($order_ids, ','));
|
|
}
|
|
}
|
|
|
|
$share_model = ShoppingShareCoupon::whereIn('order_id', $order_ids)->get();
|
|
$member = Member::with(['yzMember'])->find($member_id);
|
|
|
|
if ($share_model->isEmpty() || (!$member)) {
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
$set = \Setting::get('coupon.shopping_share');
|
|
|
|
//拥有推广资格的会员才可以分享
|
|
if ($set['share_limit'] == 1) {
|
|
if (!$member->yzMember->is_agent) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
return true;
|
|
}
|
|
} |