处理红包使用后未扣除的问题

This commit is contained in:
lewis 2024-01-22 00:17:21 +08:00
parent 1318f48558
commit 641f53ec6e
2 changed files with 27 additions and 5 deletions

View File

@ -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));
}
}
/**
* 扣减红包余额
* @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('红包余额更新出错');
}
}
}

View File

@ -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);
}