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 = ["不需要", "远程视频会议", "电子大屏"]; $rs['meet_dev'] = $rs['meet_dev'] == 0 ? $meet_dev[$rs['meet_dev']] : "".$meet_dev[$rs['meet_dev']].""; $rs['fixed'] = $rs['fixed'] == 1 ? '是' : '否'; // 是否固定会议 return $rs; } //提交时调用 protected function flowsubmit($na, $sm){ $this->updateAttendees($this->id); // 更新部门名 $this->meetingAuditSms($this->id, 0); // 提醒领导审核 $this->meetingApplicantSms($this->id); // 提醒申请人 $this->meetingMaXuSms($this->id); // 单独给马旭发 } // $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_change_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; } } else if ($ors['num']=='updateAttendees') { // 更新部门信息 $this->updateAttendees($this->id); } } //操作菜单操作之前 protected function flowoptmenubefore($ors, $arr) { if($ors['num']=='noup_change_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, $ufied) { if ($this->nowcourse['step'] == 1) { $this->meetingAuditSms($this->id, 1); // return [ // "msg"=>'发送短信' // ]; } else if ($this->nowcourse['step'] == 2) { $meet_room = $ufied['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']; // 时间 $meetTime = date('m月d日H点i分', strtotime($meetTime)); $meetName = $this->strLength35($meeting['title']); // 主题 $meetRoom = $meeting['meeting_room']; // 地点 $orgDeptname = $meeting['apply_dept']; // 申请部门(组织部门) 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'][] = [ // "notify_name" => mb_substr($name, 0, 1, 'UTF-8'), "org_deptname" => $orgDeptname, "meetdate" => $meetTime, "meetname" => $meetName, "meetroom" => $meetRoom ]; } if (count($users['phoneNum']) > 0) { // m('send_sms')->sendBatchSms($users['phoneNum'], $users['para'], 5); m('send_sms')->sendBatchSms($users['phoneNum'], $users['para'], 7); } } // 通知部门 if (count($deptIds) > 0) { $deptSql = "SELECT distinct a.mobile, b.name FROM zqoa_admin a JOIN zqoa_dept b ON FIND_IN_SET(a.id, b.headid) > 0 WHERE b.id IN (".implode(',', $deptIds).")"; $dInfo = $this->db->getall($deptSql); for ($i = 0; $i < count($dInfo); $i++) { $mobile = $dInfo[$i]['mobile']; $deptName = $dInfo[$i]['name']; // 部门名 if (empty($mobile)) { $nullMobileArr['dept'][] = $name; continue; } $depts['phoneNum'][] = $mobile; $depts['para'][] = [ "notify_deptname" => $deptName, "org_deptname" => $orgDeptname, // "deptname" => $deptName, "meetdate" => $meetTime, "meetname" => $meetName, "meetroom" => $meetRoom ]; } if (isset($depts['phoneNum']) && count($depts['phoneNum']) > 0) { m('send_sms')->sendBatchSms($depts['phoneNum'], $depts['para'], 6); } } $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, $setp) { if (empty($meetId)) { m("log")->addlog("短信发送", "会议Id为空"); return; } // 获取当前会议信息 $meeting = m("meeting")->getone("id={$this->id}"); $meetTime = $meeting['start_time']; // 时间 $meetTime = date('m月d日H点i分', strtotime($meetTime)); $meetName = $this->strLength35($meeting['title']); // 主题 $smsInfo = []; if ($setp == 0) { m("log")->addlog("会议室审批", "提醒部门领导审批【".$meetName."】"); $checkid = $this->nowcourse['checkid']; } else { $checkid = $this->nextcourse['checkid']; m("log")->addlog("会议室审批", "提醒管理员审批【".$meetName."】"); } if (!empty($checkid)) { $cAdmins = m("admin")->getall("id in ({$checkid})"); if (!empty($cAdmins) && is_array($cAdmins)) { for ($i = 0; $i < count($cAdmins); $i++) { $user = $cAdmins[$i]; $mobile = $user['mobile']; // 领导手机号 $meetUName = $this->rs['attn']; // 申请人姓名 if (!empty($mobile)) { $smsInfo['phoneNum'][] = $mobile; $smsInfo['para'][] = [ "usernam" => $meetUName, "username" => $meetUName, "meetingname" => $meetName, "begindate" => $meetTime, ]; } } if (count($smsInfo['phoneNum']) > 0) { m('send_sms')->sendBatchSms($smsInfo['phoneNum'], $smsInfo['para'], 2); } } } } // 提醒申请人 public function meetingApplicantSms($meetId) { if (empty($meetId)) { m("log")->addlog("短信发送", "会议Id为空"); return; } if (empty($this->rs)) { m("log")->addlog("短信发送", "表单数据为空"); return; } // 获取当前会议信息 $meeting = m("meeting")->getone("id={$this->id}"); $uname = $this->rs['optname']; $mdate = date('m月d日H点i分', strtotime($this->rs['start_time'])); $mname = $this->strLength35($this->rs['title']); $mobile = $this->rs['mobile']; $smsInfo['phoneNum'][] = $mobile; $smsInfo['para'][] = [ "username" => $uname, "date" => $mdate, "meetname" => $mname ]; if (count($smsInfo['phoneNum']) > 0) { m('send_sms')->sendBatchSms($smsInfo['phoneNum'], $smsInfo['para'], 4); } } public function meetingMaXuSms($meetId) { if (empty($meetId)) { m("log")->addlog("短信发送", "会议Id为空"); return; } if (empty($this->rs)) { m("log")->addlog("短信发送", "表单数据为空"); return; } $uname = "马旭"; $mdate = date('m月d日H点i分', strtotime($this->rs['start_time'])); $mname = $this->strLength35($this->rs['title']); $mobile = "18695503090"; $smsInfo['phoneNum'][] = $mobile; $smsInfo['para'][] = [ "username" => $uname, "date" => $mdate, "meetname" => $mname ]; if (count($smsInfo['phoneNum']) > 0) { m('send_sms')->sendBatchSms($smsInfo['phoneNum'], $smsInfo['para'], 4); } } // 固定会议,每日改变会议日期 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}"); } } function strLength35($str) { if (strlen($str) > 35) { // 截取前35个字符 $str = mb_substr($str, 0, 35, 'UTF-8'); // 如果截取后的字符串长度达到35,则添加省略号 if (mb_strlen($str, 'UTF-8') == 35) { $str = mb_substr($str, 0, 34, 'UTF-8') . '…'; } } return $str; } function updateAttendees($meetingId) { $meetingInfo = m('meeting')->getone("id = $meetingId"); $attendees_id = $meetingInfo['attendees_id']; $attendees_arr = explode(',', $attendees_id); $dept_arr = []; $user_arr = []; for ($i = 0; $i < count($attendees_arr); $i++) { $att = $attendees_arr[$i]; $start_str = substr($att, 0, 1); if ($start_str == 'd') { $dept_arr[] = substr($att, 1); } else if ($start_str == 'u') { $user_arr[] = substr($att, 1); }; } $dept_str = implode(',', $dept_arr); $user_str = implode(',', $user_arr); $dept_names = m('dept')->getall("id in ($dept_str)", "name", 'sort'); $user_names = m('admin')->getall("id in ($user_str)", 'name', 'sort'); $dept_names = array_column($dept_names, 'name'); $user_names = array_column($user_names, 'name'); $data['attendees'] = ''; if ($dept_names != null) { $name = implode(',', $dept_names); $data['attendees'] .= $name; } if ($user_names != null) { if ($dept_names != null) $data['attendees'] .= ','; $name = implode(',', $user_names); $data['attendees'] .= $name; } // // 英文双引号替换为中文双引号 $meetingTitle = html_entity_decode($meetingInfo['title'], ENT_QUOTES, 'UTF-8'); $meetingTitle = preg_replace('/"([^"]*)"/', '“${1}”', $meetingTitle); $data['title'] = str_replace('"', '“', $meetingTitle); m('meeting')->update($data, "id = $meetingId"); } }