| xqd
@@ -14,6 +14,8 @@ use App\Models\DocterServiceTime;
|
|
|
use App\Models\Organization;
|
|
|
use App\Models\Schedule;
|
|
|
use App\Models\SchedulePeriod;
|
|
|
+use App\Models\ServicePack;
|
|
|
+use App\Models\Team;
|
|
|
use App\Models\TimePeriod;
|
|
|
use DB;
|
|
|
|
| xqd
@@ -31,6 +33,7 @@ class DocterController extends AuthController
|
|
|
'sort_type' => 'in:0,1,2,3',
|
|
|
'schedule_date' => 'required_if:list_type,3|date',
|
|
|
'time_period_id' => 'required_if:list_type,3|integer',
|
|
|
+ 'is_pack_docter' => 'in:0,1',
|
|
|
]);
|
|
|
$user = $this->user;
|
|
|
|
| xqd
@@ -83,6 +86,27 @@ class DocterController extends AuthController
|
|
|
$builder->whereNotIn('id', $docterIds3);
|
|
|
}
|
|
|
|
|
|
+ if (!empty($req['is_pack_docter'])) {
|
|
|
+ $team_ids = ServicePack::pluck('team_id')->toArray();
|
|
|
+ $team_id_arr = [];
|
|
|
+ foreach ($team_ids as $k => $v) {
|
|
|
+ if (!empty($v) && is_array($v)) {
|
|
|
+ $team_id_arr = array_merge($team_id_arr, $v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $team_id_arr = array_values(array_unique($team_id_arr));
|
|
|
+ $teams = Team::with(['docter'])->whereIn('id', $team_id_arr)->get()->toArray();
|
|
|
+ $docterIds4 = [];
|
|
|
+ foreach ($teams as $k => $v) {
|
|
|
+ foreach ($v['docter'] as $k1 => $v1) {
|
|
|
+ if (!in_array($v1['id'], $docterIds4)) {
|
|
|
+ $docterIds4[] = $v1['id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $builder->whereIn('id', $docterIds4);
|
|
|
+ }
|
|
|
+
|
|
|
if (!empty($req['sort_type'])) {
|
|
|
if ($req['sort_type'] == 1) {
|
|
|
$builder->orderBy('distance', 'asc');
|
| xqd
@@ -108,6 +132,9 @@ class DocterController extends AuthController
|
|
|
if (!empty($req['city_id'])) {
|
|
|
$builder2->whereIn('id', $cityDocterIds);
|
|
|
}
|
|
|
+ if (!empty($req['is_pack_docter'])) {
|
|
|
+ $builder->whereIn('id', $docterIds4);
|
|
|
+ }
|
|
|
if (!empty($req['sort_type'])) {
|
|
|
if ($req['sort_type'] == 1) {
|
|
|
$builder2->orderBy('distance', 'asc');
|
| xqd
@@ -160,19 +187,27 @@ class DocterController extends AuthController
|
|
|
$req = request()->post();
|
|
|
$this->validate(request(), [
|
|
|
'docter_id' => 'required|integer',
|
|
|
+ 'organization_id' => 'integer',
|
|
|
'per_page' => 'integer',
|
|
|
'latitude' => 'numeric',
|
|
|
'longitude' => 'numeric',
|
|
|
]);
|
|
|
$user = $this->user;
|
|
|
|
|
|
- $data = Schedule::with(['schedulePeriod.timePeriod', 'schedulePeriod.organization'])->where('docter_id', $req['docter_id'])->where('schedule_day', '>=', date('Ymd'))->paginate($req['per_page']??15)->toArray();
|
|
|
+ $builder = Schedule::with(['schedulePeriod.timePeriod', 'schedulePeriod.organization'])->where('docter_id', $req['docter_id'])->where('schedule_day', '>=', date('Ymd'));
|
|
|
+ if (!empty($req['organization_id'])) {
|
|
|
+ $builder->where('organization_id', $req['organization_id']);
|
|
|
+ }
|
|
|
+ $data = $builder->paginate($req['per_page']??15)->toArray();
|
|
|
if (!empty($data)) {
|
|
|
foreach ($data['data'] as $k => &$v) {
|
|
|
foreach ($v['schedule_period'] as $k1 => &$v1) {
|
|
|
if (!empty($v1['organization'])) {
|
|
|
$v1['organization']['distance'] = get_user_distance($user, $v1['organization']['latitude'], $v1['organization']['longitude']);
|
|
|
}
|
|
|
+
|
|
|
+ $can_appoint_num = $v['per_time_num'] - $v1['order_num'];
|
|
|
+ $v1['can_appoint_num'] = $can_appoint_num < 0 ? 0 : $can_appoint_num;
|
|
|
}
|
|
|
}
|
|
|
}
|