From 641f53ec6e61b1f34b9f3d3c836984cbf8558929 Mon Sep 17 00:00:00 2001 From: lewis <604446095@qq.com> Date: Mon, 22 Jan 2024 00:17:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E7=BA=A2=E5=8C=85=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=90=8E=E6=9C=AA=E6=89=A3=E9=99=A4=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consumption/StoreConsumptionUserDao.php | 29 ++++++++++++++++--- app/listener/paySuccess.php | 3 +- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/app/common/dao/store/consumption/StoreConsumptionUserDao.php b/app/common/dao/store/consumption/StoreConsumptionUserDao.php index 698f5f5e..58beef71 100644 --- a/app/common/dao/store/consumption/StoreConsumptionUserDao.php +++ b/app/common/dao/store/consumption/StoreConsumptionUserDao.php @@ -65,7 +65,7 @@ class StoreConsumptionUserDao extends BaseDao $orderValidAmount = min($groupOrder['pay_price'], $this->maxAmount); $scope = $this->getScope($consumption, $orderValidAmount); //用户没有达到 消费金活动 任一档次 - if ($scope['rate'] <= 0) { + if (empty($scope) || $scope['rate'] <= 0) { return false; } Db::startTrans(); @@ -198,6 +198,7 @@ class StoreConsumptionUserDao extends BaseDao */ public function send($consumption, float $rate, int $userId, string $groupOrderIds, float $amount, $status = -2, $type = 1) { + $title = $type == StoreConsumptionUser::TYPE_TWO ? '现金抵扣红包' : '无门槛实物通用红包'; $model = StoreConsumptionUser::where('uid', $userId)->where('type', StoreConsumptionUser::TYPE_TWO)->find(); $couponPrice = bcmul($amount, $rate, 2); if (!empty($model) && $model['type'] == $type) { @@ -207,7 +208,7 @@ class StoreConsumptionUserDao extends BaseDao $model = new StoreConsumptionUser(); $model->coupon_id = $consumption['coupon_id']; $model->uid = $userId; - $model->coupon_title = $consumption['title']; + $model->coupon_title = $title; $model->order_id_set = $groupOrderIds; $model->coupon_price = $couponPrice; $model->balance = $model->coupon_price; @@ -221,7 +222,6 @@ class StoreConsumptionUserDao extends BaseDao if (!$model->save()) { throw new \Exception('发放失败'); } - $title = $type == StoreConsumptionUser::TYPE_TWO ? '现金抵扣红包' : '无门槛实物通用红包'; // 写入红包日志 /** @var $userBillRepository UserBillRepository */ $userBillRepository = app()->make(UserBillRepository::class); @@ -258,4 +258,25 @@ class StoreConsumptionUserDao extends BaseDao return strtotime('+1 year', strtotime($datetime)); } -} \ No newline at end of file + /** + * 扣减红包余额 + * @param $id + * @param $amount + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ + public function reduce($id, $amount) + { + $storeConsumptionUser = StoreConsumptionUser::where('coupon_user_id', $id)->find(); + if (empty($storeConsumptionUser) || $storeConsumptionUser->balance < $amount) { + throw new \Exception('红包余额不足'); + } + $balance = bcsub($storeConsumptionUser->balance, $amount, 2); + $storeConsumptionUser->balance = max($balance, 0); + if (!$storeConsumptionUser->save()) { + throw new \Exception('红包余额更新出错'); + } + } + +} diff --git a/app/listener/paySuccess.php b/app/listener/paySuccess.php index 2a856508..13df72d7 100644 --- a/app/listener/paySuccess.php +++ b/app/listener/paySuccess.php @@ -37,8 +37,9 @@ class paySuccess $orderList = $event['groupOrder']['orderList']; $storeConsumptionUserDao = new StoreConsumptionUserDao(); $storeConsumptionUserDao->check($event['groupOrder']['uid'], $event['groupOrder']['group_order_id']); + $storeConsumptionUserDao->reduce($event['groupOrder']['consumption_id'], $event['groupOrder']['consumption_money']); foreach ($orderList as $k => $order) { - // + // $StoreProcessing->AutomaticallyCreateOrders($order); $this->recordOrderAddr($order); }