批量取消

main
yanzai 1 year ago
parent 4b72da2da6
commit 8c1d6d3864

@ -7,6 +7,7 @@ use App\Http\Controllers\Controller;
use App\Http\Controllers\API\PEISApiController;
use App\Lib\Tools;
use App\Services\ConfigService;
use App\Services\OrderService;
use DateTime;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@ -19,17 +20,17 @@ class OrderController extends Controller
$openid = $request->post('openid');
$user = DB::table('web_users')->where(['openid' => $openid, 'is_del' => 0])->first();
if (!$user) return \Yz::echoError1("openid对应用户不存在");
$persons_sfz=DB::table('web_user_person')->where(['user_id' => $user->id,'is_del'=>0])->pluck('id_number')->toArray();
$persons_sfz = DB::table('web_user_person')->where(['user_id' => $user->id, 'is_del' => 0])->pluck('id_number')->toArray();
$OrderList = DB::table('orders')
->select('id', 'title', 'status', 'name', 'appointment_time as time', 'order_number as order',
DB::raw("CASE WHEN type = 1 THEN '个检' WHEN type = 2 THEN '团检' ELSE 'unknown' END as type"),
'price', 'true_price', 'pay_time', 'refund_time', 'created_at')
->where(['web_user_id' => $user->id])
->orWhere(function($query) use ($persons_sfz) {
->orWhere(function ($query) use ($persons_sfz) {
$query->WhereIn('id_number', $persons_sfz)
->where('person_id', 0);
})->orderBy('id','desc')->get();
})->orderBy('id', 'desc')->get();
$WaitingPaymentTime = config('app.globals.WaitingPaymentTime');//支付等待時間
foreach ($OrderList as $key => $list) {
if ($list->status == 1) {
@ -51,9 +52,9 @@ class OrderController extends Controller
{
$id = request('id');
$order_info = DB::table('orders')->where(['id' => $id])->first();
if(!!$order_info){
$order_info->buy_info=json_decode($order_info->buy_info,true);
}else{
if (!!$order_info) {
$order_info->buy_info = json_decode($order_info->buy_info, true);
} else {
return \Yz::echoError1('未找到有效订单');
}
return \Yz::Return(true, '获取成功', [
@ -72,8 +73,8 @@ class OrderController extends Controller
$group_id = request('group_id');//团检id
$item_ids = request('item_ids');//自选item的ids
if (count($item_ids) != 0 and $item_ids[0]=="") {
$item_ids=[];
if (count($item_ids) != 0 and $item_ids[0] == "") {
$item_ids = [];
}
$duo_xuan_yi = request('duo_xuan_yi'); //多选1
@ -81,12 +82,12 @@ class OrderController extends Controller
$plan_nmr_id = request('plan_nmr_id');//核磁号源id
$doctor = request('doctor');//预约的医生名字
$jifen = request('jifen',0); //使用的积分数量
$yucunkuan = request('yucunkuan',0);//使用的预存款数量
$jifen = request('jifen', 0); //使用的积分数量
$yucunkuan = request('yucunkuan', 0);//使用的预存款数量
$wj_flag= request('wj'); //问卷标记
if(isset($wj_flag) and $wj_flag==1){
$wj_zhekou=config('app.globals.Wj_ZheKou');//问卷过来的折扣率
$wj_flag = request('wj'); //问卷标记
if (isset($wj_flag) and $wj_flag == 1) {
$wj_zhekou = config('app.globals.Wj_ZheKou');//问卷过来的折扣率
}
if (!isset($hospital_id)) return \Yz::echoError1('医院id不能为空');
@ -117,11 +118,11 @@ class OrderController extends Controller
'group' => [
'id' => '',
],
'nmr_list'=>[]
'nmr_list' => []
];
//如果是套餐
$Nx1_arrInfo=[];
$TJ_Leixing_id=1;//存储用体检类型
$Nx1_arrInfo = [];
$TJ_Leixing_id = 1;//存储用体检类型
$checkup_type_id = false; //体检类型id
if (isset($combo_id) and $combo_id <> 0) {
$combo_info = DB::table('combos')->where(['combo_id' => $combo_id, 'status' => 1])->first();
@ -130,23 +131,23 @@ class OrderController extends Controller
$checkup_type_id = $combo_info->checkup_type_id;
//构建多选一数据
if(isset($duo_xuan_yi) and !empty($duo_xuan_yi)){
$combo_Nx1=json_decode($combo_info->duo_xuan_yi,true);
foreach ($duo_xuan_yi as $r_k=>$r_v){
foreach ($combo_Nx1 as $k=> $n1v){
if($r_v['zu_name'] == $n1v['组名称']){
foreach ($n1v['包含项目'] as $k2 => $v2){
if($v2['Id'] == $r_v['item_id']){
if($v2['科室名称']=='影像科'){
$buy_info['nmr_list'][]=[
if (isset($duo_xuan_yi) and !empty($duo_xuan_yi)) {
$combo_Nx1 = json_decode($combo_info->duo_xuan_yi, true);
foreach ($duo_xuan_yi as $r_k => $r_v) {
foreach ($combo_Nx1 as $k => $n1v) {
if ($r_v['zu_name'] == $n1v['组名称']) {
foreach ($n1v['包含项目'] as $k2 => $v2) {
if ($v2['Id'] == $r_v['item_id']) {
if ($v2['科室名称'] == '影像科') {
$buy_info['nmr_list'][] = [
'item_id' => $v2['Id'],
'name' => $v2['名称'],
];
}
$Nx1_arrInfo[] = [
'id' => $v2['Id'],
'name' => $v2['名称'],
'price' =>0
'name' => $v2['名称'],
'price' => 0
];
}
}
@ -155,7 +156,7 @@ class OrderController extends Controller
}
}
$TJ_Leixing_id=$checkup_type_id;
$TJ_Leixing_id = $checkup_type_id;
$price += $combo_info->price;
$title = $combo_info->name;
$buy_info['combo'] = [
@ -164,10 +165,10 @@ class OrderController extends Controller
'price' => $combo_info->price,
];
//如果有影像科则存储在nmr_list字段
$comboItem=DB::table('combo_items')->where(['combo_id' => $combo_id, 'status' => 1,'keshi_name'=>'影像科'])->get();
if(count($comboItem)>0){
foreach ($comboItem as $item){
$buy_info['nmr_list'][]=[
$comboItem = DB::table('combo_items')->where(['combo_id' => $combo_id, 'status' => 1, 'keshi_name' => '影像科'])->get();
if (count($comboItem) > 0) {
foreach ($comboItem as $item) {
$buy_info['nmr_list'][] = [
'item_id' => $item->item_id,
'name' => $item->name,
];
@ -177,12 +178,12 @@ class OrderController extends Controller
//如果有自选项目
$items_list = [];
if (count($item_ids) != 0 ) {
if (count($item_ids) != 0) {
$items_list = DB::table('items')->whereIn('item_id', $item_ids)->where(['status' => 1])->get();
$existingIds = [];
$item_price=0;
$item_price = 0;
foreach ($items_list as $item) {
$item_price+=$item->price;
$item_price += $item->price;
$existingIds[] = $item->item_id;
$buy_info['items'][] = [
'id' => $item->item_id,
@ -190,23 +191,23 @@ class OrderController extends Controller
'price' => $item->price
];
//如果有影像科则存储在nmr_list字段
if($item->keshi_name=='影像科'){
$buy_info['nmr_list'][]=[
if ($item->keshi_name == '影像科') {
$buy_info['nmr_list'][] = [
'item_id' => $item->item_id,
'name' => $item->name,
];
}
}
if(isset($wj_flag) and $wj_flag==1){
$item_price=$item_price*$wj_zhekou;
if (isset($wj_flag) and $wj_flag == 1) {
$item_price = $item_price * $wj_zhekou;
}
$price += $item_price;
$missingIds = array_diff($item_ids, $existingIds);
if (count($missingIds) > 0) return \Yz::echoError1("部分自选项目不可用Id:" . implode(', ', $missingIds));
}
//如果有 多选一项目
if(!empty($Nx1_arrInfo)){
$buy_info['items']=array_merge($buy_info['items'],$Nx1_arrInfo);
if (!empty($Nx1_arrInfo)) {
$buy_info['items'] = array_merge($buy_info['items'], $Nx1_arrInfo);
}
$true_price = $price;
@ -229,7 +230,7 @@ class OrderController extends Controller
'items' => $group_info['items'],
'group_id' => $group_info['group_id'],
];
$TJ_Leixing_id=$group_info['checkup_type_id'];
$TJ_Leixing_id = $group_info['checkup_type_id'];
$title = "单位团检" . $group_info['combo_name'];
$price = $price + $group_info['sixi_zong_ji_jin_e'];
$need_pay = ($price - $group_info['tongshou_xiane']) > 0 ? $price - $group_info['tongshou_xiane'] : 0;
@ -239,11 +240,11 @@ class OrderController extends Controller
//如果有影像科则存储在nmr_list字段
$all_items = DB::table('items')->where(['status' => 1,'keshi_name'=>'影像科'])->get();
$all_items = DB::table('items')->where(['status' => 1, 'keshi_name' => '影像科'])->get();
foreach ($group_info['items'] as $item) {
foreach ($all_items as $it) {
if ($it->item_id == $item['id']) {
$buy_info['nmr_list'][]=[
$buy_info['nmr_list'][] = [
'item_id' => $item->item_id,
'name' => $item->name,
];
@ -317,39 +318,39 @@ class OrderController extends Controller
}
//校验积分和预存款
$env=config('app.globals.Env');
$AspNet=new AspNetZhuanController();
if($env=='pro') { //如果是正式环境, 测试环境不抵扣
if($jifen>0) {
$all_jifen= $AspNet::GetJiFen_YuCunKuan(1,$person->ghzid);
if($jifen>$all_jifen) return \Yz::echoError1("用户剩余积分不足");
$env = config('app.globals.Env');
$AspNet = new AspNetZhuanController();
if ($env == 'pro') { //如果是正式环境, 测试环境不抵扣
if ($jifen > 0) {
$all_jifen = $AspNet::GetJiFen_YuCunKuan(1, $person->ghzid);
if ($jifen > $all_jifen) return \Yz::echoError1("用户剩余积分不足");
}
if($yucunkuan>0) {
// return \Yz::echoError1("暂不支持预存款");
$all_yucunkuan= $AspNet::GetJiFen_YuCunKuan(2,$person->ghzid);
if($yucunkuan>$all_yucunkuan) return \Yz::echoError1("用户剩余预存款不足");
if ($yucunkuan > 0) {
// return \Yz::echoError1("暂不支持预存款");
$all_yucunkuan = $AspNet::GetJiFen_YuCunKuan(2, $person->ghzid);
if ($yucunkuan > $all_yucunkuan) return \Yz::echoError1("用户剩余预存款不足");
}
$true_price=$true_price-($jifen+$yucunkuan);
if($true_price<-1) return \Yz::echoError1("");
if($true_price<0) $true_price=0;
$true_price = $true_price - ($jifen + $yucunkuan);
if ($true_price < -1) return \Yz::echoError1("");
if ($true_price < 0) $true_price = 0;
}
$now_datetime=date('Y-m-d H:i:s');
$now_datetime = date('Y-m-d H:i:s');
//构建订单号
$order_num = $this->generateOrderNumber();
$data = [
'title' => $title,
'type' => $type,
'web_user_id' => $user->id,
'checkup_type_id'=>$TJ_Leixing_id,
'checkup_type_id' => $TJ_Leixing_id,
'person_id' => $person->id,
'name' => $person->name,
'id_number' => $person->id_number,
'buy_info' => json_encode($buy_info, JSON_UNESCAPED_UNICODE),
'price' => $price,
'true_price' =>number_format($true_price, 2, '.', ''),
'jifen'=>$jifen,
'yucunkuan'=>$yucunkuan,
'true_price' => number_format($true_price, 2, '.', ''),
'jifen' => $jifen,
'yucunkuan' => $yucunkuan,
'order_number' => $order_num,
'status' => 1,
'appointment_date' => $plan->date,
@ -363,8 +364,8 @@ class OrderController extends Controller
'sex' => $person->sex,
'birthday' => $person->birthday,
'married' => $person->married,
'wj_flag'=>$wj_flag,
'created_at' =>$now_datetime,
'wj_flag' => $wj_flag,
'created_at' => $now_datetime,
];
DB::beginTransaction();
$insert = DB::table('orders')->insertGetId($data);
@ -372,23 +373,23 @@ class OrderController extends Controller
'status' => 2
]);
//更新问卷log表
DB::table('questionnaires_logs')->where(['person_id'=>$person->id,'order_id'=>0])->update([
DB::table('questionnaires_logs')->where(['person_id' => $person->id, 'order_id' => 0])->update([
'order_id' => $insert,
]);
//调用接口扣除积分和预存款
$jifen_dikou_status=true;
$yucunkuan_dikou_status=true;
$yyid=$hospital_id;
if($yyid==1) $yyid=6;
if($env=='pro') { //如果是正式环境
if($jifen>0) {
$jifen_dikou_status=false;
$jifen_dikou_status= $AspNet::UseJiFen($person->ghzid,-$jifen,$yyid,$insert,'tj_h5','抵扣体检H5订单',$now_datetime);
$jifen_dikou_status = true;
$yucunkuan_dikou_status = true;
$yyid = $hospital_id;
if ($yyid == 1) $yyid = 6;
if ($env == 'pro') { //如果是正式环境
if ($jifen > 0) {
$jifen_dikou_status = false;
$jifen_dikou_status = $AspNet::UseJiFen($person->ghzid, -$jifen, $yyid, $insert, 'tj_h5', '抵扣体检H5订单', $now_datetime);
}
if($yucunkuan>0) {
$yucunkuan_dikou_status=false;
$yucunkuan_dikou_status= $AspNet::UseYuCunKuan($person->ghzid,-$yucunkuan,$yyid,0,$insert,'tj_h5','抵扣体检H5订单',$now_datetime);
if ($yucunkuan > 0) {
$yucunkuan_dikou_status = false;
$yucunkuan_dikou_status = $AspNet::UseYuCunKuan($person->ghzid, -$yucunkuan, $yyid, 0, $insert, 'tj_h5', '抵扣体检H5订单', $now_datetime);
}
}
@ -422,36 +423,36 @@ class OrderController extends Controller
$plan_id = request('planid');
$nmr_plan_id = request('nmrPlanid');
$doctor = request('doctor');
$orderInfo=DB::table('orders')->where(['id' => $orderid,'status'=>2])->first();
if(!$orderInfo) return \Yz::echoError1("未找到有效订单");
$planInfo = DB::table('plans')->where(['id' => $plan_id,'status'=>1])->first();
if(!$planInfo) return \Yz::echoError1("所选体检日期号源无效");
$orderInfo = DB::table('orders')->where(['id' => $orderid, 'status' => 2])->first();
if (!$orderInfo) return \Yz::echoError1("未找到有效订单");
$planInfo = DB::table('plans')->where(['id' => $plan_id, 'status' => 1])->first();
if (!$planInfo) return \Yz::echoError1("所选体检日期号源无效");
//判断核磁号源有效性能,日期范围是否正常,判断核磁新日期时间是否和旧的日期时间一样
//判断体检日期是否在核磁3天左右
//判断体检日期时间是否和旧的日期时间一样。一样则跳过,不一样则更新
if(isset($plan_id) && $plan_id<>$orderInfo->plan_id){
if (isset($plan_id) && $plan_id <> $orderInfo->plan_id) {
$peis = new PEISApiController();
$data="appointmentId=".$orderInfo->appointment_number."&appGroupId=66&appPlanId=".$plan_id."&appPlanNumber=".$planInfo->plan_number."&date=".urlencode($planInfo->date.' '.$planInfo->time);
$ch = $peis::Post2('修改用户预约时间', $peis::Api('修改用户预约时间',$data),$orderInfo->hospital_id,[]);
if($ch=='修改预约时刻保存成功'){
$data = "appointmentId=" . $orderInfo->appointment_number . "&appGroupId=66&appPlanId=" . $plan_id . "&appPlanNumber=" . $planInfo->plan_number . "&date=" . urlencode($planInfo->date . ' ' . $planInfo->time);
$ch = $peis::Post2('修改用户预约时间', $peis::Api('修改用户预约时间', $data), $orderInfo->hospital_id, []);
if ($ch == '修改预约时刻保存成功') {
//恢复旧的plans
DB::table('plans')->where(['id' => $orderInfo->plan_id])->update(
['status'=>1]
['status' => 1]
);
//使用新的plans
DB::table('plans')->where(['id' => $plan_id])->update(
['status'=>2]
['status' => 2]
);
//更新订单
DB::table('orders')->where(['id' => $orderInfo->id])->update([
'plan_id'=>$plan_id,
'plan_number'=>$planInfo->plan_number,
'appointment_date'=>$planInfo->date,
'appointment_time'=>$planInfo->time,
'doctor'=>isset($doctor)?$doctor:null,
'plan_id' => $plan_id,
'plan_number' => $planInfo->plan_number,
'appointment_date' => $planInfo->date,
'appointment_time' => $planInfo->time,
'doctor' => isset($doctor) ? $doctor : null,
]);
}
return \Yz::Return(true,"操作完成",[]);
return \Yz::Return(true, "操作完成", []);
}
return \Yz::echoError1("未更改内容,无需进行此操作");
}
@ -528,25 +529,25 @@ class OrderController extends Controller
"已收费" => true,
];
$cad2=[
$cad2 = [
"可选项目信息" => $item_arr,
"总计金额" => $order_info->price,
];
if($order_info->wj_flag == 1){
$temp=[];
if ($order_info->wj_flag == 1) {
$temp = [];
foreach ($item_arr as $k => $item) {
$temp[]=[
"Id"=> $item['Id'],
"已收费"=>$item['已收费'],
"优惠方式"=>"打折",
"优惠值"=> config('app.globals.Wj_ZheKou')
$temp[] = [
"Id" => $item['Id'],
"已收费" => $item['已收费'],
"优惠方式" => "打折",
"优惠值" => config('app.globals.Wj_ZheKou')
];
}
$cad2=[
$cad2 = [
"可选项目信息" => $temp,
];
}
$cad=array_merge($cad,$cad2);
$cad = array_merge($cad, $cad2);
} else {
$cad = [
'type' => 2,
@ -582,24 +583,48 @@ class OrderController extends Controller
$peis = new PEISApiController();
$dat = [
"预约Id" => $create_appointment['data'][0][0],
"预约开始时间" => $order_info->appointment_date . ' ' . $order_info->appointment_time,
"预约截止时间" => $order_info->appointment_date . ' ' . $order_info->appointment_time,
"AppDoctor" => $order_info->appdoctor
"预约开始时间" => $order_info->appointment_date . ' ' . $order_info->appointment_time,
"预约截止时间" => $order_info->appointment_date . ' ' . $order_info->appointment_time,
"AppDoctor" => $order_info->appdoctor
];
$info = $peis::Post('预约时段修改', $order_info->hospital_id,$dat);
$info = $peis::Post('预约时段修改', $order_info->hospital_id, $dat);
}
$u=DB::table('orders')->where(['order_number' => $order_number])->update([
$u = DB::table('orders')->where(['order_number' => $order_number])->update([
'appointment_number' => $create_appointment['data'][0][0],
'appointment_back_info' => json_encode($appointment_info['data'][0], JSON_UNESCAPED_UNICODE)
]);
$is_sendMsg=DB::table('configs')->where(['label' => '预约完成短信通知'])->first();
if(!!$is_sendMsg and $is_sendMsg->value==1){
$asp=new AspNetZhuanController();
$asp::SendMsg($cha->hospital_id,$cha->phone,$cha->name,$cha->appointment_date.' '.substr($cha->appointment_time, 0, 5));
$is_sendMsg = DB::table('configs')->where(['label' => '预约完成短信通知'])->first();
if (!!$is_sendMsg and $is_sendMsg->value == 1) {
$asp = new AspNetZhuanController();
$asp::SendMsg($cha->hospital_id, $cha->phone, $cha->name, $cha->appointment_date . ' ' . substr($cha->appointment_time, 0, 5));
}
return ['status' => true, 'msg' => "完成"];
}
//未支付取消订单
public function Cancel()
{
}
//批量取消订单
public function BatchCancel()
{
$WaitingPaymentTime = config('app.globals.WaitingPaymentTime');//支付等待時間
$orderInfos = DB::table('orders')->where(['status' => 1])->get();
foreach ($orderInfos as $k => $orderInfo) {
$person=DB::table('web_user_person')->where(['id' => $orderInfo->person_id])->first();
$datetime = new DateTime($orderInfo->created_at);
$timestamp = $datetime->getTimestamp();
$orderInfo->end_time = $timestamp + (60 * $WaitingPaymentTime);
if (time() > $orderInfo->end_time) {
$do=new OrderService();
$do->Cancel($orderInfo);
}
}
return \Yz::Return(true, "批量处理完成", []);
}
public function create_appointment($hospital, $data)
{
$peis = new PEISApiController();

@ -144,13 +144,19 @@ class PayController extends Controller
$yyid=$orderInfo->hospital_id;
if($yyid==1) $yyid=6;
if($env=='pro') { //如果是正式环境
if($orderInfo->jifen>0) {
if($orderInfo->jifen>0 and $orderInfo->is_refund_jifen==0) {
$jifen_huifu_status=false;
$jifen_huifu_status= $AspNet::UseJiFen($person->ghzid,$orderInfo->jifen,$yyid,$orderInfo->id,'tj_h5','抵扣体检H5订单',$now_datetime);
if( $jifen_huifu_status===true){
DB::table('orders')->where('id',$orderInfo->id)->update(['is_refund_jifen'=>1]);
}
}
if($orderInfo->yucunkuan>0) {
if($orderInfo->yucunkuan>0 and $orderInfo->is_refund_yucunkuan==0) {
$yucunkuan_huifu_status=false;
$yucunkuan_huifu_status= $AspNet::UseYuCunKuan($person->ghzid,$orderInfo->yucunkuan,$yyid,0,$orderInfo->id,'tj_h5','抵扣体检H5订单',$now_datetime);
if($yucunkuan_huifu_status===true){
DB::table('orders')->where('id',$orderInfo->id)->update(['is_refund_yucunkuan'=>1]);
}
}
}

@ -1,6 +1,7 @@
<?php
namespace App\Services;
use App\Http\Controllers\API\AspNetZhuanController;
use Illuminate\Support\Facades\DB;
class OrderService
@ -71,4 +72,41 @@ class OrderService
return ['department_list'=>$de_list,'wait_day'=>"10"];
}
public function Cancel($orderInfo)
{
$person=DB::table('web_user_person')->where(['id' => $orderInfo->person_id])->first();
$now_datetime=date('Y-m-d H:i:s');
//调用接口恢复积分和预存款
$env=config('app.globals.Env');
$AspNet=new AspNetZhuanController();
$jifen_huifu_status=true;
$yucunkuan_huifu_status=true;
$yyid=$orderInfo->hospital_id;
if($yyid==1) $yyid=6;
if($env=='pro') { //如果是正式环境
if($orderInfo->jifen>0 and $orderInfo->is_refund_jifen==0) {
$jifen_huifu_status=false;
$jifen_huifu_status= $AspNet::UseJiFen($person->ghzid,$orderInfo->jifen,$yyid,$orderInfo->id,'tj_h5','抵扣体检H5订单',$now_datetime);
if( $jifen_huifu_status===true){
DB::table('orders')->where('id',$orderInfo->id)->update(['is_refund_jifen'=>1]);
}
}
if($orderInfo->yucunkuan>0 and $orderInfo->is_refund_yucunkuan==0) {
$yucunkuan_huifu_status=false;
$yucunkuan_huifu_status= $AspNet::UseYuCunKuan($person->ghzid,$orderInfo->yucunkuan,$yyid,0,$orderInfo->id,'tj_h5','抵扣体检H5订单',$now_datetime);
if($yucunkuan_huifu_status===true){
DB::table('orders')->where('id',$orderInfo->id)->update(['is_refund_yucunkuan'=>1]);
}
}
}
DB::table('orders')->where(['id' => $orderInfo->id,'status'=>1])->update([
'status' => 3
]);
//恢复号源
$up_plan = DB::table('plans')->where(['id' => $orderInfo->plan_id, 'status' => 2])->update([
'status' => 1
]);
return true;
}
}

@ -91,3 +91,5 @@ Route::group(['prefix' => 'api/Web'], function () {
//对外------
Route::any('/TJPushInfo', 'App\Http\Controllers\API\Internal\SiXinPushController@PushInfo');//接收思信推送
Route::any('/TJCheck', 'App\Http\Controllers\API\Internal\OrderController@TJCheck');//到检
Route::any('/OrderBatchCancel', 'App\Http\Controllers\API\H5\OrderController@BatchCancel');//批量取消

Loading…
Cancel
Save