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");
}
}