|
| 1 | +<?php |
| 2 | + |
| 3 | +use App\Models\CouponCode; |
| 4 | +use App\Models\Order; |
| 5 | +use App\Models\User; |
| 6 | +use Faker\Generator as Faker; |
| 7 | + |
| 8 | +$factory->define(Order::class, function (Faker $faker) { |
| 9 | + // 随机取一个用户 |
| 10 | + $user = User::query()->inRandomOrder()->first(); |
| 11 | + // 随机取一个该用户的地址 |
| 12 | + $address = $user->addresses()->inRandomOrder()->first(); |
| 13 | + // 10% 的概率把订单标记为退款 |
| 14 | + $refund = random_int(0, 10) < 1; |
| 15 | + // 随机生成发货状态 |
| 16 | + $ship = $faker->randomElement(array_keys(Order::$shipStatusMap)); |
| 17 | + // 优惠券 |
| 18 | + $coupon = null; |
| 19 | + // 30% 概率该订单使用了优惠券 |
| 20 | + if (random_int(0, 10) < 3) { |
| 21 | + // 为了避免出现逻辑错误,我们只选择没有最低金额限制的优惠券 |
| 22 | + $coupon = CouponCode::query()->where('min_amount', 0)->inRandomOrder()->first(); |
| 23 | + // 增加优惠券的使用量 |
| 24 | + $coupon->changeUsed(); |
| 25 | + } |
| 26 | + |
| 27 | + return [ |
| 28 | + 'address' => [ |
| 29 | + 'address' => $address->full_address, |
| 30 | + 'zip' => $address->zip, |
| 31 | + 'contact_name' => $address->contact_name, |
| 32 | + 'contact_phone' => $address->contact_phone, |
| 33 | + ], |
| 34 | + 'total_amount' => 0, |
| 35 | + 'remark' => $faker->sentence, |
| 36 | + 'paid_at' => $faker->dateTimeBetween('-30 days'), // 30天前到现在任意时间点 |
| 37 | + 'payment_method' => $faker->randomElement(['wechat', 'alipay']), |
| 38 | + 'payment_no' => $faker->uuid, |
| 39 | + 'refund_status' => $refund ? Order::REFUND_STATUS_SUCCESS : Order::REFUND_STATUS_PENDING, |
| 40 | + 'refund_no' => $refund ? Order::getAvailableRefundNo() : null, |
| 41 | + 'closed' => false, |
| 42 | + 'reviewed' => random_int(0, 10) > 2, |
| 43 | + 'ship_status' => $ship, |
| 44 | + 'ship_data' => $ship === Order::SHIP_STATUS_PENDING ? null : [ |
| 45 | + 'express_company' => $faker->company, |
| 46 | + 'express_no' => $faker->uuid, |
| 47 | + ], |
| 48 | + 'extra' => $refund ? ['refund_reason' => $faker->sentence] : [], |
| 49 | + 'user_id' => $user->id, |
| 50 | + 'coupon_code_id' => $coupon ? $coupon->id : null, |
| 51 | + ]; |
| 52 | +}); |
0 commit comments