toArray();
}
//备注
public function paitent_remark()
{
$data['patient_id']= request('patient_id');
$data['org_id'] = request('org_id');
$data['type'] = request('type');
$is_have = PatientRemark::where($data)->first();
$data['remark'] = request('remark');
if(empty($data['remark'])) return redirect('/cdms/nurse_users');
if($is_have){
PatientRemark::where(['id'=>$is_have->id])->update(['remark'=>$data['remark']]);
} else {
PatientRemark::insert($data);
}
return redirect('/cdms/nurse_users');
}
//发送短信
public function sendmsg(){
$config = [
// 'app_id' => 'wx1c2357232cd25f65',
// 'secret' => 'c8cab53e4e52234ed1bc2abbdeaba57d',
'app_id' => 'wx13bedfcc62e9bab0',
'secret' => '175e5518b6426dd12d3096f24ca68fb8',
'response_type' => 'array'
// oVxTzvgYlGktIDZXwfLMLQ01Tr5s
];
//3LUhWGlyiljxrT3Jh8orwQZ2LSHjfRs9SIHaB40O6q0
//开发者调用模版消息接口时需提供模版ID
//标题
//offer进度提醒
//行业
//IT科技 - 互联网|电子商务
//详细内容
//{{first.DATA}}
//人才姓名:{{keyword1.DATA}}
//联系方式:{{keyword2.DATA}}
//入职职位:{{keyword3.DATA}}
//入职公司:{{keyword4.DATA}}
//报到时间:{{keyword5.DATA}}
//{{remark.DATA}}
// oVxTzvgYlGktIDZXwfLMLQ01Tr5s 自己 oVxTzvhu4gs4RyCt4kJDRWOgsUXw周璐 oVxTzvgu4XnI5F2aF7DcrbJIp5fI 间行 oVxTzvl8DYQblYmLCIK3UXW_8jAY 落雨桐
$renyuan = ['o481Y5AtcbnOQef1vc4rL4TwYpDU','oVxTzvgYlGktIDZXwfLMLQ01Tr5s']; //周璐
// $renyuan = ['oVxTzvvTnnbjEE9jsalOYj4mtp6U','oVxTzvgu4XnI5F2aF7DcrbJIp5fI']; //简行
$app = Factory::officialAccount($config );
// $res = $app->broadcasting->status(3147483751);
//
// "errcode" => 0
// "errmsg" => "send job submission success"
// "msg_id" => 3147483751
// "msg_data_id" => 2247484953
// ^ array:2 [▼
// "errcode" => 40003
// "errmsg" => "invalid openid rid: 5fc35ef3-7f3b3ef9-14537bc7"
//]
$user = $app->user->get('oVxTzvgYlGktIDZXwfLMLQ01Tr5s');
$res = $app->template_message->send([
'touser' => 'oVxTzvgYlGktIDZXwfLMLQ01Tr5s',
'template_id' => '3LUhWGlyiljxrT3Jh8orwQZ2LSHjfRs9SIHaB40O6q0',
// 'url' => 'https://t5.9026.com',
'data' => [
'first'=>'社区通知',
'keyword1' => '王海军',
'keyword2' => 18719141830,
'keyword3' => '开发工程师',
'keyword4' => '思维定制',
'keyword5' => '2020-12-12',
],
]);
dd($res);
$res = $app->broadcasting->sendText("测试发送,测试发送",$renyuan);
}
//获取排班页面
public function getComSchedule()
{
$set_time = request('time');//时间
$user = Admin::user();
$doc_id = $user->docter_id;
$docter_id = request('docter_id');
$role = request('role',1);
$is_docter = CdmsUsers::where('docter_id',$doc_id)->where('docter_id','!=','')->first();
if(empty($set_time)){
return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
}
if($is_docter){
$role =2;
$org_id = request('org_id');
} else {
$org_id = $user->org_id;
}
$all_time = explode('至',$set_time);
if(count($all_time) <2){
return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
}
return $this->getWeekSchedule();
$start_time = intval(str_replace('-','',$all_time[0]));
$end_time = intval(str_replace('-','',$all_time[1]));
$first_day = strtotime($all_time[0]);
// DB::enableQueryLog();
$sche_dule = Schedule::whereBetween('schedule_day',[$start_time,$end_time])
->where(['docter_id'=>$docter_id])
->pluck('id')
->toArray();
// echo '
';
// print_r(DB::getQueryLog());
// echo '
';
//dd($sche_dule);
$sche_dule_arr =[
[
'date'=>"上午",
'monday'=>false,
'tuesday'=>false,
'wednesday'=>false,
'thursday'=>false,
'friday'=>false,
'saturday'=>false,
'sunday'=>false,
],
[
'date'=>"下午",
'monday'=>false,
'tuesday'=>false,
'wednesday'=>false,
'thursday'=>false,
'friday'=>false,
'saturday'=>false,
'sunday'=>false,
],
[
'date'=>"晚上",
'monday'=>false,
'tuesday'=>false,
'wednesday'=>false,
'thursday'=>false,
'friday'=>false,
'saturday'=>false,
'sunday'=>false,
]
];
// return $this->getWeekSchedule();
//周字段映射
$week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
//时段区间id
$schedule_config = SystemConfig::get('docter_config');
$times[] = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])->where('end_time_period','<=',$schedule_config['morning_end'])->pluck('id')->toArray();
$times[] = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])->where('end_time_period','<=',$schedule_config['afternoon_end'])->pluck('id')->toArray();
$times[] = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])->where('end_time_period','<=',$schedule_config['evening_end'])->pluck('id')->toArray();
if(empty($sche_dule)){
return ['code'=>200,'msg'=>'ok','data'=>['docter'=>$sche_dule_arr,'org_id'=>$org_id,'docter_id'=>$docter_id]];
}
if($role == 1){
$ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id');
$name = Organization::where('id',$docter_id)->value('name');
$user_id = $org_id;
for ($i = 0; $i<6; $i++){
$str_time = date('Y-m-d',($first_day + $i * 86400));
for($j=0;$j<3;$j++){
//dd($sche_dule);
// DB::enableQueryLog();
//检测上午
$is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
->where('organization_id','!=',$org_id)->where('docter_id',$docter_id)->count();
$is_self = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
->where('organization_id','=',$org_id)->where('docter_id',$docter_id)->count();
if($is_self){
$sche_dule_arr[$j][$week_arr[$i]] = true;
}
if($is_mo_have){
$sche_dule_arr[$j][$week_arr[$i]] = 'other';
}
}
}
} else {
$name = Docter::where('id',$docter_id)->value('name');
$user_id = $docter_id;
for ($i=0; $i<=6; $i++){
$str_time = date('Y-m-d',($first_day + $i * 86400));
for($j=0;$j<=2;$j++){
$is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
->where('organization_id','!=',$org_id)->where('docter_id',$docter_id)->count();
$is_mo_self = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
->where('organization_id',$org_id)->where('docter_id',$docter_id)->count();
if($is_mo_self){
$sche_dule_arr[$j][$week_arr[$i]] = true;
}
if($is_mo_have){
$sche_dule_arr[$j][$week_arr[$i]] = 'other';
}
}
}
}
// "morning_start" => "09:00"
// "morning_end" => "12:00"
// "afternoon_start" => "13:00"
// "afternoon_end" => "18:00"
// "evening_start" => "19:00"
// "evening_end" => "20:00"
$data['docter'] = $sche_dule_arr;
$data['name'] = $name;
$data['role'] = $role;
$data['user_id'] = $user_id;
return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
}
//编辑排班
public function setDocChedule()
{
$docter_id = request('docter_id');
$org_id = request('org_id');
$set_time = request('time');
$data = request('schedulingtime');
// $set_time = '2020-12-07至2020-12-13';
if(empty($set_time) || empty($org_id) || empty($docter_id)){
return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
}
$all_time = explode('至',$set_time);
if(count($all_time) <2) {
return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
}
$first_day = strtotime($all_time[0]);
$start_time = intval(str_replace('-','',$all_time[0]));
$end_time = intval(str_replace('-','',$all_time[1]));
$schedule_id = Schedule::where(['docter_id'=>$docter_id])->whereBetween('schedule_day',[$start_time,$end_time])->pluck('id');
if(empty($schedule_id) || count($schedule_id) < 7){
// Schedule::whereIn('id',$schedule_id)->delete();
// SchedulePeriod::whereIn('schedule_id',$schedule_id);
for($i = 0;$i<=6;$i++){
$real_time = $first_day + (86400 * $i);
$schedule= [
'schedule_date'=> date('Y-m-d',$real_time),
'schedule_day'=>intval(str_replace('-','',date('Y-m-d H:i:s',$real_time))),
'docter_id'=>$docter_id
] ;
Schedule::Insert($schedule);
// echo '日期:'.date('Y-m-d H:i:s',$real_time).'
';
// echo $i;
}
}
//周字段映射
$week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
// $data = [
// [
// 'date'=>"上午",
// 'monday'=>false,
// 'tuesday'=>false,
// 'wednesday'=>false,
// 'thursday'=>true,
// 'friday'=>false,
// 'saturday'=>false,
// 'sunday'=>false,
// ],
// [
// 'date'=>"下午",
// 'monday'=>false,
// 'tuesday'=>true,
// 'wednesday'=>false,
// 'thursday'=>false,
// 'friday'=>false,
// 'saturday'=>false,
// 'sunday'=>false,
// ],
// [
// 'date'=>"晚上",
// 'monday'=>false,
// 'tuesday'=>false,
// 'wednesday'=>true,
// 'thursday'=>false,
// 'friday'=>false,
// 'saturday'=>false,
// 'sunday'=>false,
// ]
// ];
//时段区间id
$schedule_config = SystemConfig::get('docter_config');
$times[1] = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])
->where('end_time_period','<=',$schedule_config['morning_end'])
->pluck('id')->toArray();
$times[2] = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])
->where('end_time_period','<=',$schedule_config['afternoon_end'])
->pluck('id')->toArray();
$times[3] = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])
->where('end_time_period','<=',$schedule_config['evening_end'])
->pluck('id')->toArray();
foreach ($times as $val){
foreach ($val as $t){
$time_period[] = $t;
}
}
$data[0] = array_values(object_array(json_decode($data[0])));
$data[1] = array_values(object_array(json_decode($data[1])));
$data[2] = array_values(object_array(json_decode($data[2])));
DB::beginTransaction();
try {
$schedule_insert = [
'organization_id'=>$org_id,
'docter_id'=>$docter_id,
'schedule_date'=>$all_time[0],
'created_at'=>Carbon::now(),
'updated_at'=>Carbon::now(),
];
$info = [];
for ($i = 1 ;$i<=3;$i++){
$mo_schedule = array_values($data[$i-1]);
foreach ($mo_schedule as $key=>$val){
if($key==0) continue;
$time_insert = $schedule_insert;
$time_insert['type'] = $i;
$schedule_time = $times[$i];
$real_time = date('Y-m-d',($first_day + ($key-1)*86400));
$schedule_id = Schedule::where(['docter_id'=>$docter_id,'schedule_date'=>$real_time])->value('id');
if(empty($schedule_id)) continue;
$time_insert['schedule_id'] = $schedule_id;
$time_insert['schedule_date'] = $real_time;
$time_insert['me_sure'] = 1;
if($val == true){
$data['schedule_date'] = $start_time;
foreach ($schedule_time as $time_id){
$is_have = SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>($i),'schedule_date'=>$real_time])->value('id');
if($is_have) break;
$time_insert['time_period_id'] = $time_id;
$info[] = $time_insert;
SchedulePeriod::insert($time_insert);
}
} else {
$data['schedule_date'] = $start_time;
foreach ($schedule_time as $time_id){
$is_have = SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>($i),'schedule_date'=>$real_time,'organization_id'=>$org_id,'docter_id'=>$docter_id,'schedule_id'=>$schedule_id])->value('id');
if($is_have) SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>($i),'docter_id'=>$docter_id,'schedule_date'=>$real_time,'organization_id'=>$org_id,'docter_id'=>$docter_id,'schedule_id'=>$schedule_id])->delete();
}
}
}
}
DB::commit();
} catch (Exception $e){
DB::rollBack();
Log::info($e->getMessage());
}
return json_encode(['status'=>200,'msg'=>'插入成功','data'=>count($info)]);
}
//设置自己排班
public function setSelfSchedule()
{
$docter_id = request('docter_id');
$org_id = request('org_id');
$date = request('date');
$type = request('type','1,2'); //1 上午,2 下午,3 晚上
$schedule_type = request('schedule_type');
$self_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
$times = [];
if(!empty($self_setting)){
$time_period = object_array(json_decode($self_setting->service_time));
$times[1] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
$times[2] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
$times[3] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
}
if(count($times) <3){
return apiReturn(602,'请设置真确的时间段');
}
if(empty($docter_id) || empty($org_id) || empty('date') || empty($type) || empty($schedule_type)){
return apiReturn(601,'缺少必要参数');
}
if(strtotime($date) < strtotime('tomorrow')){
return apiReturn(602,'只能排明天以後的');
}
$week = date("w",strtotime($date));
$types = explode(',',$type);
if(!empty($types)){
foreach ($types as $t){
$self_schedule = [
'schedule_date'=>$date,
'week'=>intval($week),
'schedule_type'=>$schedule_type,
'organization_id'=>$org_id,
'docter_id'=>$docter_id,
'type'=>intval($t)
];
foreach ($times[intval($t)] as $id){
$self_schedule['time_period_id'] = $id;
$is_have = SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_date'=>$date,'type'=>intval($t),'week'=>$week,'time_period_id'=>$id])->value('id');
if($is_have) continue;
SelfSchedule::insert($self_schedule);
}
}
$cha = array_diff([1,2,3],$types);
foreach ($cha as $t){
SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_date'=>$date,'type'=>intval($t)])->delete();
}
}
return apiReturn(200,'ok');
}
//获取用户信息
public function getScheduleInfo()
{
$user = Admin::user();
$org_id = $user->org_id;
$docter_id = $user->docter_id;
$is_docter = CdmsUsers::where('docter_id',$docter_id)->where('docter_id','!=','')->first();
if(empty($org_id) && empty($docter_id)){
return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
}
$role = 1;
if($is_docter){
$role = 2;
}
$lists =[];
if($role == 1){
$ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id')->toArray();
$list = Docter::whereIn('id',$ids)->where('is_then',1)->get(['id','name']);
foreach ($list as $val){
$lists[] = ['value'=>$val->id,'label'=>$val->name];
}
$name = Organization::where('id',$org_id)->value('name');
$user_id = $org_id;
} else {
$ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
$list = Organization::whereIn('id',$ids)->get(['id','name']);
foreach ($list as $val){
$lists[] = ['value'=>$val->id,'label'=>$val->name];
}
$name = Docter::where('id',$docter_id)->value('name');
$user_id = $docter_id;
}
$data['user_id'] = $user_id;
$data['name'] = $name;
$data['role'] = $role;
$data['list'] = $lists;
return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
}
//获取图文订单
public function get_chat_order()
{
$org_id = 1;
$docter_id = request('docter_id');
if(empty($docter_id)){
return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
}
$list = Order::where(['organization_id'=>$org_id,'docter_id'=>$docter_id,'order_status'=>3])->with('orderUser')->distinct('user_id')->get('user_id');
$user_list = [];
foreach ($list as $val){
$user_list[] = [
'id'=>$val->user_id,
'avatar'=>$val->orderUser->avatar,
'name'=>$val->orderUser->nickname,
];
}
$data['docter'] = Docter::where('id',$docter_id)->first(['id','avatar','name']);
$data['order_list'] = $user_list;
return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
}
//跟新订单
public function updateOrder(){
$id = request('id');
$status = request('status');
if(empty($id) || empty($status)){
return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
}
$data = Order::where('id',$id)->update(['order_status'=>$status]);
return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
}
//更新用戶設置
public function updateDocterSetting()
{
$docter_id = request('docter_id',1);
if(empty($docter_id)){
return apiReturn(604,'参数错误');
}
//添加时间段
if(2 == 3){
$data = ['docter_id'=>$docter_id,'am_start'=>'8:30','am_end'=>'11:30','pm_start'=>'12:00','pm_end'=>'15:00','ev_start'=>'19:00','ev_end'=>'22:00','service_time'=>15];
$amtimes[] = explode(':',$data['am_start']);
$amtimes[] = explode(':',$data['am_end']);
// $amcha = ($amtimes[1][0] - $amtimes[0][0])*60 +($amtimes[1][1] - $amtimes[0][1]);
// $amCount = $amcha/$data['service_time'];
$amCount = intval(floor((strtotime($data['am_end']) - strtotime($data['am_start'])) / (60*$data['service_time'])));
$pmtimes[] = explode(':',$data['pm_start']);
$pmtimes[] = explode(':',$data['pm_end']);
$pmCount =intval(floor((strtotime($data['pm_end']) - strtotime($data['pm_start'])) / (60*$data['service_time'])));
$evtimes[] = explode(':',$data['ev_start']);
$evtimes[] = explode(':',$data['ev_end']);
$evcha = ($evtimes[1][0] - $evtimes[0][0])*60 +($evtimes[1][1] - $evtimes[0][1]);
$evCount = $evcha/$data['service_time'];
for($i=1;$i<=$amCount;$i++){
$amdata = [
'docter_id'=>$docter_id,
'start_time_period'=> date('H:i',strtotime($data['am_start']) + ($i-1)*$data['service_time']*60),
'end_time_period'=> date('H:i',strtotime($data['am_start']) + $i*$data['service_time']*60),
];
TimePeriod::insert($amdata);
}
for($i=1;$i<=$pmCount;$i++){
$pmdata = [
'docter_id'=>$docter_id,
'start_time_period'=> date('H:i',strtotime($data['pm_start']) + ($i-1)*$data['service_time']*60),
'end_time_period'=> date('H:i',strtotime($data['pm_start']) + $i*$data['service_time']*60),
];
TimePeriod::insert($pmdata);
}
for($i=1;$i<=$evCount;$i++){
$evdata = [
'docter_id'=>$docter_id,
'start_time_period'=> date('H:i',strtotime($data['ev_start']) + ($i-1)*$data['service_time']*60),
'end_time_period'=> date('H:i',strtotime($data['ev_start']) + $i*$data['service_time']*60),
];
TimePeriod::insert($evdata);
}
}
$config = [['startTime'=>"08:30","endTime"=>"11:30"],["startTime"=>"13:30","endTime"=>"16:00"],["startTime"=>"18:30","endTime"=>"19:30"]];
$setting = [
'docter_id'=>$docter_id,
'type'=>2,
'status'=>2,
'show_days'=>7,
'service_num'=>7,
'service_time'=>json_encode($config)
];
$is_have = DocterSetting::where(['docter_id'=>$docter_id])->value('id');
if($is_have){
DocterSetting::where(['docter_id'=>$docter_id])->update($setting);
} else {
DocterSetting::insert($setting);
}
return apiReturn(200,'ok');
}
//获取周排班模板
public function getWeekSchedule()
{
$docter_id = request('docter_id',1);
$org_id = request('org_id',1);
$type = request('type',2);
$role = request('role',2);
if(empty($docter_id) || empty($type)){
return apiReturn(604,'缺少必要参数');
}
$docter_id = 1;
$docter_setting = DocterSetting::where(['docter_id'=>$docter_id,'type'=>$type])->first();
$times = [];
if(!empty($docter_setting)){
$time_period = object_array(json_decode($docter_setting->service_time));
$times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
$times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
$times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
}
if(count($times) < 3){
dd('no have times');
}
//周字段映射
$week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
$data = [
[
'date'=>"上午",
'monday'=>false,
'tuesday'=>false,
'wednesday'=>false,
'thursday'=>false,
'friday'=>false,
'saturday'=>false,
'sunday'=>false,
],
[
'date'=>"下午",
'monday'=>false,
'tuesday'=>false,
'wednesday'=>false,
'thursday'=>false,
'friday'=>false,
'saturday'=>false,
'sunday'=>false,
],
[
'date'=>"晚上",
'monday'=>false,
'tuesday'=>false,
'wednesday'=>false,
'thursday'=>false,
'friday'=>false,
'saturday'=>false,
'sunday'=>false,
]
];
if($role == 2){
for ($i=0;$i<6;$i++){
for($j=0;$j<=2;$j++){
$is_self_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'organization_id'=>$org_id,'week'=>$i+1])->whereIn('time_period_id',$times[$j])->count();
$is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i+1])->where('organization_id','!=',$org_id)->whereIn('time_period_id',$times[$j])->count();
if($is_self_have){
$data[$j][$week_arr[$i]] = true;
}
if($is_other_have){
$data[$j][$week_arr[$i]] = 'other';
}
}
}
} else {
for ($i=0;$i<6;$i++){
for($j=0;$j<=2;$j++){
$is_self_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'organization_id'=>$org_id,'week'=>$i+1])->whereIn('time_period_id',$times[$j])->count();
$is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i+1])->where('docter_id','!=',$docter_id)->whereIn('time_period_id',$times[$j])->count();
if($is_self_have){
$data[$j][$week_arr[$i]] = true;
}
if($is_other_have){
$data[$j][$week_arr[$i]] = 'other';
}
}
}
}
$name = Docter::where('id',$docter_id)->value('name');
$shcedule_data['docter'] = $data;
$shcedule_data['name'] = $name;
$shcedule_data['role'] = $role;
$shcedule_data['user_id'] = $docter_id;
return apiReturn(200,'ok',$shcedule_data);
}
//设置周排班模板
public function setWeekSchedule()
{
$docter_id = request('docter_id',1);
$org_id = request('org_id',1);
$type = request('type',2);
if(empty($docter_id) || empty($org_id) || empty($type)){
return apiReturn(601,'缺少必要参数');
}
$docter_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
$data = [
[
'date'=>"上午",
'monday'=>false,
'tuesday'=>true,
'wednesday'=>false,
'thursday'=>false,
'friday'=>true,
'saturday'=>false,
'sunday'=>false,
],
[
'date'=>"下午",
'monday'=>false,
'tuesday'=>false,
'wednesday'=>false,
'thursday'=>false,
'friday'=>false,
'saturday'=>true,
'sunday'=>false,
],
[
'date'=>"晚上",
'monday'=>true,
'tuesday'=>true,
'wednesday'=>false,
'thursday'=>false,
'friday'=>false,
'saturday'=>false,
'sunday'=>false,
]
];
if(!empty($docter_setting)){
$time_period = object_array(json_decode($docter_setting->service_time));
$times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
$times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
$times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
}
$week_data = [
'schedule_type'=>$type,
'organization_id'=>$org_id,
'docter_id'=>$docter_id
];
$k = 0;
DB::beginTransaction();
// $data[0] = array_values(object_array(json_decode($data[0])));
// $data[1] = array_values(object_array(json_decode($data[1])));
// $data[2] = array_values(object_array(json_decode($data[2])));
$data[0] = array_values($data[0]);
$data[1] = array_values($data[1]);
$data[2] = array_values($data[2]);
try {
for($i=0;$i<=2;$i++){
$schedule_data = $data[$i];
foreach ($schedule_data as $key=>$schedule){
if($key == 0) continue;
$week_data ['type'] = $i+1;
$week_data ['week'] = $key;
if($schedule == true){
// echo '时间列类型'.($i+1).'----'.$key.'星期数'.'
';
foreach ($times[$i] as $id){
$week_data['time_period_id'] = $id;
$is_have = WeekSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_type'=>$type,'type'=>$i+1,'week'=>$key])->where('time_period_id',$id)->value('id');
$is = $is_have?'有':'沒有';
// echo '时间段id'.$id.'----'.$is.'';
if($is_have) continue;
$k++;
WeekSchedule::insert($week_data);
}
} else {
$is_have = WeekSchedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->value('id');
if($is_have) WeekSchedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->delete();
}
}
}
DB::commit();
} catch (\Exception $e){
DB::rollBack();
return apiReturn(602,$e->getLine().'行'.$e->getMessage());
}
return apiReturn(200,'ok',$k);
}
//月排班
public function setmonthScheduel()
{
$docter_id = request('docter_id',1);
$org_id = request('org_id',1);
$type = request('type',2);
$role = request('role',2);
$date = request('date');
if(empty($docter_id) || empty($type)){
return apiReturn(604,'缺少必要参数');
}
$start_time = date('Y-m-d', strtotime($date));
$end_time = date('Y-m-d',strtotime($date.'+1 month'));
$docter_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
$self_schedule = SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->whereBetween('schedule_date',[$start_time,$end_time])->distinct('type')->get(['type','week'])->GroupBy('week')->toArray();
$week_schedule = WeekSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->orderby('week')->distinct('type')->get(['type','week'])->GroupBy('week')->toArray();
for ($i=1;$i<=7;$i++){
$s = [];
$w=[];
if(!empty($self_schedule[$i])){
$s =array_column($self_schedule[$i],'type');
}
if(!empty($week_schedule[$i])){
$w =array_column($week_schedule[$i],'type');
}
if(!empty($s) || !empty($w)){
$sn = $s+$w;
$all_schedule[$i] = $sn;
} else {
$all_schedule[$i] = [];
}
}
if(!empty($docter_setting)){
$time_period = object_array(json_decode($docter_setting->service_time));
$times[1] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
$times[2] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
$times[3] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
}
$start_time = strtotime($date);
$month_day = date("t",strtotime($date));
$begainDay = date("d",time()) - 1;
DB::beginTransaction();
try {
for($i=$begainDay;$i<=$month_day;$i++){
$today = $start_time + $i*86400;
$nutoday = intval(date('Ymd',$today));
$week = date('w',$today);
if($week == 0){
$every_day = $all_schedule[7];
} else {
$every_day = $all_schedule[$week];
}
$schedule_data = ['docter_id'=>$docter_id,'schedule_date'=>date('Y-m-d',$today),'schedule_day'=>$nutoday,'organization_id'=>$org_id];
$is_have_schedule = Schedule::where(['docter_id'=>$docter_id,'schedule_date'=>date('Y-m-d',$today),'organization_id'=>$org_id])->first();
dd($is_have_schedule);
$schedule_id = Schedule::insertGetId($schedule_data);
foreach ($every_day as $type){
foreach ($times[$type] as $tp){
$data = ['docter_id'=>$docter_id,'schedule_date'=>date('Y-m-d',$today),'organization_id'=>$org_id,'time_period_id'=>$tp,'type'=>$type,'schedule_id'=>$schedule_id];
SchedulePeriod::insert($data);
}
}
DB::commit();
}
} catch (\Exception $e){
dd('第'.$e->getLine().'行报错: '.$e->getMessage());
DB::rollBack();
return apiReturn('603','插入失败');
}
echo '';
print_r($self_schedule);
echo '
';
dd($week_schedule);
}
}