From 60b151802827a09e69543a6740f928609415d2f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=84=E5=B0=98?= <122383162@qq.com> Date: Fri, 21 Aug 2020 15:45:30 +0800 Subject: [PATCH] =?UTF-8?q?'=E8=B0=83=E6=95=B4=E4=BA=86=E4=B8=80=E4=BA=9Bb?= =?UTF-8?q?ug'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Coupon/IndexController.php | 16 ++++++---- .../Controllers/Finance/IndexController.php | 2 ++ app/Admin/Controllers/Log/IndexController.php | 6 ++-- .../Controllers/User/IndexController.php | 5 +-- app/Api/Controllers/UserController.php | 8 +++-- app/Http/Controllers/TestController.php | 23 +++++++++++--- app/Listeners/ConponCallbackListener.php | 8 ++++- app/Models/Activity.php | 5 +++ app/Models/Coupon.php | 1 + packages/coupon/src/Action/Init.php | 31 ++++++++++++++----- packages/coupon/src/Action/PinganAction.php | 1 + packages/coupon/src/Action/YsdAction.php | 12 +++---- .../coupon/src/Action/pingan/Verification.php | 1 + packages/coupon/src/Action/ysd/YsdGrant.php | 4 +++ .../coupon/src/Action/ysd/YsdVerification.php | 2 ++ packages/coupon/src/Coupon.php | 13 +++++--- 16 files changed, 103 insertions(+), 35 deletions(-) diff --git a/app/Admin/Controllers/Coupon/IndexController.php b/app/Admin/Controllers/Coupon/IndexController.php index 36fe1c2..1e69a82 100644 --- a/app/Admin/Controllers/Coupon/IndexController.php +++ b/app/Admin/Controllers/Coupon/IndexController.php @@ -3,6 +3,7 @@ namespace App\Admin\Controllers\Coupon; use App\Admin\Exporters\CouponExport; +use App\Models\ActivityRule; use App\Models\Coupon; use App\Models\User; use Encore\Admin\Controllers\AdminController; @@ -43,12 +44,7 @@ class IndexController extends AdminController ->get() ->pluck('nickname', 'id'); $filter->equal('user_id', '渠道')->select($users); - $filter->equal('thirdPartyGoodsId', '优惠政策')->select([ - 'YSD-full100-10' => '100减10元', - 'YSD-full100-25' => '100减25元', - 'YSD-full100-50' => '100减50元', - 'YSD-full200-100' => '200减100元', - ]); + $filter->equal('thirdPartyGoodsId', '优惠政策')->select(ActivityRule::pluck('title', 'code')); }); $filter->column(1 / 2, function ($filter) { $filter->like('redemptionCode', '平安券编号'); @@ -59,6 +55,8 @@ class IndexController extends AdminController }); }); }, '网点名称'); + + $filter->equal('type', '类型')->select(Coupon::TYPES); }); }); @@ -66,6 +64,12 @@ class IndexController extends AdminController $grid->column('渠道')->display(function () { return $this->user->nickname; }); + $grid->column('type', '类型') + ->using(Coupon::TYPES) + ->label([ + '1' => 'info', + '2' => 'success', + ]); $grid->column('网点名称/编号')->display(function () { return $this->outlet ? $this->outlet->nickname : $this->outletId; diff --git a/app/Admin/Controllers/Finance/IndexController.php b/app/Admin/Controllers/Finance/IndexController.php index 650bdea..b89b41d 100644 --- a/app/Admin/Controllers/Finance/IndexController.php +++ b/app/Admin/Controllers/Finance/IndexController.php @@ -25,6 +25,7 @@ class IndexController extends AdminController protected function grid() { $grid = new Grid(new Coupon); + $grid->model()->where('profit', '>', 0); $grid->disableCreateButton(); $grid->disableBatchActions(false); @@ -62,6 +63,7 @@ class IndexController extends AdminController ->where('type', 'pingan') ->get() ->pluck('nickname', 'id'); + $filter->equal('user_id', '渠道')->select($users); }); $filter->column(1 / 2, function ($filter) { diff --git a/app/Admin/Controllers/Log/IndexController.php b/app/Admin/Controllers/Log/IndexController.php index c7f1cb3..41cbef0 100644 --- a/app/Admin/Controllers/Log/IndexController.php +++ b/app/Admin/Controllers/Log/IndexController.php @@ -15,7 +15,7 @@ class IndexController extends AdminController /** * Notes: * @Author: - * @Date: 2019/9/18 14:50 + * @Date : 2019/9/18 14:50 * @return Grid */ protected function grid() @@ -59,6 +59,7 @@ class IndexController extends AdminController unset($in_source['json']); unset($in_source['query']['merchantSign']); unset($in_source['query']['merchantCert']); + return $in_source; }); // $grid->column('out_source', '返回信息'); @@ -72,7 +73,8 @@ class IndexController extends AdminController unset($out_source['merchantCert']); unset($out_source['serverCert']); unset($out_source['serverSign']); - unset($out_source['data']); + + // unset($out_source['data']); return $out_source; }); $grid->column('created_at', '提交时间'); diff --git a/app/Admin/Controllers/User/IndexController.php b/app/Admin/Controllers/User/IndexController.php index 2700899..1945126 100644 --- a/app/Admin/Controllers/User/IndexController.php +++ b/app/Admin/Controllers/User/IndexController.php @@ -201,7 +201,7 @@ class IndexController extends AdminController $form->text('PaOutletId', '平安网点id'); $form->select('type', '项目') - ->options(['pingan' => '平安券', 'wo' => '沃支付']) + ->options(['pingan' => '平安券和自有券', 'wo' => '沃支付']) ->load('parent_id', '/admin/user/parent') ->required(); @@ -224,7 +224,8 @@ class IndexController extends AdminController } else { return 0; } - }); + }) + ->help('未选择隶属渠道创建渠道账号,选择隶属渠道创建网点账号'); $form->select('province_id', '行政省份') ->options($province) diff --git a/app/Api/Controllers/UserController.php b/app/Api/Controllers/UserController.php index 19105bf..26e29d8 100644 --- a/app/Api/Controllers/UserController.php +++ b/app/Api/Controllers/UserController.php @@ -41,7 +41,7 @@ class UserController extends Controller { $inputdata = $request->all(); $res = $this->checkSign($request); - + $inputdata['jiemi'] = $res; $log = $this->createLog($request->url(), 'POST', $inputdata, 'grant'); //添加日志 @@ -166,10 +166,12 @@ class UserController extends Controller 'redemptionCode' => 'required', 'total' => 'required', 'outletId' => 'required', + 'orderid' => 'nullable|min:10', ], [ 'redemptionCode.required' => '缺少卡券兑换码', 'total.required' => '缺少订单总额', 'outletId.required' => '缺少网点id', + 'orderid.min' => '订单id长度不能超过100个字符', ]); if ($validator->fails()) { @@ -179,10 +181,12 @@ class UserController extends Controller $redemptionCode = $res['redemptionCode'] ?? ''; //'915400693355'; $total = $res['total'] ?? ''; //订单总额; $outletId = $res['outletId'] ?? ''; //网点id; + $orderid = $res['orderid'] ?? ''; //订单id; + $redemptionCode = trim($redemptionCode); $outletId = trim($outletId); - $coupon = Coupon::Redemption($this->user, $redemptionCode, $total, $outletId); + $coupon = Coupon::Redemption($this->user, $redemptionCode, $total, $outletId, $orderid); if (is_string($coupon)) { return $this->error($coupon, $log); } diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php index d214c35..6a836b9 100644 --- a/app/Http/Controllers/TestController.php +++ b/app/Http/Controllers/TestController.php @@ -142,14 +142,27 @@ class TestController */ public function checkcoupon(Request $request) { + $user_id = $request->user_id; + + $this->user = User::find($user_id); + + $data = $this->jiami([ + 'redemptionCode' => $request->redemptionCode, + 'total' => $request->total, + 'outletId' => $request->outletId, + 'orderid' => $request->orderid, + ]); + + $url = 'http://pac.ysd-bs.com/api/V1/user/freezecoupon'; + $res = $this->http($data, $url); + + return $res; $redemptionCode = $request->redemptionCode; $total = $request->total; $outletId = $request->outletId; - $user_id = $request->user_id; - $this->user = User::find($user_id); - - $res = Coupon::Redemption($this->user, $redemptionCode, $total, $outletId); + $orderid = $request->orderid ?? ''; + $res = Coupon::Redemption($this->user, $redemptionCode, $total, $outletId, $orderid); if (is_string($res)) { return $this->error($res); @@ -196,7 +209,7 @@ class TestController public function jiemi($value) { $iv = substr($this->user->des3key, 0, 8); - $ret = openssl_decrypt($value, 'DES-EDE3-CBC', $this->user->des3key, 0, $iv); + $ret = openssl_decrypt($value, 'DES - EDE3 - CBC', $this->user->des3key, 0, $iv); if (false === $ret) { return openssl_error_string(); } diff --git a/app/Listeners/ConponCallbackListener.php b/app/Listeners/ConponCallbackListener.php index d7fde97..909f4d4 100644 --- a/app/Listeners/ConponCallbackListener.php +++ b/app/Listeners/ConponCallbackListener.php @@ -37,6 +37,8 @@ class ConponCallbackListener implements ShouldQueue 'url' => $user->callback, ]; + $error = false; + if ($response->getStatusCode() == 200) { $body = $response->getBody(); $result = json_decode($body->getContents(), true); @@ -49,9 +51,13 @@ class ConponCallbackListener implements ShouldQueue $data['status'] = 0; $data['source'] = ''; $data['remark'] = '接口错误'; + $error = true; } - ActivityCouponLog::create($data); + + if ($error) { + throw new RuntimeException($data['remark']); + } } } diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 7ad1618..6c477c3 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -90,6 +90,11 @@ class Activity extends Model } + public function canGrant() + { + return $this->status; + } + //发券 public function grant($mobile, $outletId = null) { diff --git a/app/Models/Coupon.php b/app/Models/Coupon.php index 07968d4..9c58368 100644 --- a/app/Models/Coupon.php +++ b/app/Models/Coupon.php @@ -21,6 +21,7 @@ class Coupon extends Model self::TYPE_YSD => '自有券', ]; + //状态 public function getStatusTextAttribute() { switch ($this->status) { diff --git a/packages/coupon/src/Action/Init.php b/packages/coupon/src/Action/Init.php index 26ccb52..3e2e2ca 100644 --- a/packages/coupon/src/Action/Init.php +++ b/packages/coupon/src/Action/Init.php @@ -32,6 +32,9 @@ class Init //查询返回卡券信息 public $query_coupon; + //订单id + public $orderid; + //设置渠道 public function setUser($user) { @@ -40,6 +43,14 @@ class Init return $this; } + //设置渠道 + public function setOrderId($orderid) + { + $this->orderid = $orderid; + + return $this; + } + //设置核销码 public function setCode($redemptionCode) { @@ -125,13 +136,19 @@ class Init //统一门店 相同金额 3分钟之内看作是一笔订单 public function CheckCount() { - //排除本时生活渠道 - - $check_count = Coupon::where('outletId', $this->outletId) - ->where('total', $this->total) - ->where('status', 2) - ->where('created_at', '>=', now()->subMinutes(3)->format('Y-m-d H:i:s')) - ->count(); + if ($this->orderid) { + $check_count = Coupon::where('orderid', $this->orderid) + ->where('outletId', $this->outletId) + ->where('status', 2) + ->where('created_at', '>=', now()->subMinutes(3)->format('Y-m-d H:i:s')) + ->count(); + } else { + $check_count = Coupon::where('outletId', $this->outletId) + ->where('total', $this->total) + ->where('status', 2) + ->where('created_at', '>=', now()->subMinutes(3)->format('Y-m-d H:i:s')) + ->count(); + } $count = floor($this->total / 100); diff --git a/packages/coupon/src/Action/PinganAction.php b/packages/coupon/src/Action/PinganAction.php index 983fb4c..8dc68b1 100644 --- a/packages/coupon/src/Action/PinganAction.php +++ b/packages/coupon/src/Action/PinganAction.php @@ -21,6 +21,7 @@ class PinganAction extends Init implements CouponContracts ->setUser($this->user) ->setOutletId($this->outletId) ->setTotal($this->total) + ->setOrderId($this->orderid) ->start(); } diff --git a/packages/coupon/src/Action/YsdAction.php b/packages/coupon/src/Action/YsdAction.php index d56e910..7f1341c 100644 --- a/packages/coupon/src/Action/YsdAction.php +++ b/packages/coupon/src/Action/YsdAction.php @@ -79,12 +79,12 @@ class YsdAction extends Init implements CouponContracts */ public function start() { - return $res = (new YsdVerification) - ->setCode($this->redemptionCode) - ->setUser($this->user) - ->setOutletId($this->outletId) - ->setTotal($this->total) - ->start(); + return $res = (new YsdVerification)->setCode($this->redemptionCode) + ->setUser($this->user) + ->setOutletId($this->outletId) + ->setTotal($this->total) + ->setOrderId($this->orderid) + ->start(); } } diff --git a/packages/coupon/src/Action/pingan/Verification.php b/packages/coupon/src/Action/pingan/Verification.php index 59485eb..28b02a8 100644 --- a/packages/coupon/src/Action/pingan/Verification.php +++ b/packages/coupon/src/Action/pingan/Verification.php @@ -116,6 +116,7 @@ class Verification extends PingAnInit 'user_id' => $this->user->id, 'type' => Coupon::TYPE_PINGAN, 'outletId' => $this->outletId, + 'orderid' => $this->orderid, 'PaOutletId' => $this->queryData['PaOutletId'], 'redemptionCode' => $this->redemptionCode, 'productId' => $this->queryData['productId'], diff --git a/packages/coupon/src/Action/ysd/YsdGrant.php b/packages/coupon/src/Action/ysd/YsdGrant.php index b72c615..1c3b452 100644 --- a/packages/coupon/src/Action/ysd/YsdGrant.php +++ b/packages/coupon/src/Action/ysd/YsdGrant.php @@ -18,6 +18,10 @@ class YsdGrant extends Init return '发券失败,没有找到这个活动。'; } + if (!$activity->status) { + return '发券失败,活动已经关闭。'; + } + $outlet = User::where('outlet_id', $this->outletId)->first(); if (!$outlet) { return '发券失败,未查询到此网点信息。'; diff --git a/packages/coupon/src/Action/ysd/YsdVerification.php b/packages/coupon/src/Action/ysd/YsdVerification.php index ecf9c44..d1f85de 100644 --- a/packages/coupon/src/Action/ysd/YsdVerification.php +++ b/packages/coupon/src/Action/ysd/YsdVerification.php @@ -166,6 +166,7 @@ class YsdVerification extends Init 'user_id' => $this->user->id, 'type' => Coupon::TYPE_YSD, 'outletId' => $this->outletId, + 'orderid' => $this->orderid, 'PaOutletId' => '', 'redemptionCode' => $this->redemptionCode, 'thirdPartyGoodsId' => $this->query_coupon->activity->rule->code, @@ -179,6 +180,7 @@ class YsdVerification extends Init ]; $this->coupon = Coupon::create($couponData); + DB::commit(); return $this->coupon; diff --git a/packages/coupon/src/Coupon.php b/packages/coupon/src/Coupon.php index 5a0af74..12baac4 100644 --- a/packages/coupon/src/Coupon.php +++ b/packages/coupon/src/Coupon.php @@ -107,13 +107,17 @@ class Coupon } /** - * Notes: 核销卡券 + * Notes: description * @Author: 玄尘 - * @Date : 2020/6/29 15:24 - * @param $user + * @Date : 2020/8/21 13:33 + * @param \App\Models\User $user 渠道 + * @param string $redemptionCode 要核销的券码 + * @param float $total 订单金额 + * @param string $outletId 网点id + * @param string $orderid 订单id * @return string */ - public static function Redemption($user, $redemptionCode, $total, $outletId) + public static function Redemption(User $user, string $redemptionCode, float $total, string $outletId, string $orderid = '') { try { @@ -126,6 +130,7 @@ class Coupon ->setCode($redemptionCode) ->setTotal($total) ->setOutletId($outletId) + ->setOrderId($orderid) ->start(); } catch (\Exception $e) {