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.
308 lines
12 KiB
308 lines
12 KiB
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | Description: OA工作台
|
|
// +----------------------------------------------------------------------
|
|
// | 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 Index extends ApiCommon
|
|
{
|
|
/**
|
|
* 用于判断权限
|
|
* @permission 无限制
|
|
* @allow 登录用户可访问
|
|
* @other 其他根据系统设置
|
|
**/
|
|
public function _initialize()
|
|
{
|
|
$action = [
|
|
'permission'=>[''],
|
|
'allow'=>['index','tasklist','eventlist','event']
|
|
];
|
|
Hook::listen('check_auth',$action);
|
|
$request = Request::instance();
|
|
$a = strtolower($request->action());
|
|
if (!in_array($a, $action['permission'])) {
|
|
parent::_initialize();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 工作圈
|
|
* @author
|
|
* @return
|
|
*/
|
|
public function index()
|
|
{
|
|
$param = $this->param;
|
|
$userInfo = $this->userInfo;
|
|
$userModel = new \app\admin\model\User();
|
|
$structureModel = new \app\admin\model\Structure();
|
|
$fileModel = new \app\admin\model\File();
|
|
$commonModel = new \app\admin\model\Comment();
|
|
$BusinessModel = new \app\crm\model\Business();
|
|
$ContactsModel = new \app\crm\model\Contacts();
|
|
$ContractModel = new \app\crm\model\Contract();
|
|
$CustomerModel = new \app\crm\model\Customer();
|
|
|
|
if ($param['type'] == 1) { //日志
|
|
$where = ' controller_name = "log" and module_name = "oa" ';
|
|
} elseif ($param['type'] == 2) { //日程
|
|
$where = ' controller_name = "event" and module_name = "oa" ';
|
|
} elseif ($param['type'] == 3) { //公告
|
|
$where = ' controller_name = "announcement" and module_name = "oa" ';
|
|
} elseif ($param['type'] == 4) { //任务
|
|
$where = ' ( controller_name = "task" and module_name = "oa" ) ';
|
|
} elseif ($param['type'] == 5) { //审批
|
|
$where = ' ( controller_name = "examine" and module_name = "oa" ) ';
|
|
} else { //全部
|
|
$where = ' ( module_name = "oa" ) ';
|
|
}
|
|
$limit = $param['limit'] ? : '15' ;
|
|
$page = $param['page'] ? : '1' ;
|
|
//获取权限范围内的员工
|
|
$auth_user_ids = getSubUserId();
|
|
$auth_user_ids = implode(',',$auth_user_ids);
|
|
|
|
$actionList = Db::name('AdminActionLog')
|
|
->where( $where.' and ( action_delete != 1 ) and ( user_id IN ('.$auth_user_ids.') or join_user_ids like "%,'.$userInfo['id'].',%" or structure_ids like "%,'.$userInfo['structure_id'].',%" )')
|
|
->page($page, $limit)
|
|
->order('create_time desc')
|
|
->select();
|
|
$actionCount = Db::name('AdminActionLog')
|
|
->where( $where.' and ( action_delete != 1 ) and ( user_id IN ('.$auth_user_ids.') or join_user_ids like "%,'.$userInfo['id'].',%" or structure_ids like "%,'.$userInfo['structure_id'].',%" )')
|
|
->count();
|
|
foreach ($actionList as $key=>$value) {
|
|
$actionList[$key]['create_user_info'] = $userModel->getUserById($value['user_id']);
|
|
$actionList[$key]['action_content'] = $value['content'] ? : '';
|
|
if ($value['controller_name'] == 'log') {
|
|
$logInfo = [];
|
|
$logInfo = Db::name('OaLog')->where('log_id = '.$value['action_id'].'')->find();
|
|
if ($logInfo) {
|
|
$actionList[$key]['title'] = $logInfo['title'];
|
|
$actionList[$key]['today'] = $logInfo['today'];
|
|
$actionList[$key]['category_id'] = $logInfo['category_id'];
|
|
$actionList[$key]['content'] = $logInfo['content'];
|
|
$actionList[$key]['tomorrow'] = $logInfo['tomorrow'];
|
|
$actionList[$key]['question'] = $logInfo['question'];
|
|
//附件、图片
|
|
$fileList = [];
|
|
$imgList = [];
|
|
$where = [];
|
|
$where['module'] = 'oa_log';
|
|
$where['module_id'] = $value['action_id'];
|
|
$newFileList = [];
|
|
$newFileList = $fileModel->getDataList($where);
|
|
foreach ($newFileList['list'] as $val) {
|
|
if ($val['types'] == 'file') {
|
|
$fileList[] = $val;
|
|
} else {
|
|
$imgList[] = $val;
|
|
}
|
|
}
|
|
$actionList[$key]['fileList'] = $fileList ? : [];
|
|
$actionList[$key]['imgList'] = $imgList ? : [];
|
|
//参与人
|
|
$actionList[$key]['sendUserList'] = $userModel->getDataByStr($logInfo['send_user_ids']) ? : [];
|
|
//参与部门
|
|
$actionList[$key]['sendStructList'] = $structureModel->getDataByStr($logInfo['send_structure_ids']) ? : [];
|
|
//评论
|
|
$commonParam = [];
|
|
$commonParam['type_id'] = $logInfo['log_id'];
|
|
$commonParam['type'] = 'oa_log';
|
|
$actionList[$key]['replyList'] = $commonModel->read($commonParam);
|
|
$actionList[$key]['type'] = 1;
|
|
$actionList[$key]['type_name'] = "日志";
|
|
} else {
|
|
unset($actionList[$key]);
|
|
}
|
|
} elseif ($value['controller_name'] == 'event') {
|
|
//日程
|
|
$eventInfo = Db::name('OaEvent')->field('event_id,title,remark,start_time,end_time,owner_user_ids')->where('event_id = '.$value['action_id'].'')->find();
|
|
if ($eventInfo) {
|
|
$actionList[$key]['title'] = $eventInfo['title'] ? : '';
|
|
$actionList[$key]['remark'] = $eventInfo['remark'] ? : '';
|
|
$actionList[$key]['start_time'] = $eventInfo['start_time'];
|
|
$actionList[$key]['end_time'] = $eventInfo['end_time'];
|
|
$actionList[$key]['ownerList'] = $userModel->getDataByStr($eventInfo['owner_user_ids']);
|
|
$actionList[$key]['type'] = 2;
|
|
$actionList[$key]['type_name'] = "日程";
|
|
$relation = Db::name('OaEventRelation')->where('event_id ='.$value['action_id'])->find();
|
|
$actionList[$key]['businessList'] = $relation['business_ids'] ? $BusinessModel->getDataByStr($relation['business_ids']) : []; //商机
|
|
$actionList[$key]['contactsList'] = $relation['contacts_ids'] ? $ContactsModel->getDataByStr($relation['contacts_ids']) : []; //联系人
|
|
$actionList[$key]['contractList'] = $relation['contract_ids'] ? $ContractModel->getDataByStr($relation['contract_ids']) : []; //合同
|
|
$actionList[$key]['customerList'] = $relation['customer_ids'] ? $CustomerModel->getDataByStr($relation['customer_ids']) : []; //客户
|
|
} else {
|
|
unset($actionList[$key]);
|
|
}
|
|
} elseif ($value['controller_name'] == 'announcement') {
|
|
//公告
|
|
$announcementInfo = Db::name('OaAnnouncement')->field('announcement_id,title,content')->where('announcement_id = '.$value['action_id'].'')->find();
|
|
if ($announcementInfo) {
|
|
$actionList[$key]['title'] = $announcementInfo['title'] ? : '';
|
|
$actionList[$key]['ann_content'] = $announcementInfo['content'] ? : '';
|
|
$actionList[$key]['type'] = 3;
|
|
$actionList[$key]['type_name'] = "公告";
|
|
} else {
|
|
unset($actionList[$key]);
|
|
}
|
|
} elseif ($value['controller_name'] == 'task') {
|
|
//任务
|
|
$taskInfo = Db::name('Task')->field('task_id,name')->where('ishidden =0 and task_id = '.$value['action_id'].'')->find();
|
|
if (!$taskInfo || $taskInfo['pid']) {
|
|
unset($actionList[$key]);
|
|
} else {
|
|
$actionList[$key]['pname'] = '';
|
|
$actionList[$key]['title'] = $taskInfo['name'] ? : '查看详情';
|
|
$actionList[$key]['type'] = 4;
|
|
$actionList[$key]['type_name'] = "任务";
|
|
}
|
|
} elseif ($value['controller_name'] == 'examine') {
|
|
$examineInfo = db('oa_examine')->where(['examine_id' => $value['action_id']])->find();
|
|
if ($examineInfo) {
|
|
$actionList[$key]['title'] = $examineInfo['content'] ? : '查看详情';
|
|
$actionList[$key]['type'] = 5;
|
|
$actionList[$key]['type_name'] = "审批";
|
|
} else {
|
|
unset($actionList[$key]);
|
|
}
|
|
}
|
|
}
|
|
$actionList = $actionList ? array_merge($actionList) : [];
|
|
$data = [];
|
|
$data['list'] = $actionList ? : [];
|
|
$data['dataCount'] = $actionCount ? : 0;
|
|
return resultArray(['data'=>$data]);
|
|
}
|
|
|
|
/**
|
|
* 任务展示
|
|
* @author
|
|
* @return
|
|
*/
|
|
public function taskList()
|
|
{
|
|
$userInfo = $this->userInfo;
|
|
$count = Db::name('Task')->where('( main_user_id = '.$userInfo['id'].' or create_user_id ='.$userInfo['id'].' or owner_user_id like "%,'.$userInfo['id'].',%") and status=1 and ishidden=0')->count();
|
|
$list = Db::name('Task')->field('task_id,name,stop_time,priority,create_time,pid')->where(' ( main_user_id = '.$userInfo['id'].' or create_user_id ='.$userInfo['id'].' or owner_user_id like "%,'.$userInfo['id'].',%") and status=1 and ishidden=0')->select();
|
|
foreach ($list as $k=>$v) {
|
|
if ($v['pid']) {
|
|
$ptask = Db::name('Task')->field('task_id,name')->where('ishidden = 0 and task_id ='.$v['pid'].'')->find();
|
|
if($ptask){
|
|
$list[$k]['pname'] = $ptask['name'];
|
|
} else {
|
|
$list[$k]['pname'] = '';
|
|
}
|
|
} else {
|
|
$list[$k]['pname'] = '';
|
|
}
|
|
if ($v['stop_time']) {
|
|
if ($v['stop_time'] < time()) {
|
|
$list[$k]['task_status'] = '2';
|
|
$list[$k]['task_remark'] = '已逾期';
|
|
} else {
|
|
$list[$k]['task_status'] = '1';
|
|
$list[$k]['task_remark'] = '进行中';
|
|
}
|
|
} else {
|
|
$list[$k]['task_status'] = '0';
|
|
$list[$k]['task_remark'] = '未设置截至时间';
|
|
}
|
|
}
|
|
$data['count'] = $count;
|
|
$data['list'] = $list;
|
|
return resultArray(['data'=>$data]);
|
|
}
|
|
|
|
/**
|
|
* 日程展示
|
|
* @author
|
|
* @return
|
|
*/
|
|
public function eventList()
|
|
{
|
|
$param = $this->param;
|
|
$userInfo = $this->userInfo;
|
|
if($param['start_time'] && $param['end_time']) {
|
|
$start_time = $param['start_time'];
|
|
$end_time = $param['end_time'];
|
|
} else {
|
|
$start_time = mktime(0,0,0,date('m'),1,date('Y'));
|
|
$end_time = mktime(23,59,59,date('m'),date('t'),date('Y'));
|
|
}
|
|
$where = '( ( start_time BETWEEN '.$start_time.' AND '.$end_time.' ) AND ( create_user_id = '.$userInfo['id'].' or owner_user_ids like "%,'.$userInfo['id'].',%" ) ) OR ( ( end_time BETWEEN '.$start_time.' AND '.$end_time.' ) AND ( create_user_id = '.$userInfo['id'].' or owner_user_ids like "%,'.$userInfo['id'].',%" ) ) OR ( start_time < '.$start_time.' AND end_time > '.$end_time.' AND ( create_user_id = '.$userInfo['id'].' or owner_user_ids like "%,'.$userInfo['id'].',%" ) )';
|
|
$event_date = Db::name('OaEvent')->where($where)->select();
|
|
//生成从开始日期到结束日期的日期数组
|
|
$date_array = dateList($start_time,$end_time,2);
|
|
$temp = array();
|
|
foreach($date_array as $k1=>$v1){
|
|
$temp[$k1]['date'] = date('Y-m-d',$v1['sdate']);
|
|
$temp[$k1]['status'] = 0;
|
|
}
|
|
//获取该月日程日期数组
|
|
$event_arr = array();
|
|
foreach ($event_date as $val) {
|
|
$date_arr = array();
|
|
$date_arr = dateList($val['start_time'],$val['end_time'],2);
|
|
if ($date_arr) {
|
|
foreach ($date_arr as $k=>$v) {
|
|
foreach($temp as $k2=>$v2){
|
|
if( $temp[$k2]['date'] == date('Y-m-d',$v['sdate']) ){
|
|
$temp[$k2]['status'] = 1;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($temp as $k2=>$v2) {
|
|
if (date('Y-m-d',$val['start_time'])) {
|
|
if ($temp[$k2]['date'] == date('Y-m-d',$val['start_time'])) {
|
|
$temp[$k2]['status'] = 1;
|
|
}
|
|
} elseif (date('Y-m-d',$val['end_time'] )) {
|
|
if ($temp[$k2]['date'] == date('Y-m-d',$val['end_time'])) {
|
|
$temp[$k2]['status'] = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return resultArray(['data'=>$temp]);
|
|
}
|
|
|
|
/**
|
|
* 日程详情
|
|
* @author
|
|
* @return
|
|
*/
|
|
public function event()
|
|
{
|
|
$param = $this->param;
|
|
$userInfo = $this->userInfo;
|
|
$userModel = new \app\admin\model\User();
|
|
if ($param['start_time']){
|
|
$where['start_time'] = ['<=',$param['start_time']+3600*24 ];
|
|
$where['end_time'] = ['>=',$param['start_time']];
|
|
$eventList = Db::name('OaEvent')
|
|
->where($where)
|
|
->where(function($query) use($userInfo){
|
|
$query->where(['owner_user_ids' => ['like','%,'.$userInfo['id'].',%']])
|
|
->whereOr(['create_user_id' => $userInfo['id']]);
|
|
})->select();
|
|
if (count($eventList)) {
|
|
foreach ($eventList as $k=>$v){
|
|
$eventList[$k]['ownList']= $userModel->getDataByStr($v['owner_user_ids']);
|
|
}
|
|
}
|
|
return resultArray(['data' => $eventList]);
|
|
} else {
|
|
return resultArray(['error'=>'参数错误']);
|
|
}
|
|
}
|
|
} |