'线索', 'crm_customer' => '客户', 'crm_pool' => '客户公海', 'crm_contacts' => '联系人', 'crm_product' => '产品', 'crm_business' => '商机', 'crm_contract' => '合同', 'crm_receivables' => '回款', 'crm_visit' => '回访', 'crm_invoice' => '回款', 'oa_log' => '办公日志', 'work_task' => '任务', 'work' => '项目', 'oa_event' => '日程', 'crm_activity' => '跟进记录', ]; public $systemModules = [ 'company' => '企业首页', 'application' => '应用管理', 'structures' => '部门管理', 'employee' => '员工管理', 'role' => '角色管理', 'approval' => '审批流程管理', 'workbench' => '工作台', 'project' => '项目管理', 'customer' => '客户管理', 'work_task' => '其他设置' ]; public $systemAction=[ 'admin_oalog_rule'=>'日志', 'admin_group'=>'角色', 'crm_leads' => '线索', 'crm_customer' => '客户', 'crm_pool' => '客户公海', 'crm_contacts' => '联系人', 'crm_product' => '产品', 'crm_business' => '商机', 'crm_contract' => '合同', 'crm_receivables' => '回款', 'crm_visit' => '回访', 'crm_invoice' => '回款', 'oa_log' => '办公日志', 'oa_examine' => '办公审批', 'crm_config' => '客户管理系统设置', 'crm_number_sequence' => '业绩目标', 'admin_structure' => '部门', 'admin_config' => '应用管理', 'work_task' => '其他设置' ]; /** * 日志记录中的行为所对应的中文名称 * * @var string[] */ private $action = [ 'save' => '添加数据', 'update' => '编辑数据', 'delete' => '删除数据', 'excel' => '导入数据', 'excelexport' => '导出数据', 'lock' => '锁定', 'islock' => '解锁', 'status' => '更改成交状态', 'receive' => '领取', 'transfer' => '转移', 'teamSave' => '添加团队成员', 'distribute' => '分配', 'up' => '上架', 'down' => '下架', 'recover' => '归档恢复', 'archiveData' => '归档', 'copy' => '复制', ]; private $loginType = [ '成功', '密码错误', '账号禁用' ]; /** * 登录日志 * * @param $param * @return array * @throws \think\exception\DbException */ public function getLoginRecord($param) { $res= db('admin_login_record') ->alias('login') ->join('__ADMIN_USER__ user','user.id=login.create_user_id','LEFT') ->where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('login.create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('login.create_time', '<=', strtotime($param['endTime'])); if (!empty($param['userIds'])) $query->whereIn('login.create_user_id', $param['userIds']); }) ->field('login.*,user.realname as username') ->page($param['page'],$param['limit']) ->order('login.id', 'desc') ->select(); foreach ($res as $k =>$v){ $res[$k]['create_time']=!empty($v['create_time'])?date('Y-m-d H:i:s',$v['create_time']):null; $res[$k]['type']=$this->loginType[$v['type']]; } $total= db('admin_login_record') ->alias('login') ->join('__ADMIN_USER__ user','user.id=login.create_user_id','LEFT') ->where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('login.create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('login.create_time', '<=', strtotime($param['endTime'])); if (!empty($param['userIds'])) $query->whereIn('login.create_user_id', $param['userIds']); })->count(); $data=[]; $data['list']=$res; $data['dataCount']=$total; return $data; } /** * 获取系统操作日志列表 * * @param $param 查询条件、分页参数 * @return bool|\PDOStatement|string|\think\Collection * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getSystemLogs($param) { $data = db('admin_system_log') ->alias('system') ->join('__ADMIN_USER__ user','user.id=system.user_id','LEFT') ->where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('system.create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('system.create_time', '<=', strtotime($param['endTime'])); if (!empty($param['modules'])) $query->whereIn('system.module_name', $param['modules']); if (!empty($param['userIds'])) $query->whereIn('system.user_id', $param['userIds']); }) ->page($param['page'], $param['limit']) ->field('system.log_id,system.target_name,system.create_time,system.client_ip,system.module_name,system.content,system.target_name,system.action_name,system.controller_name,user.realname') ->order('system.log_id', 'desc')->select(); return $this->setSystemData($data); } /** * 获取系统操作日志总数 * * @param $param 查询条件、分页参数 * @return int|string|null */ public function getSystemLogCount($param) { return SystemLog::where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('create_time', '<=', strtotime($param['endTime'])); if (!empty($param['modules'])) $query->whereIn('controller_name', $param['modules']); if (!empty($param['userIds'])) $query->whereIn('user_id', $param['userIds']); })->count(); } /** * 获取数据操作日志列表 * * @param $param 查询条件、分页参数 * @return bool|\PDOStatement|string|\think\Collection * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getRecordLogs($param) { $data = db('admin_operation_log') ->alias('operation') ->join('__ADMIN_USER__ user','user.id=operation.user_id','LEFT') ->where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('operation.create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('operation.create_time', '<=', strtotime($param['endTime'])); if (!empty($param['modules'])) $query->whereIn('operation.module', arrayToString($param['modules'])); if (!empty($param['userIds'])) $query->whereIn('operation.user_id', $param['userIds']); }) ->field('operation.*,user.realname') ->page($param['page'], $param['limit']) ->order('operation.log_id', 'desc')->select(); return $this->setRecordData($data); } /** * 获取数据操作日志总数 * * @param $param 查询条件、分页参数 * @return int|string|null */ public function getRecordLogCount($param) { return db('admin_operation_log') ->alias('operation') ->join('__ADMIN_USER__ user','user.id=operation.user_id','LEFT') ->where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('operation.create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('operation.create_time', '<=', strtotime($param['endTime'])); if (!empty($param['modules'])) $query->whereIn('operation.module', arrayToString($param['modules'])); if (!empty($param['userIds'])) $query->whereIn('operation.user_id', $param['userIds']); })->count(); } /** * 组装数据操作日志数据 * * @param $data * @return mixed */ private function setRecordData($data) { $result = []; foreach ($data AS $key => $value) { $result[] = [ 'log_id' => $value['log_id'], 'source_name' => $value['target_name'], 'create_time' => date('Y-m-d H:i:s', $value['create_time']), 'ip' => $value['client_ip'], 'module' => $this->recordModules[$value['module']], 'action' => in_array('crm',explode('_',$value['module']))==1? '客户管理':(in_array('oa',explode('_',$value['module']))==1?'办公管理':'项目管理'), 'content' => $value['content'], 'user_name' => $value['realname'], 'action_name' => $this->action[$value['action_name']], ]; } return $result; } /** * 组装系统操作数据操作日志数据 * * @param $data * @return mixed */ private function setSystemData($data) { $result = []; foreach ($data AS $key => $value) { $result[] = [ 'log_id' => $value['log_id'], 'source_name' => $value['target_name'], 'create_time' => date('Y-m-d H:i:s', $value['create_time']), 'ip' => $value['client_ip'], 'action' => $this->systemModules[$value['module_name']], 'content' => $value['content'], 'user_name' => $value['realname'], 'action_name' => $this->action[$value['action_name']], 'module' => '后台管理', 'action_down' => $this->recordModules[$value['controller_name']]?:'', ]; } return $result; } /** * 导出方法 * @param $param * * @author alvin guogaobo * @version 1.0 版本号 * @since 2021/4/8 0008 16:37 */ public function downExcel($param){ $excelModel = new \app\admin\model\Excel(); $file_name='sysLogs'; $field_list=[]; $type=''; $action=$param['action']; unset($param['action']); unset($param['page']); unset($param['limit']); $param['startTime']= !empty($param['startTime'])?$param['startTime'].' 00:00:00':''; $param['endTime']= !empty($param['endTime'])?$param['endTime'].' 23:59:59':''; switch ($action){ case 'getSystemLogs': $type='系统日志'; $field_list = [ '0' => ['name' => '用户', 'field' => 'user_name'], '1' => ['name' => '时间', 'field' => 'create_time'], '2' => ['name' => 'ip地址', 'field' => 'ip'], '3' => ['name' => '模块', 'field' => 'module'], '4' => ['name' => '子模块', 'field' => 'action'], '5' => ['name' => '行为', 'field' => 'action_name'], '6' => ['name' => '对象', 'field' => 'source_name'], '7' => ['name' => '操作详情', 'field' => 'content'], ]; $modules = $this->systemModules; if(!empty($param['subModelLabels'])){ $param['modules']=$param['subModelLabels']; } $list = db('admin_system_log') ->alias('system') ->join('__ADMIN_USER__ user','user.id=system.user_id','LEFT') ->where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('system.create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('system.create_time', '<=', strtotime($param['endTime'])); if (!empty($param['modules'])) $query->whereIn('system.module_name', $param['modules']); if (!empty($param['userIds'])) $query->whereIn('system.user_id', $param['userIds']); }) ->field('system.log_id,system.target_name,system.create_time,system.client_ip,system.module_name,system.content,system.target_name,system.action_name,system.controller_name,user.realname') ->order('system.log_id', 'desc')->select(); $data=$this->setSystemData($list); break; case 'getRecordLogs': $type='系统日志'; $field_list = [ '0' => ['name' => '用户', 'field' => 'user_name'], '1' => ['name' => '时间', 'field' => 'create_time'], '2' => ['name' => 'ip地址', 'field' => 'ip'], '3' => ['name' => '模块', 'field' => 'action'], '4' => ['name' => '子模块', 'field' => 'module'], '5' => ['name' => '行为', 'field' => 'action_name'], '6' => ['name' => '对象', 'field' => 'source_name'], '7' => ['name' => '操作详情', 'field' => 'content'], ]; if(!empty($param['subModelLabels'])){ $param['modules']=$param['subModelLabels']; }else{ switch ($param['model']){ case 'crm': //客户管理 $param['modules']=array( 'crm_leads' , 'crm_customer', 'crm_pool' , 'crm_contacts' , 'crm_product' , 'crm_business' , 'crm_contract' , 'crm_receivables' , 'crm_visit' , 'crm_invoice' , 'crm_activity' ); break; case 'oa' : //办公管理 $param['modules']=array( 'oa_log' , 'oa_event', ); break; case 'work' ://项目管理 $param['modules']=array( 'work_task' , 'work', ); break; default : $param['modules']=array( 'crm_leads' , 'crm_customer', 'crm_pool' , 'crm_contacts' , 'crm_product' , 'crm_business' , 'crm_contract' , 'crm_receivables' , 'crm_visit' , 'crm_invoice' , 'crm_activity', 'oa_log' , 'oa_event', 'work_task' , 'work', ); break; } } $list = db('admin_operation_log') ->alias('operation') ->join('__ADMIN_USER__ user','user.id=operation.user_id','LEFT') ->where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('operation.create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('operation.create_time', '<=', strtotime($param['endTime'])); if (!empty($param['modules'])) $query->whereIn('operation.module', arrayToString($param['modules'])); if (!empty($param['userIds'])) $query->whereIn('operation.user_id', $param['userIds']); }) ->field('operation.*,user.realname') ->order('operation.log_id', 'desc')->select(); $data=$this->setRecordData($list); break; case 'getLoginRecord': $type='登陆日志'; $field_list = [ '0' => ['name' => '用户', 'field' => 'username'], '1' => ['name' => '时间', 'field' => 'create_time'], '2' => ['name' => 'ip地址', 'field' => 'ip'], '3' => ['name' => '登陆地点', 'field' => 'address'], '4' => ['name' => '设备类型', 'field' => 'remark'], '5' => ['name' => '终端内核', 'field' => 'browser'], '6' => ['name' => '平台', 'field' => 'os'], '7' => ['name' => '成功', 'field' => 'type'], ]; $res = db('admin_login_record') ->alias('login') ->join('__ADMIN_USER__ user','user.id=login.create_user_id','LEFT') ->where(function ($query) use ($param) { if (!empty($param['startTime'])) $query->where('login.create_time', '>=', strtotime($param['startTime'])); if (!empty($param['endTime'])) $query->where('login.create_time', '<=', strtotime($param['endTime'])); if (!empty($param['userIds'])) $query->whereIn('login.create_user_id', $param['userIds']); }) ->field('login.*,user.realname as username') ->order('login.id', 'desc') ->select(); foreach ($res as $k =>$v){ $res[$k]['create_time']=!empty($v['create_time'])?date('Y-m-d H:i:s',$v['create_time']):null; $res[$k]['type']=$this->loginType[$v['type']]; } $data=$res; break; } return $excelModel->biExportExcel($file_name, $field_list, $type, $data); } }