OrderController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <?php
  2. namespace App\Http\Controllers\Api\mini;
  3. use App\Models\Device;
  4. use App\Models\InnerDevice;
  5. use App\Models\Option;
  6. use App\Models\Order;
  7. use App\Models\OrderDevice;
  8. use App\Models\Project;
  9. use App\Models\ProjectRole;
  10. use App\Models\ProjectUser;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Auth;
  13. use Illuminate\Support\Facades\Log;
  14. class OrderController extends BaseController
  15. {
  16. protected $model;
  17. public function __construct()
  18. {
  19. $this->model = new Order();
  20. }
  21. public function create(Request $request)
  22. {
  23. $project = Project::find($request->input('project_id'));
  24. if(!$project) return $this->error(['msg' => '找不到项目']);
  25. $user = Auth::guard('mini')->user();
  26. $project_role_id = $request->input('is_draft') == 1 ? ProjectRole::getByKey('work', 'id') : ProjectRole::getByKey('machine', 'id');
  27. $option = Option::get('orders', 'status', 'checking');
  28. $order = Order::create([
  29. 'work_point_id' => $request->input('work_point_id'),
  30. 'remark' => $request->input('remark'),
  31. 'is_draft' => $request->input('is_draft'),
  32. 'status' => $option,
  33. 'order_number' => $this->model->createOrderNumber(),
  34. 'project_id' => $project->id,
  35. 'user_id' => $user->id,
  36. 'project_role_id' => $project_role_id,
  37. 'type' => 1
  38. ]);
  39. if(!$order) return $this->error(['msg' => '订单创建失败']);
  40. $devices = $request->input('devices');
  41. $total = 0;
  42. foreach($devices as $device) {
  43. $price = $this->transMoney($device['price']);
  44. OrderDevice::create([
  45. 'name' => $device['name'],
  46. 'order_id' => $order->id,
  47. 'device_id' => $device['type_id'],
  48. 'quantity' => $device['quantity'],
  49. 'price' => $price,
  50. 'start_date' => $device['start_date'],
  51. 'end_date' => $device['end_date']
  52. ]);
  53. $total = $total + ($price * (int)$device['quantity']);
  54. }
  55. $order->update(['money' => $total]);
  56. return $this->success();
  57. }
  58. public function createInner(Request $request)
  59. {
  60. $project = Project::find($request->input('project_id'));
  61. if(!$project) return $this->error(['msg' => '找不到项目']);
  62. $devices = $request->input('devices');
  63. $using_id = Option::get('inner_devices', 'status', 'using');
  64. $free_id = Option::get('inner_devices', 'status', 'free');
  65. foreach($devices as $device) {
  66. $device = InnerDevice::find($device['id']);
  67. if($device->status != $free_id) {
  68. $status = Option::find($device->status);
  69. $msg = $device['name'] . ($status ? $status['name'] : '使用中') . ',不能使用';
  70. return $this->error(['msg' => $msg]);
  71. }
  72. }
  73. $user = Auth::guard('mini')->user();
  74. $project_role_id = $request->input('is_draft') == 1 ? ProjectRole::getByKey('machine', 'id') : ProjectRole::getByKey('assist', 'id');
  75. $option = Option::get('orders', 'status', 'checking');
  76. $order = Order::create([
  77. 'work_point_id' => $request->input('work_point_id'),
  78. 'remark' => $request->input('remark'),
  79. 'is_draft' => $request->input('is_draft'),
  80. 'status' => $option,
  81. 'order_number' => $this->model->createOrderNumber(),
  82. 'project_id' => $project->id,
  83. 'user_id' => $user->id,
  84. 'project_role_id' => $project_role_id,
  85. 'type' => 2
  86. ]);
  87. if(!$order) return $this->error(['msg' => '订单创建失败']);
  88. foreach($devices as $device) {
  89. OrderDevice::create([
  90. 'name' => $device['name'],
  91. 'order_id' => $order->id,
  92. 'device_id' => $device['id'],
  93. 'start_date' => $device['start_date'],
  94. 'end_date' => $device['end_date']
  95. ]);
  96. if($device['id']) {
  97. InnerDevice::find($device['id'])->update([
  98. 'status' => $using_id,
  99. 'start_date' => $device['start_date'],
  100. 'end_date' => $device['end_date']
  101. ]);
  102. }
  103. }
  104. return $this->success();
  105. }
  106. public function update(Request $request)
  107. {
  108. $order = $this->model->find($request->input('id'));
  109. if(!$order) return $this->error(['msg' => '找不到订单']);
  110. $user = Auth::guard('mini')->user();
  111. $project_role_id = $request->input('is_draft') == 1 ? ProjectRole::getByKey('work', 'id') : ProjectRole::getByKey('machine', 'id');
  112. $option = Option::get('orders', 'status', 'checking');
  113. $res = $order->update([
  114. 'work_point_id' => $request->input('work_point_id'),
  115. 'remark' => $request->input('remark'),
  116. 'is_draft' => $request->input('is_draft'),
  117. 'status' => $option,
  118. 'order_number' => $this->model->createOrderNumber(),
  119. 'user_id' => $user->id,
  120. 'project_role_id' => $project_role_id
  121. ]);
  122. if(!$res) return $this->error(['msg' => '订单修改失败']);
  123. $devices = $request->input('devices');
  124. $total = 0;
  125. OrderDevice::where('order_id', '=', $order->id)->delete();
  126. foreach($devices as $device) {
  127. $price = $this->transMoney($device['price']);
  128. OrderDevice::create([
  129. 'name' => $device['name'],
  130. 'order_id' => $order->id,
  131. 'device_id' => $device['type_id'],
  132. 'quantity' => $device['quantity'],
  133. 'price' => $price,
  134. 'start_date' => $device['start_date'],
  135. 'end_date' => $device['end_date']
  136. ]);
  137. $total = $total + ($price * (int)$device['quantity']);
  138. }
  139. $order->update(['money' => $total]);
  140. return $this->success();
  141. }
  142. public function get(Request $request)
  143. {
  144. $items = $this->model->where('project_id', $request->input('project_id'))->where('is_draft', 2);
  145. if($request->input('status')) {
  146. $status = Option::get('orders', 'status', $request->input('status'));
  147. if($status) $items = $items->where('status', $status);
  148. }
  149. $equal_items = ['work_point_id'];
  150. foreach ($equal_items as $item) {
  151. if($request->input($item)) {
  152. $items = $items->where($item, '=', $request->input($item));
  153. }
  154. }
  155. $items = $items->orderBy('created_at', 'desc');
  156. $items = $items->paginate();
  157. foreach($items as $item) {
  158. $item->devices = OrderDevice::where('order_id', $item->id)->get();
  159. foreach($item->devices as $device) {
  160. $device->type = $device->device ? $device->device->name : '';
  161. }
  162. $item->user_name = $item->user ? $item->user->name : '';
  163. $this->formatOrder($item);
  164. $item->work_point_name = $item->workPoint ? $item->workPoint->name : '';
  165. }
  166. return $this->success(['data' => $items->items()]);
  167. }
  168. public function formatOrder($item)
  169. {
  170. $option = Option::find($item->status);
  171. $item->status = $item->getStatusName();
  172. $item->status_key = $option ? $option['key'] : '';
  173. $item->color = $option ? $option['color'] : '';
  174. $item->date_time = substr($item->created_at, 0, 16);
  175. }
  176. public function detail(Request $request)
  177. {
  178. $order = $this->model->with('project', 'workPoint', 'devices', 'user')->find($request->input('id'));
  179. if(!$order) return $this->error(['msg' => '找不到订单']);
  180. $this->formatOrder($order);
  181. return $this->success(['data' => $order]);
  182. }
  183. public function getRole(Request $request)
  184. {
  185. $user = Auth::guard('mini')->user();
  186. $order = $this->model->find($request->input('id'));
  187. if(!$order) return $this->error(['msg' => '找不到订单']);
  188. $project_user = ProjectUser::where([
  189. ['project_id', '=', $order->project_id],
  190. ['user_id', '=', $user->id]
  191. ])->with('projectRole')->first();
  192. return $this->success(['data' => $project_user]);
  193. }
  194. public function check(Request $request)
  195. {
  196. $user = Auth::guard('mini')->user();
  197. $order = $this->model->find($request->input('id'));
  198. if(!$order) return $this->error(['msg' => '找不到订单']);
  199. $project_user = ProjectUser::where([
  200. ['project_id', '=', $order->project_id],
  201. ['user_id', '=', $user->id]
  202. ])->first();
  203. if(!$project_user) return $this->error(['msg' => '找不到用户']);
  204. $project_role = ProjectRole::find($project_user->project_role_id);
  205. if(!$project_role) return $this->error(['msg' => '找不到角色']);
  206. $status = Option::get('orders', 'status', $request->input('type'));
  207. // 工区负责人确认通过
  208. if($request->input('type') == 'confirm') {
  209. $status = Option::get('orders', 'status', 'pass');
  210. $next_project_role_id = $project_role->id;
  211. } else if($request->input('type') == 're-submit') {
  212. $status = Option::get('orders', 'status', 'checking');
  213. $next_project_role_id = $project_role->getNext('id');
  214. } else {
  215. if($request->input('type') == 'reject' || $project_role->key == 'manager') {
  216. $next_project_role_id = ProjectRole::getByKey('work', 'id');
  217. } else {
  218. $next_project_role_id = $project_role->getNext('id');
  219. }
  220. }
  221. $res = $order->update([
  222. 'status' => $status,
  223. 'last_project_role_id' => $project_role->id,
  224. 'project_role_id' => $next_project_role_id
  225. ]);
  226. if($res) return $this->success();
  227. return $this->error(['msg' => '操作失败']);
  228. }
  229. public function changePrice(Request $request)
  230. {
  231. $order_device = OrderDevice::find($request->input('id'));
  232. if(!$order_device) return $this->error(['msg' => '找不到设备']);
  233. $order_device->update([
  234. 'price' => $this->transMoney($request->input('price'))
  235. ]);
  236. $order = $this->model->find($order_device['order_id']);
  237. if(!$order) return $this->error(['msg' => '找不到订单']);
  238. $order->updateMoney();
  239. return $this->success();
  240. }
  241. }