middleware('auth'); } public function index() { $ownerIds = $this->getCountingOwnerIds(null); $menus = app(CheckActiveMenuService::class)->activeMenus(); $owners = Owner::query()->whereIn('id', $ownerIds)->get(); $warehousesOrders = app(RealtimePendingOrdersService::class)->warehousesOrders(); return view('control.panel', compact('owners', 'menus', 'warehousesOrders')); } public function orderCountingRecordsApi(Request $request) { /** * @var $orderCountingRecordService NewOrderCountingRecordService */ $orderCountingRecordService = app(NewOrderCountingRecordService::class); $start = Carbon::parse($request->start)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->start; $end = Carbon::parse($request->end)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->end; $ownerIds = $request->owner_ids; if (!$ownerIds || in_array('all', $ownerIds)) $ownerIds = $this->getCountingOwnerIds(null); $orderCountingRecords = $orderCountingRecordService->getOrderCountingRecordsApi($start, $end, $request->unit, $ownerIds); return compact('orderCountingRecords'); } public function logisticsCountingRecordsApi(Request $request) { /** * @var $orderCountingRecordService NewOrderCountingRecordService */ $orderCountingRecordService = app(NewOrderCountingRecordService::class); $start = Carbon::parse($request->start)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->start; $end = Carbon::parse($request->end)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->end; $ownerIds = $request->input('owner_ids'); if (!$ownerIds || in_array('all', $ownerIds)) $ownerIds = $this->getCountingOwnerIds(null); $logisticsCountingRecords = $orderCountingRecordService->getLogisticRecordsApi($start, $end, $ownerIds); return compact('logisticsCountingRecords'); } public function warehouseCountingRecordsApi(Request $request) { /** * @var $orderCountingRecordService NewOrderCountingRecordService */ $orderCountingRecordService = app(NewOrderCountingRecordService::class); $start = Carbon::parse($request->start)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->start; $end = Carbon::parse($request->end)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->end; $ownerIds = $this->getCountingOwnerIds(null); $warehouseCountingRecords = $orderCountingRecordService->getWareHouseRecordsApi($start, $end, $ownerIds); return compact('warehouseCountingRecords'); } public function laborReportsCountingRecordApi(Request $request) { $laborReportsCountingRecordService = app(LaborReportsCountingRecordService::class); $start = Carbon::parse($request->start)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->start; $end = Carbon::parse($request->end)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->end; $unit = $request->unit; $laborReportsCountingRecords = $laborReportsCountingRecordService->get($start, $end, $unit); return compact('laborReportsCountingRecords'); } public function laborReportsUserGroupsCountApi(Request $request) { $laborReportsCountingRecordService = app(LaborReportsCountingRecordService::class); $start = Carbon::parse($request->start)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->start; $end = Carbon::parse($request->end)->gt(Carbon::now()) ? Carbon::now()->toDateString() : $request->end; $laborReportsUserGroupsCount = $laborReportsCountingRecordService->userGroupsCount($start, $end); return compact('laborReportsUserGroupsCount'); } public function getCountingOwnerIds($ownerIds) { $user = auth()->user(); /** @var UserService $userService */ $userService = app('UserService'); $permittingOwnerIds = $userService->getPermittingOwnerIds($user); if (!$ownerIds) { return $permittingOwnerIds; } //去掉缓存 return array_intersect($ownerIds, $permittingOwnerIds); } /** * 获取称重统计数据API */ public function weightApi() { //转化为Carbon $start = Carbon::parse(request("start")); $end = Carbon::parse(request("end")); //定义三个数组 空间换时间 避免结果集二次转换 $title = []; //标题 $data = []; //核心数据,二维数组 foreach (CarbonPeriod::create($start, $end) as $date) { /** @var $date Carbon */ $str = $date->format("Y-m-d"); $data[] = $this->getTargetData($str); $title[] = $str; } //大于31天转换为月份显示 if ($end->diffInDays($start) > 31) { $title = []; $sign = []; //标记是否已被插入 $dataTemp = []; //临时存储 foreach ($data as $datum) { $month = substr($datum["date"], 0, 7); if (!isset($sign[$month])) { $dataTemp[] = ["date" => $month, "total" => $datum["total"], "count" => $datum["count"], "value" => $datum["value"]]; $title[] = $month; $sign[$month] = count($dataTemp) - 1; } else { $dataTemp[$sign[$month]]["total"] += $datum["total"]; $dataTemp[$sign[$month]]["count"] += $datum["count"]; $dataTemp[$sign[$month]]["value"] = (string)($dataTemp[$sign[$month]]["total"] ? intval(($dataTemp[$sign[$month]]["count"] / $dataTemp[$sign[$month]]["total"]) * 100) : 0); } } $data = $dataTemp; } $this->success(["title" => $title, "data" => $data]); } /** * 快递信息同步失败成功占比 * @param OrderPackageReceivedSyncRecordFilters $filters * @param Request $request * @return array */ public function orderPackageReceivedSyncRecordApi(OrderPackageReceivedSyncRecordFilters $filters, Request $request) { $orderPackageReceivedSyncRecords = OrderPackageReceivedSyncRecord::query()->filter($filters)->get(); $data = []; foreach ($orderPackageReceivedSyncRecords as $orderPackageReceivedSyncRecord) { $total = $orderPackageReceivedSyncRecord->succeed_count + $orderPackageReceivedSyncRecord->failed_count; $data[] = [ 'date' => $orderPackageReceivedSyncRecord->recorded_at, 'total' => $total, 'count' => $orderPackageReceivedSyncRecord->succeed_count, 'value' => (int)($orderPackageReceivedSyncRecord->succeed_count / $total * 100), 'logistic_name' => $orderPackageReceivedSyncRecord->logistic_name ]; } $title = []; foreach ($data as $data_item) { $title[] = $data_item['date']; } return ['success' => true, 'data' => ['data' => $data, 'title' => $title]]; } public function exceptionTypeApi(Request $request) { $ownerIds = $request->owner_ids; if (!$ownerIds || in_array('all', $ownerIds)) $ownerIds = $this->getCountingOwnerIds(null); $service = app('OrderPackageExceptionTypeCountingRecordService'); $data = $service->get([ 'start_date' => $request->start, 'end_date' => $request->end, 'owner_ids' => $ownerIds, ]); $this->success(["title" => '', "data" => $data]); } /** * 根据指定日期获取目标统计数据 * * @param string $date * @return array|null */ private function getTargetData(string $date) { if ($date == date("Y-m-d")) { $sql = <<= '{$date} 00:00:00' GROUP BY date sql; $pack = DB::selectOne(DB::raw($sql)); if (!$pack) return ["date" => $date, "total" => 0, "count" => 0, "value" => 0]; return ["date" => $pack->date, "total" => $pack->total, "count" => $pack->count, "value" => (string)($pack->total ? intval(($pack->count / $pack->total) * 100) : 0)]; } return app(CacheService::class)->getOrExecute("weight." . $date, function () use ($date) { $count = OrderPackageCountingRecord::query()->where("targeted_at", $date)->first(); if (!$count) return ["date" => $date, "total" => 0, "count" => 0, "value" => 0]; return ["date" => $count->targeted_at, "total" => $count->total_count, "count" => $count->un_weigh_count, "value" => (string)($count->total_count ? intval(($count->un_weigh_count / $count->total_count) * 100) : 0)]; }, config("cache.expirations.forever")); } }