Browse Source

B2B后台管理更换登录方法,增加B2B接口日志查询

hejq 7 years ago
parent
commit
40a0d767cf

+ 14 - 3
src/main/java/com/uas/platform/b2bManage/controller/AccountController.java

@@ -17,9 +17,11 @@ import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 
 /**
  * 账户信息
@@ -48,8 +50,8 @@ public class AccountController extends BaseController {
 	 *
 	 */
 	@RequestMapping(value = "/login", method = RequestMethod.POST)
-	public void login(String userName, String passWord) throws IllegalAccessException {
-        userService.login(userName.trim(), passWord.trim(), request);
+	public void login(String userName, String passWord) throws IllegalAccessException, UnsupportedEncodingException {
+        userService.login(userName.trim(), passWord.trim(), request, response);
         useLogService.appendLog(UseType.LOGIN.code(), null, AgentUtils.getIp(request));
 	}
 
@@ -61,7 +63,16 @@ public class AccountController extends BaseController {
 	@RequestMapping(value = "/logout", method = RequestMethod.POST)
 	public ModelMap logout() throws IOException {
 		SystemSession.clear();
-		request.getSession().removeAttribute("user");
+        if (request.getCookies() != null) {
+            for (Cookie cookie : request.getCookies()) {
+                if (cookie.getName().equals("user")) {
+                    cookie.setMaxAge(0);
+                    cookie.setValue("");
+                    cookie.setPath("/");
+                    response.addCookie(cookie);
+                }
+            }
+        }
         useLogService.appendLog(UseType.LOGOUT.code(), null, AgentUtils.getIp(request));
 		return success();
 	}

+ 1 - 1
src/main/java/com/uas/platform/b2bManage/controller/EnterpriseCotroller.java

@@ -64,7 +64,7 @@ public class EnterpriseCotroller {
         if (!StringUtils.isEmpty(keyword)) {
             keyword = keyword.trim();
         }
-        useLogService.appendLog(UseType.SEARCH.code(), keyword, AgentUtils.getIp(request));
+        useLogService.appendLog(UseType.ENGERPRISE_SEARCH.code(), keyword, AgentUtils.getIp(request));
         return baseInfoService.findEnterPageByKeyword(info, keyword);
     }
 

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

@@ -0,0 +1,46 @@
+package com.uas.platform.b2bManage.controller;
+
+import com.uas.platform.b2bManage.model.ErrorLog;
+import com.uas.platform.b2bManage.model.UseType;
+import com.uas.platform.b2bManage.service.ErrorLogService;
+import com.uas.platform.b2bManage.service.UseLogService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.util.AgentUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 日志查询接口
+ *
+ * Created by hejq on 2018-06-21.
+ */
+@RequestMapping("/log")
+@RestController
+public class LogsController {
+
+    @Autowired
+    private UseLogService useLogService;
+
+    @Autowired
+    private ErrorLogService logService;
+
+    @RequestMapping(value = "/errPage", method = RequestMethod.GET)
+    public Page<ErrorLog> findByPageInfo(PageParams params, String keyword, HttpServletRequest request, Long fromDate, Long endDate) {
+        PageInfo info = new PageInfo(params);
+        Sort sort = new Sort(Sort.Direction.DESC, "id");
+        info.setSort(sort);
+        if (!StringUtils.isEmpty(keyword)) {
+            keyword = keyword.trim();
+        }
+        useLogService.appendLog(UseType.LOGS_SEARCH.code(), keyword, AgentUtils.getIp(request));
+        return logService.findErrLogsByPageInfo(info, keyword, fromDate, endDate);
+    }
+}

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

@@ -0,0 +1,15 @@
+package com.uas.platform.b2bManage.dao;
+
+import com.uas.platform.b2bManage.model.ErrorLog;
+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-20.
+ */
+@Repository
+public interface ErrorLogDao extends JpaRepository<ErrorLog, Long>, JpaSpecificationExecutor<ErrorLog> {
+}

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

@@ -0,0 +1,219 @@
+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 javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 记录平台接口报错异常
+ *
+ * Created by hejq on 2018-06-20.
+ */
+@Table(name = "log$error")
+@Entity
+public class ErrorLog implements Serializable {
+
+    /**
+     * default serialVersionUID
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "log_id")
+    private Long id;
+
+    /**
+     * 请求地址
+     */
+    @Column(name = "log_url")
+    private String url = "";
+
+    /**
+     * 错误消息
+     */
+    @Length(max = 2000)
+    @Column(name = "log_msg")
+    private String msg = "";
+
+    /**
+     * 错误详情
+     */
+    @Lob
+    @Column(name = "log_detail", columnDefinition = "text")
+    private String detail = "";
+
+    /**
+     * 记录时间
+     */
+    @Column(name = "log_date")
+    private Date date = new Date(System.currentTimeMillis());
+
+    /**
+     * 处理状态
+     * <pre>
+     *     210: 未阅读
+     *     211: 已阅读
+     * </pre>
+     */
+    @Column(name = "log_status")
+    private Integer status = Status.NOT_READ.value();
+
+    /**
+     * 企业UU
+     */
+    @Column(name = "log_enuu")
+    private Long enUU = 0L;
+
+    /**
+     * 企业名称
+     */
+    @Column(name = "log_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() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public String getDetail() {
+        return detail;
+    }
+
+    public void setDetail(String detail) {
+        this.detail = detail;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String 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;
+    }
+}

+ 7 - 2
src/main/java/com/uas/platform/b2bManage/model/UseType.java

@@ -23,9 +23,14 @@ public enum UseType {
     REGISTER("注册"),
 
     /**
-     * 搜索
+     * 企业搜索
      */
-    SEARCH("搜索"),
+    ENGERPRISE_SEARCH("企业搜索"),
+
+    /**
+     * 日志搜索
+     */
+    LOGS_SEARCH("日志搜索"),
 
     /**
      * 查询

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

@@ -0,0 +1,24 @@
+package com.uas.platform.b2bManage.service;
+
+import com.uas.platform.b2bManage.model.ErrorLog;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+/**
+ * B2B接口错误日志记录
+ *
+ * Created by hejq on 2018-06-21.
+ */
+public interface ErrorLogService {
+
+    /**
+     * 通过关键词分页查询B2B接口错误日志
+     *
+     * @param info 分页信息
+     * @param keyword 关键字
+     * @param fromDate 起始时间
+     * @param endDate 截止时间
+     * @return
+     */
+    Page<ErrorLog> findErrLogsByPageInfo(PageInfo info, String keyword, Long fromDate, Long endDate);
+}

+ 2 - 1
src/main/java/com/uas/platform/b2bManage/service/UserService.java

@@ -8,6 +8,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 
 /**
  * 用户接口
@@ -46,7 +47,7 @@ public interface UserService {
      * @param userName 账号
      * @param passWord 密码
      */
-    void login(String userName, String passWord, HttpServletRequest request) throws IllegalAccessException;
+    void login(String userName, String passWord, HttpServletRequest request, HttpServletResponse response) throws IllegalAccessException, UnsupportedEncodingException;
 
     /**
      * 注册用户

+ 80 - 0
src/main/java/com/uas/platform/b2bManage/service/impl/ErrorLogServiceImpl.java

@@ -0,0 +1,80 @@
+package com.uas.platform.b2bManage.service.impl;
+
+import com.uas.platform.b2bManage.core.util.StringUtils;
+import com.uas.platform.b2bManage.dao.ErrorLogDao;
+import com.uas.platform.b2bManage.model.ErrorLog;
+import com.uas.platform.b2bManage.service.ErrorLogService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.Date;
+
+/**
+ * B2B接口错误日志记录
+ *
+ * Created by hejq on 2018-06-21.
+ */
+@Service
+public class ErrorLogServiceImpl implements ErrorLogService {
+
+    @Autowired
+    private ErrorLogDao logDao;
+
+    /**
+     * UU号正则表达式
+     */
+    static final String UU_REGEXP = "^\\d{4,}$";
+
+
+    /**
+     * 通过关键词分页查询B2B接口错误日志
+     *
+     * @param info     分页信息
+     * @param keyword  关键字
+     * @param fromDate 起始时间
+     * @param endDate  截止时间
+     * @return
+     */
+    @Override
+    public Page<ErrorLog> findErrLogsByPageInfo(final PageInfo info, String keyword, Long fromDate, Long endDate) {
+        if (!StringUtils.isEmpty(keyword)) {
+            SimpleExpression userName = new SimpleExpression("userName", keyword, CriterionExpression.Operator.LIKE, true);
+            SimpleExpression enName = new SimpleExpression("enName", keyword, CriterionExpression.Operator.LIKE, true);
+            if (keyword.matches(UU_REGEXP)) {
+                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};
+                LogicalExpression logical = new LogicalExpression(expressions, CriterionExpression.Operator.OR);
+                info.expression(logical);
+            } else {
+                SimpleExpression[] expressions = new SimpleExpression[]{userName, enName};
+                LogicalExpression logical = new LogicalExpression(expressions, CriterionExpression.Operator.OR);
+                info.expression(logical);
+            }
+            if (null != fromDate) {
+                info.expression(PredicateUtils.gte("date", new Date(fromDate), false));
+            }
+            if (null != endDate) {
+                info.expression(PredicateUtils.lte("date", new Date(endDate), false));
+            }
+        }
+        return logDao.findAll(new Specification<ErrorLog>() {
+            @Override
+            public Predicate toPredicate(Root<ErrorLog> root, CriteriaQuery<?> query,
+                                         CriteriaBuilder builder) {
+                return query.where(info.getPredicates(root, query, builder)).getRestriction();
+            }
+        }, info);
+    }
+}

+ 7 - 2
src/main/java/com/uas/platform/b2bManage/service/impl/UserServiceImpl.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2bManage.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.uas.message.mail.service.MailService;
 import com.uas.platform.b2bManage.core.support.SystemSession;
 import com.uas.platform.b2bManage.core.util.StringUtils;
@@ -21,9 +22,12 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 
 import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.util.List;
 
 /**
@@ -89,7 +93,7 @@ public class UserServiceImpl implements UserService {
      * @param passWord 密码
      */
     @Override
-    public void login(String userName, String passWord, HttpServletRequest request) throws IllegalAccessException {
+    public void login(String userName, String passWord, HttpServletRequest request, HttpServletResponse response) throws IllegalAccessException, UnsupportedEncodingException {
         List<User> users = userDao.findByTel(userName);
         if (CollectionUtils.isEmpty(users)) {
             users = userDao.findByEmail(userName);
@@ -101,7 +105,8 @@ public class UserServiceImpl implements UserService {
         if (Md5Utils.encode(passWord, user.getName()).equals(user.getPassword())) {
             user.setIp(AgentUtils.getIp(request));
             SystemSession.setUser(user);
-            request.getSession().setAttribute("user", user);
+            Cookie cookie = new Cookie("user", URLEncoder.encode(JSON.toJSONString(user), "UTF-8"));
+            response.addCookie(cookie);
         } else {
             throw new IllegalAccessException("账号或密码错误");
         }

+ 18 - 7
src/main/java/com/uas/platform/b2bManage/web/filter/SSOInterceptor.java

@@ -1,13 +1,14 @@
 package com.uas.platform.b2bManage.web.filter;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2bManage.core.support.SystemSession;
 import com.uas.platform.b2bManage.model.User;
 import com.uas.platform.b2bManage.service.UserService;
 import com.uas.platform.b2bManage.support.SecurityConstant;
-import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.sso.SSOHelper;
 import com.uas.sso.SSOToken;
+import org.apache.http.protocol.HTTP;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -16,9 +17,12 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 
 
 /**
@@ -65,10 +69,17 @@ public class SSOInterceptor extends HandlerInterceptorAdapter {
      *
      * @param request
      */
-    private void logSession(HttpServletRequest request) {
-        Object user = request.getSession().getAttribute("user");
-        if (user != null && AgentUtils.getIp(request).equals(((User) user).getIp())) {
-            SystemSession.setUser((User) user);
+    private void logSession(HttpServletRequest request) throws UnsupportedEncodingException {
+        Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
+        for (Cookie cookie : cookies){
+            if (cookie.getName().equals("user")) {
+                Object jsonStr = cookie.getValue();
+                if (jsonStr != null) {
+                    String str = URLDecoder.decode(jsonStr.toString(), HTTP.UTF_8);
+                    User user = JSONObject.parseObject(str, User.class);
+                    SystemSession.setUser(user);
+                }
+            }
         }
     }
 
@@ -80,13 +91,13 @@ public class SSOInterceptor extends HandlerInterceptorAdapter {
     }
 
     protected void onAuthenticateSuccess(HttpServletRequest request, HttpServletResponse response) {
-        User user = (User) request.getSession().getAttribute("user");
+        User user = (User) request.getAttribute("user");
         SSOToken token = SSOHelper.attrToken(request);
         // cookie变化的情况下,session可能还未变化
         if (user == null) {
             user = getUserByToken(token);
             if (user != null) {
-                request.getSession().setAttribute("user", user);
+                request.setAttribute("user", user);
             }
         }
         if (user != null) {

+ 8 - 183
src/main/webapp/WEB-INF/views/normal/index.html

@@ -19,37 +19,9 @@
 <link rel="stylesheet" href="static/css/common.css" />
 <link rel="stylesheet" href="static/css/index.css" />
 <link rel="stylesheet" href="static/css/toastr.css" />
-<title>优软云</title>
-<script>
-var _hmt = _hmt || [];
-(function() {
-  var hm = document.createElement("script");
-  hm.src = "//hm.baidu.com/hm.js?ab3516f4a7187fa5ac0e449c7db9f195";
-  var s = document.getElementsByTagName("script")[0]; 
-  s.parentNode.insertBefore(hm, s);
-
-})();
-</script>
+<title>B2B商务平台后台管理</title>
 </head>
 <body>
-    <div id="body">
-        <!--请求众创登录接口的数据-->
-        <form action="" method="post" target="target" id="J_commenting">
-            <input id="username" name="username" type="hidden" >
-            <input id="password" name="password" type="hidden" >
-            <input id="email" name="email" type="hidden" >
-            <input id="mobile" name="mobile" type="hidden" >
-            <input id="uc_uid" name="uc_uid" type="hidden">
-            <input id="salt" name="salt" type="hidden" >
-            <!--企业-->
-            <input id="companyname" name="companyname" type="hidden" >
-            <input id="license" name="license" type="hidden" >
-            <input id="website" name="website" type="hidden" >
-            <input id="landine_tel" name="landine_tel" type="hidden" >
-            <input id="telephone" name="telephone" type="hidden" >
-        </form>
-        <iframe name="target" id="target" style="display:none;"></iframe>
-    </div>
 	<!-- nav start -->
 	<nav id="nav" class="navbar navbar-inverse navbar-fixed-top">
 		<div class="container">
@@ -58,36 +30,16 @@ var _hmt = _hmt || [];
 					height="25px" /></a>
 			</div>
 			<div class="collapse navbar-collapse">
+                <div class="nav navbar-nav navbar-left">
+                    <span>B2B商务平台后台管理</span>
+                </div>
 				<ul class="nav navbar-nav navbar-left">
-					<li><a href="http://uas.ubtob.com" class="link-b2b">B2B商务</a></li>
-					<li><a href="http://www.usoftmall.com/" class="link-mall">优软商城</a></li>
-					<li><a href="saas/about" class="link-saas">优企云服</a></li>
-					<li>
-						<a class="link-finance" href="http://www.yitoa-fintech.com">金融服务</a>
-					</li><!-- http://finance.ubtob.com -->
-					<li><a href="#/uuzcJob" class="link-job">人才招聘</a></li><!-- http://public.ubtob.com -->
-					<li>
-						<a href="http://www.uuzcc.com/" class="">英唐众创</a>
-						<ul>
-							<li><a href="http://zb.uuzcc.com/">任务外包</a></li>
-							<li><a href="http://fangan.uuzcc.com/">方案商城</a></li>
-							<li><a href="http://bbs.uuzcc.com/forum.php">技术论坛</a></li>
-						</ul>
-					</li><!-- http://public.ubtob.com -->
-					<li>
-						<a href="http://diymall.ubtob.com/" class="link-diymall">定制商城</a></li><!-- http://diymall.ubtob.com -->
-					</li>
-					<li>
-						<a href="#/help" class="link-help">服务专区</a>
-						<ul>
-							<li><a href="#/public" class="link-public">公共服务</a></li><!-- http://public.ubtob.com -->
-							<li><a href="#/member" class="link-member">会员中心</a></li><!-- http://member.ubtob.com -->
-						</ul>
-					</li><!-- http://help.ubtob.com -->
+					<li><a href="/enterprise" class="link-b2b">企业列表</a></li>
+					<li><a href="/logs" class="link-mall">UAS-API日志</a></li>
 				</ul>
 				<ul class="nav navbar-nav navbar-right x-nologin">
 					<li><a href="#" class="link-login">登录</a></li>
-					<li><a href="https://sso.ubtob.com/register/enterpriseRegistration?appId=home">注册</a></li>
+					<li><a href="/">注册</a></li>
 				</ul>
 				<ul class="nav navbar-nav navbar-right x-login">
 					<li class="dropdown">
@@ -115,144 +67,17 @@ var _hmt = _hmt || [];
 				
 			<!-- Indicators -->
 			<ol class="carousel-indicators">
-				<li data-target="#carousel-example-generic" data-slide-to="0"
-				class="active"></li>
 				<li data-target="#carousel-example-generic" data-slide-to="1"></li>
-				<li data-target="#carousel-example-generic" data-slide-to="2"></li>
-				<li data-target="#carousel-example-generic" data-slide-to="3"></li>
-				<li data-target="#carousel-example-generic" data-slide-to="4"></li>
-				<li data-target="#carousel-example-generic" data-slide-to="5"></li>
-				<li data-target="#carousel-example-generic" data-slide-to="6"></li>
-				<li data-target="#carousel-example-generic" data-slide-to="7"></li>
-				<li data-target="#carousel-example-generic" data-slide-to="8"></li>
-				<li data-target="#carousel-example-generic" data-slide-to="9"></li>
-                <li data-target="#carousel-example-generic" data-slide-to="10"></li>
 			</ol>
 
 			<!-- Wrapper for slides -->
 			<div class="carousel-inner" role="listbox">
-				<div class="item active carousel-item1">
-					<img src="static/img/carousel/header-01.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text">
-								<h1>优软云</h1>
-								<p>
-									一个轻盈、便捷、智慧的产业互联网综合服务平台
-								</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div class="item carousel-item8">
-					<img src="static/img/carousel/header-08.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text">
-								<h1>B2B商务</h1>
-								<p>
-									十年深耕,携您飞跃<br />优软B2B商务,为您提供更强大的功能服务
-								</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div class="item carousel-item2">
-					<img src="static/img/carousel/header-02.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text">
-								<h1>优软商城</h1>
-								<p>
-									一家独立的第三方电子交易商城<br />服务于买家、卖家,帮助企业实现互利共赢
-								</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div class="item carousel-item3">
-					<img src="static/img/carousel/header-03.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text">
-								<h1>优企云服</h1>
-								<p>
-									集行业经验,十年磨一剑<br />为企业提供专业、高效的软件服务!
-								</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div class="item carousel-item4">
-					<img src="static/img/carousel/header-04.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text">
-								<h1>金融服务</h1>
-								<p>
-									提供融资、租赁、保理、小额贷等金融综合服务<br />为企业高速发展保驾护航!
-								</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div class="item carousel-item10">
-					<img src="static/img/carousel/header-11.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text" style="color: #000; top: 20px;">
-								<h1>人才招聘</h1>
-								<p>
-									优质服务,快速响应,急速入职!<br />为行业资深工程师发现更好的工作机会, <br/>为企业挖掘专业人才。
-								</p>
-							</div>
-							<div class="header-btn">
-								<a href="#" class="link-job-get">我要招人</a>
-                                <a href="#" class="link-hr-set" style="display: none">设置HR账号</a>
-                                <a href="#" class="link-job-post">我要求职</a>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div class="item carousel-item9">
-					<img src="static/img/carousel/header-10.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text">
-								<h1>英唐众创</h1>
-								<p>让研发不再难,让技术更走薪<br />为需求方和服务方提供方案共享、<br />开发兼职、学习技术的高效对接平台</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div class="item carousel-item7">
-					<img src="static/img/carousel/header-07.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text">
-								<h1>服务专区</h1>
-								<p>秉承专业、贴心的原则<br />提供线上咨询、技术支持等优质的服务<br />近期上线,敬请期待!</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div class="item carousel-item5">
-					<img src="static/img/carousel/header-05.jpg" alt="" />
-					<div class="carousel-caption">
-						<div class="container">
-							<div class="header-text">
-								<h1>公共服务</h1>
-								<p>提供税务、物流、关务、招聘等服务<br />帮助您降低管理成本、提高工作效率,为您创造关键的决胜机会<br />近期上线,敬请期待!</p>
-							</div>
-						</div>
-					</div>
-				</div>
 				<div class="item carousel-item6">
 					<img src="static/img/carousel/header-06.jpg" alt="" />
 					<div class="carousel-caption">
 						<div class="container">
 							<div class="header-text">
-								<h1>会员中心</h1>
+								<h1>B2B商务平台后台管理</h1>
 								<p>为满足您自身独具一格、别开生面的需求<br />我们将提供专属的贴心服务!<br />近期上线,敬请期待!</p>
 							</div>
 						</div>

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

@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<meta name="renderer" content="webkit">
+	<meta http-equiv="Content-Language" Content="zh-CN">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<meta name="author" content="优软科技">
+	<meta name="Keywords" content="优软,优软云,优企云服,SAAS,UAS,ERP,企业管理">
+	<meta name="baidu-site-verification" content="tamBdrxeYx" />
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=8">
+	<meta http-equiv="Expires" content="0">
+	<meta http-equiv="Pragma" content="no-cache">
+	<meta http-equiv="Cache-control" content="no-cache">
+	<meta http-equiv="Cache" content="no-cache">
+	<link href="static/img/icon/icon_32.png" rel="icon" type="image/x-icon" />
+	<link rel="stylesheet" href="static/lib/bootstrap/css/bootstrap.min.css" />
+	<link rel="stylesheet"
+		  href="static/lib/fontawesome/css/font-awesome.min.css" />
+	<link rel="stylesheet" href="static/lib/bootstrap-tour/css/bootstrap-tour.min.css" />
+	<link rel="stylesheet" href="static/css/common.css" />
+	<link rel="stylesheet" href="static/css/enterprise.css" />
+    <link rel="stylesheet" href="static/css/pagination.css">
+	<title>UAS-API日志</title>
+</head>
+<body>
+<style>
+	#loadingDiv {
+		position: absolute;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		top: 0;
+		/*background: #000000;*/
+		opacity: 0.3;
+		filter: alpha(opacity=80);
+		z-index: 10000;
+        display: none;
+	}
+	#loadingImg {
+		position: absolute;
+		cursor: wait;
+		left: 50%;
+		top: 50%;
+		width: 100%;
+        height: 100%;
+	}
+    #logList-body {
+        word-break: break-all;
+        word-wrap: break-word;
+    }
+</style>
+<div id="loadingDiv">
+	<div id="loadingImg">
+		<img src="../static/images/waiting.gif"/>
+	</div>
+</div>
+<!-- nav start -->
+<nav id="nav" class="navbar navbar-inverse navbar-fixed-top">
+	<div class="container">
+		<div class="navbar-header">
+			<a href="http://www.ubtob.com" id="logo"><img src="static/img/logo.png" alt="" height="25px" /></a>
+		</div>
+		<div class="collapse navbar-collapse">
+			<div class="nav navbar-nav navbar-left">
+				<span>B2B商务平台后台管理</span>
+			</div>
+            <ul class="nav navbar-nav navbar-right x-login">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle"><i class="fa fa-user"></i> <span class="title"></span></a>
+                </li>
+                <li><a href="#" class="link-logout">退出</a></li>
+            </ul>
+		</div>
+	</div>
+</nav>
+<!-- nav end -->
+
+<!-- section start -->
+<section>
+	<div class="container">
+		<div class="section-title">
+			<h3>UAS-API日志列表</h3>
+		</div>
+	</div>
+    <div class="search">
+        <div class="search-title" style="float: right">
+			<input id="logList-total" style="width: 100px; border:0;outline:0;background: #F7F7F8" readonly>
+		</div>
+        <div class="input-group">
+            <input type="text" id="keyword" class="form-control" placeholder="请输入名称或UU号搜索"><span class="input-group-addon" id="p_search">搜索</span>
+        </div>
+    </div>
+	<table class="table table-striped table-hover">
+		<thead id="enterprise-head">
+            <th class="text-center" width="60">序号</th>
+            <th class="text-center" width="80">时间</th>
+            <th class="text-center" width="100">企业UU</th>
+            <th class="text-center" width="100">企业名称</th>
+			<th class="text-center" width="100">错误原因</th>
+            <th class="text-center" width="150">详情</th>
+            <th class="text-center" width="120">参数</th>
+		</thead>
+        <tbody id="logList-body">
+        </tbody>
+        <div id="page"></div>
+    </table>
+    <div id="m-page" class="m-style"></div>
+</section>
+<!-- section end -->
+
+</body>
+<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-tour/js/bootstrap-tour.min.js"></script>
+<script type="text/javascript" src="static/js/common/log.js"></script>
+<script type="text/javascript" src="static/js/index/app.js"></script>
+<script type="text/javascript" src="static/js/common/common.js"></script>
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/normal/signIn.html

@@ -29,7 +29,7 @@
 <nav id="nav" class="navbar navbar-inverse navbar-fixed-top">
 	<div class="container">
 		<div class="navbar-header">
-			<a href="http://www.ubtob.com" id="logo"><img src="static/img/logo.png" alt="" height="25px" /></a>
+			<a href="http://192.168.253.12:23396" id="logo"><img src="static/img/logo.png" alt="" height="25px" /></a>
 		</div>
 		<div class="collapse navbar-collapse">
 			<div class="nav navbar-nav navbar-left">

+ 1 - 0
src/main/webapp/WEB-INF/webmvc.xml

@@ -48,6 +48,7 @@
 	<mvc:view-controller path="/index" view-name="index" />
 	<mvc:view-controller path="/signIn" view-name="signIn" />
 	<mvc:view-controller path="/enterprise" view-name="enterprise" />
+	<mvc:view-controller path="/logs" view-name="logs" />
 	<mvc:view-controller path="/resetPassword" view-name="resetPassword" />
     <mvc:view-controller path="/invalid" view-name="invalid" />
     <mvc:view-controller path="/**#" view-name="signIn" />

+ 9 - 0
src/main/webapp/resources/css/index.css

@@ -1,4 +1,13 @@
 /* header */
+
+div.navbar-nav{
+	position: relative;
+	height: 50px;
+	line-height: 50px;
+	font-size: 16px;
+	color: #fff;
+}
+
 header {
 	position: relative;
 }

+ 167 - 0
src/main/webapp/resources/js/common/log.js

@@ -0,0 +1,167 @@
+/**
+ * 引入toaster方法
+ */
+document.write("<script language=javascript src='static/js/common/toastr.js'></script>");
+
+/**
+ * 引入分页
+ */
+document.write("<script language=javascript src='static/lib/jquery/jquery.pagination.js'></script>");
+
+var logList = [];
+
+/**
+ * 获取日志列表
+ */
+function getLogList(count, page, keyword, fromDate, endDate) {
+    $('#loadingDiv').show();
+    logList = [];
+    $.get('log/errPage', {
+        count: count,
+        page: page,
+        keyword: keyword,
+        fromDate: fromDate,
+        endDate: endDate
+    }, function (data) {
+        $('#loadingDiv').hide();
+        logList = data.content;
+        var pageNumber = data.number;
+        var pageSize = data.size;
+        var total = data.totalElements;
+        var totalPage = data.totalPages;
+        var tbody = document.getElementById("logList-body");
+        var page = document.getElementById("page");
+        //noinspection JSAnnotator
+        $('#logList-total').val('共 ' + total + ' 条');
+        if (logList.length > 0) {
+            for (var i = 0; i < logList.length; i++) {
+                var trow = getDataRow(logList[i], i); //定义一个方法,返回tr数据
+                tbody.appendChild(trow);
+            }
+
+            // 点击搜索
+            $('#p_search').unbind('click').click(function () {// 每次先解除上次绑定的事件,防止重复发送请求
+                $("#logList-body").load(location.href + " #logList-body");
+                getLogList(count, 1, $('#keyword').val());
+            });
+
+            // 键盘确认按钮搜索
+            document.onkeydown = function(event) {
+                var e = event || window.event;
+                if (e && e.keyCode == 13) { // enter 键
+                    $("#logList-body").load(location.href + " #logList-body");
+                    getLogList(count, 1, $('#keyword').val());
+                }
+            };
+        }
+        $('#m-page').pagination({
+            pageCount: totalPage,
+            totalData: total,
+            current: pageNumber,
+            showData: pageSize,
+            coping: true,
+            homePage: '首页',
+            endPage: '末页',
+            prevContent: '<<',
+            nextContent: '>>',
+            jump: true,
+            jumpBtn: '跳转',
+            callback: function (api) {
+                $('.now').text(api.getCurrent());
+                $("#logList-body").load(location.href + " #logList-body");
+                getLogList(count, api.getCurrent(), $('#keyword').val());
+            }
+        }, function (api) {
+            $('.now').text(api.getCurrent());
+        });
+    })
+}
+
+/**
+ * 建立表格数据
+ *
+ * @param log 日志
+ * @param i 行号
+ * @returns {Element}
+ */
+function getDataRow(log, i) {
+    var row = document.createElement('tr'); //创建行
+    row.id = "link_b2b_" + i;
+    row.class = "redirect_b2b";
+
+    var indexCell = document.createElement('td'); //序号
+    indexCell.setAttribute("class", "text-center");
+    indexCell.innerHTML = i + 1; //填充数据
+    row.appendChild(indexCell);
+
+    var dateCell = document.createElement('td'); //时间
+    dateCell.setAttribute("class", "text-center");
+    dateCell.innerHTML = formatDateTime(log.date); //填充数据
+    row.appendChild(dateCell);
+
+    var uuCell = document.createElement('td'); //enUU
+    uuCell.setAttribute("class", "text-center");
+    uuCell.innerHTML = log.enUU; //填充数据
+    row.appendChild(uuCell);
+
+    var nameCell = document.createElement('td'); //enName
+    nameCell.setAttribute("class", "text-center");
+    nameCell.innerHTML = log.enName; //填充数据
+    row.appendChild(nameCell);
+
+    var msgCell = document.createElement('td'); //msg
+    msgCell.setAttribute("class", "text-center");
+    msgCell.innerHTML = log.msg; //填充数据
+    row.appendChild(msgCell);
+
+    var detailCell = document.createElement('td'); //detail
+    detailCell.setAttribute("class", "text-center");
+    detailCell.innerHTML = log.detail; //填充数据
+    row.appendChild(detailCell);
+
+    var paraCell = document.createElement('td'); //parameters
+    paraCell.setAttribute("class", "text-center");
+    paraCell.innerHTML = log.parameters; //填充数据
+    row.appendChild(paraCell);
+
+    return row;
+}
+
+/**
+ * 时间转换
+ *
+ * @param inputTime
+ * @returns {string}
+ */
+function formatDateTime(inputTime) {
+    var date = new Date(inputTime);
+    var y = date.getFullYear();
+    var m = date.getMonth() + 1;
+    m = m < 10 ? ('0' + m) : m;
+    var d = date.getDate();
+    d = d < 10 ? ('0' + d) : d;
+    var h = date.getHours();
+    h = h < 10 ? ('0' + h) : h;
+    var minute = date.getMinutes();
+    var second = date.getSeconds();
+    minute = minute < 10 ? ('0' + minute) : minute;
+    second = second < 10 ? ('0' + second) : second;
+    return y + '-' + m + '-' + d+' '+h+':'+minute+':'+second;
+};
+
+$(function() {
+    'use strict';
+
+    // 监听页面滚动
+    $(window).scroll(function() {
+        if($(window).scrollTop() >= 400) {
+            $('#nav').addClass('on');
+        } else {
+            $('#nav').removeClass('on');
+        }
+    });
+
+    // 设置分页大小
+    var count = 20;
+    getLogList(count, 1, null);
+});

+ 2 - 2
src/main/webapp/resources/js/index/app.js

@@ -6,7 +6,7 @@ $(function() {
 		interval: 3000
 	});
 	
-	// 通过哈希值切换幻灯片
+	/*// 通过哈希值切换幻灯片
 	var onHashChange = function() {
 		var hash = (window.location.hash && window.location.hash.substring(1)) || null;
 		switch(hash) {
@@ -81,6 +81,6 @@ $(function() {
 	
 	// 引导提示
 	tour.init();
-	tour.start();
+	tour.start();*/
 	
 });