You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

334 lines
9.4 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers;
use App\Models\Appointment;
use App\Models\HospitalAdditional;
use Illuminate\Http\Request;
use Login;
use Yo;
class ComboItemController extends Controller
{
public function group_info($hospital, $data)
{
$peis = new PEISApiController();
$info = $peis::Post('团检登记查询', $hospital, $data);
$items = [];
$group_info = $info['data'][0];
if (isset($group_info['项目列表'])) {
foreach ($group_info['项目列表'] as $datum) {
$items[] = [
'id' => $datum['Id'],
'name' => $datum['名称'],
];
}
}
return [
'name' => $group_info['姓名'],
'id_number' => $group_info['证件号码'],
'combo_name' => $group_info['套餐名称'],
'combo_id' => $group_info['套餐Id'],
'start_time' => $group_info['预约开始日期'],
'end_time' => $group_info['预约结束日期'],
'group_name' => $group_info['单位名称'] . ($group_info['部门名称']),
'items' => $items,
'appointment_number' => $group_info['预约Id']
];
}
public function combo($hospital, $data)
{
$peis = new PEISApiController();
$combo_list = $peis::Post('套餐查询', $hospital, $data)['data'];
$list = [];
foreach ($combo_list as $item) {
$list[] = [
'id' => $item['Id'],
'name' => $item['名称'],
'py' => $item['拼音'],
'price' => $item['价格'],
'original_price' => $item['原价'],
'sex' => $item['性别限制'],
'desc' => $item['简介'],
'count' => $item['简介'],
// 'original_info' => $item
];
}
return $list;
}
public function combo_info($hospital, $data)
{
$peis = new PEISApiController();
// 假设 Post 方法调用正确,这里保持原有逻辑
$response = $peis::Post('套餐详情查询', $hospital, $data);
// 增加简单的容错处理,防止数据为空报错
if (empty($response['data']) || !isset($response['data'][0])) {
return []; // 或者返回默认结构,视业务需求而定
}
$combo_info = $response['data'][0];
$info = [
'id' => $combo_info['Id'],
'name' => $combo_info['名称'],
'price' => $combo_info['价格'],
'original_price' => $combo_info['原价'],
'sex' => $combo_info['性别限制'],
'items' => [],
];
// 定义指定的排序顺序
$sortOrder = [
"一般检查" => 1,
"内科" => 2,
"外科" => 3,
"眼科" => 4,
"心电图" => 5,
"妇科" => 6,
"检验科" => 7,
"超声科" => 8,
"DR" => 9,
"CT" => 10,
];
foreach ($combo_info['包含项目'] as $item) {
$info['items'][] = [
'id' => $item['Id'],
'name' => $item['名称'],
'price' => $item['价格'],
'jianjie' => $item['简介'],
'keshi_name' => $item['科室名称'],
];
}
// 执行排序
usort($info['items'], function ($a, $b) use ($sortOrder) {
$deptA = $a['keshi_name'];
$deptB = $b['keshi_name'];
// 获取排名,如果不在列表中,赋予一个很大的值(排在最后)
$rankA = isset($sortOrder[$deptA]) ? $sortOrder[$deptA] : 9999;
$rankB = isset($sortOrder[$deptB]) ? $sortOrder[$deptB] : 9999;
// 如果排名相同(例如都在列表中且相同,或都不在列表中),保持原有相对顺序或按名称排序(可选)
// 这里简单处理如果排名一样返回0
if ($rankA == $rankB) {
return 0;
}
return ($rankA < $rankB) ? -1 : 1;
});
$info['count'] = count($info['items']);
return $info;
}
public function items($hospital, $data)
{
$peis = new PEISApiController();
$items = $peis::Post('自选项目查询', $hospital, $data)['data'];
$list = [];
foreach ($items as $item) {
$list[] = [
'id' => $item['Id'],
'name' => $item['名称'],
'py' => $item['拼音'],
'price' => $item['价格'],
'sex' => $item['性别限制'],
'clinic' => $item['科室Id'],
'clinic_name' => $item['科室名称'],
'choose' => $item['可选'],
'jianjie'=>$item['简介'],
];
}
return $list;
}
public function mp_items_list(Request $request)
{
Login::user();
$hospital = $request->post('hospital');
$combo = $request->post('combo');
$list = self::items($hospital, [
'价格下限' => "0",
'价格上限' => "999999",
"性别" => null,
"妇检" => null,
"套餐Id" => $combo ? (string)$combo : null,
"项目Id列表" => []
]);
$list_map = [];
foreach ($list as $item) {
if (!!$item['choose']) {
if (!isset($list_map['g' . $item['clinic']])) {
$list_map['g' . $item['clinic']] = [
'id' => $item['clinic'],
'name' => $item['clinic_name'],
'items' => []
];
}
$list_map['g' . $item['clinic']]['items'][] = [
'id' => $item['id'],
'name' => $item['name'],
'py' => $item['py'],
'price' => $item['price'],
'sex' => $item['sex'],
];
}
}
$l = [];
foreach ($list_map as $item) {
$l[] = $item;
}
return Yo::echo([
'list' => $l
]);
}
public function combo_list(Request $request)
{
Login::admin([], [17, 24]);
$hospital = $request->post('hospital');
$list = self::combo($hospital, [
'价格下限' => "0",
'价格上限' => "999999",
'性别' => null,
'妇检' => false
]);
return Yo::echo([
'list' => $list
]);
}
public function mp_buy_info(Request $request)
{
Login::user();
$hospital = $request->post('hospital');
$combo = $request->post('combo');
$count = 0;
$price = 0;
$original_price = 0;
$combo_info = false;
if (!!$combo) {
$combo_info = self::combo_info($hospital, [
'套餐Id' => $combo,
]);
// var_dump($combo_info);
$count += $combo_info['count'];
$price += $combo_info['price'];
if ($combo_info['original_price'] > $combo_info['price']) {
$original_price += $combo_info['original_price'];
} else {
$original_price += $combo_info['price'];
}
}
$items = $request->post('items');
$items_list = [];
if (count($items) != 0) {
$items_list = self::items($hospital, [
'价格下限' => "0",
'价格上限' => "999999",
"性别" => null,
"妇检" => null,
"套餐Id" => null,
"项目Id列表" => $items
]);
}
$item_list_ret = [];
foreach ($items_list as $item) {
$count++;
$price += $item['price'];
$original_price += $item['price'];
$item_list_ret[] = [
'id' => $item['id'],
'name' => $item['name'],
'price' => $item['price'],
'jianjie' => $item['jianjie']
];
}
$time = $request->post('time');
$time_info = Appointment::where('id', $time['id'])->where('status', 1)->where('del', 2)->first();
if (!!$time_info) {
if ($time_info->max_count <= $time_info->used_count) {
$time_info = false;
}
}
if (!!$time_info) {
$show = date('Y-m-d H:i', strtotime($time_info->date . ' ' . $time_info->start_time)) . ' - ' . date('H:i', strtotime($time_info->date . ' ' . $time_info->end_time));
$time_info = [
'id' => $time_info->id,
'date' => $time_info->date,
'show' => $show,
];
}
$group = $request->post('group');
$group_info = false;
if (!!$group) {
$group_info = self::group_info($hospital, [
"电话号码" => null,
"证件号码" => null,
"预约Id" => $group
]);
$count += count($group_info['items']);
}
return Yo::echo([
'price' => $price,
'original_price' => $original_price,
'group' => $group_info,
'count' => $count,
'combo' => $combo_info,
'items' => $item_list_ret,
'time' => !!$time_info ? $time_info : [
'id' => 0,
'date' => date('Y-m-d'),
],
]);
}
public function mp_combo_list(Request $request)
{
// Login::user();
$hospital = $request->post('hospital');
$list = self::combo($hospital, [
'价格下限' => "0",
'价格上限' => "999999",
'性别' => null,
'妇检' => false
]);
$list_map = [];
foreach ($list as $item) {
$item['count'] = 0;
$list_map['i' . $item['id']] = $item;
}
$hospital_additional = HospitalAdditional::where('hospital', $hospital)->first();
$self_count = [];
if (!!$hospital_additional) $self_count = json_decode($hospital_additional->combo_count, true);
$public_additional = HospitalAdditional::where('hospital', 0)->first();
$public_count = [];
if (!!$public_additional) $public_count = json_decode($public_additional->combo_count, true);
foreach ($public_count as $item) {
if (isset($list_map['i' . $item['id']])) {
$list_map['i' . $item['id']]['count'] = $item['count'];
}
}
foreach ($self_count as $item) {
if (isset($list_map['i' . $item['id']])) {
$list_map['i' . $item['id']]['count'] = $item['count'];
}
}
$l = [];
foreach ($list_map as $item) {
$l[] = $item;
}
return Yo::echo([
'list' => $l
]);
}
}