You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wkcrm/application/oa/controller/Message.php

106 lines
4.7 KiB

4 years ago
<?php
// +----------------------------------------------------------------------
// | Description: 办公消息模块
// +----------------------------------------------------------------------
// | Author: Michael_xu | gengxiaoxu@5kcrm.com
// +----------------------------------------------------------------------
namespace app\oa\controller;
use app\admin\controller\ApiCommon;
use think\Hook;
use think\Request;
use think\Db;
class Message extends ApiCommon
{
/**
* 用于判断权限
* @permission 无限制
* @allow 登录用户可访问
* @other 其他根据系统设置
**/
public function _initialize()
{
$action = [
'permission'=>[''],
'allow'=>['num']
];
Hook::listen('check_auth',$action);
$request = Request::instance();
$a = strtolower($request->action());
if (!in_array($a, $action['permission'])) {
parent::_initialize();
}
}
/**
* 消息数
* @author Michael_xu
* @return
*/
public function num()
{
$param = $this->param;
$userInfo = $this->userInfo;
$user_id = $userInfo['id'];
$structure_id = $userInfo['structure_id'];
$type = $param['type'] ? : 'all';
$todayTime = getTimeByType('today');
$start_time = $todayTime[0];
$end_time = $todayTime[1];
$eventNum = 0; //日程数
$taskNum = 0; //任务数
$announcementNum = 0; //公告数
$logNum = 0; //日志数
$examineNum = 0; //审批数
$data = [];
//日程
if ($type == 'event' || $type == 'all') {
$eventWhere = '( ( start_time BETWEEN '.$start_time.' AND '.$end_time.' ) AND ( create_user_id = '.$user_id.' or owner_user_ids like "%,'.$user_id.',%" ) ) OR ( ( end_time BETWEEN '.$start_time.' AND '.$end_time.' ) AND ( create_user_id = '.$user_id.' or owner_user_ids like "%,'.$user_id.',%" ) ) OR ( start_time < '.$start_time.' AND end_time > '.$end_time.' AND ( create_user_id = '.$user_id.' or owner_user_ids like "%,'.$user_id.',%" ) )';
$eventNum = db('oa_event')->where($eventWhere)->count();
$data['eventNum'] = $eventNum ? : 0;
}
//任务(我负责的和我参与的未完成的任务提醒)
if ($type == 'task' || $type == 'all') {
$taskWhere = [];
$str = ','.$userInfo['id'].',';
$task = 'main_user_id ='.$userInfo['id'].' or create_user_id ='.$user_id.' or ( is_open = 1 and owner_user_id like "%'.$str.'%")';
$taskWhere['pid'] = 0;
$taskWhere['status'] = array('neq',5);
$taskWhere['work_id'] = 0;
$taskNum = db('task')->where(' ishidden=0 and ( '.$task.' )')->where($taskWhere)->count();
$data['taskNum'] = $taskNum ? : 0;
}
//公告(未读公告)
if ($type == 'announcement' || $type == 'all') {
$time = strtotime(date('Y-m-d',time()));
$announcementWhere['start_time'] = array('elt',$time);
$announcementWhere['end_time'] = array('egt',$time);
$announcementWhere['read_user_ids'] = array('not like','%,'.$user_id.',%');
$announcementNum = db('oa_announcement')->where(' ( owner_user_ids LIKE "%,'.$userInfo['id'].',%" OR structure_ids LIKE "%,'.$userInfo['structure_id'].',%" OR create_user_id = '.$user_id.' OR (owner_user_ids = "" AND structure_ids = ""))')->where($announcementWhere)->count();
$data['announcementNum'] = $announcementNum ? : 0;
}
//日志(发送给自己并未读)
if ($type == 'log' || $type == 'all') {
$dataWhere['user_id'] = $user_id;
$dataWhere['structure_id'] = $structure_id;
$logMap = function($query) use ($dataWhere){
$query->where('send_user_ids',array('like','%,'.$dataWhere['user_id'].',%'))
->whereOr('send_structure_ids',array('like','%,'.$dataWhere['structure_id'].',%'));
};
$logWhere['read_user_ids'] = ['not like','%,'.$user_id.',%'];
$logNum = db('oa_log')->where($logWhere)->where($logMap)->count();
$data['logNum'] = $logNum ? : 0;
}
//审批
if ($type == 'examine' || $type == 'all') {
$examineWhere['check_status'] = array('elt',1);
$map_str = "( `check_user_id` LIKE '%,".$user_id.",%' OR `check_user_id` = ".$user_id." )";
$examineNum = db('oa_examine')->where($map_str)->where($examineWhere)->count();
$data['examineNum'] = $examineNum ? : 0;
}
return resultArray(['data'=>$data]);
}
}