MiniSeeder.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <?php
  2. use Illuminate\Database\Seeder;
  3. class MiniSeeder extends Seeder
  4. {
  5. /**
  6. * Run the database seeds.
  7. *
  8. * @return void
  9. */
  10. public function run()
  11. {
  12. // 创建角色、用户
  13. $total = 20;
  14. \App\Models\Role::truncate();
  15. \App\Models\User::truncate();
  16. for($i = 1; $i < $total; ++$i) {
  17. $role = \App\Models\Role::create([
  18. 'name' => '用户角色' . $i,
  19. 'sort' => $i,
  20. 'key' => 'role-' . $i
  21. ]);
  22. \App\Models\User::create([
  23. 'role_id' => $role->id,
  24. 'name' => '用户' . $i,
  25. 'password' => bcrypt(123456),
  26. 'phone' => $i < 10 ? '1234567890' . $i : '123456789' . $i
  27. ]);
  28. }
  29. // 创建项目角色
  30. $this->call([
  31. ProjectRoleSeeder::class
  32. ]);
  33. // 创建项目,为项目分配用户和项目角色
  34. \App\Models\Project::truncate();
  35. \App\Models\ProjectUser::truncate();
  36. $users = \App\Models\User::limit(7)->get();
  37. $project_roles = \App\Models\ProjectRole::limit(7)->get();
  38. for($i = 1; $i < $total; ++$i) {
  39. $project = \App\Models\Project::create([
  40. 'name' => '项目' . ($i + 2)
  41. ]);
  42. if($i == 1) {
  43. for($j = 0; $j < count($users); ++$j) {
  44. \App\Models\ProjectUser::create([
  45. 'project_id' => $project->id,
  46. 'user_id' => $users[$j]->id,
  47. 'project_role_id' => $project_roles[$j]->id
  48. ]);
  49. }
  50. }
  51. }
  52. \App\Models\Device::truncate();
  53. \App\Models\DeviceName::truncate();
  54. \App\Models\Spec::truncate();
  55. // 创建设备类型
  56. $device_types = ['起重机械', '隧道掘进机'];
  57. $cnt = 0;
  58. foreach($device_types as $key => $value) {
  59. $cnt = $cnt + 1;
  60. $device = \App\Models\Device::create([
  61. 'name' => $value,
  62. 'sort' => $cnt
  63. ]);
  64. for($i = 1; $i < 3; ++$i) {
  65. $cnt = $cnt + 1;
  66. $device_name = \App\Models\DeviceName::create([
  67. 'device_id' => $device->id,
  68. 'name' => $value . $cnt,
  69. 'sort' => $cnt
  70. ]);
  71. for($j = 1; $j < 3; ++$j) {
  72. $cnt = $cnt + 1;
  73. \App\Models\Spec::create([
  74. 'device_id' => $device->id,
  75. 'device_name_id' => $device_name->id,
  76. 'name' => '规格' . $cnt,
  77. 'sort' => $cnt,
  78. ]);
  79. }
  80. }
  81. }
  82. \App\Models\RentType::truncate();
  83. $rent_names = ['按小时', '按天'];
  84. foreach($rent_names as $key => $rent_name) {
  85. \App\Models\RentType::create([
  86. 'name' => $rent_name,
  87. 'sort' => ($key + 1)
  88. ]);
  89. }
  90. // 创建需求工点
  91. \App\Models\WorkPoint::truncate();
  92. for($i = 1; $i < $total; ++$i) {
  93. \App\Models\WorkPoint::create([
  94. 'name' => '工点' . $i
  95. ]);
  96. }
  97. // 创建订单状态
  98. $this->call([
  99. OptionSeeder::class
  100. ]);
  101. // 创建订单
  102. \App\Models\Order::truncate();
  103. \App\Models\OrderDevice::truncate();
  104. $project = \App\Models\Project::first();
  105. $work_points = \App\Models\WorkPoint::all();
  106. $user = \App\Models\User::first();
  107. $devices = \App\Models\Device::all();
  108. // 草稿
  109. for($i = 1; $i < $total; ++$i) {
  110. $order = \App\Models\Order::create([
  111. 'work_point_id' => $work_points->random()->id,
  112. 'is_draft' => 1,
  113. 'status' => \App\Models\Option::get('orders', 'status', 'checking'),
  114. 'order_number' => \App\Models\Order::createOrderNumber(),
  115. 'project_id' => $project->id,
  116. 'user_id' => $user->id,
  117. 'project_role_id' => $project_roles->first()->id,
  118. 'type' => 1
  119. ]);
  120. $this->createOrderDevice($order, $devices);
  121. }
  122. // 待审核,checking
  123. for($i = 1; $i < $total; ++$i) {
  124. $order = \App\Models\Order::create([
  125. 'work_point_id' => $work_points->random()->id,
  126. 'is_draft' => 2,
  127. 'status' => \App\Models\Option::get('orders', 'status', 'checking'),
  128. 'order_number' => \App\Models\Order::createOrderNumber(),
  129. 'project_id' => $project->id,
  130. 'user_id' => $user->id,
  131. 'project_role_id' => $project_roles->first()->id,
  132. 'type' => 1
  133. ]);
  134. $this->createOrderDevice($order, $devices);
  135. }
  136. // 已审核,checked
  137. for($i = 1; $i < $total; ++$i) {
  138. $last_project_role = $project_roles->whereIn('key', ['machine', 'assist', 'manager'])->random();
  139. $project_role = $project_roles->where('key', 'work')->first();
  140. if($last_project_role->key != 'manager') {
  141. $project_role = $project_roles->where('need_check', 1)->where('level', '>', $last_project_role->level)->first();
  142. }
  143. $order = \App\Models\Order::create([
  144. 'work_point_id' => $work_points->random()->id,
  145. 'is_draft' => 2,
  146. 'status' => \App\Models\Option::get('orders', 'status', 'checked'),
  147. 'order_number' => \App\Models\Order::createOrderNumber(),
  148. 'project_id' => $project->id,
  149. 'user_id' => $user->id,
  150. 'project_role_id' => $project_role->id,
  151. 'last_project_role_id' => $last_project_role->id,
  152. 'type' => 1
  153. ]);
  154. $this->createOrderDevice($order, $devices);
  155. }
  156. // 已完成,pass
  157. for($i = 1; $i < $total; ++$i) {
  158. $last_project_role = $project_roles->where('key', 'manager')->first();
  159. $project_role = $project_roles->where('key', 'work')->first();
  160. $order = \App\Models\Order::create([
  161. 'work_point_id' => $work_points->random()->id,
  162. 'is_draft' => 2,
  163. 'status' => \App\Models\Option::get('orders', 'status', 'pass'),
  164. 'order_number' => \App\Models\Order::createOrderNumber(),
  165. 'project_id' => $project->id,
  166. 'user_id' => $user->id,
  167. 'project_role_id' => $project_role->id,
  168. 'last_project_role_id' => $last_project_role->id,
  169. 'type' => 1
  170. ]);
  171. $this->createOrderDevice($order, $devices);
  172. }
  173. // 已驳回,pass
  174. for($i = 1; $i < $total; ++$i) {
  175. $last_project_role = $project_roles->whereIn('key', ['machine', 'assist', 'manager'])->random();
  176. $project_role = $project_roles->where('key', 'work')->first();
  177. $order = \App\Models\Order::create([
  178. 'work_point_id' => $work_points->random()->id,
  179. 'is_draft' => 2,
  180. 'status' => \App\Models\Option::get('orders', 'status', 'reject'),
  181. 'order_number' => \App\Models\Order::createOrderNumber(),
  182. 'project_id' => $project->id,
  183. 'user_id' => $user->id,
  184. 'project_role_id' => $project_role->id,
  185. 'last_project_role_id' => $last_project_role->id,
  186. 'type' => 1
  187. ]);
  188. $this->createOrderDevice($order, $devices);
  189. }
  190. $this->call([
  191. InnerOrderSeeder::class
  192. ]);
  193. }
  194. public function createOrderDevice(\App\Models\Order $order, \Illuminate\Support\Collection $devices)
  195. {
  196. $money = 0;
  197. $specs = \App\Models\Spec::all();
  198. $rent_types = \App\Models\RentType::all();
  199. for($j = 1; $j < 3; ++$j) {
  200. $start_date = \Carbon\Carbon::now()->addDay(mt_rand(1, 4))->toDateString();
  201. $end_date = \Carbon\Carbon::now()->addDay(mt_rand(5, 10))->toDateString();
  202. $quantity = mt_rand(1, 5);
  203. $price = mt_rand(1, 10) * 1000;
  204. $money = $money + $quantity * $price;
  205. $spec = $specs->random();
  206. $rent_type = $rent_types->random();
  207. \App\Models\OrderDevice::create([
  208. 'name' => '设备' . $j,
  209. 'order_id' => $order['id'],
  210. 'project_id' => $order['project_id'],
  211. 'device_id' => $spec->device_id,
  212. 'device_name_id' => $spec->device_name_id,
  213. 'spec_id' => $spec->id,
  214. 'rent_type_id' => $rent_type->id,
  215. 'quantity' => $quantity,
  216. 'price' => $price,
  217. 'start_date' => $start_date,
  218. 'end_date' => $end_date
  219. ]);
  220. }
  221. $date_at = \Carbon\Carbon::now()->subDay(mt_rand(1, 20))->toDateTimeString();
  222. $order->update(['money' => $money, 'created_at' => $date_at, 'updated_at' => $date_at]);
  223. }
  224. }