VaccineController.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: zilongs
  5. * Date: 20-10-4
  6. * Time: 下午8:32
  7. */
  8. namespace App\Http\Controllers\Api\V1;
  9. use App\Models\UserNextVaccine;
  10. use App\Models\Vaccine;
  11. use DB;
  12. class VaccineController extends AuthController
  13. {
  14. public function vaccineList()
  15. {
  16. $req = request()->post();
  17. $this->validate(request(), [
  18. 'organization_id' => 'required|integer',
  19. 'name' => 'max:50',
  20. 'type' => 'in:0,1,2',
  21. 'sort_type' => 'in:0,1,2',
  22. 'patient_id' => 'integer',
  23. ]);
  24. $builder = Vaccine::select(['id', 'type', 'price', 'name', 'remark', 'supplier', 'stock', DB::raw('0 is_recommend')])->where('org_id', $req['organization_id']);
  25. if (!empty($req['type'])) {
  26. $builder->where('type', $req['type']);
  27. }
  28. if (!empty($req['name'])) {
  29. $builder->where('name', 'like', '%'.$req['name'].'%');
  30. }
  31. //查询患者推荐接种的置顶
  32. if (!empty($req['patient_id'])) {
  33. $vaccine_ids = UserNextVaccine::where('patient_id', $req['patient_id'])->where('is_vaccinate', 0)->orderBy('next_vaccinate_time', 'asc')->pluck('vaccine_id')->toArray();
  34. if (!empty($vaccine_ids)) {
  35. $vaccine_ids = array_values(array_unique($vaccine_ids));
  36. $builder->whereNotIn('id', $vaccine_ids);
  37. $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);
  38. if (!empty($req['type'])) {
  39. $builder2->where('type', $req['type']);
  40. }
  41. if (!empty($req['name'])) {
  42. $builder2->where('name', 'like', '%'.$req['name'].'%');
  43. }
  44. $topVaccines = $builder2->get()->toArray();
  45. }
  46. }
  47. if (!empty($req['sort_type'])) {
  48. if ($req['sort_type'] == 1) {
  49. $builder->orderBy('price', 'asc');
  50. }
  51. elseif ($req['sort_type'] == 2) {
  52. $builder->orderBy('price', 'desc');
  53. }
  54. }
  55. else {
  56. $builder->orderBy('stock', 'desc');
  57. }
  58. $data = $builder->paginate()->toArray();
  59. //组合置顶
  60. if ((empty($req['page']) || $req['page'] == 1) && !empty($topVaccines)) {
  61. $data['data'] = array_merge($topVaccines, $data['data']);
  62. }
  63. return out($data);
  64. }
  65. }