admin/app/frontend/modules/coupon/controllers/CouponTransferController.php

157 lines
6.1 KiB
PHP

<?php
/****************************************************************
* Author: libaojia
* Date: 2017/9/26 下午1:44
* Email: livsyitian@163.com
* QQ: 995265288
* User:
****************************************************************/
namespace app\frontend\modules\coupon\controllers;
use app\common\components\ApiController;
use app\common\exceptions\AppException;
use app\common\exceptions\ShopException;
use app\common\facades\Setting;
use app\common\models\coupon\CouponUseLog;
use app\frontend\models\Member;
use app\frontend\modules\coupon\models\MemberCoupon;
use app\frontend\modules\coupon\services\CouponSendService;
use app\backend\modules\coupon\services\MessageNotice;
use Illuminate\Support\Facades\DB;
use Yunshop\GiftCouponFee\frontend\CouponFeeController;
class CouponTransferController extends ApiController
{
public $memberModel;
public function index()
{
$coupon_set = \Setting::getByGroup('coupon');
$recipient = trim(\YunShop::request()->recipient);
$record_id = trim(\YunShop::request()->record_id);
$transfer_num = trim(\YunShop::request()->transfer_num);
if (!$this->getMemberInfo()) {
return $this->errorJson('未获取到会员信息');
}
if (!Member::uniacid()->select('uid')->where('uid',$recipient)->first()) {
return $this->errorJson('被转让者不存在');
}
if ($this->memberModel->uid == $recipient) {
return $this->errorJson('转让者不能是自己');
}
$_model = MemberCoupon::select('id','coupon_id','get_time','uid')->where('id',$record_id)->where('uid',\YunShop::app()->getMemberId())->with(['belongsToCoupon'])->first();
if (!$_model) {
return $this->errorJson('未获取到该优惠券记录ID');
}
//开启手续费后直接走手续费入口
if (app('plugins')->isEnabled('gift-coupon-fee') && Setting::get("couponbase_setting")["switch"]==1 && $coupon_set['transfer_num'] != 1) {
return (new CouponFeeController())->index();
}
if (!$coupon_set['transfer_num'] && $transfer_num > 1) {
return $this->errorJson('未开启多张转赠功能!');
}
if ($coupon_set['transfer_num']) {
$this->judgeNum($transfer_num,$_model);
if ($coupon_set['transfer_choice'] == 1) {
//最新日期
$finder = MemberCoupon::uniacid()
->where(['used'=>0,'is_member_deleted'=>0,'is_expired'=>0,'uid'=>$_model->uid,'coupon_id'=>$_model->coupon_id])
->orderBy('get_time','desc')
->limit($transfer_num)
->get();
} else {
//快过期
$finder = MemberCoupon::uniacid()
->where(['used'=>0,'is_member_deleted'=>0,'is_expired'=>0,'uid'=>$_model->uid,'coupon_id'=>$_model->coupon_id])
->orderBy('get_time','asc')
->limit($transfer_num)
->get();
}
DB::beginTransaction();
try {
foreach ($finder as $find) {
//因为需要继承获得时间,所以此处遍历
$couponService = new CouponSendService();
$result = $couponService->sendCouponsToMember($recipient, [$_model->coupon_id], '5', '', $this->memberModel->uid, strtotime($find->get_time));
if (!$result) {
throw new AppException('转让失败:(写入出错)');
}
$this->handleTransfer($_model->coupon_id, $find->id, $recipient);
}
DB::commit();
return $this->successJson('转让成功,');
} catch (\Exception $e) {
DB::rollBack();
throw new AppException($e->getMessage());
}
}
$couponService = new CouponSendService();
$result = $couponService->sendCouponsToMember($recipient,[$_model->coupon_id],'5','',$this->memberModel->uid,strtotime($_model->get_time));
if (!$result) {
return $this->errorJson('转让失败:(写入出错)');
}
$this->handleTransfer($_model->coupon_id,$record_id,$recipient);
return $this->successJson('转让成功,');
}
/**
* @param $coupon_id
* @param $record_id
* @param $recipient
* @return \Illuminate\Http\JsonResponse
* 减去持有者优惠券&记录
*/
private function handleTransfer($coupon_id,$record_id,$recipient)
{
$result = MemberCoupon::where('id',$record_id)->update(['used' => 1,'use_time' => time()]);
if (!$result) {
return $this->errorJson('转让失败:(记录修改出错)');
}
$log_data = [
'uniacid' => \YunShop::app()->uniacid,
'member_id' => \YunShop::app()->getMemberId(),
'detail' => '会员(ID为' . \YunShop::app()->getMemberId() . ')转赠一张优惠券(ID为' . $coupon_id . '),受赠会员(ID为' . $recipient . ')',
'coupon_id' => $coupon_id,
'member_coupon_id' => $record_id,
'type' => CouponUseLog::TYPE_TRANSFER
];
$model = new CouponUseLog();
$model->fill($log_data);
$model->save();
}
/**
* @param $transfer_num
* @throws AppException
* 判断输入转赠数量
*/
private function judgeNum($transfer_num,$_model)
{
if($transfer_num < 0 || !is_numeric($transfer_num) || floor($transfer_num) != $transfer_num)
{
throw new AppException('请输入正确张数');
}
$coupons_num = MemberCoupon::uniacid()
->where(['used'=>0,'is_member_deleted'=>0,'is_expired'=>0,'uid'=>$_model->uid,'coupon_id'=>$_model->coupon_id])
->count();
if($transfer_num > $coupons_num)
{
throw new AppException('数量不足,请重新输入');
}
}
private function getMemberInfo()
{
return $this->memberModel = Member::select('uid')->where('uid',\YunShop::app()->getMemberId())->first();
}
}