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")); $owner = request("owner_ids"); //定义三个数组 空间换时间 避免结果集二次转换 $title = []; //标题 $data = []; //核心数据,二维数组 //大于31天转换为月份显示 if ($end->diffInDays($start) > 31){ $time1 = strtotime($start); $time2 = strtotime($end); $title = []; do{ $str = date('Y-m',$time1); // 取得递增月; $data[] = $this->getTargetData($str, $owner); $title[] = $str; }while( ($time1 = strtotime('+1 month', $time1)) <= $time2); $start = $title[0]; }else{ foreach (CarbonPeriod::create($start,$end) as $date){ /** @var $date Carbon */ $str = $date->format("Y-m-d"); if (strtotime($str) <= strtotime(now())){ $arr = $this->getTargetData($str, $owner); if ($arr) { $data[] = $arr; $title[] = $str; } } } $start = date('Y-m-d', strtotime($start)); } $machines = MeasuringMachine::query()->select(['id','name'])->get()->toArray(); array_unshift($machines, ['id' => 0, 'name'=>'未知']); array_unshift($machines, ['id' => '未称重','name'=>'未称重']); //data数据处理 $real_data = []; foreach ($machines as $v){ $temp = [$v['name']]; foreach ($data as $val){ array_push($temp, array_column($val, $v['id'])? array_sum( array_column($val, $v['id'])) : 0); } array_push($real_data,$temp); } array_unshift($title, 'product'); array_unshift($real_data, $title); $this->success(["title"=> $start,"data"=>$real_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, array $owner = []) { $res = [];$where='';$no_weight = 0; if ($owner) $where = " and order_packages.owner_id in (".implode(',',$owner).")"; if ($date == date("Y-m-d")){ $sql = <<measuring_machine_id,(int)$v->count]; $no_weight += (int)($v->total - $v->count); } array_push($res, ['未称重',$no_weight]); }else{ $info = app(CacheService::class)->getOrExecute("weight.".$date.($owner?implode(',',$owner):''),function ()use($date,$owner){ return OrderPackageCountingRecord::query() ->where(function ($query)use($date, $owner){ if($owner)return $query->whereIn('owner_id',$owner); if ( strlen($date) > 8 ) { return $query->where('targeted_at',$date); }else{ return $query->where('targeted_at', 'like',$date.'%'); } }) ->get()->toArray(); },config("cache.expirations.forever")); if (empty($info)) return $res; foreach ($info as $v){ $res[] = [$v['measuring_machine_id']=>(int)$v['un_weigh_count']]; $no_weight += (int)($v['total_count'] - $v['un_weigh_count']); } array_push($res, ['未称重'=>$no_weight]); } return $res; } }