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; } array_unshift($title, 'product'); array_unshift($data, $title); $this->success(["title"=>date("Y-m-d",strtotime($start)),"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) { $res = []; if ($date == date("Y-m-d",1622908800)){ $sql = <<name) && $info[0]->name == '未知' ? $info[0]->total - $info[0]->count : 0; foreach ($info as $v){ $res[] = [$v->name,$v->count]; } array_push($res, ['未称重',$no_weight]); }else{ $info = app(CacheService::class)->getOrExecute("weight.".$date,function ()use($date){ return OrderPackageCountingRecord::query()->where("targeted_at",$date)->get()->toArray(); },config("cache.expirations.forever")); if (array_key_exists('date',$info)) return $res; $no_weight = isset($info[0]->name) && $info[0]->name == '未知' ? $info[0]->total - $info[0]->count : 0; foreach ($info as $v){ $res[] = [$v->name,$v->count]; } array_push($res, ['未称重',$no_weight]); } return $res; } }