处理bug,二线号源分开预约

main
yanzai 1 year ago
parent 1d17d3926e
commit d468b960bc

@ -458,20 +458,38 @@ select combo_id as c_id,count(*) as sale_count from orders where status in(2,4)
}
}
$temp_nmr='';
foreach ($nmr_list as $key=>$nmr){
$temp_nmr=$temp_nmr.$nmr['name']."/";
$temp_nmr=[];
$keywords = ['核磁', 'CT', 'DR', '钼靶'];
foreach ($nmr_list as $key=>$item){
foreach ($keywords as $index => $keyword) {
if (strpos($item['name'], $keyword) !== false) {
// 如果找到关键字,且结果数组中还没有该关键字的记录,则初始化
if (!isset($temp_nmr[$index])) {
$temp_nmr[$index] = [
'item_id' => $item['item_id'],
'name' => $item['name'],
'price' => $item['price'],
];
} else {
// 如果已经存在记录,只拼接名称
$temp_nmr[$index]['name'] .= ' / ' . $item['name'];
}
if(count($nmr_list)>0){
$nmr_list=[
['item_id' => $nmr_list[0]['item_id'],
'price' => $nmr_list[0]['price'],
'name' =>$temp_nmr]
}
}
}
// 将结果数组转换为最终格式
$finalResult = [];
foreach ($temp_nmr as $index => $data) {
$finalResult[] = [
'item_id' => $data['item_id'],
'name' => $data['name'],
'price' => $data['price']
];
}
$nmr_list=$finalResult;
$data = [

@ -404,8 +404,8 @@ class OrderController extends Controller
//开始预约二线
$nowDateTime=date('Y-m-d H:i:s');
if (!empty($plan_nmr_appointment_info)) {
// foreach ($erxian_info as $key => $plan_nmr) {
$plan_nmr=$plan_nmr_appointment_info[0];
foreach ($plan_nmr_appointment_info as $key => $plan_nmr) {
//$plan_nmr=$plan_nmr_appointment_info[0];
$sex="未知";
if($person->sex==1) $sex='男';
@ -434,7 +434,7 @@ class OrderController extends Controller
//调用接口预约二线
$erxian_yuyue= $AspNet::ErXian($p_nmr_data, uniqid());
if(!!$erxian_yuyue){
$plan_nmr_appointment_info[0]['gid']=$erxian_yuyue;
$plan_nmr_appointment_info[$key]['gid']=$erxian_yuyue;
$ex_u= DB::table('orders')->where(['id' => $insert])->update([
'erxian_appointment_info'=>json_encode($plan_nmr_appointment_info, JSON_UNESCAPED_UNICODE),
]);
@ -442,7 +442,7 @@ class OrderController extends Controller
}else{
return ['status' => false, 'msg' => "二线预约失败"];
}
// }
}
}
@ -508,16 +508,115 @@ class OrderController extends Controller
//订单改约
public function ChangeAppointment()
{
$AspNet = new AspNetZhuanController();
$orderid = request('orderid');
$plan_id = request('planid');
$nmr_plan_id = request('nmrPlanid');
$nmr_info = request('nmr_info');
$doctor = request('doctor');
$orderInfo = DB::table('orders')->where(['id' => $orderid, 'status' => 2])->first();
if (!$orderInfo) return \Yz::echoError1("未找到有效订单");
$person = DB::table('web_user_person')->where(['id' => $orderInfo->person_id, 'is_del' => 0])->first();
if (!$person) return \Yz::echoError1('体检人不存在');
if ($orderInfo->hospital_id == 1) {
$yyid = 6;
}
if ($orderInfo->hospital_id == 4) {
$yyid = 2;
}
//判断核磁号源有效性能,日期范围是否正常,判断核磁新日期时间是否和旧的日期时间一样
//判断各个二线直接的跨度是否在设定范围内
$ErXianKuaDu = config('app.globals.erxian_kuadu');
$check_erxian_kuadu=$this->checkDatesWithinDays($nmr_info,$ErXianKuaDu);
if(!$check_erxian_kuadu['check_status']) return \Yz::echoError1("所有二线项目预约跨度不应大于".$ErXianKuaDu."天,请重新选择");
//判断二线号源日期时间是否改变,如果改变校验号源有效性
$db_nmr_info=json_decode($orderInfo->erxian_appointment_info,true);
foreach ($nmr_info as $key=>$nmr_item){
foreach ($db_nmr_info as $db_nmr_item){
if($nmr_item['item_id']==$db_nmr_item['item_id']){
if(!($nmr_item['date']==$db_nmr_item['date'] and $nmr_item['time']==$db_nmr_item['time'] and $db_nmr_item['gid']<>"")){
$p_nmr_data = [
'item_id' => $nmr_item['item_id'],
'name' => $nmr_item['name'],
'date' => $nmr_item['date'],
'time' => $nmr_item['time'],
'price' => $nmr_item['price'],
];
//调用接口校验号源是否可用
$erxian_status = $AspNet::ErXian(['YYRQ' => $p_nmr_data['date'], 'YYSJ' => $p_nmr_data['time'], 'yyid' => $yyid, 'action' => 4], uniqid());
if ($erxian_status !== true) return \Yz::echoError1($p_nmr_data['name'] . '号源不可用,请重新选择');
}
continue;
}
}
}
//如果重新选择了体检号源,则检验号源有效性//判断体检日期是否在核磁前N天范围内
if(isset($plan_id) && $plan_id <> $orderInfo->plan_id){
$planInfo = DB::table('plans')->where(['id' => $plan_id, 'status' => 1])->first();
if (!$planInfo) return \Yz::echoError1("所选体检日期号源无效");
//判断核磁号源有效性能,日期范围是否正常,判断核磁新日期时间是否和旧的日期时间一样
//判断体检日期是否在核磁3天左右
$check_plan_kuadu=$this->checkDatesWithinDays([['date'=>$check_erxian_kuadu['mindate'],'date'=>$planInfo->date]],$ErXianKuaDu);
if(!$check_erxian_kuadu['check_status']) return \Yz::echoError1("体检日期与核磁日期跨度不能大于".$ErXianKuaDu."天,请重新选择");
}
//如果二线号源校验通过,则先取消再预约新的
foreach ($nmr_info as $key=>$nmr_item){
foreach ($db_nmr_info as $key2=> $db_nmr_item){
if($nmr_item['item_id']==$db_nmr_item['item_id']){
if(!($nmr_item['date']==$db_nmr_item['date'] and $nmr_item['time']==$db_nmr_item['time'])){
//先取消
if($db_nmr_item['gid']<>""){
$AspNet::ErXian(['id' =>$db_nmr_item['gid'], 'yyid' => $yyid, 'action' => 3], uniqid());//取消
$db_nmr_info[$key2]['gid']='';
$ex_u= DB::table('orders')->where(['id' => $orderInfo->id])->update([
'erxian_appointment_info'=>json_encode($db_nmr_info, JSON_UNESCAPED_UNICODE),
]);
}
//再预约新的
$nowDateTime=date('Y-m-d H:i:s');
$sex="未知";
if($person->sex==1) $sex='男';
if($person->sex==2) $sex='女';
$p_nmr_data = [
'ghzid'=>$person->ghzid,
'YYRQ'=>$nmr_item['date'],
'YYSJ'=>$nmr_item['time'],
'U_SFID'=>$nmr_item['item_id'],
'U_SFMC'=>$nmr_item['name'],
'HBXMJE'=>$nmr_item['price'],
'CJSJ'=>$nowDateTime,
'YYDH'=>$person->phone,
'YYXM'=>$person->name,
'YYXB'=>$sex,
'YYSR'=>$person->birthday,
'YYNL'=>Tools::GetAge($person->birthday).'岁' ,
'YYZJ'=>$person->id_number,
'YYSJ_B'=>$nmr_item['time'].':00',
'YYSJ_E'=>$nmr_item['time'].':00',
'YYSJ_BE'=>$nmr_item['time'].'-'.$nmr_item['time'],
'ZCRQ'=>$nowDateTime,
'yyid'=>$yyid,
'action'=>2,
];
//调用接口预约二线
$erxian_yuyue= $AspNet::ErXian($p_nmr_data, uniqid());
if(!!$erxian_yuyue){
$db_nmr_info[$key2]['gid']=$erxian_yuyue;
$db_nmr_info[$key2]['date']=$nmr_item['date'];
$db_nmr_info[$key2]['time']=$nmr_item['time'];
$ex_u= DB::table('orders')->where(['id' => $orderInfo->id])->update([
'erxian_appointment_info'=>json_encode($db_nmr_info, JSON_UNESCAPED_UNICODE),
]);
if(!$ex_u) return ['status' => false, 'msg' => "二线预约失败"];
}else{
return ['status' => false, 'msg' => "二线预约失败"];
}
}
continue;
}
}
}
// var_dump($nmr_info);
// return false;
//判断体检日期时间是否和旧的日期时间一样。一样则跳过,不一样则更新
if (isset($plan_id) && $plan_id <> $orderInfo->plan_id) {
$peis = new PEISApiController();
@ -545,6 +644,24 @@ class OrderController extends Controller
}
return \Yz::echoError1("未更改内容,无需进行此操作");
}
//判断时间跨度
function checkDatesWithinDays($data,$kuadu) {
// 提取所有日期
$dates = array_column($data, 'date');
// 将日期转换为时间戳
$timestamps = array_map('strtotime', $dates);
// 找出最早和最晚的时间戳
$earliest = min($timestamps);
$latest = max($timestamps);
// 计算时间差(以天为单位)
$differenceInDays = ($latest - $earliest) / (60 * 60 * 24);
// 判断时间差是否在3天以内
return ['check_status'=>$differenceInDays <= $kuadu,'mindate'=> date('Y-m-d H:i:s', $earliest)];
}
public function generateOrderNumber()
{
@ -719,6 +836,7 @@ class OrderController extends Controller
return ['status' => true, 'msg' => "完成"];
}
//未支付取消订单
public function Cancel()
{

@ -8,7 +8,9 @@ return [
'PayNotifyUrl' =>"http://124.225.137.54:39080/h5/#/pages/main/order/CheckPay",//支付完成后小程序跳转H5路径
// 'Env'=>'pro',
'Env'=>'dev',
'Wj_ZheKou'=>1,
'Wj_ZheKou'=>1,//问卷带出项目,折扣率
'erxian_kuadu'=>3//二线时间跨度,单位天
],
/*

@ -146,6 +146,7 @@
tj_date.value = orderInfo.value.appointment_date
tj_time.value = orderInfo.value.appointment_time
tj_plan_id.value=orderInfo.value.plan_id
});
}
@ -350,7 +351,6 @@
doctor: doctor_name.value
}
console.log(data);
return false
const response = await $api("ChangeAppointment", data);
uni.hideLoading();
$response(response, () => {

@ -367,13 +367,15 @@
}
if (yytjInfo.value.nmr_list.length > 1 && nmrIndex.value == 0) {
if (!yytjInfo.value.doctor_name) {
yytjInfo.value.nmr_list = yytjInfo.value.nmr_list.map((val) => {
return {
...val,
time: "",
id: "",
};
});
// yytjInfo.value.nmr_list = yytjInfo.value.nmr_list.map((val) => {
// return {
// ...val,
// time: "",
// id: "",
// };
// });
yytjInfo.value.nmr_list[nmrIndex.value].time = "";
yytjInfo.value.nmr_list[nmrIndex.value].id = "";
}
}
time.value = "";
@ -421,11 +423,20 @@
}
} else {
//
let heci_item = yytjInfo.value.nmr_list[0]
//
let minDateItem = yytjInfo.value.nmr_list[0];
for (let i = 1; i < yytjInfo.value.nmr_list.length; i++) {
if (new Date(yytjInfo.value.nmr_list[i].time.split(' ')[0]) < new Date(minDateItem.time.split(' ')[0])) {
minDateItem = yytjInfo.value.nmr_list[i];
}
}
//let heci_item = yytjInfo.value.nmr_list[0]
let heci_item = minDateItem
if (heci_item.item_id !== -1) {
//
if (!!heci_item.time) {
//
let heci_time = new Date(heci_item.time.split(' ')[0]) / 1
let choose_time = new Date(item.date) / 1
let day_check = ''

Loading…
Cancel
Save