AdminHistory.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php namespace App\Models;
  2. use Illuminate\Database\Eloquent\Factories\HasFactory;
  3. use Illuminate\Database\Eloquent\Model;
  4. use App\Models\AdminUser;
  5. /**
  6. * 后台管理员操作历史
  7. *
  8. */
  9. class AdminHistory extends Model
  10. {
  11. use HasFactory;
  12. // 与模型关联的表名
  13. protected $table = 'admin_history';
  14. // 是否主动维护时间戳
  15. public $timestamps = false;
  16. // 模型日期的存储格式
  17. // protected $dateFormat = 'U';
  18. // 定义时间戳字段名
  19. // const CREATED_AT = 'insert_time';
  20. // const UPDATED_AT = 'update_time';
  21. // 操作表字段
  22. private $tableColumn = [
  23. 'admin' =>[
  24. '_table_name'=>'管理表',
  25. 'status'=>'状态',
  26. ],
  27. 'need' => [
  28. '_table_name'=>'需求表',
  29. 'baseline'=>'基线名称',
  30. 'status'=>'状态',
  31. 'project_id'=>'项目ID',
  32. 'project_type'=>'项目类型',
  33. 'project_title'=>'项目类型',
  34. 'memory_size'=>'硬件空间',
  35. 'template_id'=>'项目平台',
  36. 'custom_uid'=>'客户名称',
  37. ],
  38. ];
  39. /**
  40. * 添加数据
  41. *
  42. * @param Int $uid 用户ID
  43. * @param String $table 操作表
  44. * @param Int $type 操作类型
  45. * @param Array $oldData 旧数据
  46. * @param Array $oldData 新数据
  47. *
  48. *
  49. */
  50. public function addAll($uid,$table,$id,$type,$oldData,$newData){
  51. // 有ID,删除
  52. if( isset($oldData['id']) ) unset($oldData['id']);
  53. if( isset($newData['id']) ) unset($newData['id']);
  54. // 取差集
  55. $diff = [];
  56. // 当前时间
  57. $time = time();
  58. // 循环新数据
  59. foreach ($newData as $key => $value) {
  60. // 如果存在字段,且字段相等。不做处理
  61. if( isset($oldData[$key]) && $oldData[$key] == $value ) continue;
  62. // 获取结果
  63. $diff[] = [
  64. // 操作主键
  65. 'primary_id' =>$id,
  66. // 操作类型
  67. 'notes_type' =>$type,
  68. // 操作表名
  69. 'table_name' =>$table,
  70. // 操作字段
  71. 'column_name' =>$key,
  72. // 操作用户
  73. 'admin_uid' =>$uid,
  74. // 操作之前
  75. 'before_value' =>empty($oldData[$key]) ? '' : $oldData[$key],
  76. // 操作之后
  77. 'after_value' =>$value,
  78. // 时间
  79. 'insert_time' =>$time,
  80. // 时间
  81. 'update_time' =>$time,
  82. ];
  83. }
  84. // 结果
  85. $result = $diff ? $this->query()->insert($diff) : 0;
  86. // 如果有数据
  87. return $result;
  88. }
  89. /**
  90. * 获取历史
  91. *
  92. * @param String $table 操作表
  93. * @param Int $id 操作ID
  94. * @param Bool $getHtml 是否获取Html
  95. *
  96. */
  97. public function getHistory($table,$id,$getHtml=true){
  98. // 查询返回结果
  99. $data = $this->query()->where([['table_name','=',$table],['primary_id','=',$id]])->orderByDesc('update_time')->limit($getHtml?1:3)->get()->toArray();
  100. // html
  101. $html = '';
  102. // 循环数据
  103. foreach ($data as $key => $value) {
  104. // 获取字段名称
  105. $value['table_name'] = $this->getTableName($table,$value['table_name']);
  106. // 获取字段名称
  107. $value['notes_type'] = $value['notes_type'] == 1 ? '添加' : ($value['notes_type'] == 2 ? '修改' : '删除');
  108. // 获取字段名称
  109. $value['column_name'] = $this->getTableColumn($table,$value['column_name']);
  110. // 获取字段名称
  111. $value['admin_name'] = (new AdminUser())->getOne($value['admin_uid'],'nickname');
  112. // 返回结果
  113. $html = '<p>'.$value['admin_name'] .' '. date('m-d H:i',$value['update_time']).' '.$value['notes_type'].' '.$value['column_name'].'</p>';
  114. // 重组
  115. $data[$key] = $value;
  116. }
  117. // 返回结果
  118. return $getHtml ? $html : $data;
  119. }
  120. /**
  121. * 获取表格字段名
  122. *
  123. * @param String $table 操作表
  124. * @param String $column 操作字段
  125. *
  126. */
  127. public function getTableColumn($table,$column){
  128. // 结果
  129. return isset($this->tableColumn[$table][$column]) ? $this->tableColumn[$table][$column] : $column;
  130. }
  131. /**
  132. * 获取表格列表
  133. *
  134. *
  135. */
  136. public function getTableNameList(){
  137. // 结果
  138. return $this->tableColumn;
  139. }
  140. /**
  141. * 获取表格名
  142. *
  143. * @param String $table 操作表
  144. *
  145. */
  146. public function getTableName($table){
  147. // 结果
  148. return isset($this->tableColumn[$table]['_table_name']) ? $this->tableColumn[$table]['_table_name'] : $table;
  149. }
  150. /**
  151. * 获取最后一次修改值的信息
  152. * @param String $table 操作表
  153. * @param Int $id 操作ID
  154. *
  155. */
  156. public function getLastByValue($table,$id,$column,$value)
  157. {
  158. // 查询返回结果
  159. $data = $this->query()->where([['table_name','=',$table],['primary_id','=',$id],['column_name','=',$column],['after_value','=',$value]])->orderByDesc('update_time')->first(['admin_uid','update_time']);
  160. // 返回结果
  161. return $data ? $data->toArray() : [];
  162. }
  163. }