diff --git a/app/Admin/Controllers/Activity/RuleController.php b/app/Admin/Controllers/Activity/RuleController.php index b9c0b08..89459b4 100644 --- a/app/Admin/Controllers/Activity/RuleController.php +++ b/app/Admin/Controllers/Activity/RuleController.php @@ -3,9 +3,12 @@ namespace App\Admin\Controllers\Activity; use App\Models\ActivityRule; +use App\Models\User; use Encore\Admin\Controllers\AdminController; use Encore\Admin\Form; use Encore\Admin\Grid; +use Illuminate\Support\MessageBag; +use RuLong\Identity\Models\Identity; class RuleController extends AdminController { @@ -46,10 +49,31 @@ class RuleController extends AdminController $form->text('title', '规则名称')->required(); $form->text('code', '规则编号')->required()->help('列:YSD-full100-15'); - $form->decimal('full', '满足金额')->required()->default(0); - $form->decimal('take', '抵扣金额')->required()->default(0); + $form->hidden('full', '满足金额')->required()->default(0); + $form->hidden('take', '抵扣金额')->required()->default(0); $form->switch('status', '状态')->default(1); + $form->saving(function (Form $form) { + $code = $form->code; + + $ticket = explode('-', $code); + if (!is_array($ticket) || count($ticket) != 3) { + $error = new MessageBag([ + 'title' => '错误', + 'message' => '规则编号格式错误', + ]); + + return back()->withInput()->with(compact('error')); + } + + $full = $ticket[1]; //full100 + $price = $ticket[2]; + preg_match('/\d+/', $full, $match); + + $form->full = $match[0]; + $form->take = $price; + + }); return $form; } diff --git a/app/Events/ConponCallback.php b/app/Events/ConponCallback.php new file mode 100644 index 0000000..6a90f98 --- /dev/null +++ b/app/Events/ConponCallback.php @@ -0,0 +1,20 @@ +acticity_coupon = $acticity_coupon; + } + +} diff --git a/app/Listeners/ConponCallbackListener.php b/app/Listeners/ConponCallbackListener.php new file mode 100644 index 0000000..d7fde97 --- /dev/null +++ b/app/Listeners/ConponCallbackListener.php @@ -0,0 +1,59 @@ +acticity_coupon; + $user = $acticity_coupon->outlet->parent; + + if ($user->callback) { + $client = new Client(); + + $response = $client->request('post', $user->callback, [ + 'timeout' => 30, + 'query' => [ + 'code' => $acticity_coupon->code, + ], + ]); + + $data = [ + 'code' => $acticity_coupon->code, + 'url' => $user->callback, + ]; + + if ($response->getStatusCode() == 200) { + $body = $response->getBody(); + $result = json_decode($body->getContents(), true); + + $data['status'] = $result['code'] ?? ''; + $data['source'] = $result; + $data['remark'] = $result['message'] ?? ''; + + } else { + $data['status'] = 0; + $data['source'] = ''; + $data['remark'] = '接口错误'; + } + + ActivityCouponLog::create($data); + } + + } + +} diff --git a/app/Models/ActivityCoupon.php b/app/Models/ActivityCoupon.php index 5013372..5ddc32e 100644 --- a/app/Models/ActivityCoupon.php +++ b/app/Models/ActivityCoupon.php @@ -2,9 +2,13 @@ namespace App\Models; +use App\Models\Traits\BelongsToOutlet; + class ActivityCoupon extends Model { + use BelongsToOutlet; + protected $dates = [ 'start_at', 'end_at', diff --git a/app/Models/ActivityCouponLog.php b/app/Models/ActivityCouponLog.php new file mode 100644 index 0000000..278d173 --- /dev/null +++ b/app/Models/ActivityCouponLog.php @@ -0,0 +1,12 @@ + 'array', + ]; + +} diff --git a/app/Models/Coupon.php b/app/Models/Coupon.php index 37d27b3..07968d4 100644 --- a/app/Models/Coupon.php +++ b/app/Models/Coupon.php @@ -2,12 +2,13 @@ namespace App\Models; +use App\Models\Traits\BelongsToOutlet; use App\Models\Traits\BelongsToUser; class Coupon extends Model { - use BelongsToUser; + use BelongsToUser, BelongsToOutlet; protected $dates = [ 'paid_at', @@ -20,11 +21,6 @@ class Coupon extends Model self::TYPE_YSD => '自有券', ]; - public function outlet() - { - return $this->belongsTo(User::class, 'outletId', 'outlet_id'); - } - public function getStatusTextAttribute() { switch ($this->status) { diff --git a/app/Models/Traits/BelongsToOutlet.php b/app/Models/Traits/BelongsToOutlet.php new file mode 100644 index 0000000..f615b84 --- /dev/null +++ b/app/Models/Traits/BelongsToOutlet.php @@ -0,0 +1,16 @@ +belongsTo(User::class, 'outletId', 'outlet_id'); + } + +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 723a290..839a7b9 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,27 +2,25 @@ namespace App\Providers; -use Illuminate\Auth\Events\Registered; -use Illuminate\Auth\Listeners\SendEmailVerificationNotification; +use App\Events\ConponCallback; +use App\Listeners\ConponCallbackListener; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; -use Illuminate\Support\Facades\Event; class EventServiceProvider extends ServiceProvider { + /** * The event listener mappings for the application. - * * @var array */ protected $listen = [ - Registered::class => [ - SendEmailVerificationNotification::class, + ConponCallback::class => [ + ConponCallbackListener::class, ], ]; /** * Register any events for your application. - * * @return void */ public function boot() @@ -31,4 +29,5 @@ class EventServiceProvider extends ServiceProvider // } + } diff --git a/packages/coupon/src/Action/ysd/YsdVerification.php b/packages/coupon/src/Action/ysd/YsdVerification.php index 5526b28..bdc2cb1 100644 --- a/packages/coupon/src/Action/ysd/YsdVerification.php +++ b/packages/coupon/src/Action/ysd/YsdVerification.php @@ -2,6 +2,7 @@ namespace XuanChen\Coupon\Action\ysd; +use App\Events\ConponCallback; use App\Models\ActivityCoupon; use App\Models\Coupon; use Illuminate\Support\Facades\DB; @@ -30,6 +31,7 @@ class YsdVerification extends Init $this->query_coupon = (new YsdQuery)->setOutletId($this->outletId) ->setCode($this->redemptionCode) ->start(); + if (is_string($this->query_coupon)) { return $this->query_coupon; } @@ -74,6 +76,8 @@ class YsdVerification extends Init $this->coupon->profit(); DB::commit(); + event(new ConponCallback($this->query_coupon)); + return $resdata; } catch (Exception $e) { DB::rollback(); @@ -115,10 +119,7 @@ class YsdVerification extends Init } $rule_code = $this->query_coupon->activity->rule->code; - info($rule_code); - $code = $this->user->code->where('code', $rule_code)->first(); - info($this->user->code); - info($code); + $code = $this->user->code->where('code', $rule_code)->first(); if (!$code) { return "核销失败,您没有权限使用此卡券优惠活动。";