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.

413 lines
11 KiB
PHP

<?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['部门名称']),
'danwei_id' => $group_info['单位Id'],
'fenzu_id' => $group_info['分组Id'],
'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();
$combo_info = $peis::Post('套餐详情查询', $hospital, $data)['data'][0];
$info = [
'id' => $combo_info['Id'],
'name' => $combo_info['名称'],
'price' => $combo_info['价格'],
'original_price' => $combo_info['原价'],
'sex' => $combo_info['性别限制'],
'items' => [],
];
foreach ($combo_info['包含项目'] as $item) {
$info['items'][] = [
'id' => $item['Id'],
'name' => $item['名称'],
'price' => $item['价格'],
];
}
$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['可选'],
'beizhu'=> $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列表" => []
]);
// Yo::error_exit([
// 'message' => "res",
// 'code' => 2001,
// 'data' => $list
// ]);
$group = $request->post('group');
$group_info = false;
$group_items=[];
if (!!$group) {
$group_info = self::group_info($hospital, [
"电话号码" => null,
"证件号码" => null,
"预约Id" => $group
]);
if(!!$group_info){
foreach ($group_info['items'] as $g_items){
$group_items[]=$g_items['id'];
}
}
}
$list_map = [];
foreach ($list as $item) {
if (!!$item['choose']) {
//判断套餐内是否有这个检查项目,如果有则跳过
if(in_array($item['id'],$group_items)) continue;
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;
}
$arrayB=[
"一般检查",
"人体成分分析",
"内科",
"外科",
"眼科",
"口腔科室",
"耳鼻喉科",
"妇科",
"妇科(病理)",
"心电图",
"骨密度",
"动脉硬化",
"碳13呼气试验",
"碳14",
"肺功能",
"电测听",
"检验科",
"超声科",
"CT科",
"放射科",
"基因检测"
];
$mapB = array_flip($arrayB);
// 定义排序函数
usort($l, function ($a, $b) use ($mapB, $arrayB) {
$posA = isset($mapB[$a['name']]) ? $mapB[$a['name']] : count($arrayB);
$posB = isset($mapB[$b['name']]) ? $mapB[$b['name']] : count($arrayB);
return $posA <=> $posB;
});
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;
$shuxing=[];//项目属性,用来判断互斥
if (!!$combo) {
$combo_info = self::combo_info($hospital, [
'套餐Id' => $combo,
]);
$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');
//$group = $request->post('group');
// if(!!$group and count($items) != 0){
// //调用团检登记查询获取单位id
// $data=[
// "预约Id"=>$group
// ];
// $peis = new PEISApiController();
// $combo_info = $peis::Post('团检登记查询', $hospital, $data)['data'][0];
// var_dump($combo_info);
// }
$group = $request->post('group');
$group_info = false;
if (!!$group) {
$group_info = self::group_info($hospital, [
"电话号码" => null,
"证件号码" => null,
"预约Id" => $group
]);
}
$items_list = [];
if (count($items) != 0) {
$items_list = self::items($hospital, [
'价格下限' => "0",
'价格上限' => "999999",
"性别" => null,
"妇检" => null,
"套餐Id" => null,
"项目Id列表" => $items
]);
}
$item_list_ret = [];
$has_huchi=false;
//如果是团检并且选择了自选
$fenzu=false;
if(!!$group and count($items) != 0){
$data=[
"单位Id"=>$group_info['danwei_id']
];
$peis = new PEISApiController();
$fenzu = $peis::Post('获取单位分组', $hospital, $data)['data'][0];
}
foreach ($items_list as $item) {
if($item['beizhu']<>'' and $item['beizhu']<>null and json_decode($item['beizhu'],true) ) {
$beizhu=json_decode($item['beizhu'], true);
$item_fenlei=$beizhu['分类'];
if(!in_array($item_fenlei, $shuxing)){
$shuxing[]=$item_fenlei;
}else{
$has_huchi=true;
continue;
}
}
$count++;
if($fenzu !==false and isset($fenzu['分组'])){
$item['price']=$item['price']*$fenzu['分组'][0]['增项折扣'];
}
$price += $item['price'];
$original_price += $item['price'];
$item_list_ret[] = [
'id' => $item['id'],
'name' => $item['name'],
'price' => $item['price']
];
}
$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,
];
}
if ($group_info !==false) {
// $group_info = self::group_info($hospital, [
// "电话号码" => null,
// "证件号码" => null,
// "预约Id" => $group
// ]);
$count += count($group_info['items']);
// $items =$request->post('items');
// if(count($items )>0){
// $data=[
// "单位Id"=>$group_info['danwei_id']
// ];
// $peis = new PEISApiController();
// $fenzu = $peis::Post('获取单位分组', $hospital, $data)['data'][0];
// var_dump($fenzu);
// if(isset($fenzu['分组'])){
// foreach ($fenzu['分组'] as $key=>$zu){
// foreach ($fenzu['包含项目信息'] as $key2=>$item){
// if($item['Id']==)
// }
// }
// }
// }
}
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'),
],
'has_huchi'=>$has_huchi
]);
}
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
]);
}
}