whereBetween('date', [$first_day, $last_day])->whereIn('status', [1]) ->whereRaw('CONCAT(date, " ", time) >?', [$currentDateTime]) ->whereRaw('JSON_CONTAINS(checkup_type_id, ?, "$")', [json_encode($checkup_type_id)]) ->where(['hospital_id' => $hospital_id, 'type' => 1, 'is_del' => 0]) ->where('is_vip', '<>', 1) ->whereIn('use_type', [0, $use_type]); if (!empty($danwei_id)) { $cha_bind_danwei = DB::table('plan_type')->WhereRaw('JSON_CONTAINS(bind_units, ?)', [json_encode($danwei_id)])->where(['is_del' => 0])->get(); if (count($cha_bind_danwei) > 0) { $list = $list->WhereRaw('JSON_CONTAINS(bind_work_unit_id, ?)', [json_encode($danwei_id)]); } else { $list = $list ->where(function ($query) use ($danwei_id) { // 检查 bind_work_unit_id 为 NULL 或空字符串 $query->whereNull('bind_work_unit_id') ->orWhere('bind_work_unit_id', '=', ''); }); } } if (isset($person_id)) { $personInfo = DB::table('web_user_person')->where(['id' => $person_id])->first(); if (!!$personInfo) { $list = $list->whereIn('sex', [0, $personInfo->sex]); } } if ($use_type == 1) { $list = $list->where(function ($query) use ($amount) { $query->where('amount_limit1', 0)->orWhere('amount_limit1', '>=', $amount); }); } if ($use_type == 2) { $list = $list->where(function ($query) use ($amount) { $query->where('amount_limit2', 0)->orWhere('amount_limit2', '>=', $amount); }); } $list = $list->select('date', DB::raw('COUNT(*) as count')); $list = $list->groupBy('date')->get(); //如果是婚检,不是星期二、五、六数量设置为0 if ($checkup_type_id == 4) { $dates = array(); foreach ($list as $item) { $date = $item->date; $dayOfWeek = date('N', strtotime($date)); if (in_array($dayOfWeek, config('app.globals.HunJianXingQi'))) { $dates[] = $item; } } $list = $dates; } //获取整月日期 // 获取当月的第一天 $firstDay = date("Y-m-d", strtotime($month . "-01")); // 获取当月的最后一天 $lastDay = date("Y-m-t", strtotime($month)); $dates = array(); $k = 0; for ($i = $firstDay; $i <= $lastDay; $i = date("Y-m-d", strtotime($i . " +1 day"))) { $xingqi = \App\Lib\Tools::GetWeekName($i); $dates[] = [ 'date' => $i, 'xingqi' => $xingqi, 'count' => 0 ]; foreach ($list as $item) { if ($item->date == $i) { $dates[$k] = [ 'date' => $i, 'xingqi' => $xingqi, 'count' => $item->count ]; break; } } $k++; } return \Yz::Return(true, "查询完成", ['list' => $dates]); } //获取某日号源列表 public function GetDayPlanList() { $hospital_id = request('hospital'); $openid = request('openid'); $person_id = request('person_id'); $person_sex = request('person_sex'); $combo_id = request('combo_id'); $item_ids = request('item_ids'); $date = request('date'); $er_xian_info = request('er_xian_info'); $use_type = request('use_type');//使用类型 1个检 2团检 $checkup_type_id = (string)request('checkup_type_id');//体检类型表对应id $amount = request('amount');//总金额 if (!isset($checkup_type_id)) return \Yz::echoError1("体检类型不能为空"); $danwei_id = request('danwei_id');//单位名称 $personInfo = false; if (isset($person_id)) { $personInfo = DB::table('web_user_person')->where(['id' => $person_id])->first(); } $currentDateTime = now(); $list = DB::table('plans') ->where('date', $date)->whereIn('status', [1, 2]) ->whereRaw('CONCAT(date, " ", time) >?', [$currentDateTime]) ->whereRaw('JSON_CONTAINS(checkup_type_id, ?, "$")', [$checkup_type_id]) ->where(['hospital_id' => $hospital_id, 'type' => 1, 'is_del' => 0]) ->where('is_vip', '<>', 1) ->whereIn('use_type', [0, $use_type]); if (!empty($danwei_id)) { $cha_bind_danwei = DB::table('plan_type')->WhereRaw('JSON_CONTAINS(bind_units, ?)', [json_encode($danwei_id)])->where(['is_del' => 0])->get(); if (count($cha_bind_danwei) > 0) { $list = $list->WhereRaw('JSON_CONTAINS(bind_work_unit_id, ?)', [json_encode($danwei_id)]); } else { $list = $list ->where(function ($query) use ($danwei_id) { // 检查 bind_work_unit_id 为 NULL 或空字符串 $query->whereNull('bind_work_unit_id') ->orWhere('bind_work_unit_id', '=', ''); }); } } $comboItemsNmr = []; if (!!$combo_id) { $comboInfo = DB::table('combos')->where(['combo_id' => $combo_id])->first(); if (!empty($comboInfo->keyue_start_time) and !empty($comboInfo->keyue_end_time)) { $list = $list->whereBetween('time', [$comboInfo->keyue_start_time, $comboInfo->keyue_end_time]); } $comboItemsNmr = DB::table('combo_items')->where(['combo_id' => $combo_id])->where('name', 'like', '%磁%')->get(); } $ItemsNmr = [];//自选核磁项目 if (isset($item_ids) and !empty($item_ids)) { $ItemsNmr = DB::table('items')->whereIn('item_id', $item_ids)->where('name', 'like', '%磁%')->get(); } if (!!$personInfo) { $list = $list->whereIn('sex', [0, $personInfo->sex]); } if (isset($person_sex)) { $list = $list->whereIn('sex', [0, $person_sex]); } if ($use_type == 1) { $list = $list->where(function ($query) use ($amount) { $query->where('amount_limit1', 0)->orWhere('amount_limit1', '>=', $amount); }); } if ($use_type == 2) { $list = $list->where(function ($query) use ($amount) { $query->where('amount_limit2', 0)->orWhere('amount_limit2', '>=', $amount); }); } $list = $list->orderBy('time', 'asc')->get(); if (count($comboItemsNmr) > 0 or count($ItemsNmr) > 0 or !empty($er_xian_info)) { //如果有核磁项目,11点往后的号源不可用 foreach ($list as $key => $item) { if ($item->time > '11:00:00' and $item->time <= '12:00:00') { $list[$key]->status = 2; } } } //如果是婚检,不是星期二、五、六数量设置为0 if ($checkup_type_id == 4) { $dayOfWeek = date('N', strtotime($date)); if (!in_array($dayOfWeek, config('app.globals.HunJianXingQi'))) { $list = []; } } // 获取前后各三天的日期 $dateTime = new DateTime($date); $days7 = []; for ($i = -3; $i <= 3; $i++) { $dateTimeClone = clone $dateTime; // 克隆对象以避免修改原对象 $dateTimeClone->modify("$i days"); // 修改日期 $days7[] = $dateTimeClone->format('Y-m-d'); // 按照需要的格式添加到结果数组 } $weeklist = DB::table('plans') ->whereBetween('date', [$days7[0], $days7[6]])->whereIn('status', [1]) ->whereRaw('CONCAT(date, " ", time) >?', [$currentDateTime]) ->whereRaw('JSON_CONTAINS(checkup_type_id, ?, "$")', [$checkup_type_id]) ->where(['hospital_id' => $hospital_id, 'type' => 1, 'is_del' => 0]) ->where('is_vip', '<>', 1) ->whereIn('use_type', [0, $use_type]); if (!empty($danwei_id)) { $cha_bind_danwei = DB::table('plan_type')->WhereRaw('JSON_CONTAINS(bind_units, ?)', [json_encode($danwei_id)])->where(['is_del' => 0])->get(); if (count($cha_bind_danwei) > 0) { $weeklist = $weeklist->WhereRaw('JSON_CONTAINS(bind_work_unit_id, ?)', [json_encode($danwei_id)]); } else { $weeklist = $weeklist ->where(function ($query) use ($danwei_id) { // 检查 bind_work_unit_id 为 NULL 或空字符串 $query->whereNull('bind_work_unit_id') ->orWhere('bind_work_unit_id', '=', ''); }); } } if (count($comboItemsNmr) > 0 or count($ItemsNmr) > 0 or !empty($er_xian_info)) { //如果有核磁项目,11点往后的号源不可用 $weeklist = $weeklist->where('time', '<=', '11:00'); } if (!!$combo_id) { $comboInfo = DB::table('combos')->where(['combo_id' => $combo_id])->first(); if (!empty($comboInfo->keyue_start_time) and !empty($comboInfo->keyue_end_time)) { $weeklist = $weeklist->whereBetween('time', [$comboInfo->keyue_start_time, $comboInfo->keyue_end_time]); } if (count($comboItemsNmr) > 0) { $weeklist = $weeklist->whereNotBetween('time', ['11:00:00', '12:00:00']); } } if (!!$personInfo) { $weeklist = $weeklist->whereIn('sex', [0, $personInfo->sex]); } if ($use_type == 1) { $weeklist = $weeklist->where(function ($query) use ($amount) { $query->where('amount_limit1', 0)->orWhere('amount_limit1', '>=', $amount); }); } if ($use_type == 2) { $weeklist = $weeklist->where(function ($query) use ($amount) { $query->where('amount_limit2', 0)->orWhere('amount_limit2', '>=', $amount); }); } $weeklist = $weeklist->select('date', DB::raw('COUNT(*) as count')); $weeklist = $weeklist->groupBy('date')->get(); //如果是婚检,不是星期二、五、六数量设置为0 if ($checkup_type_id == 4) { $dates = array(); foreach ($weeklist as $item) { $date = $item->date; $dayOfWeek = date('N', strtotime($date)); if (in_array($dayOfWeek, config('app.globals.HunJianXingQi'))) { $dates[] = $item; } } $weeklist = $dates; } $week7 = []; $k = 0; foreach ($days7 as $date) { $xingqi = \App\Lib\Tools::GetWeekName($date); $week7[] = [ 'date' => $date, 'count' => 0, 'xingqi' => $xingqi ]; foreach ($weeklist as $plan) { if ($plan->date == $date) { $week7[$k] = [ 'date' => $date, 'xingqi' => $xingqi, 'count' => $plan->count ]; break; } } $k++; } return \Yz::Return(true, "查询完成", ['list' => $list, 'weeklist' => $week7]); } //检查号源是否可用 public function CheckPlan($plan_id, $hospital_id, $type, $sex, $price, $checkup_type_id) { $plan = DB::table('plans')->where(['id' => $plan_id, 'hospital_id' => $hospital_id, 'status' => 1, 'is_del' => 0])->first(); if (!$plan) return ['status' => false, 'msg' => "号源不可用"]; //判断个检/团检类型 if ($plan->use_type <> 0 and $plan->use_type <> $type) { $type_temp = ''; if ($plan->use_type == 1) $type_temp = '个检'; if ($plan->use_type == 2) $type_temp = '团检'; return ['status' => false, 'msg' => "此号源为" . $type_temp . "号源,不可用"]; } //判断是否是预留号源 if ($plan->type <> 1) return ['status' => false, 'msg' => "此号源为预留号源,不可用"]; //判断是否是vip //判断性别 if ($plan->sex <> 0 and $plan->sex <> $sex) return ['status' => false, 'msg' => "此号源性别与体检人性别不符,不可用"]; //判断体检类型checkup_type if (!!$checkup_type_id) { $checkup_type_array = json_decode($plan->checkup_type_id, true); if (!in_array($checkup_type_id, $checkup_type_array)) { return ['status' => false, 'msg' => "此号源体检类型与套餐不匹配,不可用"]; } } //判断金额 if ($plan->use_type == 1 and $plan->amount_limit1 <> 0) { if ($price < $plan->amount_limit1) return ['status' => false, 'msg' => "未达到此号源限制的金额,不可用"]; } if ($plan->use_type == 2 and $plan->amount_limit2 <> 0) { if ($price < $plan->amount_limit2) return ['status' => false, 'msg' => "未达到此号源限制的金额,不可用"]; } //判断时间是否过期 $plan_datetime = $plan->date . ' ' . $plan->time; if ($plan_datetime < date('Y-m-d H:i:s')) return ['status' => false, 'msg' => "号源已过期,不可用"]; return ['status' => true, 'msg' => "", 'plan' => $plan]; } }