فهرست منبع

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@686 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d

administrator 11 سال پیش
والد
کامیت
91e2273786

+ 42 - 0
src/main/java/com/uas/platform/b2b/controller/UsageLogController.java

@@ -0,0 +1,42 @@
+package com.uas.platform.b2b.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.uas.platform.b2b.model.UsageLog;
+import com.uas.platform.b2b.service.UsageLogService;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+
+/**
+ * 平台使用日志
+ * @author yingp
+ *
+ */
+@Controller
+@RequestMapping(value = "/log/usage")
+public class UsageLogController {
+	
+	@Autowired
+	private UsageLogService usageLogSerice;
+	
+	/**
+	 * 分页查找平台使用日志
+	 * 
+	 * @param params
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	@ResponseBody
+	public Page<UsageLog> getReceivedPurchaseInquiries(PageParams params) {
+		PageInfo info = new PageInfo(params);
+		info.filter("enUU", SystemSession.getUser().getEnterprise().getUu());
+		return usageLogSerice.findAllByPageInfo(info);
+	}
+	
+}

+ 2 - 1
src/main/java/com/uas/platform/b2b/dao/UsageLogDao.java

@@ -1,11 +1,12 @@
 package com.uas.platform.b2b.dao;
 package com.uas.platform.b2b.dao;
 
 
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
 
 
 import com.uas.platform.b2b.model.UsageLog;
 import com.uas.platform.b2b.model.UsageLog;
 
 
 @Repository
 @Repository
-public interface UsageLogDao extends JpaRepository<UsageLog, Long> {
+public interface UsageLogDao extends JpaSpecificationExecutor<UsageLog>, JpaRepository<UsageLog, Long> {
 
 
 }
 }

+ 42 - 0
src/main/java/com/uas/platform/b2b/erp/controller/ErpLogController.java

@@ -0,0 +1,42 @@
+package com.uas.platform.b2b.erp.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.uas.platform.b2b.erp.model.ErpLog;
+import com.uas.platform.b2b.erp.service.ErpLogService;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+
+/**
+ * ERP数据传输日志
+ * @author yingp
+ *
+ */
+@Controller
+@RequestMapping(value = "/log/erp")
+public class ErpLogController {
+	
+	@Autowired
+	private ErpLogService erpLogService;
+	
+	/**
+	 * 分页查找ERP数据交互日志
+	 * 
+	 * @param params
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	@ResponseBody
+	public Page<ErpLog> getReceivedPurchaseInquiries(PageParams params) {
+		PageInfo info = new PageInfo(params);
+		info.filter("enUU", SystemSession.getUser().getEnterprise().getUu());
+		return erpLogService.findAllByPageInfo(info);
+	}
+
+}

+ 2 - 1
src/main/java/com/uas/platform/b2b/erp/dao/ErpLogDao.java

@@ -1,11 +1,12 @@
 package com.uas.platform.b2b.erp.dao;
 package com.uas.platform.b2b.erp.dao;
 
 
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
 
 
 import com.uas.platform.b2b.erp.model.ErpLog;
 import com.uas.platform.b2b.erp.model.ErpLog;
 
 
 @Repository
 @Repository
-public interface ErpLogDao extends JpaRepository<ErpLog, Long> {
+public interface ErpLogDao  extends JpaSpecificationExecutor<ErpLog>, JpaRepository<ErpLog, Long> {
 
 
 }
 }

+ 16 - 0
src/main/java/com/uas/platform/b2b/erp/model/ErpLog.java

@@ -3,17 +3,21 @@ package com.uas.platform.b2b.erp.model;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 
 
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
 import javax.persistence.SequenceGenerator;
 import javax.persistence.SequenceGenerator;
 import javax.persistence.Table;
 import javax.persistence.Table;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.NotNull;
 
 
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
 
+import com.uas.platform.b2b.model.User;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.core.logging.BufferedLogable;
 import com.uas.platform.core.logging.BufferedLogable;
 
 
@@ -40,6 +44,10 @@ public class ErpLog extends BufferedLogable implements Serializable {
 
 
 	@Column(name = "log_enuu")
 	@Column(name = "log_enuu")
 	private Long enUU;
 	private Long enUU;
+	
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "log_useruu", insertable = false, updatable = false)
+	private User user;
 
 
 	@NotNull
 	@NotNull
 	@Column(name = "log_useruu")
 	@Column(name = "log_useruu")
@@ -134,6 +142,14 @@ public class ErpLog extends BufferedLogable implements Serializable {
 		this.total = total;
 		this.total = total;
 	}
 	}
 
 
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
 	public ErpLog() {
 	public ErpLog() {
 
 
 	}
 	}

+ 13 - 2
src/main/java/com/uas/platform/b2b/erp/service/ErpLogService.java

@@ -1,8 +1,19 @@
 package com.uas.platform.b2b.erp.service;
 package com.uas.platform.b2b.erp.service;
 
 
+import org.springframework.data.domain.Page;
+
 import com.uas.platform.b2b.erp.model.ErpLog;
 import com.uas.platform.b2b.erp.model.ErpLog;
 import com.uas.platform.core.logging.LogService;
 import com.uas.platform.core.logging.LogService;
+import com.uas.platform.core.model.PageInfo;
+
+public interface ErpLogService extends LogService<ErpLog> {
+
+	/**
+	 * 分页查找日志
+	 * 
+	 * @param pageInfo
+	 * @return
+	 */
+	public Page<ErpLog> findAllByPageInfo(PageInfo pageInfo);
 
 
-public interface ErpLogService extends LogService<ErpLog>{
-	
 }
 }

+ 19 - 0
src/main/java/com/uas/platform/b2b/erp/service/impl/ErpLogServiceImpl.java

@@ -1,11 +1,19 @@
 package com.uas.platform.b2b.erp.service.impl;
 package com.uas.platform.b2b.erp.service.impl;
 
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
 import org.springframework.beans.factory.annotation.Autowired;
 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 org.springframework.stereotype.Service;
 
 
 import com.uas.platform.b2b.erp.dao.ErpLogDao;
 import com.uas.platform.b2b.erp.dao.ErpLogDao;
 import com.uas.platform.b2b.erp.model.ErpLog;
 import com.uas.platform.b2b.erp.model.ErpLog;
 import com.uas.platform.b2b.erp.service.ErpLogService;
 import com.uas.platform.b2b.erp.service.ErpLogService;
+import com.uas.platform.core.model.PageInfo;
 
 
 @Service
 @Service
 public class ErpLogServiceImpl implements ErpLogService {
 public class ErpLogServiceImpl implements ErpLogService {
@@ -23,4 +31,15 @@ public class ErpLogServiceImpl implements ErpLogService {
 		erpLogDao.save(logs);
 		erpLogDao.save(logs);
 	}
 	}
 
 
+	@Override
+	public Page<ErpLog> findAllByPageInfo(final PageInfo pageInfo) {
+		return erpLogDao.findAll(new Specification<ErpLog>() {
+
+			public Predicate toPredicate(Root<ErpLog> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				query.where(pageInfo.getPredicates(root, query, builder));
+				return null;
+			}
+		}, pageInfo);
+	}
+
 }
 }

+ 15 - 0
src/main/java/com/uas/platform/b2b/model/UsageLog.java

@@ -3,11 +3,14 @@ package com.uas.platform.b2b.model;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 
 
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
 import javax.persistence.SequenceGenerator;
 import javax.persistence.SequenceGenerator;
 import javax.persistence.Table;
 import javax.persistence.Table;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.NotNull;
@@ -41,6 +44,10 @@ public class UsageLog extends BufferedLogable implements Serializable {
 
 
 	@Column(name = "log_enuu")
 	@Column(name = "log_enuu")
 	private Long enUU;
 	private Long enUU;
+	
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "log_useruu", insertable = false, updatable = false)
+	private User user;
 
 
 	@NotNull
 	@NotNull
 	@Column(name = "log_useruu")
 	@Column(name = "log_useruu")
@@ -160,6 +167,14 @@ public class UsageLog extends BufferedLogable implements Serializable {
 		this.key = key;
 		this.key = key;
 	}
 	}
 
 
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
 	public UsageLog() {
 	public UsageLog() {
 
 
 	}
 	}

+ 11 - 0
src/main/java/com/uas/platform/b2b/service/UsageLogService.java

@@ -1,8 +1,19 @@
 package com.uas.platform.b2b.service;
 package com.uas.platform.b2b.service;
 
 
+import org.springframework.data.domain.Page;
+
 import com.uas.platform.b2b.model.UsageLog;
 import com.uas.platform.b2b.model.UsageLog;
 import com.uas.platform.core.logging.LogService;
 import com.uas.platform.core.logging.LogService;
+import com.uas.platform.core.model.PageInfo;
 
 
 public interface UsageLogService extends LogService<UsageLog> {
 public interface UsageLogService extends LogService<UsageLog> {
 
 
+	/**
+	 * 分页查找使用日志
+	 * 
+	 * @param pageInfo
+	 * @return
+	 */
+	public Page<UsageLog> findAllByPageInfo(PageInfo pageInfo);
+
 }
 }

+ 19 - 0
src/main/java/com/uas/platform/b2b/service/impl/UsageLogServiceImpl.java

@@ -1,11 +1,19 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
 import org.springframework.beans.factory.annotation.Autowired;
 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 org.springframework.stereotype.Service;
 
 
 import com.uas.platform.b2b.dao.UsageLogDao;
 import com.uas.platform.b2b.dao.UsageLogDao;
 import com.uas.platform.b2b.model.UsageLog;
 import com.uas.platform.b2b.model.UsageLog;
 import com.uas.platform.b2b.service.UsageLogService;
 import com.uas.platform.b2b.service.UsageLogService;
+import com.uas.platform.core.model.PageInfo;
 
 
 @Service
 @Service
 public class UsageLogServiceImpl implements UsageLogService {
 public class UsageLogServiceImpl implements UsageLogService {
@@ -23,4 +31,15 @@ public class UsageLogServiceImpl implements UsageLogService {
 		usageLogDao.save(logables);
 		usageLogDao.save(logables);
 	}
 	}
 
 
+	@Override
+	public Page<UsageLog> findAllByPageInfo(final PageInfo pageInfo) {
+		return usageLogDao.findAll(new Specification<UsageLog>() {
+
+			public Predicate toPredicate(Root<UsageLog> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				query.where(pageInfo.getPredicates(root, query, builder));
+				return null;
+			}
+		}, pageInfo);
+	}
+
 }
 }

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

@@ -879,6 +879,10 @@ a {
 	color: #333
 	color: #333
 }
 }
 
 
+.pane .pane-header .pull-right>a {
+	margin-left: 3px;
+}
+
 .pane .pane-body {
 .pane .pane-body {
 	padding: 15px;
 	padding: 15px;
 }
 }

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

@@ -143,6 +143,10 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 			url : "/user",
 			url : "/user",
 			templateUrl : "static/tpl/index/account/user.html",
 			templateUrl : "static/tpl/index/account/user.html",
 			controller: 'UserCtrl'
 			controller: 'UserCtrl'
+		}).state('account.log', {
+			url : "/log",
+			templateUrl : "static/tpl/index/account/log.html",
+			controller: 'LogCtrl'
 		}).state('account.resource', {
 		}).state('account.resource', {
 			url : "/resource",
 			url : "/resource",
 			templateUrl : "static/tpl/index/account/resource.html",
 			templateUrl : "static/tpl/index/account/resource.html",
@@ -1409,6 +1413,50 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 		});
 		});
 	});
 	});
 	
 	
+	app.controller('LogCtrl', function($scope, $rootScope, BaseService, ngTableParams, ErpLog, UsageLog){
+		$rootScope.active = 'log';
+		$scope.erpParams = new ngTableParams({
+			page : 1, 
+			count : 5,
+			sorting: {
+				time: 'desc'
+            }
+		}, {
+			total : 0, 
+			counts: [5, 10, 25, 50],
+			getData : function($defer, params) {
+				$scope.loading = true;
+				ErpLog.get(BaseService.parseParams(params.url()), function(page){
+					$scope.loading = false;
+					if(page) {
+						params.total(page.totalElements);
+						$defer.resolve(page.content);
+					}
+				});
+			}
+		});
+		$scope.usageParams = new ngTableParams({
+			page : 1, 
+			count : 5,
+			sorting: {
+				time: 'desc'
+            }
+		}, {
+			total : 0, 
+			counts: [5, 10, 25, 50],
+			getData : function($defer, params) {
+				$scope.loading = true;
+				UsageLog.get(BaseService.parseParams(params.url()), function(page){
+					$scope.loading = false;
+					if(page) {
+						params.total(page.totalElements);
+						$defer.resolve(page.content);
+					}
+				});
+			}
+		});
+	});
+	
 	app.controller('ResourceCtrl', function($scope, $rootScope){
 	app.controller('ResourceCtrl', function($scope, $rootScope){
 		$rootScope.active = 'resource';
 		$rootScope.active = 'resource';
 	});
 	});

+ 4 - 0
src/main/webapp/resources/js/index/services/Account.js

@@ -7,5 +7,9 @@ define([ 'ngResource' ], function() {
 				isArray: true
 				isArray: true
 			},
 			},
 		});
 		});
+	}).factory('ErpLog', function($resource) {
+		return $resource('log/erp', {});
+	}).factory('UsageLog', function($resource) {
+		return $resource('log/usage', {});
 	});
 	});
 });
 });

+ 13 - 4
src/main/webapp/resources/tpl/index/account/enterprise.html

@@ -36,8 +36,9 @@
 			<div class="pane-body">
 			<div class="pane-body">
 				<div class="row row-sm item">
 				<div class="row row-sm item">
 					<div class="col-xs-12">
 					<div class="col-xs-12">
-						<span class="title">企业官网</span>
-						<a class="content" ng-bind="::enterprise.enUrl" href="{{::enterprise.enUrl}}" target="_blank"></a>
+						<span class="title">企业官网</span> <a class="content"
+							ng-bind="::enterprise.enUrl" href="{{::enterprise.enUrl}}"
+							target="_blank"></a>
 					</div>
 					</div>
 				</div>
 				</div>
 				<div class="row row-sm item">
 				<div class="row row-sm item">
@@ -69,7 +70,8 @@
 					</div>
 					</div>
 					<div class="col-xs-6">
 					<div class="col-xs-6">
 						<span class="title">性别</span>
 						<span class="title">性别</span>
-						<div class="content" ng-bind="::enterprise.admin.userSex == 'F' ? '女' : '男'"></div>
+						<div class="content"
+							ng-bind="::enterprise.admin.userSex == 'F' ? '女' : '男'"></div>
 					</div>
 					</div>
 				</div>
 				</div>
 				<div class="row row-sm item">
 				<div class="row row-sm item">
@@ -89,7 +91,14 @@
 	</div>
 	</div>
 </div>
 </div>
 <div class="pane base-info">
 <div class="pane base-info">
-	<div class="pane-header">成长历程</div>
+	<div class="pane-header">
+		成长历程
+		<div class="pull-right">
+			<a href="#" class="text-simple"><i class="fa fa-bolt fa-fw"></i>同行PK</a>
+			<a href="#" class="text-simple"><i class="fa fa-code-fork fa-fw"></i>企业诊断</a>
+			<a href="#" class="text-simple"><i class="fa fa-rss fa-fw"></i>寻找合伙人</a>
+		</div>
+	</div>
 	<div class="pane-body">
 	<div class="pane-body">
 		<dl class="events">
 		<dl class="events">
 			<dd>
 			<dd>

+ 1 - 0
src/main/webapp/resources/tpl/index/account/left.html

@@ -11,6 +11,7 @@
 	<ul class="list-unstyled">
 	<ul class="list-unstyled">
 		<li ng-class="{'active': active=='enterprise'}"><a ui-sref="account.enterprise">企业信息</a></li>
 		<li ng-class="{'active': active=='enterprise'}"><a ui-sref="account.enterprise">企业信息</a></li>
 		<li ng-class="{'active': active=='user'}"><a ui-sref="account.user">用户信息</a></li>
 		<li ng-class="{'active': active=='user'}"><a ui-sref="account.user">用户信息</a></li>
+		<li ng-class="{'active': active=='log'}"><a ui-sref="account.log">日志记录</a></li>
 	</ul>
 	</ul>
 </div>
 </div>
 <div class="left-nav">
 <div class="left-nav">

+ 69 - 0
src/main/webapp/resources/tpl/index/account/log.html

@@ -0,0 +1,69 @@
+<div class="loading in" ng-class="{'in': loading}">
+	<i></i>
+</div>
+<div class="pane base-info" style="max-height: 500px;overflow: auto;">
+	<div class="pane-header">
+		数据传输日志
+		<div class="pull-right">
+			<a href="#" class="text-simple"><i class="fa fa-file-excel-o fa-fw"></i>导出</a>
+		</div>
+	</div>
+	<div class="pane-body">
+		<table class="block table table-default table-striped"
+			ng-table="erpParams">
+			<thead>
+				<tr class="header">
+					<th width="130">时间</th>
+					<th width="130">客户端IP</th>
+					<th width="80">操作人员</th>
+					<th width="120">请求资源</th>
+					<th>请求动作</th>
+					<th width="60">数据包</th>
+				</tr>
+			</thead>
+			<tbody>
+				<tr ng-repeat="erp in $data">
+					<td class="text-center" ng-bind="::erp.time | date:'HH:mm:ss'"></td>
+					<td class="text-center" ng-bind="::erp.ip"></td>
+					<td class="text-center" ng-bind="::erp.user.userName"></td>
+					<td class="text-center" ng-bind="::erp.title"></td>
+					<td ng-bind="::erp.message"></td>
+					<td class="text-center" ng-bind="::erp.total"></td>
+				</tr>
+			</tbody>
+		</table>
+	</div>
+</div>
+<div class="pane base-info" style="max-height: 500px;overflow: auto;">
+	<div class="pane-header">
+		平台使用日志
+		<div class="pull-right">
+			<a href="#" class="text-simple"><i class="fa fa-file-excel-o fa-fw"></i>导出</a>
+		</div>
+	</div>
+	<div class="pane-body">
+		<table class="block table table-default table-striped"
+			ng-table="usageParams">
+			<thead>
+				<tr class="header">
+					<th width="130">时间</th>
+					<th width="130">客户端IP</th>
+					<th width="80">操作人员</th>
+					<th width="120">请求资源</th>
+					<th>请求动作</th>
+					<th>备注</th>
+				</tr>
+			</thead>
+			<tbody>
+				<tr ng-repeat="usage in $data">
+					<td class="text-center" ng-bind="::usage.time | date:'HH:mm:ss'"></td>
+					<td class="text-center" ng-bind="::usage.ip"></td>
+					<td class="text-center" ng-bind="::usage.user.userName"></td>
+					<td class="text-center" ng-bind="::usage.title"></td>
+					<td ng-bind="::usage.message"></td>
+					<td ng-bind="::usage.detail"></td>
+				</tr>
+			</tbody>
+		</table>
+	</div>
+</div>

+ 1 - 1
src/main/webapp/resources/tpl/index/account/user.html

@@ -2,7 +2,7 @@
 	<div class="pane-header">
 	<div class="pane-header">
 		我的个人资料
 		我的个人资料
 		<div class="pull-right">
 		<div class="pull-right">
-			<a href="#" class="text-simple"><i class="fa fa-pencil fa-fw"></i>编辑</a>&nbsp;&nbsp;<a
+			<a href="#" class="text-simple"><i class="fa fa-pencil fa-fw"></i>编辑</a><a
 				href="#" class="text-simple"><i class="fa fa-lock fa-fw"></i>修改密码</a>
 				href="#" class="text-simple"><i class="fa fa-lock fa-fw"></i>修改密码</a>
 		</div>
 		</div>
 	</div>
 	</div>