* @date 2020-01-24 14:11:56 */ declare(strict_types=1); namespace App\Repositories; use App\Model\ManagerLogModel; use App\Repositories\Service\CommonService; use Hyperf\Database\Model\Builder; use KZ2\Repositories\Model\Repository; class ManagerLogRepository extends Repository { public function model() { return ManagerLogModel::class; } /** * 创建1条日志 * @param $inputs * @return \Hyperf\DbConnection\Model\Model */ public function createOne($inputs) { $managerId = data_get($inputs, 'manager_id', ''); $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->getHeader('user-agent'); // 取第一个. $ua = current($arrUa); $setarr = [ 'manager_id' => $managerId, 'username' => $username, 'nick' => $nick, 'subject' => $subject, 'module' => $module, 'action' => $action, 'svalue' => $svalue, 'db_data' => $jsonDbData, 'ip' => make(CommonService::class)->getIp(), '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])) { $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; } }