OrderController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Http\Controllers\Api\mini;
  3. use App\Models\Device;
  4. use App\Models\Option;
  5. use App\Models\Order;
  6. use App\Models\OrderDevice;
  7. use App\Models\Project;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Support\Facades\Log;
  11. class OrderController extends BaseController
  12. {
  13. protected $model;
  14. public function __construct()
  15. {
  16. $this->model = new Order();
  17. }
  18. public function create(Request $request)
  19. {
  20. $project = Project::find($request->input('project_id'));
  21. if(!$project) return $this->error(['msg' => '找不到项目']);
  22. $user = Auth::guard('mini')->user();
  23. $project_role_id = $project->getCreateProjectRoleId($user, $request->input('is_draft'));
  24. $order = Order::create([
  25. 'work_point_id' => $request->input('work_point_id'),
  26. 'remark' => $request->input('remark'),
  27. 'is_draft' => $request->input('is_draft'),
  28. 'status' => $this->model->getOrderStatus($project, $user, $request->input('is_draft')),
  29. 'order_number' => $this->model->createOrderNumber(),
  30. 'project_id' => $project->id,
  31. 'user_id' => $user->id,
  32. 'project_role_id' => $project_role_id
  33. ]);
  34. if(!$order) return $this->error(['msg' => '订单创建失败']);
  35. $devices = $request->input('devices');
  36. $total = 0;
  37. foreach($devices as $device) {
  38. $price = $this->transMoney($device['price']);
  39. OrderDevice::create([
  40. 'name' => $device['name'],
  41. 'order_id' => $order->id,
  42. 'device_id' => $device['type_id'],
  43. 'quantity' => $device['quantity'],
  44. 'price' => $price
  45. ]);
  46. $total = $total + ($price * (int)$device['quantity']);
  47. }
  48. $order->update(['money' => $total]);
  49. return $this->success();
  50. }
  51. public function get(Request $request)
  52. {
  53. $items = $this->model->where('project_id', $request->input('project_id'));
  54. if($request->input('status')) {
  55. $status = Option::get('orders', 'status', $request->input('status'));
  56. if($status) $items = $items->where('status', $status);
  57. }
  58. $equal_items = ['work_point_id'];
  59. foreach ($equal_items as $item) {
  60. if($request->input($item)) {
  61. $items = $items->where($item, '=', $request->input($item));
  62. }
  63. }
  64. $items = $items->orderBy('created_at', 'desc');
  65. $items = $items->paginate();
  66. foreach($items as $item) {
  67. $item->devices = OrderDevice::where('order_id', $item->id)->get();
  68. foreach($item->devices as $device) {
  69. $device->type = $device->device ? $device->device->name : '';
  70. }
  71. $item->user_name = $item->user ? $item->user->name : '';
  72. $item->status = Option::getById($item->status, 'name');
  73. $item->date_time = substr($item->created_at, 0, 16);
  74. $item->work_point_name = $item->workPoint ? $item->workPoint->name : '';
  75. }
  76. return $this->success(['data' => $items->items()]);
  77. }
  78. }