| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- <?php
- namespace Database\Seeders;
- use Illuminate\Database\Seeder;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Str;
- /**
- * 商家三表关联测试数据生成器
- * 生成 stores、user、member 三表关联的测试数据
- */
- class StoreTestDataSeeder extends Seeder
- {
- /**
- * 运行数据填充
- *
- * @return void
- */
- public function run()
- {
- // 清空现有测试数据(可选)
- // DB::table('stores')->where('id', '>', 0)->delete();
- // DB::table('user')->where('id', '>', 0)->delete();
- // DB::table('member')->where('id', '>', 0)->delete();
- $now = time();
- // 定义商家类型模板
- $storeTemplates = [
- ['name' => '餐厅', 'prefix' => 'restaurant', 'category_id' => 1],
- ['name' => '服装店', 'prefix' => 'clothing', 'category_id' => 2],
- ['name' => '咖啡厅', 'prefix' => 'coffee', 'category_id' => 3],
- ['name' => '健身房', 'prefix' => 'fitness', 'category_id' => 4],
- ['name' => '书店', 'prefix' => 'bookstore', 'category_id' => 5],
- ['name' => '超市', 'prefix' => 'supermarket', 'category_id' => 1],
- ['name' => '美容院', 'prefix' => 'beauty', 'category_id' => 2],
- ['name' => '药店', 'prefix' => 'pharmacy', 'category_id' => 3],
- ['name' => '电影院', 'prefix' => 'cinema', 'category_id' => 4],
- ['name' => '酒店', 'prefix' => 'hotel', 'category_id' => 5],
- ];
- // 城市列表
- $cities = [
- '北京市朝阳区',
- '上海市浦东新区',
- '广州市天河区',
- '深圳市南山区',
- '杭州市西湖区',
- '成都市武侯区',
- '重庆市渝中区',
- '武汉市江汉区',
- '西安市雁塔区',
- '南京市鼓楼区',
- '天津市和平区',
- '苏州市姑苏区',
- '长沙市岳麓区',
- '郑州市金水区',
- '济南市历下区',
- ];
- // 姓氏列表
- $surnames = ['张', '李', '王', '刘', '陈', '杨', '赵', '黄', '周', '吴', '徐', '孙', '胡', '朱', '高', '林', '何', '郭', '马', '罗'];
- $names = ['伟', '芳', '娜', '秀英', '敏', '静', '丽', '强', '磊', '军', '洋', '勇', '艳', '杰', '娟', '涛', '明', '超', '秀兰', '霞'];
- // 状态配置(按比例分配)
- $statusConfig = [
- 1 => 70, // 70% 已审核(营业中)
- 2 => 20, // 20% 待审核
- 3 => 10, // 10% 审核失败
- ];
- // 生成测试数据(循环创建50条)
- $testData = [];
- $totalCount = 50; // 可以修改这个数字来生成更多或更少的数据
- for ($i = 1; $i <= $totalCount; $i++) {
- // 随机选择商家类型
- $template = $storeTemplates[array_rand($storeTemplates)];
- // 随机选择城市
- $city = $cities[array_rand($cities)];
- // 随机生成姓名
- $surname = $surnames[array_rand($surnames)];
- $name = $names[array_rand($names)];
- $realName = $surname . $name;
- // 根据比例随机分配状态
- $rand = mt_rand(1, 100);
- if ($rand <= 70) {
- $status = 1; // 已审核
- $confirmRemark = '审核通过';
- } elseif ($rand <= 90) {
- $status = 2; // 待审核
- $confirmRemark = '';
- } else {
- $status = 3; // 审核失败
- $confirmRemark = '资料不完整,请补充完善';
- }
- // 随机生成订单数据
- $orderCount = $status == 1 ? mt_rand(10, 500) : 0;
- $orderTotal = $status == 1 ? mt_rand(5000, 200000) + (mt_rand(0, 99) / 100) : 0.00;
- // 随机性别
- $gender = mt_rand(1, 3);
- // 用户状态(10%概率禁用)
- $userStatus = mt_rand(1, 100) <= 90 ? 1 : 2;
- $memberStatus = $userStatus;
- // 生成唯一标识
- $uniqueId = str_pad($i, 3, '0', STR_PAD_LEFT);
- $phone = '138' . str_pad($i, 8, '0', STR_PAD_LEFT);
- $testData[] = [
- 'store' => [
- 'name' => $template['name'] . $i . '号店',
- 'real_name' => $realName,
- 'phone' => $phone,
- 'address' => $city . mt_rand(1, 999) . '号',
- 'category_id' => $template['category_id'],
- 'sort' => 100 - $i,
- 'business_license' => '',
- 'other_photo' => '',
- 'order_count' => $orderCount,
- 'order_total' => $orderTotal,
- 'status' => $status,
- 'confirm_remark' => $confirmRemark,
- ],
- 'user' => [
- 'realname' => $realName,
- 'nickname' => $template['name'] . '老板' . $i,
- 'gender' => $gender,
- 'avatar' => '',
- 'mobile' => $phone,
- 'email' => $template['prefix'] . $uniqueId . '@example.com',
- 'username' => $template['prefix'] . $uniqueId,
- 'password' => md5('123456'),
- 'salt' => Str::random(10),
- 'status' => $userStatus,
- ],
- 'member' => [
- 'openid' => 'test_openid_' . $uniqueId,
- 'mobile' => $phone,
- 'user_type' => 2,
- 'password' => md5('123456'),
- 'realname' => $realName,
- 'nickname' => $template['name'] . $i . '号店',
- 'gender' => $gender,
- 'status' => $memberStatus,
- ]
- ];
- }
- foreach ($testData as $index => $data) {
- DB::beginTransaction();
- try {
- // 1. 先插入 member 表(会员表,获取 member.id)
- $memberId = DB::table('member')->insertGetId([
- 'openid' => $data['member']['openid'],
- 'mobile' => $data['member']['mobile'],
- 'user_type' => $data['member']['user_type'],
- 'password' => $data['member']['password'],
- 'realname' => $data['member']['realname'],
- 'nickname' => $data['member']['nickname'],
- 'gender' => $data['member']['gender'],
- 'status' => $data['member']['status'],
- 'create_time' => $now,
- 'update_time' => $now,
- 'mark' => 1,
- ]);
- // 2. 插入 user 表(管理员表,user.user_id 关联 member.id)
- $userId = DB::table('user')->insertGetId([
- 'user_id' => $memberId, // 关联会员ID
- 'realname' => $data['user']['realname'],
- 'nickname' => $data['user']['nickname'],
- 'gender' => $data['user']['gender'],
- 'avatar' => $data['user']['avatar'],
- 'mobile' => $data['user']['mobile'],
- 'email' => $data['user']['email'],
- 'username' => $data['user']['username'],
- 'password' => $data['user']['password'],
- 'salt' => $data['user']['salt'],
- 'status' => $data['user']['status'],
- 'sort' => 125,
- 'create_time' => $now,
- 'update_time' => $now,
- 'mark' => 1,
- ]);
- // 3. 插入 stores 表(商家表,store.user_id 关联 member.id)
- DB::table('stores')->insert([
- 'user_id' => $memberId, // 关联会员ID,确保 user.user_id = member.id = store.user_id
- 'name' => $data['store']['name'],
- 'real_name' => $data['store']['real_name'],
- 'phone' => $data['store']['phone'],
- 'address' => $data['store']['address'],
- 'category_id' => $data['store']['category_id'],
- 'sort' => $data['store']['sort'],
- 'business_license' => $data['store']['business_license'],
- 'other_photo' => $data['store']['other_photo'],
- 'order_count' => $data['store']['order_count'],
- 'order_total' => $data['store']['order_total'],
- 'status' => $data['store']['status'],
- 'confirm_remark' => $data['store']['confirm_remark'],
- 'create_time' => $now,
- 'update_time' => $now,
- 'mark' => 1,
- ]);
- DB::commit();
- echo "成功创建测试数据 #" . ($index + 1) . ": {$data['store']['name']}\n";
- } catch (\Exception $e) {
- DB::rollBack();
- echo "创建测试数据失败 #" . ($index + 1) . ": " . $e->getMessage() . "\n";
- }
- }
- echo "\n测试数据生成完成!\n";
- echo "共生成 " . count($testData) . " 条商家数据\n";
- echo "所有账号密码均为: 123456\n";
- }
- }
|