$params['id'] ])->field('id,sn,status,order_amount,pay_status,pay_way,user_equity_id,user_id,order_terminal')->findOrEmpty()->toArray(); if(empty($order)){ self::setError('订单不存在'); return false; } if($order['status'] != 1 || $order['pay_status'] != 1){ self::setError('当前订单不支持退款'); return false; } if ($order['user_equity_id']) { //判断权益卡是否已使用 $used = UserEquityLog::where(['user_equity_id' => $order['user_equity_id'],'user_id' => $params['user_id']])->count(); if ($used) { self::setError('当前权益卡已使用,不支持退款'); return false; } //删除用户权益卡 $userEquity = UserEquity::where(['id' => $order['user_equity_id'],'user_id' => $params['user_id']])->findOrEmpty(); $userEquity->delete(); } //将用户订单状态更新为申请退款 GroupUserOrder::where('id',$order['id'])->update(['status' => 3,'refund_status' => 1]); // 生成退款记录 $recordSn = generate_sn(RefundRecord::class, 'sn'); $record = RefundRecord::create([ 'sn' => $recordSn, 'user_id' => $order['user_id'], 'order_id' => $order['id'], 'order_sn' => $order['sn'], 'order_type' => RefundEnum::ORDER_TYPE_GROUP, 'order_amount' => $order['order_amount'], 'refund_amount' => $order['order_amount'], 'refund_type' => RefundEnum::TYPE_ADMIN, 'transaction_id' => $order['transaction_id'] ?? '', 'refund_way' => RefundEnum::getRefundWayByPayWay($order['pay_way']), ]); // 退款 $result = RefundLogic::refund($order, $record['id'], $order['order_amount'], 1); if ($result !== true) { $resultMsg = RefundLogic::getError(); Log::write("拼团订单退款失败,订单号:{$order['sn']},原因:{$resultMsg}"); self::setError($resultMsg); return false; } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); Log::write("拼团订单退款失败:".$e->getMessage()); return false; } } }