| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <?php
- /**
- * 代理操作日志仓库.
- *
- * @author nj
- * @date 2021-01-24 14:11:56
- */
- namespace App\Repositories;
- use App\Models\Mysql\AgentLogModel;
- use KZ2\Laravel\Repositories\Eloquent\Repository;
- use App\Models\Mysql\ManagerLogModel;
- use Ip;
- class AgentLogRepository extends Repository
- {
- public function model()
- {
- return AgentLogModel::class;
- }
- /**
- * 创建1条日志
- * @param $inputs
- * @return mixed
- */
- public function createOne($inputs)
- {
- $agentUid = data_get($inputs, 'agent_uid', '');
- $username = data_get($inputs, 'username', '');
- $nick = data_get($inputs, 'nick', '');
- $subject = $inputs['subject']; // 一定是主题的.
- $module = data_get($inputs, 'module', '');
- $action = data_get($inputs, 'action', '');
- $svalue = data_get($inputs, 'svalue', '');
- $dbData = data_get($inputs, 'db_data', []);
- if (!empty($dbData)) {
- if (!empty($dbData['after_items'])) {
- if (is_object($dbData['after_items'])) {
- $dbData['after_items'] = collect($dbData['after_items'])->toArray();
- }
- if (is_array($dbData['after_items'])) {
- $dbData['after_items'] = array_filter($dbData['after_items']);
- }
- }
- if (!empty($dbData['before_items'])) {
- if (is_object($dbData['before_items'])) {
- $dbData['before_items'] = collect($dbData['before_items'])->toArray();
- }
- if (is_array($dbData['before_items'])) {
- $dbData['before_items'] = array_filter($dbData['before_items']);
- }
- }
- $dbData['compared_items'] = $this->computeLog($dbData['after_items'], $dbData['before_items']);
- }
- $jsonDbData = !empty($dbData) ? json_encode($dbData, JSON_UNESCAPED_UNICODE) : null;
- $request = request();
- $arrUa = $request->header('user-agent');
- // 取第一个.
- $ua = is_array($arrUa) ? current($arrUa) : $arrUa;
- if (empty($ua)) {
- $ua = '';
- }
- $arrIpInfo = client_ip_info();
- $ip = $arrIpInfo[0];
- $ipAddress = $arrIpInfo[1];
- $setarr = [
- 'agent_uid' => $agentUid,
- 'username' => $username,
- 'nick' => $nick,
- 'subject' => $subject,
- 'module' => $module,
- 'action' => $action,
- 'svalue' => $svalue,
- 'db_data' => $jsonDbData,
- 'ip' => $ip,
- 'ip_address' => $ipAddress,
- 'ua' => $ua,
- ];
- $log = ManagerLogModel::create($setarr);
- unset($inputs, $dbData, $setarr, $jsonDbData);
- return $log;
- }
- /**
- * 对比数据,返回对比结果.
- * @param $new_data
- * @param array $old_data
- * @return array
- */
- protected function computeLog($new_data, $old_data = [])
- {
- $result = [];
- if ($new_data && $old_data) {
- foreach ($new_data as $k1 => $v1) {
- $result[$k1] = [];
- if (is_array($v1)) {
- foreach ($v1 as $k2 => $v2) {
- if (isset($old_data[$k1][$k2])) {
- if (is_array($old_data[$k1][$k2])) {
- continue;
- } else {
- $old_len = mb_strlen((string)$old_data[$k1][$k2]);
- }
- } else {
- $old_len = 0;
- }
- $new_len = mb_strlen((string)$v2);
- if ($new_len > 255 || $old_len > 255) {
- if ($old_data[$k1][$k2] != $v2) {
- $result[$k1][$k2] = $k2 .'字段:有变动...';
- }
- } else {
- if ($old_data[$k1][$k2] != $v2) {
- if (is_array($v2)) {
- $result[$k1][$k2] = $k2 .'字段:有变动..';
- } else {
- $result[$k1][$k2] = $k2 .'字段:'. $old_data[$k1][$k2] . ' → '. $v2;
- }
- }
- }
- }
- } elseif (is_string($v1)) {
- $new_len = mb_strlen((string)$v1);
- if (isset($old_data[$k1])) {
- $old_len = mb_strlen((string)$old_data[$k1]);
- } else {
- $old_len = 0;
- }
- if ($new_len > 255 || $old_len > 255) {
- if ($old_data[$k1] != $v1) {
- $result[$k1] = $k1 .'索引, 有变动...';
- }
- } else {
- if ($old_data[$k1] != $v1) {
- $result[$k1] = $k1 .'索引, '. $old_data[$k1] . ' → '. $v1;
- }
- }
- }
- }
- } elseif (!empty($old_data) && empty($new_data)) {
- $result = $old_data;
- } elseif (!empty($new_data) && empty($old_data)) {
- $result = $new_data;
- }
- unset($new_data, $old_data);
- return $result;
- }
- }
|