From da9d0d258f9853c797b5aa34d6f86a6b64137141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=84=E5=B0=98?= <122383162@qq.com> Date: Mon, 24 Aug 2020 08:35:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Coupon/IndexController.php | 66 +- .../coupon/src/Action/pingan/Verification.php | 602 +++++++++--------- 2 files changed, 334 insertions(+), 334 deletions(-) diff --git a/app/Admin/Controllers/Coupon/IndexController.php b/app/Admin/Controllers/Coupon/IndexController.php index 1a33a86..bef4e56 100644 --- a/app/Admin/Controllers/Coupon/IndexController.php +++ b/app/Admin/Controllers/Coupon/IndexController.php @@ -36,12 +36,12 @@ class IndexController extends AdminController ]); $filter->between('created_at', '核销时间')->datetime(); $users = User::query() - ->whereHas('identity', function ($query) { - $query->where('identity_id', 1); - }) - ->where('type', 'pingan') - ->get() - ->pluck('nickname', 'id'); + ->whereHas('identity', function ($query) { + $query->where('identity_id', 1); + }) + ->where('type', 'pingan') + ->get() + ->pluck('nickname', 'id'); $filter->equal('user_id', '渠道')->select($users); $filter->equal('thirdPartyGoodsId', '优惠政策')->select(ActivityRule::pluck('title', 'code')); }); @@ -64,11 +64,11 @@ class IndexController extends AdminController return $this->user->nickname; }); $grid->column('type', '类型') - ->using(Coupon::TYPES) - ->label([ - '1' => 'info', - '2' => 'success', - ]); + ->using(Coupon::TYPES) + ->label([ + '1' => 'info', + '2' => 'success', + ]); $grid->column('网点名称/编号')->display(function () { return $this->outlet ? $this->outlet->nickname : $this->outletId; @@ -118,13 +118,13 @@ class IndexController extends AdminController $pass = collect($pass); return '  ' - . '  ' - . '  ' - . '  ' - . '  ' - . '  '; + . '  ' + . '  ' + . '  ' + . '  ' + . '  '; }); $grid->disableExport(false); @@ -162,30 +162,30 @@ class IndexController extends AdminController $form->decimal('recommend', '推荐人佣金')->required()->default(0); $form->number('hots', '热度/亲密度')->required()->default('1'); $form->text('times', '显示时间') - ->default('200') - ->required() - ->help('礼物显示时间,毫秒'); + ->default('200') + ->required() + ->help('礼物显示时间,毫秒'); $form->textarea('description', '礼物说明'); $form->image('cover', '封面') - ->rules(function ($form) { - if ($form->model()->cover != '') { - return 'nullable|image'; - } else { - return 'required'; - } - }) - ->move('images/' . date('Y/m/d')) - ->removable() - ->uniqueName(); + ->rules(function ($form) { + if ($form->model()->cover != '') { + return 'nullable|image'; + } else { + return 'required'; + } + }) + ->move('images/' . date('Y/m/d')) + ->removable() + ->uniqueName(); $form->switch('status', '状态')->default(1); $form->decimal('sort', '排序')->default(0)->help('序号越大越靠前'); $form->saving(function ($form) { - $sum = (int) $form->pv + (int) $form->bonus + (int) $form->recommend; - if ((int) $sum > $form->price) { + $sum = (int)$form->pv + (int)$form->bonus + (int)$form->recommend; + if ((int)$sum > $form->price) { admin_warning('配置错误', 'PV+佣金+推荐人佣金不能超过礼物价值'); throw new \Exception('配置错误,PV+佣金+推荐人佣金不能超过礼物价值'); } diff --git a/packages/coupon/src/Action/pingan/Verification.php b/packages/coupon/src/Action/pingan/Verification.php index 28b02a8..56166ab 100644 --- a/packages/coupon/src/Action/pingan/Verification.php +++ b/packages/coupon/src/Action/pingan/Verification.php @@ -1,301 +1,301 @@ -HasCheck(); - if ($res !== false) { - return $res; - } - - //检查可核销次数 - $ret = $this->CheckCount(); - if ($ret !== true) { - return $ret; - } - - //查询卡券信息 - $this->query_coupon = (new Query)->setOutletId($this->outletId) - ->setCode($this->redemptionCode) - ->start(); - if (is_string($this->query_coupon)) { - return $this->query_coupon; - } - - //校验卡券 - $ticket = $this->checkCoupon(); - if (!is_array($ticket)) { - return $ticket; - } - - //增加核销记录 - $coupon = $this->AddCoupon(); - if (is_string($coupon)) { - return $coupon; - } - - try { - $params = [ - 'couponNo' => $coupon->redemptionCode, - 'partnerOrderId' => date('ymdHis') . sprintf("%0" . strlen(999999) . "d", mt_rand(0, 999999)), - 'outletId' => $coupon->PaOutletId, - 'productId' => $coupon->productId, - 'timestamp' => $this->getMsecTime(), - ]; - - $url = $this->baseUri . 'partner/redemption'; - $str = $this->encrypt($params); - $res = $this->getPingAnData($url, [], ['data' => $str]); - - if (!is_array($res)) { - $coupon->remark = $res; - $coupon->status = 3; - $coupon->save(); - throw new \Exception($res); - } - - if ($res['code'] != 200) { - $coupon->remark = $res['code'] . '--' . $res['message']; - $coupon->status = 3; - $coupon->save(); - throw new \Exception($res['message']); - } - - $data = $res['data']; - - $coupon->remark = $data['message']; - $coupon->status = ($data['status'] == 1) ? 2 : 3; - $coupon->save(); - - //返回的数据 - $resdata = [ - 'price' => $coupon->price, - 'name' => $coupon->couponName, - 'total' => $coupon->total, - ]; - - //核销成功 执行分润 - $coupon->profit(); - - return $resdata; - - } catch (Exception $e) { - $coupon->status = 3; - $coupon->remark = '核销失败 ' . $e->getMessage(); - $coupon->save(); - - return $coupon->remark; - } - - } - - /** - * Notes: 如可核销记录 - * @Author: 玄尘 - * @Date : 2020/7/21 15:03 - * @return string - */ - public function AddCoupon() - { - try { - $couponData = [ - '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'], - 'thirdPartyGoodsId' => $this->queryData['thirdPartyGoodsId'], - 'couponName' => $this->query_coupon['couponName'], - 'price' => $this->ticket['price'], - 'total' => $this->total, - 'profit' => $this->ticket['profit'], - 'status' => 0, - 'startTime' => $this->query_coupon['startTime'], - 'endTime' => $this->query_coupon['endTime'], - ]; - - return $coupon = Coupon::create($couponData); - - } catch (Exception $e) { - return $e->getMessage(); - } - - } - - /** - * Notes: 检查卡券信息 - * @Author: 玄尘 - * @Date : 2020/6/29 16:40 - * @return string - */ - public function checkCoupon() - { - - //检查卡券是否已被核销 - if ($this->query_coupon['status'] > 0) { - if (isset(config('pingan.coupon_status')[$this->query_coupon['status']])) { - return '核销失败,平安券' . config('pingan.coupon_status')[$this->query_coupon['status']]; - } - - return '核销失败,平安券不可用。'; - } - - $startTime = Carbon::parse($this->query_coupon['startTime']); - $endTime = Carbon::parse($this->query_coupon['endTime']); - $now = now(); - - if ($startTime->gt($now)) { - return '核销失败,平安券未开始使用。'; - } - - if ($now->gt($endTime)) { - return '核销失败,平安券已过期。'; - } - - //查找适配的商品id 和 网点id - $pinganData = $this->getPinganProduct(); - - if (is_string($pinganData)) { - return $pinganData; - } - - //获取相关优惠信息 - return $this->checkCode(); - - } - - /** - * 校验平安券编号 - * @return array|string [type] [description] - */ - public function checkCode() - { - $code = $this->user->code->where('code', $this->queryData['thirdPartyGoodsId'])->first(); - if (!$code) { - return "核销失败,未找到此项平安券规则,请联系管理人员检查渠道配置。"; - } - - $ticket = explode('-', $this->queryData['thirdPartyGoodsId']); - - if (!is_array($ticket) || count($ticket) != 3) { - return "核销失败,平安券规则格式不正确。"; - } - - $full = $ticket[1]; //full100 - $price = $ticket[2]; - preg_match('/\d+/', $full, $result); - - if (empty($result) || !is_array($result)) { - return "核销失败,平安券规则格式不正确。"; - } - - if (!is_numeric($this->total)) { - return "核销失败,订单金额必须是数字"; - } - if ($result[0] > $this->total) { - return '核销失败,订单金额不足,平安券不可使用。'; - } - - $this->ticket = [ - 'total' => $result[0], - 'price' => $price, - 'profit' => $code->profit, - ]; - - return $this->ticket; - } - - /** - * 查找平安商品id - * @author 玄尘 2020-04-04 - * @return array|string [type] [description] - */ - public function getPinganProduct() - { - //查询网点是否存在 - $outlet = User::where('outlet_id', $this->outletId)->first(); - - if (!$outlet) { - return '核销失败,网点编号错误,未查询到网点信息'; - } - - $PaOutletId = $outlet->PaOutletId; - $outlet_id = $outlet->outlet_id; - $profitOfferItemVersion = $this->query_coupon['profitOfferItemVersion']; - - if (!$PaOutletId && $profitOfferItemVersion != 1) { - return '核销失败,参数错误,渠道信息缺少平安网点id'; - } - - $productItemList = $this->query_coupon['productItemList']; - - if (!is_array($productItemList) || !is_array($productItemList[0])) { - return '核销失败,平安券数据有误,可能是未配置网点。'; - } - - //循环查找 - $first = ''; - foreach ($productItemList as $key => $item) { - $productId = $item['productId']; - $thirdPartyGoodsId = $item['thirdPartyGoodsId']; - $outletList = $item['outletList']; - if (!is_array($outletList) || !is_array($outletList[0])) { - return '核销失败,网点信息有误!请检查平安券配置信息。'; - break; - } - - $outletList = collect($outletList); - //判断是新版还是旧版 - if ($profitOfferItemVersion) { - //新版通过第三方查询 - $first = $outletList->firstWhere('thirdOutletNo', $outlet_id); - - if ($first) { - break; - } - } else { - //旧版通过平安网点查询 - $first = $outletList->firstWhere('outletNo', $PaOutletId); - if ($first) { - break; - } - } - } - - if (!$first) { - return '核销失败,未找到可用网点信息。'; - } - - if (!$thirdPartyGoodsId) { - return '核销失败,平安券编号规则有误。'; - } - - if (!$productId) { - return '核销失败,未查询到平安券商品id。'; - } - - return $this->queryData = [ - 'thirdPartyGoodsId' => $thirdPartyGoodsId, - 'productId' => $productId, - 'PaOutletId' => $first['outletNo'], - ]; - - } - -} \ No newline at end of file +HasCheck(); + if ($res !== false) { + return $res; + } + + //检查可核销次数 + $ret = $this->CheckCount(); + if ($ret !== true) { + return $ret; + } + + //查询卡券信息 + $this->query_coupon = (new Query)->setOutletId($this->outletId) + ->setCode($this->redemptionCode) + ->start(); + if (is_string($this->query_coupon)) { + return $this->query_coupon; + } + + //校验卡券 + $ticket = $this->checkCoupon(); + if (!is_array($ticket)) { + return $ticket; + } + + //增加核销记录 + $coupon = $this->AddCoupon(); + if (is_string($coupon)) { + return $coupon; + } + + try { + $params = [ + 'couponNo' => $coupon->redemptionCode, + 'partnerOrderId' => date('ymdHis') . sprintf("%0" . strlen(999999) . "d", mt_rand(0, 999999)), + 'outletId' => $coupon->PaOutletId, + 'productId' => $coupon->productId, + 'timestamp' => $this->getMsecTime(), + ]; + + $url = $this->baseUri . 'partner/redemption'; + $str = $this->encrypt($params); + $res = $this->getPingAnData($url, [], ['data' => $str]); + + if (!is_array($res)) { + $coupon->remark = $res; + $coupon->status = 3; + $coupon->save(); + throw new \Exception($res); + } + + if ($res['code'] != 200) { + $coupon->remark = $res['code'] . '--' . $res['message']; + $coupon->status = 3; + $coupon->save(); + throw new \Exception($res['message']); + } + + $data = $res['data']; + + $coupon->remark = $data['message']; + $coupon->status = ($data['status'] == 1) ? 2 : 3; + $coupon->save(); + + //返回的数据 + $resdata = [ + 'price' => $coupon->price, + 'name' => $coupon->couponName, + 'total' => $coupon->total, + ]; + + //核销成功 执行分润 + $coupon->profit(); + + return $resdata; + + } catch (Exception $e) { + $coupon->status = 3; + $coupon->remark = '核销失败 ' . $e->getMessage(); + $coupon->save(); + + return $coupon->remark; + } + + } + + /** + * Notes: 如可核销记录 + * @Author: 玄尘 + * @Date : 2020/7/21 15:03 + * @return string + */ + public function AddCoupon() + { + try { + $couponData = [ + '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'], + 'thirdPartyGoodsId' => $this->queryData['thirdPartyGoodsId'], + 'couponName' => $this->query_coupon['couponName'], + 'price' => $this->ticket['price'], + 'total' => $this->total, + 'profit' => $this->ticket['profit'], + 'status' => 0, + 'startTime' => $this->query_coupon['startTime'], + 'endTime' => $this->query_coupon['endTime'], + ]; + + return $coupon = Coupon::create($couponData); + + } catch (Exception $e) { + return $e->getMessage(); + } + + } + + /** + * Notes: 检查卡券信息 + * @Author: 玄尘 + * @Date : 2020/6/29 16:40 + * @return string + */ + public function checkCoupon() + { + + //检查卡券是否已被核销 + if ($this->query_coupon['status'] > 0) { + if (isset(config('pingan.coupon_status')[$this->query_coupon['status']])) { + return '核销失败,平安券' . config('pingan.coupon_status')[$this->query_coupon['status']]; + } + + return '核销失败,平安券不可用。'; + } + + $startTime = Carbon::parse($this->query_coupon['startTime']); + $endTime = Carbon::parse($this->query_coupon['endTime']); + $now = now(); + + if ($startTime->gt($now)) { + return '核销失败,平安券未开始使用。'; + } + + if ($now->gt($endTime)) { + return '核销失败,平安券已过期。'; + } + + //查找适配的商品id 和 网点id + $pinganData = $this->getPinganProduct(); + + if (is_string($pinganData)) { + return $pinganData; + } + + //获取相关优惠信息 + return $this->checkCode(); + + } + + /** + * 校验平安券编号 + * @return array|string [type] [description] + */ + public function checkCode() + { + $code = $this->user->code->where('code', $this->queryData['thirdPartyGoodsId'])->first(); + if (!$code) { + return "核销失败,未找到此项平安券规则,请联系管理人员检查渠道配置。"; + } + + $ticket = explode('-', $this->queryData['thirdPartyGoodsId']); + + if (!is_array($ticket) || count($ticket) != 3) { + return "核销失败,平安券规则格式不正确。"; + } + + $full = $ticket[1]; //full100 + $price = $ticket[2]; + preg_match('/\d+/', $full, $result); + + if (empty($result) || !is_array($result)) { + return "核销失败,平安券规则格式不正确。"; + } + + if (!is_numeric($this->total)) { + return "核销失败,订单金额必须是数字"; + } + if ($result[0] > $this->total) { + return '核销失败,订单金额不足,平安券不可使用。'; + } + + $this->ticket = [ + 'total' => $result[0], + 'price' => $price, + 'profit' => $code->profit, + ]; + + return $this->ticket; + } + + /** + * 查找平安商品id + * @author 玄尘 2020-04-04 + * @return array|string [type] [description] + */ + public function getPinganProduct() + { + //查询网点是否存在 + $outlet = User::where('outlet_id', $this->outletId)->first(); + + if (!$outlet) { + return '核销失败,网点编号错误,未查询到网点信息'; + } + + $PaOutletId = $outlet->PaOutletId; + $outlet_id = $outlet->outlet_id; + $profitOfferItemVersion = $this->query_coupon['profitOfferItemVersion']; + + if (!$PaOutletId && $profitOfferItemVersion != 1) { + return '核销失败,参数错误,渠道信息缺少平安网点id'; + } + + $productItemList = $this->query_coupon['productItemList']; + + if (!is_array($productItemList) || !is_array($productItemList[0])) { + return '核销失败,平安券数据有误,可能是未配置网点。'; + } + + //循环查找 + $first = ''; + foreach ($productItemList as $key => $item) { + $productId = $item['productId']; + $thirdPartyGoodsId = $item['thirdPartyGoodsId']; + $outletList = $item['outletList']; + if (!is_array($outletList) || !is_array($outletList[0])) { + return '核销失败,网点信息有误!请检查平安券配置信息。'; + break; + } + + $outletList = collect($outletList); + //判断是新版还是旧版 + if ($profitOfferItemVersion) { + //新版通过第三方查询 + $first = $outletList->firstWhere('thirdOutletNo', $outlet_id); + + if ($first) { + break; + } + } else { + //旧版通过平安网点查询 + $first = $outletList->firstWhere('outletNo', $PaOutletId); + if ($first) { + break; + } + } + } + + if (!$first) { + return '核销失败,未找到可用网点信息。'; + } + + if (!$thirdPartyGoodsId) { + return '核销失败,平安券编号规则有误。'; + } + + if (!$productId) { + return '核销失败,未查询到平安券商品id。'; + } + + return $this->queryData = [ + 'thirdPartyGoodsId' => $thirdPartyGoodsId, + 'productId' => $productId, + 'PaOutletId' => $first['outletNo'], + ]; + + } + +}