hyarra = array('正常','会议中','结束','取消'); $this->ytarra = array('等待','待进行','进行中','已结束'); $this->hyarrb = array('green','blue','#ff6600','#888888'); $this->dbobj = c('date'); // $this->defaultorder = 'start_time desc'; $this->meeting_room = m("meeting_room")->meetingRoomIdList(); $this->reatearr = array( 'd' => '每天', 'w1' => '每周一', 'w2' => '每周二', 'w3' => '每周三', 'w4' => '每周四', 'w5' => '每周五', 'w6' => '每周六', 'w7' => '每周日', 'm' => '每月', 'y' => '每年', ); } //录入页上的标题 public function inputtitle() { return "会议室审批单"; } //子表数据替换处理$lx=0编辑时,1展示时 protected function flowsubdata($rows, $lx=0){ for ($i = 0; $i < count($rows); $i++) { if (isset($rows[$i]['topic_state']) && !empty($rows[$i]['topic_state'])) { $index = $rows[$i]['topic_state'] ?? 1; $rows[$i]['topic_state'] = $this->ytarra[$index]; } else { $id = isset($rows[$i]['id']); m('meeting_topics')->update(['topic_state'=>1], "id={$id}"); } } return $rows; } // 初始化单据可替换其他属性,$lx,0默认,1详情展示,2列表显示,3打印页,4外部详情页 public function flowrsreplace($rs, $lx=0) { // m('log')->addlog('会议单据', json_encode($rs, true)); $this->id = $rs['id']; $zt = $rs['meet_state']; $is_hand = $rs['is_hand'] ?? 0; $room_id = $rs['room_id']; $nzt = $zt; $time = time(); $stime = strtotime($rs['start_time']); $etime = strtotime($rs['end_time']); if($is_hand != 1){ if($etime < $time){ $nzt = 2; } else if ($stime > $time){ $nzt = 0; } else { $nzt = 1; $topic = m('meeting_topics')->getone("mid={$this->id}",'id, topic_state', 'sort'); if (isset($topic['id']) && $topic['topic_state']<2) { m('meeting')->firstMeetingTopicStart($this->id); } } } if ($stime <= $time && $nzt != 2) { $nzt = 1; } // 更新数据状态 if($zt != $nzt){ $this->update('meet_state='.$nzt.'', $rs['id']); $zt = $nzt; } // 将id转换为文字 $rs['meet_state'] = $this->getstatezt($zt); if (!empty($room_id)) $rs['room_id'] = $this->meeting_room[$room_id]['room_name']."({$this->meeting_room[$room_id]['desc']})"; // 会议室Id替换会议室名 $rs['state_info'] = $this->getApproval($rs['nowcheckname'] ?? ''); $meet_dev = ["不需要", "视频会议", "LED屏"]; $rs['meet_dev'] = $rs['meet_dev'] == 0 ? $meet_dev[$rs['meet_dev']] : "".$meet_dev[$rs['meet_dev']].""; $rs['fixed'] = $rs['fixed'] == 1 ? '是' : '否'; // 是否固定会议 return $rs; } // $ors当前单据操作信息,$crs提交过来的信息 public function flowoptmenu($ors, $crs) { if ($ors['num'] == 'enableMeeting') { // 开始会议 $data = [ 'meet_state'=>1, 'is_hand'=>1 ]; m('meeting')->update($data, "id={$this->id}"); } else if ($ors['num'] == 'noup_end_meet') { // 手动结束会议 $data = [ 'meet_state'=>2, 'is_hand'=>1 ]; m('meeting')->update($data, "id={$this->id}"); } else if ($ors['num'] == "noup_chage_room") { $data = $this->rs; $roomName = $this->meeting_room[$data['room_id']]['room_name']; $isApply = m('meeting')->isapplymsg($this->rs['start_time'], $this->rs['end_time'], $roomName, $this->id, 1); if (empty($isApply)) { $this->update([ "meeting_room"=>$roomName, ], "id={$this->id}"); // 更换会议室 - 发送会议短信 // $this->meetingSuccSms($this->id); } else { return $isApply; } } } //操作菜单操作之前 protected function flowoptmenubefore($ors, $arr) { if($ors['num']=='noup_chage_room') { $room_id = $this->rock->post('fields_room_id'); $room = m("meeting_room")->getone("id={$room_id}", 'room_name'); $roomName = $room['room_name']; $isApply = m('meeting')->isapplymsg($this->rs['start_time'], $this->rs['end_time'], $roomName, $this->id, 1); if (!empty($isApply)) { return $isApply; } } } //删除单据时调用 public function flowdeletebill($sm) { // m('meet_sys')->deleteMeetingRoom($this->rs); } //审核之前调用$zt 状态, $sm说明 protected function flowcheckbefore($zt, $sm) { if ($this->nowcourse['step'] == 1) { $this->meetingAuditSms($this->id); // return [ // "msg"=>'发送短信' // ]; } else if ($this->nowcourse['step'] == 2) { $meet_room = $sm['meeting_room']; $isApply = m('meeting')->isapplymsg($this->rs['start_time'], $this->rs['end_time'], $meet_room, $this->id, 1); if (!empty($isApply)) { return [ "msg"=>$isApply ]; } } } //审核完成后调用 protected function flowcheckafter($zt, $sm){ } //流程全部完成后调用 protected function flowcheckfinsh($sm){ // 审批完成给负责人发短信 $this->meetingSuccSms($this->id); } //单据判断条件从写$lx类型,$uid用户Id protected function flowbillwhere($lx, $uid){ return [ 'order'=>'start_time desc' ]; } // 自定义方法 // 状态样式 public function getstatezt($zt) { if (isset($this->hyarrb[$zt])) { $html = ''.$this->hyarra[$zt].''; return $html; } else { return null; } } // 审核样式 public function getApproval($names) { if (empty($names)) { $html = '已审核'; return $html; } else { $html = '待审核
审核人:'.$names.''; return $html; } } // 短信发送 public function meetingSuccSms($meetId) { if (empty($meetId)) { m("log")->addlog("短信发送", "会议Id为空"); return; } // 获取当前会议信息 $meeting = m("meeting")->getone("id={$this->id}"); $meetTime = $meeting['start_time']; // 时间 $meetName = $meeting['title']; // 主题 $meetRoom = $meeting['meeting_room']; // 地点 m("log")->addlog("会议室审批", "发送短信给".$meeting['attendees']); $userIds = []; // 用户id $users = []; // 用户信息 $deptIds = []; // 部门id $depts = []; // 部门信息 $nullMobileArr = ["user"=>[], "dept"=>[]]; // 没有手机号的用户、部门 // 分解参会人员、部门id foreach (explode(',', $meeting['attendees_id']) as $val) { // u=用户 or d=部门 if (substr($val, 0,1) == 'u') { $userIds[] = substr($val, 1); } else if (substr($val, 0,1) == 'd') { $deptIds[] = substr($val, 1); } } // 获取用户电话 if (count($userIds) > 0) { // 获取所有用户信息 $uInfo = m("admin")->getall("id in (".implode(',', $userIds).")"); for ($i = 0; $i < count($userIds); $i++) { $mobile = $uInfo[$i]['mobile']; $name = $uInfo[$i]['name']; if (empty($mobile)) { $nullMobileArr['user'][] = $name; continue; } $users['phoneNum'][] = $mobile; $users['para'][] = [ "name" => $name, "meetdate" => $meetTime, "meetname" => $meetName, "meetroom" => $meetRoom ]; } if (count($users['phoneNum']) > 0) { m('send_sms')->sendBatchSms($users['phoneNum'], $users['para'], 1); } } if (count($deptIds) > 0) { $deptSql = "select distinct b.mobile, a.name from [Q]dept a left join [Q]admin b on a.headid = b.id where a.id in (".implode(',', $deptIds).") "; $dInfo = $this->db->getall($deptSql); for ($i = 0; $i < count($dInfo); $i++) { $mobile = $dInfo[$i]['mobile']; $name = $dInfo[$i]['name']; if (empty($mobile)) { $nullMobileArr['dept'][] = $name; continue; } $depts['phoneNum'][] = $mobile; $depts['para'][] = [ "name" => $name, "meetdate" => $meetTime, "meetname" => $meetName, "meetroom" => $meetRoom ]; } if (isset($depts['phoneNum']) && count($depts['phoneNum']) > 0) { m('send_sms')->sendBatchSms($depts['phoneNum'], $depts['para'], 1); } } $nullMobileInfo = ''; if (count($nullMobileArr['user']) > 0) { $nullMobileInfo .= "以下用户未设手机号:".implode(',', $nullMobileArr['user'])."。"; } if (count($nullMobileArr['dept']) > 0) { $nullMobileInfo .= "以下部门未设手机号:".implode(',', $nullMobileArr['dept'])."。"; } if (!empty($nullMobileInfo)) { m("log")->addlog("会议短信", $nullMobileInfo); }; } public function meetingAuditSms($meetId) { if (empty($meetId)) { m("log")->addlog("短信发送", "会议Id为空"); return; } // 获取当前会议信息 $meeting = m("meeting")->getone("id={$this->id}"); $meetTime = $meeting['start_time']; // 时间 $meetName = $meeting['title']; // 主题 $smsInfo = []; m("log")->addlog("会议室审批", "发送短信提醒会议室管理员"); $meetingManager = m("flow_cname")->getone("num='meeting_manager'"); if (!empty($meetingManager)) { $cAdmins = m("admin")->getall("id in ({$meetingManager['checkid']})"); if (!empty($cAdmins) && is_array($cAdmins)) { for ($i = 0; $i < count($cAdmins); $i++) { $user = $cAdmins[$i]; $mobile = $user['mobile']; $meetUName = $user['name']; if (!empty($mobile)) { $smsInfo['phoneNum'][] = $mobile; $smsInfo['para'][] = [ "usernam" => $meetUName, "meetingname" => $meetTime, "begindate" => $meetName ]; } } if (count($smsInfo['phoneNum']) > 0) { m('send_sms')->sendBatchSms($smsInfo['phoneNum'], $smsInfo['para'], 2); } } } } // 固定会议,每日改变会议日期 public function fixedMeetings($mid='') { $meets = $this->getall('fixed=1'); for ($i = 0; $i < count($meets); $i++) { $meet = $meets[$i]; $date = date('Y-m-d', strtotime('+1 day')); $id = $meet['id']; $st = $meet['start_time']; $et = $meet['end_time']; $st = $date.' '.substr($st, 11); $et = $date.' '.substr($et, 11); m('meeting')->update([ 'start_time'=>$st, 'end_time'=>$et, 'meet_state' => 0, 'is_hand' => 0 ], "id={$id}"); } } }