Browse Source

日志查询优化

hejq 7 years ago
parent
commit
9d0c66a7cc

+ 25 - 0
src/main/java/com/uas/platform/b2bManage/controller/LogsController.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2bManage.controller;
 package com.uas.platform.b2bManage.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2bManage.model.ErrorLog;
 import com.uas.platform.b2bManage.model.ErrorLog;
 import com.uas.platform.b2bManage.model.UseType;
 import com.uas.platform.b2bManage.model.UseType;
 import com.uas.platform.b2bManage.service.ErrorLogService;
 import com.uas.platform.b2bManage.service.ErrorLogService;
@@ -7,9 +8,11 @@ import com.uas.platform.b2bManage.service.UseLogService;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.AgentUtils;
+import org.apache.commons.lang.StringEscapeUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort;
+import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -32,6 +35,16 @@ public class LogsController {
     @Autowired
     @Autowired
     private ErrorLogService logService;
     private ErrorLogService logService;
 
 
+    /**
+     * 分页查询日志信息
+     *
+     * @param params 分页参数
+     * @param keyword 关键字
+     * @param request 请求
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @return
+     */
     @RequestMapping(value = "/errPage", method = RequestMethod.GET)
     @RequestMapping(value = "/errPage", method = RequestMethod.GET)
     public Page<ErrorLog> findByPageInfo(PageParams params, String keyword, HttpServletRequest request, Long fromDate, Long endDate) {
     public Page<ErrorLog> findByPageInfo(PageParams params, String keyword, HttpServletRequest request, Long fromDate, Long endDate) {
         PageInfo info = new PageInfo(params);
         PageInfo info = new PageInfo(params);
@@ -43,4 +56,16 @@ public class LogsController {
         useLogService.appendLog(UseType.LOGS_SEARCH.code(), keyword, AgentUtils.getIp(request));
         useLogService.appendLog(UseType.LOGS_SEARCH.code(), keyword, AgentUtils.getIp(request));
         return logService.findErrLogsByPageInfo(info, keyword, fromDate, endDate);
         return logService.findErrLogsByPageInfo(info, keyword, fromDate, endDate);
     }
     }
+
+    /**
+     * 通过id查询参数详情
+     *
+     * @param id 主表id
+     * @return
+     */
+    @RequestMapping(value = "/para", method = RequestMethod.GET)
+    public ModelMap findParameters(Long id) {
+        String result = logService.findParameters(id);
+        return new ModelMap("content", result);
+    }
 }
 }

+ 15 - 0
src/main/java/com/uas/platform/b2bManage/dao/ErrorLogDetailDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2bManage.dao;
+
+import com.uas.platform.b2bManage.model.ErrorLogDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 日志详情
+ *
+ * Created by hejq on 2018-06-22.
+ */
+@Repository
+public interface ErrorLogDetailDao extends JpaSpecificationExecutor<ErrorLogDetail>, JpaRepository<ErrorLogDetail, Long> {
+}

+ 0 - 95
src/main/java/com/uas/platform/b2bManage/model/ErrorLog.java

@@ -1,7 +1,5 @@
 package com.uas.platform.b2bManage.model;
 package com.uas.platform.b2bManage.model;
 
 
-import com.uas.platform.core.model.Constant;
-import com.uas.platform.core.model.Status;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
 
 
 import javax.persistence.*;
 import javax.persistence.*;
@@ -56,16 +54,6 @@ public class ErrorLog implements Serializable {
     @Column(name = "log_date")
     @Column(name = "log_date")
     private Date date = new Date(System.currentTimeMillis());
     private Date date = new Date(System.currentTimeMillis());
 
 
-    /**
-     * 处理状态
-     * <pre>
-     *     210: 未阅读
-     *     211: 已阅读
-     * </pre>
-     */
-    @Column(name = "log_status")
-    private Integer status = Status.NOT_READ.value();
-
     /**
     /**
      * 企业UU
      * 企业UU
      */
      */
@@ -78,41 +66,6 @@ public class ErrorLog implements Serializable {
     @Column(name = "log_enname")
     @Column(name = "log_enname")
     private String enName = "";
     private String enName = "";
 
 
-    /**
-     * 用户UU
-     */
-    @Column(name = "log_useruu")
-    private Long userUU = 0L;
-
-    /**
-     * 用户姓名
-     */
-    @Column(name = "log_username")
-    private String userName = "";
-
-    /**
-     * ip地址
-     */
-    @Column(name = "log_ip")
-    private String ip = "";
-
-    /**
-     * 是否需要阅读
-     * <pre>
-     *     1: 是
-     *     0: 否
-     * </pre>
-     */
-    @Column(name = "log_needread")
-    private Short needRead = Constant.NO;
-
-    /**
-     * 请求参数
-     */
-    @Lob
-    @Column(name = "log_parameters")
-    private String parameters;
-
     public Long getId() {
     public Long getId() {
         return id;
         return id;
     }
     }
@@ -153,14 +106,6 @@ public class ErrorLog implements Serializable {
         this.date = date;
         this.date = date;
     }
     }
 
 
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
     public Long getEnUU() {
     public Long getEnUU() {
         return enUU;
         return enUU;
     }
     }
@@ -176,44 +121,4 @@ public class ErrorLog implements Serializable {
     public void setEnName(String enName) {
     public void setEnName(String enName) {
         this.enName = enName;
         this.enName = enName;
     }
     }
-
-    public Long getUserUU() {
-        return userUU;
-    }
-
-    public void setUserUU(Long userUU) {
-        this.userUU = userUU;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getIp() {
-        return ip;
-    }
-
-    public void setIp(String ip) {
-        this.ip = ip;
-    }
-
-    public Short getNeedRead() {
-        return needRead;
-    }
-
-    public void setNeedRead(Short needRead) {
-        this.needRead = needRead;
-    }
-
-    public String getParameters() {
-        return parameters;
-    }
-
-    public void setParameters(String parameters) {
-        this.parameters = parameters;
-    }
 }
 }

+ 148 - 0
src/main/java/com/uas/platform/b2bManage/model/ErrorLogDetail.java

@@ -0,0 +1,148 @@
+package com.uas.platform.b2bManage.model;
+
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.Status;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 日志详情,记录一些不需要一直展示的数据
+ *
+ * Created by hejq on 2018-06-22.
+ */
+@Entity
+@Table(name = "log$error$detail")
+public class ErrorLogDetail implements Serializable {
+
+    /**
+     * default serialVersionUID
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "log_id")
+    private Long id;
+
+    /**
+     * 用户UU
+     */
+    @Column(name = "log_useruu")
+    private Long userUU = 0L;
+
+    /**
+     * 用户姓名
+     */
+    @Column(name = "log_username")
+    private String userName = "";
+
+    /**
+     * ip地址
+     */
+    @Column(name = "log_ip")
+    private String ip = "";
+
+    /**
+     * 是否需要阅读
+     * <pre>
+     *     1: 是
+     *     0: 否
+     * </pre>
+     */
+    @Column(name = "log_needread")
+    private Short needRead = Constant.NO;
+
+    /**
+     * 请求参数
+     */
+    @Lob
+    @Column(name = "log_parameters")
+    private String parameters;
+
+    /**
+     * 处理状态
+     * <pre>
+     *     210: 未阅读
+     *     211: 已阅读
+     * </pre>
+     */
+    @Column(name = "log_status")
+    private Integer status = Status.NOT_READ.value();
+
+    /**
+     * ErrorLog ID
+     */
+    @Column(name = "log_logid")
+    private Long logId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public Short getNeedRead() {
+        return needRead;
+    }
+
+    public void setNeedRead(Short needRead) {
+        this.needRead = needRead;
+    }
+
+    public String getParameters() {
+        return parameters;
+    }
+
+    public void setParameters(String parameters) {
+        this.parameters = parameters;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Long getLogId() {
+        return logId;
+    }
+
+    public void setLogId(Long logId) {
+        this.logId = logId;
+    }
+
+    public ErrorLogDetail() {}
+
+}

+ 8 - 0
src/main/java/com/uas/platform/b2bManage/service/ErrorLogService.java

@@ -21,4 +21,12 @@ public interface ErrorLogService {
      * @return
      * @return
      */
      */
     Page<ErrorLog> findErrLogsByPageInfo(PageInfo info, String keyword, Long fromDate, Long endDate);
     Page<ErrorLog> findErrLogsByPageInfo(PageInfo info, String keyword, Long fromDate, Long endDate);
+
+    /**
+     * 通过主表id查询参数详情
+     *
+     * @param id 主表id
+     * @return
+     */
+    String findParameters(Long id);
 }
 }

+ 17 - 4
src/main/java/com/uas/platform/b2bManage/service/impl/ErrorLogServiceImpl.java

@@ -12,6 +12,7 @@ import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -36,6 +37,9 @@ public class ErrorLogServiceImpl implements ErrorLogService {
      */
      */
     static final String UU_REGEXP = "^\\d{4,}$";
     static final String UU_REGEXP = "^\\d{4,}$";
 
 
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
 
 
     /**
     /**
      * 通过关键词分页查询B2B接口错误日志
      * 通过关键词分页查询B2B接口错误日志
@@ -49,16 +53,14 @@ public class ErrorLogServiceImpl implements ErrorLogService {
     @Override
     @Override
     public Page<ErrorLog> findErrLogsByPageInfo(final PageInfo info, String keyword, Long fromDate, Long endDate) {
     public Page<ErrorLog> findErrLogsByPageInfo(final PageInfo info, String keyword, Long fromDate, Long endDate) {
         if (!StringUtils.isEmpty(keyword)) {
         if (!StringUtils.isEmpty(keyword)) {
-            SimpleExpression userName = new SimpleExpression("userName", keyword, CriterionExpression.Operator.LIKE, true);
             SimpleExpression enName = new SimpleExpression("enName", keyword, CriterionExpression.Operator.LIKE, true);
             SimpleExpression enName = new SimpleExpression("enName", keyword, CriterionExpression.Operator.LIKE, true);
             if (keyword.matches(UU_REGEXP)) {
             if (keyword.matches(UU_REGEXP)) {
                 SimpleExpression enUU = new SimpleExpression("enUU", keyword, CriterionExpression.Operator.EQ, true);
                 SimpleExpression enUU = new SimpleExpression("enUU", keyword, CriterionExpression.Operator.EQ, true);
-                SimpleExpression userUU = new SimpleExpression("userUU", keyword, CriterionExpression.Operator.EQ, true);
-                SimpleExpression[] expressions = new SimpleExpression[]{userName, enUU, enName, userUU};
+                SimpleExpression[] expressions = new SimpleExpression[]{enUU, enName};
                 LogicalExpression logical = new LogicalExpression(expressions, CriterionExpression.Operator.OR);
                 LogicalExpression logical = new LogicalExpression(expressions, CriterionExpression.Operator.OR);
                 info.expression(logical);
                 info.expression(logical);
             } else {
             } else {
-                SimpleExpression[] expressions = new SimpleExpression[]{userName, enName};
+                SimpleExpression[] expressions = new SimpleExpression[]{enName};
                 LogicalExpression logical = new LogicalExpression(expressions, CriterionExpression.Operator.OR);
                 LogicalExpression logical = new LogicalExpression(expressions, CriterionExpression.Operator.OR);
                 info.expression(logical);
                 info.expression(logical);
             }
             }
@@ -77,4 +79,15 @@ public class ErrorLogServiceImpl implements ErrorLogService {
             }
             }
         }, info);
         }, info);
     }
     }
+
+    /**
+     * 通过主表id查询参数详情
+     *
+     * @param id 主表id
+     * @return
+     */
+    @Override
+    public String findParameters(Long id) {
+        return jdbcTemplate.queryForObject("select log_parameters from log$error$detail where log_logid = " + id, String.class);
+    }
 }
 }

+ 25 - 0
src/main/webapp/WEB-INF/views/normal/logs.html

@@ -51,6 +51,12 @@
         word-break: break-all;
         word-break: break-all;
         word-wrap: break-word;
         word-wrap: break-word;
     }
     }
+    #para-content {
+        word-break: break-all;
+        word-wrap: break-word;
+        max-height: 450px;
+        overflow: scroll;
+    }
 </style>
 </style>
 <div id="loadingDiv">
 <div id="loadingDiv">
 	<div id="loadingImg">
 	<div id="loadingImg">
@@ -112,6 +118,25 @@
 </section>
 </section>
 <!-- section end -->
 <!-- section end -->
 
 
+<!-- 参数详情 -->
+<div class="modal fade" id="paraDetail" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                参数详情
+            </div>
+            <div class="modal-body">
+                <p id="para-content" readonly placeholder="暂无详情"></p>
+            </div>
+            <div class="modal-footer">
+                <a type="button" class="btn btn-default" data-dismiss="modal">
+                    关闭
+                </a>
+            </div>
+        </div><!-- /.modal-content -->
+    </div><!-- /.modal-dialog -->
+</div>
+
 </body>
 </body>
 <script type="text/javascript" src="static/lib/jquery/jquery.min.js"></script>
 <script type="text/javascript" src="static/lib/jquery/jquery.min.js"></script>
 <script type="text/javascript" src="static/lib/bootstrap/js/bootstrap.min.js"></script>
 <script type="text/javascript" src="static/lib/bootstrap/js/bootstrap.min.js"></script>

+ 23 - 5
src/main/webapp/resources/js/common/log.js

@@ -37,6 +37,12 @@ function getLogList(count, page, keyword, fromDate, endDate) {
             for (var i = 0; i < logList.length; i++) {
             for (var i = 0; i < logList.length; i++) {
                 var trow = getDataRow(logList[i], i); //定义一个方法,返回tr数据
                 var trow = getDataRow(logList[i], i); //定义一个方法,返回tr数据
                 tbody.appendChild(trow);
                 tbody.appendChild(trow);
+                (function(i) {
+                    $("#para_detail_" + logList[i].id ).click(function () {
+                        getPara(logList[i].id);
+                        $('#loadingDiv').show();
+                    });
+                })(i)
             }
             }
 
 
             // 点击搜索
             // 点击搜索
@@ -77,6 +83,20 @@ function getLogList(count, page, keyword, fromDate, endDate) {
     })
     })
 }
 }
 
 
+/**
+ * 获取参数详情
+ *
+ * @param id 主表id
+ */
+function getPara(id) {
+    $.get('log/para', {id: id}, function (data) {
+        var content = document.getElementById('para-content');
+        content.innerText = data.content;
+        $('#loadingDiv').hide();
+        $('#paraDetail').modal('show');
+    });
+}
+
 /**
 /**
  * 建立表格数据
  * 建立表格数据
  *
  *
@@ -86,8 +106,6 @@ function getLogList(count, page, keyword, fromDate, endDate) {
  */
  */
 function getDataRow(log, i) {
 function getDataRow(log, i) {
     var row = document.createElement('tr'); //创建行
     var row = document.createElement('tr'); //创建行
-    row.id = "link_b2b_" + i;
-    row.class = "redirect_b2b";
 
 
     var indexCell = document.createElement('td'); //序号
     var indexCell = document.createElement('td'); //序号
     indexCell.setAttribute("class", "text-center");
     indexCell.setAttribute("class", "text-center");
@@ -127,9 +145,9 @@ function getDataRow(log, i) {
 
 
     var paraCell = document.createElement('td'); //parameters
     var paraCell = document.createElement('td'); //parameters
     paraCell.setAttribute("class", "text-center");
     paraCell.setAttribute("class", "text-center");
-    paraCell.setAttribute("style", "max-width: 500px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp:5");
-    paraCell.setAttribute("title", log.parameters);
-    paraCell.innerHTML = log.parameters; //填充数据
+    paraCell.setAttribute("title", "查看详情");
+    paraCell.innerHTML = "查看参数详情"; //填充数据
+    paraCell.setAttribute("id", "para_detail_" + log.id)
     row.appendChild(paraCell);
     row.appendChild(paraCell);
 
 
     return row;
     return row;

+ 0 - 77
src/main/webapp/resources/js/index/app.js

@@ -6,81 +6,4 @@ $(function() {
 		interval: 3000
 		interval: 3000
 	});
 	});
 	
 	
-	/*// 通过哈希值切换幻灯片
-	var onHashChange = function() {
-		var hash = (window.location.hash && window.location.hash.substring(1)) || null;
-		switch(hash) {
-			case '/finance':
-				$('.carousel').carousel(4); break;
-			case '/public':
-				$('.carousel').carousel(8); break;
-			case '/member':
-				$('.carousel').carousel(9); break;
-			case '/help':
-				$('.carousel').carousel(7); break;
-            case '/uuzcJob':
-                $('.carousel').carousel(5); break;
-		}
-	};
-	
-	onHashChange();
-	
-	// 监听哈希值变化
-	window.onhashchange = function() {
-		onHashChange();
-	};
-	
-	var tour = new Tour({
-		template: "<div class='popover tour'>" +
-					"<div class='arrow'></div>" + 
-					"<div class='popover-title text-info'></div>" +
-					"<div class='popover-content'></div>" +
-					"<div class='popover-navigation'>" +
-						"<button class='btn btn-default btn-sm' data-role='prev'>« 上一步</button>" +
-						"<span data-role='separator'>&nbsp;</span>" +
-						"<button class='btn btn-default btn-sm' data-role='next'>下一步 »</button>" +
-						"<button class='btn btn-default btn-sm' data-role='end'>结束引导</button>" +
-					"</div>" +
-				"</div>",
-		steps: [{
-			element: '#logo',
-			title: '这是优软云的新Logo哟',
-			content: '点击这里可以返回到优软云首页',
-			placement: 'bottom',
-			backdrop: true
-		}, {
-			element: '.link-login',
-			title: '点击这里去登录',
-			content: '使用原有的优软商务平台的账号和密码就可以登录啦',
-			placement: 'bottom',
-			backdrop: true
-		}, {
-			element: '.link-b2b',
-			title: '点击这里进入原先的优软商务平台',
-			content: '优软商务平台搬到这里啦,点进去就能看到客户给你下的新的采购单咯',
-			placement: 'bottom',
-			backdrop: true
-		}, {
-			element: '.qrcode-uu',
-			title: '手机UU客户端二维码',
-			content: '扫描下载手机UU客户端,全新的移动办公体验',
-			placement: 'top',
-			backdrop: true
-		}, {
-			element: '.qrcode-uas',
-			title: 'UAS公众号二维码',
-			content: '扫描关注UAS微信公众号,掌握最新动态',
-			placement: 'top',
-			backdrop: true
-		}],
-		onEnd: function() {
-			// 介绍滚动至页面最顶部
-			$(document.body).animate({scrollTop: 0}, 300);
-		}
-	});
-	
-	// 引导提示
-	tour.init();
-	tour.start();*/
-	
 });
 });