diff --git a/app/Console/Commands/OrderRefundCommand.php b/app/Console/Commands/OrderRefundCommand.php index d1c0fc9d..a4fc1117 100644 --- a/app/Console/Commands/OrderRefundCommand.php +++ b/app/Console/Commands/OrderRefundCommand.php @@ -3,7 +3,7 @@ namespace App\Console\Commands; use App\Exceptions\BizException; -use App\Models\OrderRefundJob; +use App\Models\OrderRefundLog; use App\Services\WeChatPayService; use Illuminate\Console\Command; use Illuminate\Support\Str; @@ -32,21 +32,21 @@ class OrderRefundCommand extends Command */ public function handle() { - OrderRefundJob::pending()->chunkById(200, function ($jobs) { - foreach ($jobs as $job) { + OrderRefundLog::pending()->chunkById(200, function ($logs) { + foreach ($logs as $log) { try { - $method = 'refundBy'.Str::studly($job->order->pay_way); + $method = 'refundBy'.Str::studly($log->order->pay_way); if (! method_exists($this, $method)) { throw new BizException('退款方式暂不支持'); } - $this->{$method}($job); + $this->{$method}($log); } catch (Throwable $e) { report($e); - $job->update([ - 'status' => OrderRefundJob::STATUS_FAILED, + $log->update([ + 'status' => OrderRefundLog::STATUS_FAILED, 'failed_reason' => $e->getMessage(), ]); } @@ -59,26 +59,26 @@ class OrderRefundCommand extends Command /** * 微信支付退款 * - * @param \App\Models\OrderRefundJob $job + * @param \App\Models\OrderRefundLog $log * @return void */ - protected function refundByWxpay(OrderRefundJob $job) + protected function refundByWxpay(OrderRefundLog $log) { - $order = $job->order; + $order = $log->order; (new WeChatPayService())->refundByOutTradeNumber( $order->sn, - $job->sn, + $log->sn, $order->total_amount, - $job->amount, + $log->amount, [ - 'refund_desc' => $job->reason, + 'refund_desc' => $log->reason, 'notify_url' => url(route('wxpay.order_refund_notify', [], false), [], true), ] ); - $job->update([ - 'status' => OrderRefundJob::STATUS_SUCCESS, + $log->update([ + 'status' => OrderRefundLog::STATUS_SUCCESS, 'failed_reason' => null, ]); } @@ -86,13 +86,13 @@ class OrderRefundCommand extends Command /** * 现金支付退款 * - * @param \App\Models\OrderRefundJob $job + * @param \App\Models\OrderRefundLog $log * @return void */ - protected function refundByOffline(OrderRefundJob $job) + protected function refundByOffline(OrderRefundLog $log) { - $job->update([ - 'status' => OrderRefundJob::STATUS_SUCCESS, + $log->update([ + 'status' => OrderRefundLog::STATUS_SUCCESS, ]); } } diff --git a/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php b/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php index 8d1c66a3..998583ea 100644 --- a/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php +++ b/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php @@ -5,7 +5,7 @@ namespace App\Endpoint\Callback\Http\Controllers; use App\Events\OrderPaid; use App\Exceptions\BizException; use App\Models\Order; -use App\Models\OrderRefundJob; +use App\Models\OrderRefundLog; use App\Services\OrderService; use App\Services\WeChatPayService; use Illuminate\Database\Eloquent\ModelNotFoundException; @@ -74,10 +74,10 @@ class WeChatPayController extends Controller // 退款失败 if ($reqInfo['refund_status'] !== 'SUCCESS') { - $orderRefundJob = OrderRefundJob::where('sn', $reqInfo['out_refund_no'])->first(); + $log = OrderRefundLog::where('sn', $reqInfo['out_refund_no'])->first(); - $orderRefundJob?->update([ - 'status' => OrderRefundJob::STATUS_FAILED, + $log?->update([ + 'status' => OrderRefundLog::STATUS_FAILED, 'failed_reason' => $reqInfo['refund_status'] === 'CHANGE' ? '退款异常' : '退款关闭', ]); } diff --git a/app/Models/Order.php b/app/Models/Order.php index b4845f02..54eeb694 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -136,9 +136,9 @@ class Order extends Model /** * 属于此订单的退款任务 */ - public function refundJobs() + public function refundLogs() { - return $this->hasMany(OrderRefundJob::class); + return $this->hasMany(OrderRefundLog::class); } /** diff --git a/app/Models/OrderRefundJob.php b/app/Models/OrderRefundLog.php similarity index 60% rename from app/Models/OrderRefundJob.php rename to app/Models/OrderRefundLog.php index f75c59ec..85ddbbd2 100644 --- a/app/Models/OrderRefundJob.php +++ b/app/Models/OrderRefundLog.php @@ -4,11 +4,11 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; -class OrderRefundJob extends Model +class OrderRefundLog extends Model { - public const STATUS_PENDING = 0; // 待处理 - public const STATUS_SUCCESS = 5; // 退款成功 - public const STATUS_FAILED = 6; // 退款失败 + public const STATUS_PENDING = 0; + public const STATUS_SUCCESS = 4; + public const STATUS_FAILED = 5; /** * @var array @@ -31,7 +31,16 @@ class OrderRefundJob extends Model ]; /** - * 只查询待退款的任务 + * @var array + */ + protected $statusTexts = [ + self::STATUS_PENDING => '待处理', + self::STATUS_SUCCESS => '成功', + self::STATUS_FAILED => '失败', + ]; + + /** + * 只查询待退款的记录 */ public function scopePending($query) { @@ -39,7 +48,7 @@ class OrderRefundJob extends Model } /** - * 此退款任务所属的订单 + * 此退款记录所属的订单 */ public function order() { diff --git a/app/Services/AfterSaleService.php b/app/Services/AfterSaleService.php index 81f2db76..ea76249d 100644 --- a/app/Services/AfterSaleService.php +++ b/app/Services/AfterSaleService.php @@ -330,7 +330,7 @@ class AfterSaleService $order = $afterSale->order; if (in_array($afterSale->type, [AfterSale::TYPE_REFUND_AND_RETURN, AfterSale::TYPE_REFUND])) { //todo-执行实际退款操作; - $order->refundJobs()->create([ + $order->refundLogs()->create([ 'sn' => OrderHelper::serialNumber(), 'amount' => $afterSale->amount, 'reason' => '取消订单', diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index ba919811..1f3522f7 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -784,7 +784,7 @@ class OrderService } if ($order->isWaitShipping()) { - $order->refundJobs()->create([ + $order->refundLogs()->create([ 'sn' => OrderHelper::serialNumber(), 'amount' => $order->total_amount, 'reason' => '取消订单', diff --git a/database/migrations/2021_12_20_113756_create_order_refund_jobs_table.php b/database/migrations/2021_12_22_190137_create_order_refund_logs_table.php similarity index 76% rename from database/migrations/2021_12_20_113756_create_order_refund_jobs_table.php rename to database/migrations/2021_12_22_190137_create_order_refund_logs_table.php index 33d36213..0365a3a3 100644 --- a/database/migrations/2021_12_20_113756_create_order_refund_jobs_table.php +++ b/database/migrations/2021_12_22_190137_create_order_refund_logs_table.php @@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -class CreateOrderRefundJobsTable extends Migration +class CreateOrderRefundLogsTable extends Migration { /** * Run the migrations. @@ -13,18 +13,17 @@ class CreateOrderRefundJobsTable extends Migration */ public function up() { - Schema::create('order_refund_jobs', function (Blueprint $table) { + Schema::create('order_refund_logs', function (Blueprint $table) { $table->id(); - $table->string('sn')->comment('退款单号'); + $table->string('sn')->unique()->comment('退款流水号'); $table->unsignedBigInteger('order_id')->comment('订单ID'); - $table->unsignedBigInteger('after_sale_id')->nullable()->comment('售后ID'); + $table->unsignedBigInteger('after_sale_id')->nullable()->comment('售后订单ID'); $table->unsignedBigInteger('amount')->comment('退款金额'); $table->tinyInteger('status')->default(0)->comment('状态'); $table->string('reason')->nullable()->comment('退款原因'); $table->string('failed_reason')->nullable()->comment('失败原因'); $table->timestamps(); - $table->unique('sn'); $table->unique(['order_id', 'after_sale_id']); }); } @@ -36,6 +35,6 @@ class CreateOrderRefundJobsTable extends Migration */ public function down() { - Schema::dropIfExists('order_refund_jobs'); + Schema::dropIfExists('order_refund_logs'); } }