middleware('checkUserPermission'); $this->service = $service; } /** * 列表 * @param Request $request * * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource * @throws \Prettus\Repository\Exceptions\RepositoryException */ public function index(Request $request) { $lists = $this->service->handleList($request); return $this->response->success($lists); } /** * 新增 * @param Request $request * * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function store(Request $request) { $data = $this->validateData($request, [ 'name' => 'required|string|max:200', 'sort' => 'required|integer', 'status' => 'required|integer', ], []); $model = $this->service->handleStore($data); return $this->response->created($model, '创建成功'); } /** * 详情 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource */ public function show(Request $request) { $this->validate($request, ['id' => 'required|integer']); $model = $this->service->handleProfile($request->get('id')); return $this->response->success($model); } /** * 更新 * @param Request $request * * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function update(Request $request) { $data = $this->validateData($request, [ 'id' => 'required|integer', 'wuliu_no' => 'required|string', 'wuliu_type' => 'required|string', 'remark' => 'nullable|string', ], [ 'wuliu_no' => '快递编号', 'wuliu_type' => '快递公司', 'remark' => '备注', ]); $data['status'] = ShopOrderStatusEnum::wait_shou; $model = $this->service->handleUpdate($data); return $this->response->success($model, '更新成功'); } /** * 更新 * @param Request $request * * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function updateAddress(Request $request) { $data = $this->validateData($request, [ 'id' => 'required|integer', 'sjr_name' => 'required|string', 'sjr_mobile' => 'required|mobile', 'sjr_mobile_code' => 'required', 'sjr_address_province' => 'required|string', 'sjr_address_city' => 'required|string', 'sjr_address_area' => 'required|string', 'sjr_address' => 'required|string', 'remark' => 'nullable|string', ], [ 'sjr_name' => '收件人姓名', 'sjr_mobile' => '收件人手机号', 'sjr_mobile_code' => '收件人手机号-区码', 'sjr_address_province' => '收件人地址-省', 'sjr_address_city' => '收件人地址-市', 'sjr_address_area' => '收件人地址-县', 'sjr_address' => '收件人地址', 'remark' => '备注', ]); if (strpos('*', $data['sjr_mobile']) === false) { $area_code = $request->get('sjr_mobile_code', '+86'); switch ($area_code) { case "+886": //中国台湾 $this->validateData($request, [ 'sjr_mobile' => 'required|mobile_TW', ], ['sjr_mobile' => '手机号']); break; case "+853": //中国澳门 $this->validateData($request, [ 'sjr_mobile' => 'required|mobile_OM', ], ['sjr_mobile' => '手机号']); break; case "+852": //中国香港 $this->validateData($request, [ 'sjr_mobile' => 'required|mobile_XG', ], ['sjr_mobile' => '手机号']); break; case '+86': default: //大陆 $this->validateData($request, [ 'sjr_mobile' => 'required|mobile', ], ['sjr_mobile' => '手机号']); $data['sjr_mobile_code'] = '+86'; break; } $data['sjr_mobile_encryption'] = Crypt::encryptString($data['sjr_mobile']); $data['sjr_mobile'] = mobile_hidden($data['sjr_mobile']); } $model = $this->service->handleUpdate($data); return $this->response->success($model, '更新成功'); } /** * 删除 * @param Request $request */ public function destroy(Request $request) { $this->validate($request, ['id' => 'required|integer']); $re = $this->service->handleDelete($request->get('id')); if ($re) { return $this->response->ok('删除成功'); } return $this->response->fail('删除失败'); } /** * 批量删除 * @param Request $request */ public function batchDelete(Request $request) { $ids = $this->validateData($request, ['ids' => 'required|array']); $re = $this->service->handleBatchDelete($ids); if ($re) { return $this->response->ok('删除成功'); } return $this->response->fail('删除失败'); } /** * 选项 * @must * @param Request $request */ public function selectOptions(Request $request) { $lists = $this->service->handleSelectOptions($request); return $this->response->success($lists); } /** * 批量审核 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource * @throws \Illuminate\Validation\ValidationException */ public function batchCheck(Request $request) { $data = $this->validateData($request, [ 'ids' => 'required|array', // 'check_status' => 'required|integer', 'check_remark' => 'nullable', ], [ 'check_status' => '审核结果', 'check_remark' => '审核意见', ]); // $ids = $this->service->handleIds($request); $ids = $data['ids']; $data['check_status'] = CheckStatusEnum::SUCCESS; $this->service->handleBatchCheck($ids, $data); return $this->response->ok('操作成功'); } /** * 导出 * @param Request $request * @return \Symfony\Component\HttpFoundation\BinaryFileResponse * @throws \Illuminate\Validation\ValidationException */ public function export(Request $request) { $ids = $this->service->handleIds($request); $fields = $request->get('fields', array_keys(ShopOrderExport::BaseFields)); $file_name = time() . '.xlsx'; return Excel::download(new ShopOrderExport($ids, $fields), $file_name); } /** * 导入 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource|void * @throws \Illuminate\Validation\ValidationException */ public function importWuLiu(Request $request) { $this->validate($request, [ 'id' => 'required|integer' ]); $resource = Resource::query()->where('id', $request->get('id'))->first(); if (!$resource) { abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '找不到该资源'); return; } $this->dispatch(new ImportShopOrderWuLiuJob($resource, login_admin_id())); return $this->response->ok('正在导入,请稍后'); } /** * 查询快递 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource */ public function express(Request $request) { $data = $this->validateData($request, [ 'id' => 'required|integer', ], [ 'id' => '订单 id', ]); $order = ShopOrder::query()->where('id', $data['id'])->where('user_id', login_user_id())->select(['id', 'status', 'wuliu_no', 'wuliu_type'])->first(); if (!$order) abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '找不到该订单'); $data = false; $isOk = false; try { if (in_array($order->status, [ShopOrderStatusEnum::wait_shou, ShopOrderStatusEnum::complete])) { $code = Express::nameToCode($order['wuliu_type']); if ($code) { $data = (new Express())->search($order['wuliu_no'], $code); if (array_key_exists('Traces', $data)) { if ((int)$data['State'] === (int)3) { //签收完成 $order->status = ShopOrderStatusEnum::complete; $order->save(); } $isOk = true; } } } if (!$isOk) { $data['State'] = false; } } catch (\Exception $exception) { $this->exception($exception, '获取物流信息失败'); } return $this->response->success($data); } /** * 作废订单 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource * @throws \Illuminate\Validation\ValidationException */ public function closeOrder(Request $request) { $data = $this->validateData($request, [ 'id' => 'required|integer', 'close_order_reason' => 'required|string', ], [ 'id' => '订单 id', 'close_order_reason' => '作废原因', ]); $this->service->handleCloseOrder($data['id'], $data['close_order_reason']); return $this->response->ok('作废成功'); } }