post(); $this->validate(request(), [ 'organization_id' => 'required|integer', 'name' => 'max:50', 'type' => 'in:0,1,2', 'sort_type' => 'in:0,1,2', 'patient_id' => 'integer', ]); $builder = Vaccine::select(['id', 'type', 'price', 'name', 'remark', 'supplier', 'stock', DB::raw('0 is_recommend')])->where('org_id', $req['organization_id']); if (!empty($req['type'])) { $builder->where('type', $req['type']); } if (!empty($req['name'])) { $builder->where('name', 'like', '%'.$req['name'].'%'); } //查询患者推荐接种的置顶 if (!empty($req['patient_id'])) { $vaccine_ids = UserNextVaccine::where('patient_id', $req['patient_id'])->where('is_vaccinate', 0)->orderBy('next_vaccinate_time', 'asc')->pluck('vaccine_id')->toArray(); if (!empty($vaccine_ids)) { $vaccine_ids = array_values(array_unique($vaccine_ids)); $builder->whereNotIn('id', $vaccine_ids); $builder2 = Vaccine::select(['id', 'type', 'price', 'name', 'remark', 'supplier', 'stock', DB::raw('1 is_recommend')])->where('org_id', $req['organization_id'])->whereIn('id', $vaccine_ids); if (!empty($req['type'])) { $builder2->where('type', $req['type']); } if (!empty($req['name'])) { $builder2->where('name', 'like', '%'.$req['name'].'%'); } $topVaccines = $builder2->get()->toArray(); } } if (!empty($req['sort_type'])) { if ($req['sort_type'] == 1) { $builder->orderBy('price', 'asc'); } elseif ($req['sort_type'] == 2) { $builder->orderBy('price', 'desc'); } } else { $builder->orderBy('stock', 'desc'); } $data = $builder->paginate()->toArray(); //组合置顶 if ((empty($req['page']) || $req['page'] == 1) && !empty($topVaccines)) { $data['data'] = array_merge($topVaccines, $data['data']); } return out($data); } }