get('no_page'); $query = Food::query()->keyword()->type()->orderByDesc('id'); if ($no_page) { $foods = $query->get(); } else { $foods = $query->paginate(); } return $this->success('ok', $foods); } public function foodListV2(Request $request) { $export = $request->input('export'); $query = S2ShopSpu::with('shopFood')->keyword()->foodType()->orderByDesc('id'); if ($export) { $foods = $query->get(); return Excel::download(new FoodExport($foods), '食物列表.xlsx'); } $foods = $query->paginate(); return $this->success('ok', $foods); } public function foodExport(Request $request) { return Excel::download(new FoodExport(), '食物列表.xlsx'); } public function storeFood(Request $request) { $area = $request->input('area'); if (empty($area)) return $this->failure("请选择地区"); $name = $request->input("name"); if (empty($name)) return $this->failure("请输入食物名称"); $type = $request->input('type'); if (empty($type)) return $this->failure("请输入食物类型"); $icon = $request->input('icon'); if (empty($icon)) return $this->failure("请上传食物图片"); $unit = $request->input('unit'); $price = $request->input('price'); $have_goods = $request->input('have_goods'); $quantity = $request->input('quantity'); $is_sale = $request->get('is_sale'); $config = $request->get('config'); //库存 $stock = $request->input('stock', 0); $food = Food::create(['name' => $name, 'type' => $type, 'icon' => $icon, 'unit' => $unit, 'area' => $area, 'price' => $price, 'have_goods' => $have_goods, 'quantity' => $quantity, 'stock' => $stock, 'is_sale' => $is_sale, 'config' => json_encode($config)]); return $this->success('ok', $food); } public function storeFoodV2(Request $request) { $shop_id = $request->input("shop_id"); if (empty($shop_id)) return $this->failure("请选择商品"); $shop = S2ShopSpu::find($shop_id); $area = $request->input('area'); if (empty($area)) return $this->failure("请选择地区"); $type = $request->input('type'); if (empty($type)) return $this->failure("请输入食物类型"); $unit = $request->input('unit'); $quantity = $request->input('quantity'); $is_sale = $request->get('is_sale'); $config = $request->get('config'); //库存 $stock = $request->input('stock', 0); $food = Food::create(['shop_id' => $shop_id, 'name' => $shop->title, 'type' => $type, 'icon' => $shop->icon, 'unit' => $unit, 'area' => $area, 'quantity' => $quantity, 'stock' => $stock, 'is_sale' => $is_sale, 'config' => json_encode($config)]); return $this->success('ok', $food); } public function food(Request $request, Food $food) { $food->config = json_decode($food->config, true); return $this->success('ok', $food); } public function foodV2(Request $request, Food $food) { $food->shop; $food->config = json_decode($food->config, true); return $this->success('ok', $food); } public function updateFood(Request $request, Food $food) { $area = $request->input('area'); if ($area) { $food->area = $area; } $name = $request->input("name"); if ($name) { $food->name = $name; } $type = $request->input('type'); if ($type) { $food->type = $type; } $icon = $request->input('icon'); if ($icon) { $food->icon = $icon; } $price = $request->input('price'); if (strlen($price) > 0) { $food->price = $price; } $weight = $request->input('weight'); if ($weight) { $food->weight = $weight; } $have_goods = $request->input('have_goods'); if (isset($have_goods)) { $food->have_goods = $have_goods; } $quantity = $request->input('quantity'); if (isset($quantity)) { $food->quantity = $quantity; } $unit = $request->input('unit'); $stock = $request->input('stock'); $is_sale = $request->get('is_sale'); if (isset($is_sale)) { $food->is_sale = $is_sale; } if (isset($stock)) { $food->stock = $stock; } $config = $request->get('config'); if (isset($config)) { $food->config = json_encode($config); } $food->unit = $unit; $food->save(); return $this->success('ok'); } public function updateFoodV2(Request $request, Food $food) { $data = $request->all(); $shop = S2ShopSpu::find($data['shop_id']); // $data['name'] = $shop->title; $data['icon'] = $shop->icon; $data['config'] = json_encode($data['config']); $food->update($data); return $this->success('ok'); } public function deleteFood(Request $request, Food $food) { $food->delete(); return $this->success('ok'); } /** * 操作出库入库 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function updateFoodNum(Request $request) { DB::beginTransaction(); $type = $request->get('type'); $id = $request->get('id'); $num = $request->get('num'); $contract = $request->get('contract'); if (!is_numeric($num)) { return $this->failure('请输入整数'); } $images = $request->get('images'); $food = Food::where('id', $id)->first(); if (empty($food)) { return $this->failure('食物不存在'); } if ($type == OperateStockLog::OPERATE_TYPE_OUT && $food->stock < $num) { return $this->failure('库存不足'); } $after_num = $food->stock + $num; if ($type == OperateStockLog::OPERATE_TYPE_OUT) { $after_num = $food->stock - $num; } $remark = $request->get('remark'); //增加库存记录 $admin = auth()->user(); $map = []; $map['name'] = $food->name; $map['id'] = $food->id; $map['stock'] = $food->stock; $map['num'] = $num; $map['after_num'] = $after_num; $map['type'] = OperateStockLog::TYPE_ADMIN; $map['remark'] = !empty($remark) ? $remark : "管理员:{$admin->name}修改了商品库存,商品名:{$food->name},数量:{$num}"; $map['operate_type'] = $type; $map['status'] = OperateStockLog::OPERATE_STATUS_APPLY; $map['images'] = json_encode($images); $map['goods_type'] = OperateStockLog::GOODS_TYPE_FOOD; $map['contract'] = $contract; OperateStockLog::addLog($admin, $map); DB::commit(); return $this->success('ok', $food); } /** * 获取操作库存记录 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function getOperateStockLog(Request $request) { try { $keyword = $request->get('keyword'); $food_id = $request->get('food_id'); $operate_type = $request->get('operate_type'); $is_export = $request->get('is_export'); $start_time = $request->get('start_time'); $end_time = $request->get('end_time'); $status = $request->get('status'); $query = OperateStockLog::query()->orderBydesc('id')->when($keyword, function ($query) use ($keyword) { $query->where('name', 'like', '%' . $keyword . "%")->orWhere('operate_name', 'like', '%' . $keyword . "%"); })->when(!empty($food_id), function ($sql) use ($food_id) { $sql->where('food_id', $food_id); })->when(isset($operate_type), function ($sql) use ($operate_type) { $sql->where('operate_type', $operate_type); })->when(isset($status), function ($sql) use ($status) { $sql->where('status', $status); })->when(!empty($end_time), function ($sql) use ($start_time, $end_time) { $sql->where('created_at', '>=', $start_time)->where('created_at', '<=', $end_time . " 23:59:59"); }); if ($is_export) { $list = $query->get(); if ($list->isEmpty()) { return $this->failure('暂无数据'); } return Excel::download(new OperateStockExport($list), 'operate_stock.xlsx'); } $logs = $query->paginate(); foreach ($logs as $log) { $log->images = json_decode($log->images, true); if (!empty($log->order_id)) { $order = Order::findOrFail($log->order_id); } $log->order_user_name = $order->name ?? ''; $log->order_user_mobile = $order->mobile ?? ''; $log->order_trade_no = $order->trade_no ?? ''; } return $this->success('ok', $logs); } catch (\Exception $e) { return $this->failure($e->getMessage()); } } public function checkStockLog(Request $request) { DB::beginTransaction(); // try { $ids = $request->input('ids'); if (!is_array($ids)) { return $this->failure('参数格式不正确'); } foreach ($ids as $id) { $detail = OperateStockLog::findOrFail($id); $status = $request->input('status'); $check_remark = $request->input('check_remark'); $num = $detail->num; if ($detail->operate_type == OperateStockLog::OPERATE_TYPE_OUT) { $num = -$detail->num; } if ($status == OperateStockLog::OPERATE_STATUS_PASS) { if ($detail->goods_type == OperateStockLog::GOODS_TYPE_FOOD) { $food = Food::find($detail->food_id); if ($detail->operate_type == OperateStockLog::OPERATE_TYPE_OUT && $food->stock < $detail->num) { return $this->failure('库存不足'); } $food->stock = $food->stock + $num; $food->save(); } else { // $params = []; // $params['num'] = $detail->num; // $params['sku_id'] = $detail->sku_id; // // //添加操作记录 // $params['type'] = "INCREMENT"; // if($detail->operate_type == OperateStockLog::OPERATE_TYPE_OUT){ // $params['type'] = "DECREMENT"; // } // $shop = new ShopController(); // $list = $shop->postData(config("app.shop_url")."admin/shops/{$detail->food_id}/stock",$params); // if($list['code'] == 1){ // return $this->failure($list['message']); // } $type = "INCREMENT"; if ($detail->operate_type == OperateStockLog::OPERATE_TYPE_OUT) { $type = "DECREMENT"; } $shop = Shop::find($detail->food_id); Log::info("出入库状态 {$type}"); if ($type == 'INCREMENT') { $shop->incrementShopStock($detail->sku_id, $num); } else { $shop->decrementShopStock($detail->sku_id, $num); } } } $admin = auth()->user(); $detail->check_user_id = $admin->id; $detail->check_name = $admin->name; $detail->check_mobile = $admin->mobile; $detail->check_remark = $check_remark; $detail->status = $status; $detail->save(); } DB::commit(); return $this->success('ok'); // }catch (\Exception $e){ // DB::rollBack(); // return $this->failure($e->getMessage()); // } } public function postData($url, $params) { $headers = [ 'Key' => config('app.shop_key'), // 自定义头部参数(示例) ]; $client = new Client(); $response = $client->post($url, [ 'headers' => $headers, 'json' => $params ]); $code = $response->getStatusCode(); if ($code != 200) { return ['message' => '请求失败', 'code' => 1]; } $body = $response->getBody()->getContents(); // 获取响应内容 $list = json_decode($body, true); return $list; } }