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.

244 lines
8.9 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\API\Internal;
use App\Http\Controllers\API\PEISApiController;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class OrderController extends Controller
{
//到检
public function TJCheck()
{
$password = request('password');
$serve_id = request('serve_id');
$exam_id = request('exam_id');
if (!isset($exam_id) or empty($exam_id)) return \Yz::echoError1("体检号不能为空");
if ($password !== 'YRtA1rx1iWgbpYKX') return \Yz::echoError1("校验密码失败");
if (isset($serve_id) and !empty($serve_id) and $serve_id <> '') { //到检通知
$orderInfo = DB::table('orders')->where('appointment_number', $serve_id)->orderBy('id', 'desc')->first();
if (!$orderInfo) {
return $this->CreateOrder($exam_id);
} else {
if (!!$exam_id) {
if ($orderInfo->status == 1 and strpos($orderInfo->source, '线下体检预约') !== false ){
return $this->CreateOrder($exam_id,$orderInfo->id);
}
if ($orderInfo->status == 1) return \Yz::echoError1("订单未付款");
if ($orderInfo->status == 3) return \Yz::echoError1("订单已取消");
if ($orderInfo->status == 4 || $orderInfo->check_status == 2) return \Yz::echoError1("人员已经到检");
if ($orderInfo->status == 5) return \Yz::echoError1("订单已退款");
DB::table('orders')->where('id', $orderInfo->id)->update([
'status' => 4,
// 'tj_number'=>$info['data'][0]['体检号'],
'tj_number' => $exam_id,
'check_status' => 2,
'check_time' => date('Y-m-d H:i:s'),
'check_read_status' => 1
]);
return \Yz::Return(true, "", ['id' => $orderInfo->id]);
} else {
return \Yz::echoError1("体检号不能为空");
}
}
} else { //体检直接登记用户信息没经过h5登记。根据体检号查询信息入库
return $this->CreateOrder($exam_id);
}
}
//根据体检号拉取数据进行存储
public function CreateOrder($exam_id,$order_id=0)
{
if (isset($exam_id)) {
$peis = new PEISApiController();
$data = [
'电话号码' => "",
'证件号码' => "",
'体检号' => $exam_id,
'包含内部信息' => true
];
$reports = $peis::Post('体检报告查询', 1, $data);
if (isset($reports['data'][0]['收费项目列表'])) {
$data = $reports['data'][0];
$items = [];
foreach ($data['收费项目列表'] as $it) {
$items[] = [
'id' => $it['收费项目Id'],
'name' => $it['收费项目名称'],
'price' => '',
];
}
$buyInfo = [
'combo' => [
'id' => 0,
'name' => '',
'price' => ''
],
'items' => $items,
'group' => [
'id' => '',
]
];
$sex = 0;
if ($data['性别'] == '男') $sex = 1;
if ($data['性别'] == '女') $sex = 2;
$dataInfo = [
'hospital_id' => 1,
'title' => $data['套餐名称'],
'type' => $data['单位名称'] == '个人' ? 1 : 2,
'source' => '体检推送',
'name' => $data['姓名'],
'id_number' => $data['证件号码'],
'person_id' => 0,
'buy_info' => json_encode($buyInfo, JSON_UNESCAPED_UNICODE),
'status' => 4,
'plan_number' => $data['分诊信息'],
'appointment_date' => explode('T', $data['登记时间'])[0],
'tj_number' => $exam_id,
'phone' => $data['电话号码'],
'sex' => $sex,
'birthday' => explode('T', $data['出生日期'])[0],
'check_status' => 2,
'check_time' => $data['登记时间'],
];
if($order_id>0){
if(empty($dataInfo['title'])){
$dataInfo['title']='自选项目';
}
unset($dataInfo['source']);
unset($dataInfo['person_id']);
unset($dataInfo['person_id']);
$insert = DB::table('orders')->where('id',$order_id)->update($dataInfo);
}else{
$insert = DB::table('orders')->insert($dataInfo);
}
if ($insert) {
return \Yz::Return(true, "创建成功", ['id' => $insert]);
} else {
return \Yz::echoError1("创建失败");
}
} else {
return \Yz::echoError1("根据体检号查询用户信息出错,结果非预期");
}
} else {
return \Yz::echoError1("体检号不能为空");
}
}
public function GetH5Order()
{
$appointment_number = request('appointment_number');//思信预约完成后的id
if (!isset($appointment_number) || empty($appointment_number)) return \Yz::echoError1('预约id 不能为空');
$order_info = DB::table('orders')->where(['appointment_number' => $appointment_number, 'status' => 2, 'check_status' => 1])->first();
if (!!$order_info) {
$order_info->buy_info = json_decode($order_info->buy_info, true);
$order_info->erxian_appointment_info = json_decode($order_info->erxian_appointment_info, true);
} else {
return \Yz::echoError1('未找到有效订单');
}
return \Yz::Return(true, '获取成功', [
'info' => $order_info
]);
}
//线下预约完后未支付未到检推送过来订单由H5进行后续流程支付改约等
public function OfflineOrderPush()
{
$password = request('password');
if ($password !== 'YRtA1rx1iWgbpYKX') return \Yz::echoErrorJson("校验密码失败");
$hospital_id = request('hospital_id'); //秀英院区1府城院区4
$appointment_number = request('appointment_number');
$plan_id = request('plan_id');
$combo_id = request('combo_id');
if (!isset($plan_id) or empty($plan_id)) return \Yz::echoErrorJson("占用的号源id不能为空");
$check=DB::table('orders')->where(['appointment_number' => $appointment_number])->first();
if (!!$check) return \Yz::echoErrorJson("预约已存在,无需重复推送");
$plan_info=DB::table('plans')->where('id', $plan_id)->first();
$data = [
"证件号码" => null,
"电话号码" => null,
"预约Id" => $appointment_number,
];
$peis = new PEISApiController();
$info = $peis::Post('个检预约查询', $hospital_id, $data);
if (isset($info['data'][0])) {
$res = $info['data'][0];
$checkup_type_id = null;
$checkup_type = DB::table('checkup_type')->where('name', $res['体检类型'])->first();
if(!!$checkup_type) $checkup_type_id = $checkup_type->id;
// $title=$res['项目列表'];
// if(empty($res['项目列表']) and $res['总计金额']==0){
// $title='空号源';
// }
$items = [];
foreach ($res['项目列表'] as $it) {
if($it['自选项目']){
$items[] = [
'id' => $it['Id'],
'name' => $it['名称'],
'price' => $it['价格'],
'youhui_fangshi' => $it['优惠方式'],
'youhui_zhi' => $it['优惠值'],
];
}
}
$buyInfo = [
'combo' => [
'id' => empty($combo_id)?0:$combo_id,
'name' => '',
'price' => ''
],
'items' => $items,
'group' => [
'id' => '',
]
];
$orderController= new \App\Http\Controllers\API\H5\OrderController();
if((empty($res['套餐名称']) or $res['套餐名称']=='无') and count($items)>0){
$res['套餐名称']='自选项目';
}
$save_data = [
'title' => $res['套餐名称'],
'type' => 1,
'source' => (count($items)==0 and empty($combo_id))?'线下体检预约-空号源':'线下体检预约-项目',
'checkup_type_id' => $checkup_type_id,
'person_id' => 0,
'name' => $res['姓名'],
'id_number' => $res['证件号码'],
'buy_info' => json_encode($buyInfo, JSON_UNESCAPED_UNICODE),
'price' => $res['总计金额'],
'true_price' => $res['总计金额'],
'order_number' =>$orderController->generateOrderNumber(),
'status' =>1,
'appointment_date' =>$plan_info->date,
'appointment_time' =>$plan_info->time,
'appointment_number' =>$res['预约Id'],
'appointment_back_info' => json_encode($res, JSON_UNESCAPED_UNICODE),
'plan_id' =>$plan_info->id,
'plan_number' =>$plan_info->plan_number,
'combo_id' =>empty($combo_id)?0:$combo_id,
'hospital_id' =>$hospital_id,
'phone' =>$res['电话号码'],
'sex' =>null,
'birthday' =>null,
'married' =>4,
];
$insert = DB::table('orders')->insert($save_data);
if ($insert) {
return \Yz::Return(true, "创建成功", ['id' => $insert]);
} else {
return \Yz::echoErrorJson("创建失败");
}
} else {
return \Yz::echoErrorJson("未获取到预约信息");
}
}
}