Log.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | [ WE CAN DO IT MORE SIMPLE ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2018-2020 rights reserved.
  6. // +----------------------------------------------------------------------
  7. // |
  8. // +----------------------------------------------------------------------
  9. // | Date: 2020-08-31 20:43
  10. // +----------------------------------------------------------------------
  11. namespace app\system\controller\v1;
  12. use app\BaseController;
  13. use app\model\system\AdminLog;
  14. use app\model\api\UserLogin;
  15. use app\model\api\User as UserModel;
  16. use library\services\UtilService;
  17. use library\utils\IpLocation;
  18. class Log extends BaseController
  19. {
  20. public function list()
  21. {
  22. $pageSize = 50;
  23. $post = UtilService::getMore([
  24. ['page', 1],
  25. ['data', ''],
  26. ['action', ''],
  27. ['username', ''],
  28. ['ip', ''],
  29. ]);
  30. list($pageCount, $data) = (new AdminLog())
  31. ->getList($post['page'], [function ($query) use ($post) {
  32. if ($post['data'] == "lately7") {
  33. $sTime = date('Y-m-d', strtotime('-7 day'));
  34. $eTime = date('Y-m-d');
  35. $query->whereBetweenTime('time', $sTime, $eTime);
  36. } else if ($post['data'] == "lately30") {
  37. $sTime = date('Y-m-d', strtotime('-30 day'));
  38. $eTime = date('Y-m-d');
  39. $query->whereBetweenTime('time', $sTime, $eTime);
  40. } else if ($post['data'] == "today") {
  41. $query->whereTime('time', 'today');
  42. } else if ($post['data'] == "yesterday") {
  43. $query->whereTime('time', 'yesterday');
  44. } else if ($post['data'] == "month") {
  45. $query->whereMonth('time');
  46. } else if ($post['data'] == "year") {
  47. $query->whereYear('time');
  48. } else {
  49. $split = explode('-', $post['data']);
  50. if (count($split) == 2) {
  51. $sTime = $split[0];
  52. $eTime = $split[1];
  53. $query->whereBetweenTime('time', $sTime, $eTime);
  54. }
  55. }
  56. if (!empty($post['username'])) {
  57. $query->whereLike('admin_username', "%{$post['username']}%");
  58. }
  59. if (!empty($post['action'])) {
  60. $query->whereLike('action', "%{$post['action']}%");
  61. }
  62. if (!empty($post['ip'])) {
  63. $query->whereLike('ip', "%{$post['ip']}%");
  64. }
  65. },
  66. ], $pageSize, '*', 'id desc');
  67. $result = UtilService::getParam([
  68. 'id',
  69. 'ip',
  70. 'admin_username',
  71. 'action',
  72. 'controller',
  73. 'title',
  74. 'post',
  75. 'get',
  76. ['time', 'time', 'date("Y-m-d H:i:s",$1)'],
  77. ['ipara', 'ip', function ($item) {
  78. return "";
  79. // return (new IpLocation())->getlocation($item)['country'];
  80. }],
  81. ], $data);
  82. return app('json')->success([
  83. 'list' => $result,
  84. 'pageCount' => $pageCount,
  85. 'pageSize' => $pageSize,
  86. 'page' => $post['page'],
  87. ]);
  88. }
  89. /**
  90. * 清理一个月之前的数据
  91. */
  92. public function delMonth()
  93. {
  94. $time = strtotime('- 1 month');
  95. AdminLog::where('time', '<', $time)->delete();
  96. return app('json')->success('清理成功');
  97. }
  98. public function listLoginLog()
  99. {
  100. $pageSize = 50;
  101. $post = UtilService::getMore([
  102. ['page', 1],
  103. ['data', ''],
  104. ['uid', ''],
  105. ['uip', ''],
  106. ['mobile', ''],
  107. ]);
  108. $where = [];
  109. if(!empty($post["uid"])){
  110. $where["l.uid"] = $post["uid"];
  111. }
  112. if(!empty($post["uip"])){
  113. $udata = (new UserModel)->where("uip",$post["uip"])->find();
  114. if(!empty($udata)){
  115. $where["l.uid"] = $udata["uid"];
  116. }
  117. }
  118. if(!empty($post["mobile"])){
  119. $udata = (new UserModel)->where("mobile",$post["mobile"])->find();
  120. if(!empty($udata)){
  121. $where["l.uid"] = $udata["uid"];
  122. }
  123. }
  124. $data = (new UserLogin)
  125. ->alias("l")
  126. ->field("l.*,u.uip,u.mobile,u.nickname")
  127. ->leftJoin("user u","u.uid = l.uid")
  128. ->where($where)
  129. ->when(!empty($post["data"]), function ($query) use ($post) {
  130. if ($post['data'] == "lately7") {
  131. $sTime = date('Y-m-d', strtotime('-7 day'));
  132. $eTime = date('Y-m-d');
  133. $query->whereBetweenTime('l.time', $sTime, $eTime);
  134. } else if ($post['data'] == "lately30") {
  135. $sTime = date('Y-m-d', strtotime('-30 day'));
  136. $eTime = date('Y-m-d');
  137. $query->whereBetweenTime('l.time', $sTime, $eTime);
  138. } else if ($post['data'] == "today") {
  139. $query->whereTime('l.time', 'today');
  140. } else if ($post['data'] == "yesterday") {
  141. $query->whereTime('l.time', 'yesterday');
  142. } else if ($post['data'] == "month") {
  143. $query->whereMonth('l.time');
  144. } else if ($post['data'] == "year") {
  145. $query->whereYear('l.time');
  146. } else {
  147. $split = explode('-', $post['data']);
  148. if (count($split) == 2) {
  149. $sTime = $split[0];
  150. $eTime = $split[1];
  151. $query->whereBetweenTime('l.time', $sTime, $eTime);
  152. }
  153. }
  154. })
  155. ->page((int)$post["page"], $pageSize)
  156. ->order("l.id desc")
  157. ->select()
  158. ->toArray();
  159. $pageCount = (new UserLogin)
  160. ->alias("l")
  161. ->where($where)
  162. ->when(!empty($post["data"]), function ($query) use ($post) {
  163. if ($post['data'] == "lately7") {
  164. $sTime = date('Y-m-d', strtotime('-7 day'));
  165. $eTime = date('Y-m-d');
  166. $query->whereBetweenTime('l.time', $sTime, $eTime);
  167. } else if ($post['data'] == "lately30") {
  168. $sTime = date('Y-m-d', strtotime('-30 day'));
  169. $eTime = date('Y-m-d');
  170. $query->whereBetweenTime('l.time', $sTime, $eTime);
  171. } else if ($post['data'] == "today") {
  172. $query->whereTime('l.time', 'today');
  173. } else if ($post['data'] == "yesterday") {
  174. $query->whereTime('l.time', 'yesterday');
  175. } else if ($post['data'] == "month") {
  176. $query->whereMonth('l.time');
  177. } else if ($post['data'] == "year") {
  178. $query->whereYear('l.time');
  179. } else {
  180. $split = explode('-', $post['data']);
  181. if (count($split) == 2) {
  182. $sTime = $split[0];
  183. $eTime = $split[1];
  184. $query->whereBetweenTime('l.time', $sTime, $eTime);
  185. }
  186. }
  187. })
  188. ->order("l.id desc")
  189. ->count();
  190. foreach($data as $k=>$v){
  191. $data[$k]["time"] = date("Y-m-d H:i:s",$v["time"]);
  192. $data[$k]["title"] = "{$v['nickname']}[{$v['uip']}]进行了登录";
  193. }
  194. return app('json')->success([
  195. 'list' => $data,
  196. 'pageCount' => $pageCount,
  197. 'pageSize' => $pageSize,
  198. 'page' => $post['page'],
  199. ]);
  200. }
  201. /**
  202. * 清理一个月之前的登录数据
  203. */
  204. public function delMonthLoginLog()
  205. {
  206. $time = strtotime('- 1 month');
  207. (new UserLogin)->where('time', '<', $time)->delete();
  208. return app('json')->success('清理成功');
  209. }
  210. }