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; } }