| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442 |
- <?php
- /**
- * 日志逻辑类
- *
- * @author qifan
- * @date 2020-11-30
- */
-
- namespace app\admin\logic;
-
- use app\admin\model\LoginRecord;
- use app\admin\model\OperationLog;
- use app\admin\model\SystemLog;
-
- class LogLogic
- {
- /**
- * 数据操作日志中的模块对应的中文名称
- *
- * @var string[]
- */
- public $recordModules = [
- 'crm_leads' => '线索',
- '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);
- }
- }
|