Explorar o código

fix:
- 限制过期时段不可预约
- 过期时段也要减去剩余号数

zhengzhibin %!s(int64=2) %!d(string=hai) anos
pai
achega
077fdb42df

+ 14 - 6
app/api/controller/Appointment.php

@@ -85,20 +85,19 @@ class Appointment extends Base
             //专家信息
             $item->specialist;
             $item->specialist->head_pic = geturl($item->specialist->head_pic, '', true);
-            //剩余预约号码
-            $item['morning_remaining'] = $item->morning_num - $item->morning_use;
-            $item['afternoon_remaining'] = $item->afternoon_num - $item->afternoon_use;
-            $item['night_remaining'] = $item->night_num - $item->night_use;
             //拆分预约时段
             $ticketPeriods = (new AppointmentApplication())->where('appointment_ticket_id', $item->id)->column('appointment_time');
             $item['morning_time_period'] = $this->setPeriodStatus(DateHelper::splitTimePeriod($item->morning_start_time, $item->morning_end_time, $item->morning_num), $ticketPeriods);
             $item['afternoon_time_period'] = $this->setPeriodStatus(DateHelper::splitTimePeriod($item->afternoon_start_time, $item->afternoon_end_time, $item->afternoon_num), $ticketPeriods);
             $item['night_time_period'] = $this->setPeriodStatus(DateHelper::splitTimePeriod($item->night_start_time, $item->night_end_time, $item->night_num), $ticketPeriods);
-
+            //剩余预约号码
+            $item['morning_remaining'] = count($item['morning_time_period']);
+            $item['afternoon_remaining'] = count($item['afternoon_time_period']);
+            $item['night_remaining'] = count($item['night_time_period']);
             $tickets[$k] = $item;
         }
 
-        $this->json_success($tickets);
+        $this->json_success("查询成功", $tickets);
     }
 
 
@@ -109,8 +108,17 @@ class Appointment extends Base
      */
     private function setPeriodStatus($timePeriods, $ticketPeriods)
     {
+        $daytime = $this->request->param('daytime', date('Y-m-d'));
         $arr = [];
+        $now = time();
         foreach ($timePeriods as $ticket => $period) {
+            //排除过期时段
+            $timerang = explode(' - ', $period);
+            $period_end = $timerang[1];
+            if ($now > strtotime($daytime . ' ' . $period_end)) {
+                continue;
+            }
+            //标记预约状态
             if (in_array($period, $ticketPeriods)) {
                 $arr[] = ['period' => $period, 'status' => 1];
             } else {

+ 23 - 1
app/api/controller/User.php

@@ -14,6 +14,7 @@ use app\common\model\AppointmentApplication;
 use app\common\model\Appointment;
 use app\common\model\Feedback;
 use app\common\model\Webconfig;
+use time\DateHelper;
 
 class User extends Permissions
 {
@@ -45,6 +46,7 @@ class User extends Permissions
             $this->json_error('提交失败:' . $validate->getError());
         }
 
+
         $model = new AppointmentApplication();
 
         //爽约多少次后,多少天内不能再预约
@@ -68,11 +70,31 @@ class User extends Permissions
             $this->json_error("获取预约号失败");
         }
 
+        //判断该时间段,存在于时间列表中才行
+        if ($post['appointment_period'] == 1) {
+            $timePeriods = DateHelper::splitTimePeriod($ticket->morning_start_time, $ticket->morning_end_time, $ticket->morning_num);
+        } elseif ($post['appointment_period'] == 2) {
+            $timePeriods = DateHelper::splitTimePeriod($ticket->afternoon_start_time, $ticket->afternoon_end_time, $ticket->afternoon_num);
+        } else {
+            $timePeriods = DateHelper::splitTimePeriod($ticket->night_start_time, $ticket->night_end_time, $ticket->night_num);
+        }
+        if (!in_array($post['appointment_time'], $timePeriods)) {
+            $this->json_error("该时间段不存在,请重新选择时间");
+        }
+
+        //排除过期时段
+        $timerang = explode(' - ', $post['appointment_time']);
+        $period_end = $timerang[1];
+
+        if (time() > strtotime($ticket->daytime . ' ' . $period_end)) {
+            $this->json_error("该时段已经过期,请重新选择时间");
+        }
+
         //已经预约的时间段
         $ticketPeriods = (new AppointmentApplication())->where('appointment_ticket_id', $ticket->id)->column('appointment_time');
         foreach ($ticketPeriods as $period) {
             if ($period == $post['appointment_time']) {
-                $this->json_error("该时间已经被预约了,请重新选择时间");
+                $this->json_error("该时段已被预约,请重新选择时间");
             }
         }
 

+ 2 - 2
app/api/controller/接口文档.md

@@ -206,7 +206,7 @@
 {
     "code": 1,
     "err_code": 0,
-    "msg": [
+    "data": [
         {
             "id": 3,               //号源ID
             "appointment_id": 1,
@@ -294,7 +294,7 @@
         }
     ],
     "time": "1682318054",
-    "data": null
+    "msg": "查询成功"
 }
 ```