first commit
This commit is contained in:
3
comm/Log/WebContent/META-INF/MANIFEST.MF
Executable file
3
comm/Log/WebContent/META-INF/MANIFEST.MF
Executable file
@@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Class-Path:
|
||||
|
||||
203
comm/Log/WebContent/log_list.jsp
Executable file
203
comm/Log/WebContent/log_list.jsp
Executable file
@@ -0,0 +1,203 @@
|
||||
<%@ page language="java" pageEncoding="utf-8"%>
|
||||
<%@ include file="include/pagetop.jsp"%>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<%@ include file="include/head.jsp"%>
|
||||
</head>
|
||||
<body>
|
||||
<%@ include file="include/loading.jsp"%>
|
||||
<%@ include file="include/top.jsp"%>
|
||||
<%@ include file="include/menu_left.jsp"%>
|
||||
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START CONTENT -->
|
||||
<div class="content">
|
||||
|
||||
|
||||
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START CONTAINER -->
|
||||
<div class="container-default">
|
||||
<h3>用户操作日志</h3>
|
||||
<%@ include file="include/alert.jsp"%>
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START queryForm -->
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
|
||||
<div class="panel-title">查询条件</div>
|
||||
<div class="panel-body">
|
||||
|
||||
<form class="form-horizontal"
|
||||
action="<%=basePath%>normal/adminLogAction!list.action"
|
||||
method="post" id="queryForm">
|
||||
<input type="hidden" name="pageNo" id="pageNo"
|
||||
value="${param.pageNo}">
|
||||
<!--
|
||||
<div class="col-md-12 col-lg-6" >
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class="input-prepend input-group">
|
||||
<span class="add-on input-group-addon"><i class="fa fa-calendar"></i></span>
|
||||
<s:textfield id="date_para" name="date_para"
|
||||
cssClass="form-control " placeholder="变更日期" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<div class="col-md-12 col-lg-4" >
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<s:textfield id="name_para" name="name_para"
|
||||
cssClass="form-control " placeholder="用户名" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<s:textfield id="log_para" name="log_para"
|
||||
cssClass="form-control " placeholder="日志" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-12 col-lg-3" style="margin-top: 10px;">
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<s:textfield id="operator" name="operator"
|
||||
cssClass="form-control " placeholder="操作者" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-12 col-lg-3" style="margin-top: 10px;">
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
|
||||
<s:select id="category" cssClass="form-control " headerValue="分类" headerKey=""
|
||||
name="category" list="category_map"
|
||||
listKey="key" listValue="value" value="category" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-2" style="margin-top: 10px;">
|
||||
<button type="submit" class="btn btn-light btn-block">查询</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END queryForm -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<!-- Start Panel -->
|
||||
<div class="panel panel-default">
|
||||
|
||||
<div class="panel-title">查询结果</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
|
||||
<sec:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ROOT,ROLE_ADMINGUEST,ROLE_FINANCE,ROLE_DEBUG">
|
||||
<!-- <td>名称</td>-->
|
||||
<td>用户名</td>
|
||||
</sec:authorize>
|
||||
|
||||
<td>日志</td>
|
||||
<td>操作者</td>
|
||||
<td width="150px">时间</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<s:iterator value="page.elements" status="stat">
|
||||
<tr>
|
||||
|
||||
<!-- <td><s:property value="name" /></td>-->
|
||||
|
||||
<td><s:property value="username" /></td>
|
||||
<td><s:property value="log" /></td>
|
||||
<td><s:property value="operator" /></td>
|
||||
<td><s:date name="createTime" format="yyyy-MM-dd HH:mm " /></td>
|
||||
|
||||
</tr>
|
||||
</s:iterator>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
<%@ include file="include/page_simple.jsp"%>
|
||||
<nav>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- End Panel -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- END CONTAINER -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<%@ include file="include/footer.jsp"%>
|
||||
|
||||
</div>
|
||||
<!-- End Content -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<%@ include file="include/js.jsp"%>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#date_para').daterangepicker({
|
||||
timePicker : true, //显示时间
|
||||
timePicker24Hour : true, //时间制
|
||||
timePickerSeconds : true, //时间显示到秒
|
||||
format : 'YYYY-MM-DD HH:mm:ss',
|
||||
startDate : new Date(),
|
||||
endDate : new Date(),
|
||||
minDate : 1999 - 12 - 12,
|
||||
maxDate : 2050 - 12 - 30,
|
||||
timePicker : true,
|
||||
timePickerIncrement : 1,
|
||||
|
||||
locale : {
|
||||
applyLabel : "确认",
|
||||
cancelLabel : "取消",
|
||||
resetLabel : "重置",
|
||||
|
||||
}
|
||||
}, function(start, end, label) {
|
||||
console.log(start.toISOString(), end.toISOString(), label);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
148
comm/Log/WebContent/moneylog_list.jsp
Executable file
148
comm/Log/WebContent/moneylog_list.jsp
Executable file
@@ -0,0 +1,148 @@
|
||||
<%@ page language="java" pageEncoding="utf-8"%>
|
||||
<%@ include file="include/pagetop.jsp"%>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<%@ include file="include/head.jsp"%>
|
||||
</head>
|
||||
<body>
|
||||
<%@ include file="include/loading.jsp"%>
|
||||
<%@ include file="include/top.jsp"%>
|
||||
<%@ include file="include/menu_left.jsp"%>
|
||||
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START CONTENT -->
|
||||
<div class="content">
|
||||
|
||||
|
||||
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START CONTAINER -->
|
||||
<div class="container-default">
|
||||
<h3>账变记录</h3>
|
||||
<%@ include file="include/alert.jsp"%>
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START queryForm -->
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
|
||||
<div class="panel-title">查询条件</div>
|
||||
<div class="panel-body">
|
||||
<s:if test='isResourceAccessible("ADMIN_MONEY_LOG_LIST")'>
|
||||
<form class="form-horizontal"
|
||||
action="<%=basePath%>normal/adminMoneyLogAction!list.action"
|
||||
method="post" id="queryForm">
|
||||
<input type="hidden" name="pageNo" id="pageNo"
|
||||
value="${param.pageNo}">
|
||||
<div class="col-md-12 col-lg-4">
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<s:textfield id="name_para" name="name_para"
|
||||
cssClass="form-control " placeholder="用户名、UID(完整)" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<s:textfield id="log_para" name="log_para"
|
||||
cssClass="form-control " placeholder="日志" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-12 col-lg-2" >
|
||||
<s:if test='isResourceAccessible("ADMIN_MONEY_LOG_LIST")'>
|
||||
<button type="submit" class="btn btn-light btn-block">查询</button>
|
||||
</s:if>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</s:if>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END queryForm -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<!-- Start Panel -->
|
||||
<div class="panel panel-default">
|
||||
|
||||
<div class="panel-title">查询结果</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
<td>用户名</td>
|
||||
<td>UID</td>
|
||||
<td>账户名称</td>
|
||||
<td>日志</td>
|
||||
<td>币种</td>
|
||||
<td>金额</td>
|
||||
<td>变更前</td>
|
||||
<td>变更后</td>
|
||||
<td width="150px">时间</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<s:iterator value="page.elements" status="stat">
|
||||
<tr>
|
||||
<td><s:property value="username" /></td>
|
||||
<td><s:property value="usercode" /></td>
|
||||
<td><s:if test='rolename=="GUEST"'>
|
||||
<span class="right label label-warning">演示账号</span>
|
||||
</s:if>
|
||||
<s:if test='rolename=="MEMBER"'>
|
||||
<span class="right label label-success">正式账号</span>
|
||||
</s:if>
|
||||
</td>
|
||||
<td><s:property value="log" /></td>
|
||||
<td><s:property value="wallettype" /></td>
|
||||
<td><fmt:formatNumber value="${amount}" pattern="#0.00" /></td>
|
||||
<td><fmt:formatNumber value="${amount_before}" pattern="#0.00" /></td>
|
||||
<td><fmt:formatNumber value="${amount_after}" pattern="#0.00" /></td>
|
||||
<td><s:date name="createTime" format="yyyy-MM-dd HH:mm " /></td>
|
||||
|
||||
</tr>
|
||||
</s:iterator>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
<%@ include file="include/page_simple.jsp"%>
|
||||
<nav>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- End Panel -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- END CONTAINER -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<%@ include file="include/footer.jsp"%>
|
||||
|
||||
</div>
|
||||
<!-- End Content -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<%@ include file="include/js.jsp"%>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
181
comm/Log/WebContent/systemlog_list.jsp
Executable file
181
comm/Log/WebContent/systemlog_list.jsp
Executable file
@@ -0,0 +1,181 @@
|
||||
<%@ page language="java" pageEncoding="utf-8"%>
|
||||
<%@ include file="include/pagetop.jsp"%>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<%@ include file="include/head.jsp"%>
|
||||
</head>
|
||||
<body>
|
||||
<%@ include file="include/loading.jsp"%>
|
||||
<%@ include file="include/top.jsp"%>
|
||||
<%@ include file="include/menu_left.jsp"%>
|
||||
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START CONTENT -->
|
||||
<div class="content">
|
||||
|
||||
|
||||
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START CONTAINER -->
|
||||
<div class="container-default">
|
||||
<h3>系统运行日志</h3>
|
||||
<%@ include file="include/alert.jsp"%>
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
<!-- START queryForm -->
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
|
||||
<div class="panel-title">查询条件</div>
|
||||
<div class="panel-body">
|
||||
|
||||
<form class="form-horizontal"
|
||||
action="<%=basePath%>normal/adminSysLogAction!list.action"
|
||||
method="post" id="queryForm">
|
||||
<input type="hidden" name="pageNo" id="pageNo"
|
||||
value="${param.pageNo}">
|
||||
<div class="col-md-5 col-lg-5" >
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class="input-prepend input-group">
|
||||
<span class="add-on input-group-addon"><i class="fa fa-calendar"></i></span>
|
||||
<s:textfield id="date_para" name="date_para"
|
||||
cssClass="form-control " placeholder="变更日期" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col-md-3 col-lg-3" >
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
|
||||
<s:select id="category_para" cssClass="form-control " headerValue="分类" headerKey=""
|
||||
name="category_para" list="category_map"
|
||||
listKey="key" listValue="value" value="category_para" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col-md-2 col-lg-2">
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
|
||||
<s:select id="level_para" cssClass="form-control " headerValue="级别" headerKey=""
|
||||
name="level_para" list="level_map"
|
||||
listKey="key" listValue="value" value="level_para" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-md-2 col-lg-2" >
|
||||
<button type="submit" class="btn btn-light btn-block">查询</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END queryForm -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<!-- Start Panel -->
|
||||
<div class="panel panel-default">
|
||||
|
||||
<div class="panel-title">查询结果</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
<td>分类</td>
|
||||
<td>级别</td>
|
||||
|
||||
<td>日志</td>
|
||||
|
||||
<td width="150px">时间</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<s:iterator value="page.elements" status="stat">
|
||||
<tr>
|
||||
<sec:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ROOT,ROLE_ADMINGUEST,ROLE_FINANCE,ROLE_DEBUG">
|
||||
<td>
|
||||
<s:property value="category_map.get(category)" />
|
||||
</td>
|
||||
<td><s:property value="level_map.get(level)" /></td>
|
||||
</sec:authorize>
|
||||
<td><s:property value="log" /></td>
|
||||
|
||||
<td><s:date name="createTime" format="yyyy-MM-dd HH:mm:ss" /></td>
|
||||
|
||||
</tr>
|
||||
</s:iterator>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
<%@ include file="include/page_simple.jsp"%>
|
||||
<nav>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- End Panel -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- END CONTAINER -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<%@ include file="include/footer.jsp"%>
|
||||
|
||||
</div>
|
||||
<!-- End Content -->
|
||||
<!-- //////////////////////////////////////////////////////////////////////////// -->
|
||||
|
||||
|
||||
<%@ include file="include/js.jsp"%>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#date_para').daterangepicker({
|
||||
timePicker : true, //显示时间
|
||||
timePicker24Hour : true, //时间制
|
||||
timePickerSeconds : true, //时间显示到秒
|
||||
format : 'YYYY-MM-DD HH:mm:ss',
|
||||
startDate : new Date(),
|
||||
endDate : new Date(),
|
||||
minDate : 1999 - 12 - 12,
|
||||
maxDate : 2050 - 12 - 30,
|
||||
timePicker : true,
|
||||
timePickerIncrement : 1,
|
||||
|
||||
locale : {
|
||||
applyLabel : "确认",
|
||||
cancelLabel : "取消",
|
||||
resetLabel : "重置",
|
||||
|
||||
}
|
||||
}, function(start, end, label) {
|
||||
console.log(start.toISOString(), end.toISOString(), label);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
29
comm/Log/config/spring/applicationContext-dubbo.xml
Executable file
29
comm/Log/config/spring/applicationContext-dubbo.xml
Executable file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://code.alibabatech.com/schema/dubbo
|
||||
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
|
||||
">
|
||||
<!-- 提供方应用信息,用于计算依赖关系 -->
|
||||
<dubbo:application name="${dubbo.application.name}" />
|
||||
|
||||
<!-- 使用zkp注册中心暴露服务地址 -->
|
||||
<!-- 使用zookeeper注册中心暴露服务地址 -->
|
||||
<dubbo:registry protocol="${dubbo.registry.protocol}"
|
||||
address="${dubbo.registry.address}" />
|
||||
|
||||
<dubbo:protocol host="127.0.0.1" />
|
||||
|
||||
|
||||
<dubbo:reference id="logService"
|
||||
interface="project.log.LogService" check="false" />
|
||||
<dubbo:reference id="sysLogService"
|
||||
interface="project.log.SysLogService" check="false" />
|
||||
|
||||
<dubbo:reference id="codeLogService"
|
||||
interface="project.log.CodeLogService" check="false" />
|
||||
|
||||
</beans>
|
||||
32
comm/Log/config/spring/applicationContext-dubbo_data.xml
Executable file
32
comm/Log/config/spring/applicationContext-dubbo_data.xml
Executable file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://code.alibabatech.com/schema/dubbo
|
||||
http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">
|
||||
|
||||
<!-- 提供方应用信息,用于计算依赖关系 -->
|
||||
<dubbo:application name="${dubbo.application.name}" />
|
||||
|
||||
|
||||
<!-- 使用zkp注册中心暴露服务地址 -->
|
||||
<dubbo:registry protocol="${dubbo.registry.protocol}"
|
||||
address="${dubbo.registry.address}" />
|
||||
|
||||
<dubbo:protocol port="${dubbo.application.port.root}"
|
||||
host="127.0.0.1"></dubbo:protocol>
|
||||
|
||||
|
||||
<!-- 声明需要暴露的服务接口 -->
|
||||
|
||||
<dubbo:service interface="project.log.LogService"
|
||||
ref="logService" />
|
||||
|
||||
<dubbo:service interface="project.log.SysLogService"
|
||||
ref="sysLogService" />
|
||||
<dubbo:service interface="project.log.CodeLogService"
|
||||
ref="codeLogService" />
|
||||
|
||||
</beans>
|
||||
12
comm/Log/config/spring/applicationContext-log.xml
Executable file
12
comm/Log/config/spring/applicationContext-log.xml
Executable file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
|
||||
<beans>
|
||||
|
||||
<bean id="moneyLogService" class="project.log.internal.MoneyLogServiceImpl">
|
||||
<property name="hibernateTemplate" ref="hibernateTemplate" />
|
||||
<property name="pagedDao" ref="pagedDao" />
|
||||
</bean>
|
||||
|
||||
|
||||
|
||||
</beans>
|
||||
28
comm/Log/config/spring/applicationContext-log_data.xml
Executable file
28
comm/Log/config/spring/applicationContext-log_data.xml
Executable file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
|
||||
<beans>
|
||||
|
||||
<bean id="logService" class="project.log.internal.LogServiceImpl">
|
||||
<property name="hibernateTemplate" ref="hibernateTemplate" />
|
||||
<property name="pagedQueryDao" ref="pagedDao" />
|
||||
</bean>
|
||||
|
||||
<bean id="moneyLogService" class="project.log.internal.MoneyLogServiceImpl">
|
||||
<property name="hibernateTemplate" ref="hibernateTemplate" />
|
||||
<property name="pagedDao" ref="pagedDao" />
|
||||
</bean>
|
||||
|
||||
<bean id="sysLogService" class="project.log.internal.SysLogServiceImpl">
|
||||
<property name="hibernateTemplate" ref="hibernateTemplate" />
|
||||
</bean>
|
||||
|
||||
<bean id="saveLogServer" class="project.log.internal.SaveLogServer">
|
||||
<property name="logService" ref="logService" />
|
||||
<property name="sysLogService" ref="sysLogService" />
|
||||
</bean>
|
||||
|
||||
<bean id="codeLogService" class="project.log.internal.CodeLogServiceImpl">
|
||||
<property name="hibernateTemplate" ref="hibernateTemplate" />
|
||||
<property name="pagedQueryDao" ref="pagedDao" />
|
||||
</bean>
|
||||
</beans>
|
||||
23
comm/Log/config/spring/normal.xml
Executable file
23
comm/Log/config/spring/normal.xml
Executable file
@@ -0,0 +1,23 @@
|
||||
|
||||
admin
|
||||
|
||||
<action name="adminMoneyLogAction"
|
||||
class="project.log.action.AdminMoneyLogAction">
|
||||
<result name="list">/moneylog_list.jsp</result>
|
||||
</action>
|
||||
<action name="adminSysLogAction" class="project.log.action.AdminSysLogAction">
|
||||
<result name="list">/systemlog_list.jsp</result>
|
||||
</action>
|
||||
<action name="adminLogAction" class="project.log.action.AdminLogAction">
|
||||
<result name="list">/log_list.jsp</result>
|
||||
</action>
|
||||
|
||||
|
||||
<action name="adminCodeLogAction" class="project.log.action.AdminCodeLogAction">
|
||||
<result name="list">/code_log_list.jsp</result>
|
||||
</action>
|
||||
|
||||
api
|
||||
<action name="moneylog"
|
||||
class="project.log.action.MoneyLogAction">
|
||||
</action>
|
||||
79
comm/Log/dbscript/1.0/LOG-DDL-MYSQL.SQL
Executable file
79
comm/Log/dbscript/1.0/LOG-DDL-MYSQL.SQL
Executable file
@@ -0,0 +1,79 @@
|
||||
/*==============================================================*/
|
||||
/* 系统日志 */
|
||||
/*==============================================================*/
|
||||
DROP TABLE IF EXISTS T_SYSLOG;
|
||||
create table T_SYSLOG (
|
||||
UUID VARCHAR(32) NOT NULL,
|
||||
CATEGORY VARCHAR(64),
|
||||
LEVEL VARCHAR(12),
|
||||
LOG text,
|
||||
EXTRA VARCHAR(512),
|
||||
CREATE_TIME datetime,
|
||||
PARTY_ID varchar(32) ,
|
||||
PRIMARY KEY (UUID)
|
||||
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
create index INDEX_SYSLOG_CREATE_TIME on T_SYSLOG (
|
||||
CREATE_TIME
|
||||
);
|
||||
create index INDEX_SYSLOG_CATEGORY on T_SYSLOG (
|
||||
CATEGORY,CREATE_TIME
|
||||
);
|
||||
|
||||
create index INDEX_SYSLOG_LEVEL on T_SYSLOG (
|
||||
LEVEL,CREATE_TIME
|
||||
);
|
||||
|
||||
create index INDEX_SYSLOG_PARTY_ID on T_SYSLOG (
|
||||
PARTY_ID,CREATE_TIME
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS T_LOG;
|
||||
create table T_LOG (
|
||||
UUID VARCHAR(32) NOT NULL,
|
||||
CATEGORY VARCHAR(64),
|
||||
LOG text,
|
||||
EXTRA VARCHAR(512),
|
||||
CREATE_TIME datetime,
|
||||
PARTY_ID varchar(32) ,
|
||||
LAYER int,
|
||||
AMOUNT double,
|
||||
PRIMARY KEY (UUID)
|
||||
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
create index INDEX_LOG_PARTY_ID on T_LOG (
|
||||
PARTY_ID,CREATE_TIME
|
||||
);
|
||||
|
||||
create index INDEX_LOG_CATEGORY on T_LOG (
|
||||
CATEGORY,PARTY_ID,CREATE_TIME
|
||||
);
|
||||
|
||||
alter table T_LOG add STATE int;
|
||||
UPDATE T_LOG SET STATE = 0;
|
||||
|
||||
create index INDEX_LOG_STATE on T_LOG (
|
||||
STATE
|
||||
);
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS T_MONEY_LOG;
|
||||
create table T_MONEY_LOG (
|
||||
UUID VARCHAR(32) NOT NULL,
|
||||
LOG text,
|
||||
EXTRA VARCHAR(512),
|
||||
WALLETTYPE VARCHAR(128),
|
||||
CREATE_TIME datetime,
|
||||
PARTY_ID varchar(32) ,
|
||||
LOCALKEY VARCHAR(64),
|
||||
AMOUNT double,
|
||||
AMOUNT_BEFORE double,
|
||||
AMOUNT_AFTER double,
|
||||
PRIMARY KEY (UUID)
|
||||
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
create index INDEX_MONEY_LOG_PARTY_ID on T_MONEY_LOG (
|
||||
PARTY_ID,CREATE_TIME
|
||||
);
|
||||
6
comm/Log/dbscript/2.1/LOG-DDL-MYSQL.SQL
Executable file
6
comm/Log/dbscript/2.1/LOG-DDL-MYSQL.SQL
Executable file
@@ -0,0 +1,6 @@
|
||||
ALTER TABLE T_LOG ADD `USERNAME` varchar(64);
|
||||
ALTER TABLE T_SYSLOG ADD `EXTRA` varchar(64);
|
||||
|
||||
ALTER TABLE T_MONEY_LOG ADD `CONTENT_TYPE` varchar(32);
|
||||
ALTER TABLE T_MONEY_LOG ADD `CATEGORY` varchar(32);
|
||||
|
||||
14
comm/Log/dbscript/3.0/LOG-DDL-MYSQL.sql
Executable file
14
comm/Log/dbscript/3.0/LOG-DDL-MYSQL.sql
Executable file
@@ -0,0 +1,14 @@
|
||||
|
||||
|
||||
-- 用户发送验证码日志
|
||||
DROP TABLE IF EXISTS T_CODE_LOG;
|
||||
create table T_CODE_LOG (
|
||||
UUID VARCHAR(32) NOT NULL,
|
||||
LOG text,
|
||||
CREATE_TIME datetime,
|
||||
PARTY_ID varchar(32) ,
|
||||
TARGET varchar(64) ,
|
||||
USERNAME varchar(64) ,
|
||||
PRIMARY KEY (UUID),
|
||||
KEY `INDEX_CODE_LOG_ORDER_STATUS` (`PARTY_ID`,`CREATE_TIME`)
|
||||
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
5
comm/Log/src/project/log/AbstractLog.java
Executable file
5
comm/Log/src/project/log/AbstractLog.java
Executable file
@@ -0,0 +1,5 @@
|
||||
package project.log;
|
||||
|
||||
public interface AbstractLog {
|
||||
|
||||
}
|
||||
45
comm/Log/src/project/log/AdminLogService.java
Executable file
45
comm/Log/src/project/log/AdminLogService.java
Executable file
@@ -0,0 +1,45 @@
|
||||
package project.log;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import kernel.web.Page;
|
||||
|
||||
public interface AdminLogService {
|
||||
/**
|
||||
*
|
||||
* 资金变更日志
|
||||
* @param log_para 日志 like查询
|
||||
* @param wallettype 账户类型
|
||||
*/
|
||||
public Page pagedQueryMoneyLog(int pageNo, int pageSize, String log_para,String name_para,String loginPartyId,String rolename_para,String startTime,String endTime,String frozenState);
|
||||
|
||||
/**
|
||||
*
|
||||
* 操作日志
|
||||
* @param log_para 日志 like查询
|
||||
* @param wallettype 账户类型
|
||||
*/
|
||||
public Page pagedQueryLog(int pageNo, int pageSize, String log_para,String name_para,String category,String operator,Date createTime_begin,
|
||||
Date createTime_end, String loginPartyId,String loginUsername);
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 系统日志
|
||||
* @param log_para 日志 like查询
|
||||
* @param wallettype 账户类型
|
||||
*/
|
||||
public Page pagedQuerySysLog(int pageNo, int pageSize, String log_para,String level_para,String category_para,Date createTime_begin,
|
||||
Date createTime_end);
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 发送验证码日志
|
||||
* @param log_para 日志 like查询
|
||||
* @param wallettype 账户类型
|
||||
*/
|
||||
public Page pagedQueryCodeLog(int pageNo, int pageSize, String log_para,String name_para,String target,Date createTime_begin,
|
||||
Date createTime_end, String loginPartyId,String loginUsername,String id_para);
|
||||
|
||||
}
|
||||
88
comm/Log/src/project/log/ApiLog.java
Executable file
88
comm/Log/src/project/log/ApiLog.java
Executable file
@@ -0,0 +1,88 @@
|
||||
package project.log;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import kernel.bo.EntityObject;
|
||||
|
||||
public class ApiLog extends EntityObject implements AbstractLog {
|
||||
/**
|
||||
* Member Description
|
||||
*/
|
||||
|
||||
private static final long serialVersionUID = 1837652077217320806L;
|
||||
/**
|
||||
* 日志归属
|
||||
*/
|
||||
private Serializable partyId;
|
||||
/**
|
||||
* ip
|
||||
*/
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
* 接口名
|
||||
*/
|
||||
private String api;
|
||||
/**
|
||||
* 日志
|
||||
*/
|
||||
private String log;
|
||||
|
||||
/**
|
||||
* 扩展信息,统计分类时使用
|
||||
*/
|
||||
private String extra;
|
||||
|
||||
// 创建时间
|
||||
private Date createTime;
|
||||
|
||||
public Serializable getPartyId() {
|
||||
return partyId;
|
||||
}
|
||||
|
||||
public String getIp() {
|
||||
return ip;
|
||||
}
|
||||
|
||||
public String getLog() {
|
||||
return log;
|
||||
}
|
||||
|
||||
public String getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
public String getApi() {
|
||||
return api;
|
||||
}
|
||||
|
||||
public Date getCreateTime() {
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setPartyId(Serializable partyId) {
|
||||
this.partyId = partyId;
|
||||
}
|
||||
|
||||
public void setIp(String ip) {
|
||||
this.ip = ip;
|
||||
}
|
||||
|
||||
public void setLog(String log) {
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
public void setExtra(String extra) {
|
||||
this.extra = extra;
|
||||
}
|
||||
|
||||
public void setApi(String api) {
|
||||
this.api = api;
|
||||
}
|
||||
|
||||
public void setCreateTime(Date createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
}
|
||||
12
comm/Log/src/project/log/ApiLogService.java
Executable file
12
comm/Log/src/project/log/ApiLogService.java
Executable file
@@ -0,0 +1,12 @@
|
||||
package project.log;
|
||||
|
||||
public interface ApiLogService {
|
||||
|
||||
public void save(ApiLog entity);
|
||||
|
||||
public void update(ApiLog entity);
|
||||
|
||||
public void delete(String id);
|
||||
|
||||
public ApiLog findById(String id);
|
||||
}
|
||||
82
comm/Log/src/project/log/CodeLog.java
Executable file
82
comm/Log/src/project/log/CodeLog.java
Executable file
@@ -0,0 +1,82 @@
|
||||
package project.log;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import kernel.bo.EntityObject;
|
||||
|
||||
public class CodeLog extends EntityObject implements AbstractLog{
|
||||
|
||||
private static final long serialVersionUID = 7008440232393696319L;
|
||||
|
||||
/**
|
||||
* 日志归属
|
||||
*/
|
||||
private Serializable partyId;
|
||||
/**
|
||||
* 日志归属
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 日志
|
||||
*/
|
||||
private String log;
|
||||
|
||||
/**
|
||||
* TARGET
|
||||
*/
|
||||
private String target;
|
||||
|
||||
|
||||
// 创建时间
|
||||
private Date createTime;
|
||||
|
||||
public Date getCreateTime() {
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(Date createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public Serializable getPartyId() {
|
||||
return partyId;
|
||||
}
|
||||
|
||||
public void setPartyId(Serializable partyId) {
|
||||
this.partyId = partyId;
|
||||
}
|
||||
|
||||
public String getLog() {
|
||||
return log;
|
||||
}
|
||||
|
||||
public void setLog(String log) {
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public String getTarget() {
|
||||
return target;
|
||||
}
|
||||
|
||||
public void setTarget(String target) {
|
||||
this.target = target;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
17
comm/Log/src/project/log/CodeLogService.java
Executable file
17
comm/Log/src/project/log/CodeLogService.java
Executable file
@@ -0,0 +1,17 @@
|
||||
package project.log;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public interface CodeLogService {
|
||||
/**
|
||||
* 同步保存
|
||||
*/
|
||||
public void saveSync(CodeLog entity);
|
||||
|
||||
/**
|
||||
* 异步保存
|
||||
*/
|
||||
public void saveAsyn(CodeLog entity);
|
||||
|
||||
|
||||
}
|
||||
98
comm/Log/src/project/log/Log.java
Executable file
98
comm/Log/src/project/log/Log.java
Executable file
@@ -0,0 +1,98 @@
|
||||
package project.log;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import kernel.bo.EntityObject;
|
||||
|
||||
public class Log extends EntityObject implements AbstractLog{
|
||||
/**
|
||||
* Member Description
|
||||
*/
|
||||
|
||||
private static final long serialVersionUID = 1837652077217320806L;
|
||||
/**
|
||||
* 日志归属
|
||||
*/
|
||||
private Serializable partyId;
|
||||
/**
|
||||
* 日志归属
|
||||
*/
|
||||
private String username;
|
||||
|
||||
// 日志类型,见Constants
|
||||
private String category;
|
||||
/**
|
||||
* 日志
|
||||
*/
|
||||
private String log;
|
||||
|
||||
/**
|
||||
* 扩展信息,统计分类时使用
|
||||
*/
|
||||
private String extra;
|
||||
|
||||
private String operator;
|
||||
|
||||
// 创建时间
|
||||
private Date createTime;
|
||||
|
||||
public Date getCreateTime() {
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(Date createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public Serializable getPartyId() {
|
||||
return partyId;
|
||||
}
|
||||
|
||||
public void setPartyId(Serializable partyId) {
|
||||
this.partyId = partyId;
|
||||
}
|
||||
|
||||
public String getLog() {
|
||||
return log;
|
||||
}
|
||||
|
||||
public void setLog(String log) {
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
|
||||
public String getCategory() {
|
||||
return category;
|
||||
}
|
||||
|
||||
public void setCategory(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public String getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
public void setExtra(String extra) {
|
||||
this.extra = extra;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public String getOperator() {
|
||||
return operator;
|
||||
}
|
||||
|
||||
public void setOperator(String operator) {
|
||||
this.operator = operator;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
22
comm/Log/src/project/log/LogService.java
Executable file
22
comm/Log/src/project/log/LogService.java
Executable file
@@ -0,0 +1,22 @@
|
||||
package project.log;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import kernel.web.Page;
|
||||
|
||||
public interface LogService {
|
||||
/**
|
||||
* 同步保存
|
||||
*/
|
||||
public void saveSync(Log entity);
|
||||
|
||||
/**
|
||||
* 异步保存
|
||||
*/
|
||||
public void saveAsyn(Log entity);
|
||||
|
||||
public Page pagedQuery(int pageNo, int pageSize, Serializable partyId, String[] category, String[] extra,
|
||||
Date createTime_begin, Date createTime_end);
|
||||
|
||||
}
|
||||
13
comm/Log/src/project/log/MallLogRedisKeys.java
Executable file
13
comm/Log/src/project/log/MallLogRedisKeys.java
Executable file
@@ -0,0 +1,13 @@
|
||||
package project.log;
|
||||
|
||||
public class MallLogRedisKeys {
|
||||
// 资金冻结记录缓存
|
||||
public final static String SELLER_MONEY_FREEZE = "SELLER_MONEY_FREEZE";
|
||||
|
||||
// 一个基于 zset 的缓存,value - {商铺ID : 买家ID}, value - {买家发送IM消息的毫秒时间戳}
|
||||
public final static String SELLER_IM_REPLY_NOTIFY = "seller_im_reply_notify";
|
||||
|
||||
// 一个基于 hash 的缓存,field - {商铺ID : 买家ID}, value - {最早一条消息的ID : 买家发送IM消息的毫秒时间戳}
|
||||
public final static String SELLER_IM_LAST_BUYER_MESSAGE = "seller_im_last_buyer_message";
|
||||
|
||||
}
|
||||
23
comm/Log/src/project/log/MoneyFreeze.java
Executable file
23
comm/Log/src/project/log/MoneyFreeze.java
Executable file
@@ -0,0 +1,23 @@
|
||||
package project.log;
|
||||
|
||||
import kernel.bo.EntityObject;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class MoneyFreeze extends EntityObject {
|
||||
private static final long serialVersionUID = -5914896022101327097L;
|
||||
|
||||
private Serializable partyId;
|
||||
private String operator;
|
||||
private Double amount;
|
||||
private String moneyLog;
|
||||
private Date beginTime;
|
||||
private Date endTime;
|
||||
private Date createTime;
|
||||
// 资金状态:0-已解冻,1-冻结中
|
||||
private Integer status;
|
||||
private String reason;
|
||||
}
|
||||
59
comm/Log/src/project/log/MoneyFreezeService.java
Executable file
59
comm/Log/src/project/log/MoneyFreezeService.java
Executable file
@@ -0,0 +1,59 @@
|
||||
package project.log;
|
||||
|
||||
import kernel.web.Page;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MoneyFreezeService {
|
||||
|
||||
public void save(MoneyFreeze entity);
|
||||
|
||||
public MoneyFreeze getById(String id);
|
||||
|
||||
/**
|
||||
* 冻结资金的完整逻辑
|
||||
*
|
||||
* @param sellerId
|
||||
* @param freezeAmout
|
||||
* @param freezeDays
|
||||
* @param freezeReason
|
||||
* @param operator
|
||||
*/
|
||||
public MoneyFreeze updateFreezeSeller(String sellerId, double freezeAmout, int freezeDays, String freezeReason, String operator);
|
||||
|
||||
/**
|
||||
* 解冻资金的完整逻辑
|
||||
*
|
||||
* @param id
|
||||
* @param operator
|
||||
*/
|
||||
public int updateUnFreezeSeller(String id, String operator);
|
||||
|
||||
/**
|
||||
* 定时器解冻资金的完整旧逻辑
|
||||
*
|
||||
* @param id
|
||||
* @param operator
|
||||
*/
|
||||
public int updateAutoUnFreezeSeller(String id, String operator);
|
||||
|
||||
/**
|
||||
* 将冻结记录状态修改为结束冻结
|
||||
*
|
||||
* @param id
|
||||
* @param operator
|
||||
* @return
|
||||
*/
|
||||
public int updateSetUnFreezeState(String id, String operator);
|
||||
|
||||
public List<String> listPendingFreezeRecords();
|
||||
|
||||
public List<MoneyFreeze> listPendingFreezeRecords(int size);
|
||||
|
||||
public Page pagedListFreeze(String partyId, int status, int pageNum, int pageSize);
|
||||
|
||||
public List<MoneyFreeze> listByIds(List<String> ids);
|
||||
|
||||
public MoneyFreeze getLastFreezeRecord(String sellerId);
|
||||
|
||||
}
|
||||
143
comm/Log/src/project/log/MoneyLog.java
Executable file
143
comm/Log/src/project/log/MoneyLog.java
Executable file
@@ -0,0 +1,143 @@
|
||||
package project.log;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import kernel.bo.EntityObject;
|
||||
import project.mall.orders.model.MallOrderRebate;
|
||||
|
||||
public class MoneyLog extends EntityObject {
|
||||
private static final long serialVersionUID = -5914896022101327097L;
|
||||
// 提现时,无论什么币种,都以 USDT 标记
|
||||
private String wallettype;
|
||||
private String category;
|
||||
private Date createTime;
|
||||
private Serializable partyId;
|
||||
|
||||
private String createTimeStr;
|
||||
private double amount = 0.0D;
|
||||
|
||||
// 存的是 USDT 的金额
|
||||
private double amount_before = 0.0D;
|
||||
|
||||
// 存的是 USDT 的金额
|
||||
private double amount_after = 0.0D;
|
||||
private int freeze = 0 ;
|
||||
private String log;
|
||||
private List<MallOrderRebate> detail;
|
||||
/**
|
||||
* 资金日志提供的内容 :提币 充币 永续建仓 永续平仓 手续费
|
||||
*/
|
||||
private String content_type;
|
||||
|
||||
public int getFreeze() {
|
||||
return freeze;
|
||||
}
|
||||
|
||||
public void setFreeze(int freeze) {
|
||||
this.freeze = freeze;
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值提现备注
|
||||
*/
|
||||
private String remarks;
|
||||
|
||||
public List<MallOrderRebate> getDetail() {
|
||||
return detail;
|
||||
}
|
||||
|
||||
public void setDetail(List<MallOrderRebate> detail) {
|
||||
this.detail = detail;
|
||||
}
|
||||
|
||||
public String getWallettype() {
|
||||
return this.wallettype;
|
||||
}
|
||||
|
||||
public void setWallettype(String wallettype) {
|
||||
this.wallettype = wallettype;
|
||||
}
|
||||
|
||||
public Date getCreateTime() {
|
||||
return this.createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(Date createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public Serializable getPartyId() {
|
||||
return this.partyId;
|
||||
}
|
||||
|
||||
public void setPartyId(Serializable partyId) {
|
||||
this.partyId = partyId;
|
||||
}
|
||||
|
||||
public double getAmount() {
|
||||
return this.amount;
|
||||
}
|
||||
|
||||
public void setAmount(double amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public double getAmount_before() {
|
||||
return this.amount_before;
|
||||
}
|
||||
|
||||
public void setAmount_before(double amount_before) {
|
||||
this.amount_before = amount_before;
|
||||
}
|
||||
|
||||
public double getAmount_after() {
|
||||
return this.amount_after;
|
||||
}
|
||||
|
||||
public void setAmount_after(double amount_after) {
|
||||
this.amount_after = amount_after;
|
||||
}
|
||||
|
||||
public String getLog() {
|
||||
return this.log;
|
||||
}
|
||||
|
||||
public void setLog(String log) {
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
public String getCategory() {
|
||||
return this.category;
|
||||
}
|
||||
|
||||
public void setCategory(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public String getCreateTimeStr() {
|
||||
return createTimeStr;
|
||||
}
|
||||
|
||||
public void setCreateTimeStr(String createTimeStr) {
|
||||
this.createTimeStr = createTimeStr;
|
||||
}
|
||||
|
||||
public String getContent_type() {
|
||||
return content_type;
|
||||
}
|
||||
|
||||
public void setContent_type(String content_type) {
|
||||
this.content_type = content_type;
|
||||
}
|
||||
|
||||
|
||||
public String getRemarks() {
|
||||
return remarks;
|
||||
}
|
||||
|
||||
public void setRemarks(String remarks) {
|
||||
this.remarks = remarks;
|
||||
}
|
||||
}
|
||||
20
comm/Log/src/project/log/MoneyLogService.java
Executable file
20
comm/Log/src/project/log/MoneyLogService.java
Executable file
@@ -0,0 +1,20 @@
|
||||
package project.log;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import kernel.web.Page;
|
||||
import project.mall.orders.model.MallOrderRebate;
|
||||
|
||||
public interface MoneyLogService {
|
||||
public void save(MoneyLog paramMoneyLog);
|
||||
|
||||
public Page pagedQuery(int pageNo, int pageSize, String category, String content_type, String partyId, Date startTime, Date endTime);
|
||||
|
||||
public List<MoneyLog> findLogsByConentTypeAndDate(String type, String date);
|
||||
|
||||
public List<MoneyLog> findByLog(String type, String log);
|
||||
|
||||
List<MallOrderRebate> getOrderRebate(String orderId);
|
||||
|
||||
}
|
||||
77
comm/Log/src/project/log/SysLog.java
Executable file
77
comm/Log/src/project/log/SysLog.java
Executable file
@@ -0,0 +1,77 @@
|
||||
package project.log;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import kernel.bo.EntityObject;
|
||||
|
||||
/**
|
||||
* 系统日志
|
||||
*/
|
||||
public class SysLog extends EntityObject implements AbstractLog {
|
||||
|
||||
private static final long serialVersionUID = -2169262629412176665L;
|
||||
|
||||
public static String level_error = "error";
|
||||
public static String level_warn = "warn";
|
||||
public static String level_info = "info";
|
||||
|
||||
// 日志分型
|
||||
private String category;
|
||||
|
||||
private String log;
|
||||
|
||||
/**
|
||||
* 特定渠道发起交易时需要的额外参数,以及部分渠道支付成功返回的额外参数。 存储json格式
|
||||
*/
|
||||
private String extra;
|
||||
|
||||
/**
|
||||
* 日志级别 错误 error 信息 info 警告 warn
|
||||
*/
|
||||
|
||||
private String level;
|
||||
|
||||
// 创建时间
|
||||
private Date createTime;
|
||||
|
||||
public String getLog() {
|
||||
return log;
|
||||
}
|
||||
|
||||
public void setLog(String log) {
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
public Date getCreateTime() {
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(Date createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public String getCategory() {
|
||||
return category;
|
||||
}
|
||||
|
||||
public void setCategory(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public String getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
public void setLevel(String level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public String getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
public void setExtra(String extra) {
|
||||
this.extra = extra;
|
||||
}
|
||||
|
||||
}
|
||||
22
comm/Log/src/project/log/SysLogService.java
Executable file
22
comm/Log/src/project/log/SysLogService.java
Executable file
@@ -0,0 +1,22 @@
|
||||
package project.log;
|
||||
|
||||
/**
|
||||
* 系统日志
|
||||
*/
|
||||
public interface SysLogService {
|
||||
|
||||
/**
|
||||
* 同步保存
|
||||
*/
|
||||
public void saveSync(SysLog entity);
|
||||
|
||||
/**
|
||||
* 异步保存
|
||||
*/
|
||||
public void saveAsyn(SysLog entity);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
39
comm/Log/src/project/log/internal/AbstractLogQueue.java
Executable file
39
comm/Log/src/project/log/internal/AbstractLogQueue.java
Executable file
@@ -0,0 +1,39 @@
|
||||
package project.log.internal;
|
||||
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import project.log.AbstractLog;
|
||||
|
||||
public class AbstractLogQueue {
|
||||
private static final Log logger = LogFactory.getLog(AbstractLogQueue.class);
|
||||
|
||||
private static ConcurrentLinkedQueue<AbstractLog> WORKING_EVENTS = new ConcurrentLinkedQueue<AbstractLog>();
|
||||
|
||||
public static void add(AbstractLog item) {
|
||||
Assert.notNull(item, "The item must not be null.");
|
||||
try {
|
||||
|
||||
WORKING_EVENTS.add(item);
|
||||
} catch (Throwable e) {
|
||||
logger.error("add(AbstractLog item) fail : ", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static int size() {
|
||||
return WORKING_EVENTS.size();
|
||||
}
|
||||
|
||||
public static AbstractLog poll() {
|
||||
AbstractLog item = null;
|
||||
try {
|
||||
item = WORKING_EVENTS.poll();
|
||||
} catch (Throwable e) {
|
||||
logger.error("AbstractLog poll() fail : ", e);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
}
|
||||
264
comm/Log/src/project/log/internal/AdminLogServiceImpl.java
Executable file
264
comm/Log/src/project/log/internal/AdminLogServiceImpl.java
Executable file
@@ -0,0 +1,264 @@
|
||||
package project.log.internal;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import kernel.util.DateUtils;
|
||||
import kernel.util.StringUtils;
|
||||
import kernel.web.Page;
|
||||
import kernel.web.PagedQueryDao;
|
||||
import project.log.AdminLogService;
|
||||
import project.party.recom.UserRecomService;
|
||||
|
||||
public class AdminLogServiceImpl implements AdminLogService {
|
||||
private PagedQueryDao pagedQueryDao;
|
||||
private UserRecomService userRecomService;
|
||||
@Override
|
||||
public Page pagedQueryMoneyLog(int pageNo, int pageSize, String log_para,String name_para,String loginPartyId,String rolename_para,String startTime,String endTime, String freezes) {
|
||||
|
||||
StringBuffer queryString = new StringBuffer();
|
||||
queryString.append("SELECT");
|
||||
queryString.append(" party.USERNAME username,party.ROLENAME rolename,party.USERCODE usercode,party_parent.USERNAME username_parent, money.FREEZE,money.REMARKS, ");
|
||||
queryString.append(
|
||||
" money.UUID money_id,money.LOG log,money.WALLETTYPE wallettype,money.AMOUNT_BEFORE amount_before,money.AMOUNT amount,money.AMOUNT_AFTER amount_after,money.CREATE_TIME createTime,money.WALLETTYPE wallettype ");
|
||||
queryString.append(" FROM");
|
||||
queryString.append(" T_MONEY_LOG money "
|
||||
+ "LEFT JOIN PAT_PARTY party ON money.PARTY_ID = party.UUID "
|
||||
+ " LEFT JOIN PAT_USER_RECOM user ON user.PARTY_ID = party.UUID "
|
||||
+ " LEFT JOIN PAT_PARTY party_parent ON user.RECO_ID = party_parent.UUID "
|
||||
|
||||
+ " ");
|
||||
|
||||
|
||||
queryString.append(" WHERE 1=1");
|
||||
|
||||
Map<String, Object> parameters = new HashMap<String, Object>();
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(log_para)) {
|
||||
queryString.append(" and money.LOG like :log ");
|
||||
parameters.put("log", "%" + log_para + "%");
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(name_para)) {
|
||||
queryString.append(" and (party.USERNAME =:name OR party.USERCODE=:name ) ");
|
||||
parameters.put("name", name_para);
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(rolename_para)) {
|
||||
queryString.append(" and party.ROLENAME =:rolename");
|
||||
parameters.put("rolename", rolename_para);
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(startTime)) {
|
||||
queryString.append(" AND DATE(money.CREATE_TIME) >= DATE(:startTime) ");
|
||||
parameters.put("startTime",DateUtils.toDate(startTime));
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(endTime)) {
|
||||
queryString.append(" AND DATE(money.CREATE_TIME) <= DATE(:endTime) ");
|
||||
parameters.put("endTime", DateUtils.toDate(endTime));
|
||||
}
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(loginPartyId)) {
|
||||
|
||||
List<String> checked_list = this.userRecomService.findChildren(loginPartyId);
|
||||
checked_list.add(loginPartyId);
|
||||
if (checked_list.size() == 0) {
|
||||
return new Page();
|
||||
}
|
||||
queryString.append(" and party.UUID in(:checked_list)");
|
||||
parameters.put("checked_list", checked_list);
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(freezes)) {
|
||||
queryString.append(" and money.FREEZE =:freezes");
|
||||
parameters.put("freezes", freezes);
|
||||
}
|
||||
|
||||
|
||||
queryString.append(" order by money.CREATE_TIME desc,money.UUID desc ");
|
||||
|
||||
Page page = pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
public Page pagedQueryLog(int pageNo, int pageSize, String log_para, String name_para, String category,
|
||||
String operator, Date createTime_begin, Date createTime_end, String loginPartyId,String loginUsername) {
|
||||
StringBuffer queryString = new StringBuffer();
|
||||
queryString.append("SELECT");
|
||||
queryString.append(" party.NAME name,party.ROLENAME rolename,party.USERCODE usercode,");
|
||||
queryString.append(
|
||||
" log.UUID log_id,log.LOG log,log.USERNAME username,log.OPERATOR operator,log.CATEGORY category,log.CREATE_TIME createTime");
|
||||
queryString.append(" FROM");
|
||||
queryString.append(" T_LOG log LEFT JOIN PAT_PARTY party ON log.USERNAME = party.USERNAME ");
|
||||
queryString.append(" WHERE 1=1");
|
||||
|
||||
Map<String, Object> parameters = new HashMap<String, Object>();
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(log_para)) {
|
||||
queryString.append(" and log.LOG like :log ");
|
||||
parameters.put("log", "%" + log_para + "%");
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(name_para)) {
|
||||
queryString.append(" and (party.USERNAME =:name OR party.USERCODE=:name OR log.USERNAME= :name)");
|
||||
parameters.put("name", name_para);
|
||||
}
|
||||
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(category)) {
|
||||
queryString.append(" and log.CATEGORY = :category ");
|
||||
parameters.put("category", category);
|
||||
}
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(operator)) {
|
||||
queryString.append(" and log.OPERATOR = :operator ");
|
||||
parameters.put("operator", operator);
|
||||
}
|
||||
|
||||
if (!"root".equals(loginUsername)) {
|
||||
queryString.append(" and log.USERNAME != 'root'");
|
||||
queryString.append(" and (log.OPERATOR != 'root' OR log.OPERATOR IS NULL) ");
|
||||
}
|
||||
|
||||
if (createTime_begin != null) {
|
||||
queryString.append(" and log.CREATE_TIME >= :createTime_begin ");
|
||||
parameters.put("createTime_begin", createTime_begin);
|
||||
}
|
||||
|
||||
if (createTime_begin != null) {
|
||||
queryString.append(" and log.CREATE_TIME < :createTime_end");
|
||||
parameters.put("createTime_end", createTime_end);
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(loginPartyId)) {
|
||||
queryString.append(" and log.PARTY_ID = :loginPartyId ");
|
||||
parameters.put("loginPartyId", loginPartyId);
|
||||
}
|
||||
|
||||
queryString.append(" order by log.CREATE_TIME desc ");
|
||||
|
||||
Page page = pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
|
||||
public Page pagedQueryCodeLog(int pageNo, int pageSize, String log_para,String name_para,String target,Date createTime_begin,
|
||||
Date createTime_end, String loginPartyId,String loginUsername,String id_para) {
|
||||
StringBuffer queryString = new StringBuffer();
|
||||
queryString.append("SELECT");
|
||||
queryString.append(" party.NAME name,");
|
||||
queryString.append(
|
||||
" log.UUID log_id,log.LOG log,log.USERNAME username,log.TARGET target,"
|
||||
|
||||
+ "log.CREATE_TIME createTime");
|
||||
queryString.append(" FROM");
|
||||
queryString.append(" T_CODE_LOG log LEFT JOIN PAT_PARTY party ON log.PARTY_ID = party.UUID ");
|
||||
queryString.append(" WHERE 1=1");
|
||||
|
||||
Map<String, Object> parameters = new HashMap<String, Object>();
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(id_para)) {
|
||||
queryString.append(" and log.UUID = :id_para ");
|
||||
parameters.put("id_para", id_para);
|
||||
}
|
||||
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(log_para)) {
|
||||
queryString.append(" and log.LOG like :log ");
|
||||
parameters.put("log", "%" + log_para + "%");
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(name_para)) {
|
||||
queryString.append(" and (party.NAME = :name or log.USERNAME= :name)");
|
||||
parameters.put("name", name_para);
|
||||
}
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(target)) {
|
||||
queryString.append(" and log.TARGET like :target ");
|
||||
parameters.put("target", "%" + target + "%");
|
||||
}
|
||||
|
||||
// if (!"root".equals(loginUsername)) {
|
||||
// queryString.append(" and log.USERNAME != 'root'");
|
||||
// }
|
||||
|
||||
|
||||
if (createTime_begin != null) {
|
||||
queryString.append(" and log.CREATE_TIME >= :createTime_begin ");
|
||||
parameters.put("createTime_begin", createTime_begin);
|
||||
}
|
||||
|
||||
if (createTime_begin != null) {
|
||||
queryString.append(" and log.CREATE_TIME < :createTime_end");
|
||||
parameters.put("createTime_end", createTime_end);
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(loginPartyId)) {
|
||||
queryString.append(" and log.PARTY_ID = :loginPartyId ");
|
||||
parameters.put("loginPartyId", loginPartyId);
|
||||
}
|
||||
|
||||
queryString.append(" order by log.CREATE_TIME desc ");
|
||||
|
||||
Page page = pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public Page pagedQuerySysLog(int pageNo, int pageSize, String log_para, String level_para, String category_para,
|
||||
Date createTime_begin, Date createTime_end) {
|
||||
StringBuffer queryString = new StringBuffer();
|
||||
queryString.append("SELECT");
|
||||
queryString.append(
|
||||
" log.UUID log_id,log.LOG log,log.LEVEL level,log.CATEGORY category,log.EXTRA extra,log.CREATE_TIME createTime");
|
||||
queryString.append(" FROM");
|
||||
queryString.append(" T_SYSLOG log ");
|
||||
queryString.append(" WHERE 1=1");
|
||||
|
||||
Map<String, Object> parameters = new HashMap<String, Object>();
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(log_para)) {
|
||||
queryString.append(" and log.LOG like :log ");
|
||||
parameters.put("log", "%" + log_para + "%");
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(level_para)) {
|
||||
queryString.append(" and log.LEVEL = :level ");
|
||||
parameters.put("level", level_para);
|
||||
}
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(category_para)) {
|
||||
queryString.append(" and log.CATEGORY = :category ");
|
||||
parameters.put("category", category_para);
|
||||
}
|
||||
|
||||
|
||||
if (createTime_begin != null) {
|
||||
queryString.append(" and log.CREATE_TIME >= :createTime_begin ");
|
||||
parameters.put("createTime_begin", createTime_begin);
|
||||
}
|
||||
|
||||
if (createTime_begin != null) {
|
||||
queryString.append(" and log.CREATE_TIME < :createTime_end");
|
||||
parameters.put("createTime_end", createTime_end);
|
||||
}
|
||||
|
||||
queryString.append(" order by log.CREATE_TIME desc ");
|
||||
|
||||
Page page = pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
|
||||
this.pagedQueryDao = pagedQueryDao;
|
||||
}
|
||||
|
||||
public void setUserRecomService(UserRecomService userRecomService) {
|
||||
this.userRecomService = userRecomService;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
28
comm/Log/src/project/log/internal/ApiLogServiceImpl.java
Executable file
28
comm/Log/src/project/log/internal/ApiLogServiceImpl.java
Executable file
@@ -0,0 +1,28 @@
|
||||
package project.log.internal;
|
||||
|
||||
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
|
||||
|
||||
import project.log.ApiLog;
|
||||
import project.log.ApiLogService;
|
||||
|
||||
public class ApiLogServiceImpl extends HibernateDaoSupport implements ApiLogService {
|
||||
|
||||
public void save(ApiLog entity) {
|
||||
|
||||
this.getHibernateTemplate().save(entity);
|
||||
|
||||
}
|
||||
|
||||
public void update(ApiLog entity) {
|
||||
getHibernateTemplate().update(entity);
|
||||
}
|
||||
|
||||
public void delete(String id) {
|
||||
ApiLog entity = findById(id);
|
||||
getHibernateTemplate().delete(entity);
|
||||
}
|
||||
|
||||
public ApiLog findById(String id) {
|
||||
return (ApiLog) getHibernateTemplate().get(ApiLog.class, id);
|
||||
}
|
||||
}
|
||||
35
comm/Log/src/project/log/internal/CodeLogServiceImpl.java
Executable file
35
comm/Log/src/project/log/internal/CodeLogServiceImpl.java
Executable file
@@ -0,0 +1,35 @@
|
||||
package project.log.internal;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
|
||||
|
||||
import kernel.web.PagedQueryDao;
|
||||
import project.log.CodeLog;
|
||||
import project.log.CodeLogService;
|
||||
|
||||
public class CodeLogServiceImpl extends HibernateDaoSupport implements CodeLogService {
|
||||
private PagedQueryDao pagedQueryDao;
|
||||
|
||||
@Override
|
||||
public void saveSync(CodeLog entity) {
|
||||
|
||||
entity.setCreateTime(new Date());
|
||||
this.getHibernateTemplate().save(entity);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void saveAsyn(CodeLog entity) {
|
||||
entity.setCreateTime(new Date());
|
||||
AbstractLogQueue.add(entity);
|
||||
|
||||
}
|
||||
|
||||
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
|
||||
this.pagedQueryDao = pagedQueryDao;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
77
comm/Log/src/project/log/internal/LogServiceImpl.java
Executable file
77
comm/Log/src/project/log/internal/LogServiceImpl.java
Executable file
@@ -0,0 +1,77 @@
|
||||
package project.log.internal;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
|
||||
|
||||
import kernel.web.Page;
|
||||
import kernel.web.PagedQueryDao;
|
||||
import project.log.Log;
|
||||
import project.log.LogService;
|
||||
|
||||
public class LogServiceImpl extends HibernateDaoSupport implements LogService {
|
||||
private PagedQueryDao pagedQueryDao;
|
||||
|
||||
@Override
|
||||
public void saveSync(Log entity) {
|
||||
|
||||
entity.setCreateTime(new Date());
|
||||
this.getHibernateTemplate().save(entity);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void saveAsyn(Log entity) {
|
||||
entity.setCreateTime(new Date());
|
||||
AbstractLogQueue.add(entity);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public Page pagedQuery(int pageNo, int pageSize, Serializable partyId, String[] category, String[] extra,
|
||||
Date createTime_begin, Date createTime_end) {
|
||||
StringBuffer queryString = new StringBuffer(" FROM Log where 1 = 1 ");
|
||||
Map parameters = new HashMap();
|
||||
|
||||
if (category != null) {
|
||||
queryString.append(" and category in (:category)");
|
||||
parameters.put("category", category);
|
||||
}
|
||||
if (extra != null) {
|
||||
queryString.append(" and extra in (:extra)");
|
||||
parameters.put("extra", extra);
|
||||
}
|
||||
|
||||
if (createTime_begin != null) {
|
||||
queryString.append(" and createTime >= :createTime_begin");
|
||||
parameters.put("createTime_begin", createTime_begin);
|
||||
}
|
||||
|
||||
if (createTime_end != null) {
|
||||
queryString.append(" and createTime < :createTime_end");
|
||||
parameters.put("createTime_end", createTime_end);
|
||||
}
|
||||
|
||||
if (partyId != null) {
|
||||
queryString.append(" and partyId = :partyId");
|
||||
parameters.put("partyId", partyId);
|
||||
}
|
||||
queryString.append(" order by createTime desc ");
|
||||
Page page = this.pagedQueryDao.pagedQueryHql(pageNo, pageSize, queryString.toString(), parameters);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
|
||||
this.pagedQueryDao = pagedQueryDao;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
390
comm/Log/src/project/log/internal/MoneyFreezeServiceImpl.java
Executable file
390
comm/Log/src/project/log/internal/MoneyFreezeServiceImpl.java
Executable file
@@ -0,0 +1,390 @@
|
||||
package project.log.internal;
|
||||
|
||||
import kernel.util.Arith;
|
||||
import kernel.web.Page;
|
||||
import kernel.web.PagedQueryDao;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.criterion.DetachedCriteria;
|
||||
import org.hibernate.criterion.Order;
|
||||
import org.hibernate.criterion.Property;
|
||||
import org.hibernate.query.NativeQuery;
|
||||
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import project.Constants;
|
||||
import project.log.*;
|
||||
import project.mall.seller.SellerService;
|
||||
import project.redis.RedisHandler;
|
||||
import project.redis.interal.KeyValue;
|
||||
import project.syspara.SysparaService;
|
||||
import project.wallet.Wallet;
|
||||
import project.wallet.WalletService;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class MoneyFreezeServiceImpl extends HibernateDaoSupport implements MoneyFreezeService {
|
||||
protected PagedQueryDao pagedDao;
|
||||
|
||||
protected WalletService walletService;
|
||||
|
||||
protected MoneyLogService moneyLogService;
|
||||
|
||||
protected SellerService sellerService;
|
||||
|
||||
private RedisHandler redisHandler;
|
||||
|
||||
@Override
|
||||
public void save(MoneyFreeze entity) {
|
||||
if (entity.getCreateTime() == null) {
|
||||
entity.setCreateTime(new Date());
|
||||
}
|
||||
|
||||
getHibernateTemplate().save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MoneyFreeze getById(String id) {
|
||||
if (id == null || id.trim().isEmpty()) {
|
||||
throw new RuntimeException("未指定记录");
|
||||
}
|
||||
|
||||
return getHibernateTemplate().get(MoneyFreeze.class, id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 冻结资金的完整逻辑
|
||||
*
|
||||
* @param sellerId
|
||||
* @param freezeAmout : 传进的值都是正值
|
||||
* @param freezeDays
|
||||
* @param freezeReason
|
||||
* @param operator
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public MoneyFreeze updateFreezeSeller(String sellerId, double freezeAmout, int freezeDays, String freezeReason, String operator) {
|
||||
|
||||
Wallet wallet = this.walletService.saveWalletByPartyId(sellerId);
|
||||
double amount_before = wallet.getMoney();
|
||||
double moneyAfterFrozenBefore = wallet.getMoneyAfterFrozen();
|
||||
if (freezeAmout == 0.0D) {
|
||||
// 提交 0 意味着全部冻结
|
||||
freezeAmout = amount_before;
|
||||
}
|
||||
if (amount_before < freezeAmout) {
|
||||
throw new RuntimeException("冻结资金额度超过商家拥有资金数量");
|
||||
}
|
||||
if (freezeAmout < 0) {
|
||||
throw new RuntimeException("错误的冻结资金数量");
|
||||
}
|
||||
|
||||
// 更新商家资金冻结字段 状态改变后 moneyAfterFrozen为用户钱包金额
|
||||
wallet.setFrozenState(1);
|
||||
wallet.setMoneyAfterFrozen(Arith.sub(amount_before,freezeAmout));
|
||||
wallet.setMoney(freezeAmout);
|
||||
walletService.update(wallet);
|
||||
|
||||
this.sellerService.updateFreezeState(sellerId, 1);
|
||||
|
||||
MoneyLog moneylog = new MoneyLog();
|
||||
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_CONTRACT);
|
||||
moneylog.setAmount_before(amount_before);
|
||||
moneylog.setAmount(-freezeAmout);
|
||||
moneylog.setAmount_after(Arith.sub(amount_before,freezeAmout));
|
||||
moneylog.setLog("冻结商家资金");
|
||||
moneylog.setPartyId(sellerId);
|
||||
moneylog.setWallettype(Constants.WALLET);
|
||||
moneylog.setContent_type(Constants.MONEYLOG_FREEZE_SELLER);
|
||||
|
||||
moneyLogService.save(moneylog);
|
||||
|
||||
Date now = new Date();
|
||||
Date endTime = new Date(now.getTime() + 24L * freezeDays * 3600L * 1000L);
|
||||
MoneyFreeze freeze = new MoneyFreeze();
|
||||
freeze.setPartyId(sellerId);
|
||||
freeze.setReason(freezeReason);
|
||||
freeze.setStatus(1);
|
||||
freeze.setAmount(freezeAmout);
|
||||
freeze.setBeginTime(now);
|
||||
freeze.setEndTime(endTime);
|
||||
freeze.setCreateTime(now);
|
||||
freeze.setMoneyLog(moneylog.getId().toString());
|
||||
freeze.setOperator(operator);
|
||||
this.save(freeze);
|
||||
|
||||
|
||||
MoneyLog moneylog1 = new MoneyLog();
|
||||
moneylog1.setCategory(Constants.MONEYLOG_CATEGORY_CONTRACT);
|
||||
moneylog1.setFreeze(1);
|
||||
moneylog1.setAmount_before(moneyAfterFrozenBefore);
|
||||
moneylog1.setAmount(Arith.sub(amount_before,freezeAmout));
|
||||
moneylog1.setAmount_after(wallet.getMoneyAfterFrozen());
|
||||
moneylog1.setLog("冻结商家资金");
|
||||
moneylog1.setPartyId(sellerId);
|
||||
moneylog1.setWallettype(Constants.WALLET);
|
||||
moneylog1.setContent_type(Constants.MONEYLOG_FREEZE_SELLER);
|
||||
moneyLogService.save(moneylog1);
|
||||
//
|
||||
// // 优化定时任务的处理速度,方便轮询定时解冻的记录
|
||||
// redisHandler.zadd(MallLogRedisKeys.SELLER_MONEY_FREEZE, endTime.getTime(), freeze.getId().toString());
|
||||
|
||||
return freeze;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解冻资金的完整逻辑
|
||||
*
|
||||
* @param id
|
||||
* @param operator
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public int updateAutoUnFreezeSeller(String id, String operator) {
|
||||
MoneyFreeze freezeEntity = getById(id);
|
||||
if (freezeEntity == null) {
|
||||
throw new RuntimeException("不存在的冻结记录");
|
||||
}
|
||||
if (freezeEntity.getStatus() == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int check = updateSetUnFreezeState(id, operator);
|
||||
if (check == 0) {
|
||||
// 防止并发情况下重复回退资金
|
||||
return 0;
|
||||
}
|
||||
|
||||
Wallet wallet = this.walletService.saveWalletByPartyId(freezeEntity.getPartyId());
|
||||
double amount_before = wallet.getMoney();
|
||||
double freezeAmout = freezeEntity.getAmount();
|
||||
// 更新商家资金余额,余额给加回去
|
||||
wallet.setMoney(Arith.roundDown(Arith.add(wallet.getMoney(),freezeAmout),2));
|
||||
wallet.setFrozenState(0);
|
||||
walletService.update(wallet);
|
||||
|
||||
this.sellerService.updateFreezeState(freezeEntity.getPartyId().toString(), 0);
|
||||
|
||||
MoneyLog moneylog = new MoneyLog();
|
||||
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_CONTRACT);
|
||||
moneylog.setAmount_before(amount_before);
|
||||
moneylog.setAmount(freezeAmout);
|
||||
moneylog.setAmount_after(Arith.add(amount_before, freezeAmout));
|
||||
moneylog.setLog("定时解冻商家资金");
|
||||
moneylog.setPartyId(freezeEntity.getPartyId().toString());
|
||||
moneylog.setWallettype(Constants.WALLET);
|
||||
moneylog.setContent_type(Constants.MONEYLOG_UNFREEZE_SELLER);
|
||||
|
||||
moneyLogService.save(moneylog);
|
||||
|
||||
// 优化定时任务的处理速度
|
||||
redisHandler.zrem(MallLogRedisKeys.SELLER_MONEY_FREEZE, id);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解冻资金的完整逻辑
|
||||
*
|
||||
* @param id
|
||||
* @param operator
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public int updateUnFreezeSeller(String id, String operator) {
|
||||
MoneyFreeze freezeEntity = getById(id);
|
||||
|
||||
Wallet wallet = this.walletService.saveWalletByPartyId(freezeEntity.getPartyId());
|
||||
|
||||
if (freezeEntity == null) {
|
||||
throw new RuntimeException("不存在的冻结记录");
|
||||
}
|
||||
|
||||
if (wallet.getFrozenState() != 1){
|
||||
throw new RuntimeException("用户不处于冻结状态");
|
||||
}
|
||||
if (freezeEntity.getStatus() == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int check = updateSetUnFreezeState(id, operator);
|
||||
if (check == 0) {
|
||||
// 防止并发情况下重复回退资金
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//用户被冻结后钱包余额
|
||||
double amount_before = wallet.getMoneyAfterFrozen();
|
||||
|
||||
//被冻结金额
|
||||
double money = wallet.getMoney();
|
||||
|
||||
//更新商家资金余额,余额给加回去 钱包冻结状态解除, moneyAfterFrozen值清零
|
||||
wallet.setFrozenState(0);
|
||||
wallet.setMoney(Arith.roundDown(Arith.add(wallet.getMoney(),wallet.getMoneyAfterFrozen()),2));
|
||||
wallet.setMoneyAfterFrozen(0);
|
||||
this.walletService.update(wallet);
|
||||
|
||||
this.sellerService.updateFreezeState(freezeEntity.getPartyId().toString(), 0);
|
||||
|
||||
MoneyLog moneylog = new MoneyLog();
|
||||
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_CONTRACT);
|
||||
moneylog.setAmount_before(amount_before);
|
||||
moneylog.setAmount(money);
|
||||
moneylog.setAmount_after(Arith.add(amount_before, money));
|
||||
moneylog.setLog("解冻商家资金");
|
||||
moneylog.setPartyId(freezeEntity.getPartyId().toString());
|
||||
moneylog.setWallettype(Constants.WALLET);
|
||||
moneylog.setContent_type(Constants.MONEYLOG_UNFREEZE_SELLER);
|
||||
|
||||
|
||||
moneyLogService.save(moneylog);
|
||||
MoneyLog moneylog1 = new MoneyLog();
|
||||
moneylog1.setCategory(Constants.MONEYLOG_CATEGORY_CONTRACT);
|
||||
moneylog1.setAmount_before(amount_before);
|
||||
moneylog1.setFreeze(1);
|
||||
moneylog1.setAmount(-amount_before);
|
||||
moneylog1.setAmount_after(Arith.sub(amount_before, amount_before));
|
||||
moneylog1.setLog("解冻商家资金");
|
||||
moneylog1.setPartyId(freezeEntity.getPartyId().toString());
|
||||
moneylog1.setWallettype(Constants.WALLET);
|
||||
moneylog1.setContent_type(Constants.MONEYLOG_UNFREEZE_SELLER);
|
||||
|
||||
moneyLogService.save(moneylog1);
|
||||
|
||||
// 优化定时任务的处理速度
|
||||
redisHandler.zrem(MallLogRedisKeys.SELLER_MONEY_FREEZE, id);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateSetUnFreezeState(String id, String operator) {
|
||||
if (id == null || id.trim().isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
if (operator == null || operator.trim().isEmpty()) {
|
||||
operator = "0";
|
||||
}
|
||||
|
||||
Session currentSession = getHibernateTemplate().getSessionFactory().getCurrentSession();
|
||||
String sql = " update T_MONEY_FREEZE set STATUS= :status, OPERATOR= :operator, END_TIME=now() where UUID= :id and STATUS=1 ";
|
||||
NativeQuery query = currentSession.createSQLQuery(sql);
|
||||
|
||||
query.setParameter("status", 0);
|
||||
query.setParameter("operator", operator);
|
||||
query.setParameter("id", id);
|
||||
|
||||
return query.executeUpdate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page pagedListFreeze(String partyId, int status, int pageNum, int pageSize) {
|
||||
StringBuffer queryString = new StringBuffer("");
|
||||
queryString.append(" FROM MoneyFreeze WHERE 1=1 ");
|
||||
Map parameters = new HashMap();
|
||||
|
||||
if (StringUtils.isNotEmpty(partyId)) {
|
||||
queryString.append(" AND partyId =:partyId ");
|
||||
parameters.put("partyId", partyId);
|
||||
}
|
||||
if(status >= 0) {
|
||||
queryString.append(" AND status = :status ");
|
||||
parameters.put("status", status);
|
||||
}
|
||||
|
||||
queryString.append(" order by createTime desc ");
|
||||
Page page = this.pagedDao.pagedQueryHql(pageNum, pageSize, queryString.toString(), parameters);
|
||||
return page;
|
||||
}
|
||||
|
||||
public List<String> listPendingFreezeRecords() {
|
||||
double min = 0;
|
||||
double max = System.currentTimeMillis();
|
||||
Set<KeyValue<String, Double>> pendingItems = redisHandler.zRange(MallLogRedisKeys.SELLER_MONEY_FREEZE, min, max);
|
||||
List<String> idList = new ArrayList();
|
||||
if (pendingItems == null || pendingItems.isEmpty()) {
|
||||
return idList;
|
||||
}
|
||||
|
||||
for (KeyValue<String, Double> oneItem : pendingItems) {
|
||||
idList.add(oneItem.getKey());
|
||||
}
|
||||
|
||||
return idList;
|
||||
}
|
||||
|
||||
public List<MoneyFreeze> listPendingFreezeRecords(int size) {
|
||||
StringBuffer queryString = new StringBuffer("");
|
||||
queryString.append(" FROM MoneyFreeze WHERE endTime <= now() and status=1 ");
|
||||
|
||||
Map parameters = new HashMap();
|
||||
Page page = this.pagedDao.pagedQueryHql(1, size, queryString.toString(), parameters);
|
||||
|
||||
return (List<MoneyFreeze>) page.getElements();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MoneyFreeze> listByIds(List<String> ids) {
|
||||
List<MoneyFreeze> list = new ArrayList();
|
||||
if (ids == null || ids.isEmpty()) {
|
||||
return list;
|
||||
}
|
||||
|
||||
DetachedCriteria query = DetachedCriteria.forClass(MoneyFreeze.class);
|
||||
query.add(Property.forName("id").in(ids));
|
||||
|
||||
List retList = getHibernateTemplate().findByCriteria(query);
|
||||
if (retList == null || retList.isEmpty()) {
|
||||
return list;
|
||||
}
|
||||
|
||||
list.addAll(retList);
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MoneyFreeze getLastFreezeRecord(String sellerId) {
|
||||
if (sellerId == null || sellerId.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
DetachedCriteria query = DetachedCriteria.forClass(MoneyFreeze.class);
|
||||
query.add(Property.forName("partyId").eq(sellerId));
|
||||
query.add(Property.forName("status").eq(1));
|
||||
query.addOrder(Order.desc("createTime"));
|
||||
|
||||
List retList = getHibernateTemplate().findByCriteria(query);
|
||||
if (retList == null || retList.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (MoneyFreeze)retList.get(0);
|
||||
}
|
||||
|
||||
public void setPagedDao(PagedQueryDao pagedDao) {
|
||||
this.pagedDao = pagedDao;
|
||||
}
|
||||
|
||||
public PagedQueryDao getPagedDao() {
|
||||
return pagedDao;
|
||||
}
|
||||
|
||||
public void setWalletService(WalletService walletService) {
|
||||
this.walletService = walletService;
|
||||
}
|
||||
|
||||
public void setMoneyLogService(MoneyLogService moneyLogService) {
|
||||
this.moneyLogService = moneyLogService;
|
||||
}
|
||||
|
||||
public void setRedisHandler(RedisHandler redisHandler) {
|
||||
this.redisHandler = redisHandler;
|
||||
}
|
||||
|
||||
public void setSellerService(SellerService sellerService) {
|
||||
this.sellerService = sellerService;
|
||||
}
|
||||
|
||||
}
|
||||
106
comm/Log/src/project/log/internal/MoneyLogServiceImpl.java
Executable file
106
comm/Log/src/project/log/internal/MoneyLogServiceImpl.java
Executable file
@@ -0,0 +1,106 @@
|
||||
package project.log.internal;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.hibernate.Query;
|
||||
import org.hibernate.criterion.Criterion;
|
||||
import org.hibernate.criterion.DetachedCriteria;
|
||||
import org.hibernate.criterion.Order;
|
||||
import org.hibernate.criterion.Property;
|
||||
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
|
||||
|
||||
import kernel.web.Page;
|
||||
import kernel.web.PagedQueryDao;
|
||||
import project.log.MoneyLog;
|
||||
import project.log.MoneyLogService;
|
||||
import project.mall.orders.model.MallOrderRebate;
|
||||
import project.mall.orders.model.MallOrdersPrize;
|
||||
|
||||
public class MoneyLogServiceImpl extends HibernateDaoSupport implements MoneyLogService {
|
||||
protected PagedQueryDao pagedDao;
|
||||
|
||||
public void save(MoneyLog moneyLog) {
|
||||
if (moneyLog.getCreateTime() == null) {
|
||||
moneyLog.setCreateTime(new Date());
|
||||
}
|
||||
getHibernateTemplate().save(moneyLog);
|
||||
}
|
||||
|
||||
public Page pagedQuery(int pageNo, int pageSize, String category, String content_type, String partyId, Date startTime, Date endTime) {
|
||||
StringBuffer queryString = new StringBuffer("");
|
||||
queryString.append(" FROM MoneyLog WHERE 1=1 AND content_type NOT IN ('changesub')");
|
||||
Map parameters = new HashMap();
|
||||
|
||||
if (StringUtils.isNotEmpty(category)) {
|
||||
queryString.append(" AND category =:category");
|
||||
parameters.put("category", category);
|
||||
}
|
||||
if(StringUtils.isNotEmpty(content_type)){
|
||||
queryString.append(" AND content_type =:content_type");
|
||||
parameters.put("content_type", content_type);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(partyId)) {
|
||||
queryString.append(" AND partyId =:partyId");
|
||||
parameters.put("partyId", partyId);
|
||||
}
|
||||
if (null != startTime){
|
||||
queryString.append(" AND createTime >=:startTime");
|
||||
parameters.put("startTime", startTime);
|
||||
}
|
||||
if (null != endTime){
|
||||
queryString.append(" AND createTime <=:endTime");
|
||||
parameters.put("endTime", endTime);
|
||||
}
|
||||
queryString.append(" order by createTime desc ");
|
||||
Page page = this.pagedDao.pagedQueryHql(pageNo, pageSize, queryString.toString(), parameters);
|
||||
return page;
|
||||
}
|
||||
|
||||
public List<MoneyLog> findLogsByConentTypeAndDate(String type, String date) {
|
||||
StringBuffer queryString = new StringBuffer("");
|
||||
List<Object> paras = new LinkedList<Object>();
|
||||
queryString.append(" FROM MoneyLog WHERE 1=1 ");
|
||||
if (StringUtils.isNotEmpty(type)) {
|
||||
queryString.append(" AND content_type =?0");
|
||||
paras.add(type);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(date)) {
|
||||
queryString.append(" AND DATE(createTime) =DATE(?1)");
|
||||
paras.add(date);
|
||||
}
|
||||
List<MoneyLog> find=(List<MoneyLog>) this.getHibernateTemplate().find(queryString.toString(),paras);
|
||||
return find;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MoneyLog> findByLog(String type, String log) {
|
||||
DetachedCriteria query = DetachedCriteria.forClass(MoneyLog.class);
|
||||
query.add( Property.forName("content_type").eq(type) );
|
||||
query.add( Property.forName("log").eq(log) );
|
||||
query.addOrder(Order.desc("createTime"));
|
||||
return (List<MoneyLog>) getHibernateTemplate().findByCriteria(query,0,1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MallOrderRebate> getOrderRebate(String orderId) {
|
||||
DetachedCriteria criteria = DetachedCriteria.forClass(MallOrderRebate.class);
|
||||
criteria.add(Property.forName("orderId").eq(orderId));
|
||||
criteria.addOrder(Order.desc("level"));
|
||||
return (List<MallOrderRebate>)this.getHibernateTemplate().findByCriteria(criteria);
|
||||
}
|
||||
|
||||
|
||||
public void setPagedDao(PagedQueryDao pagedDao) {
|
||||
this.pagedDao = pagedDao;
|
||||
}
|
||||
|
||||
public PagedQueryDao getPagedDao() {
|
||||
return pagedDao;
|
||||
}
|
||||
|
||||
}
|
||||
62
comm/Log/src/project/log/internal/SaveLogServer.java
Executable file
62
comm/Log/src/project/log/internal/SaveLogServer.java
Executable file
@@ -0,0 +1,62 @@
|
||||
package project.log.internal;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import kernel.util.ThreadUtils;
|
||||
import project.log.AbstractLog;
|
||||
import project.log.LogService;
|
||||
import project.log.SysLog;
|
||||
import project.log.SysLogService;
|
||||
|
||||
public class SaveLogServer implements Runnable {
|
||||
private static Log logger = LogFactory.getLog(SaveLogServer.class);
|
||||
private LogService logService;
|
||||
private SysLogService sysLogService;
|
||||
|
||||
public void run() {
|
||||
while (true)
|
||||
try {
|
||||
int size = AbstractLogQueue.size();
|
||||
/**
|
||||
* 现量轮询一圈
|
||||
*/
|
||||
for (int i = 0; i < size; i++) {
|
||||
AbstractLog log = AbstractLogQueue.poll();
|
||||
if (log != null) {
|
||||
if (log instanceof project.log.Log) {
|
||||
logService.saveSync((project.log.Log) log);
|
||||
} else if (log instanceof SysLog) {
|
||||
sysLogService.saveSync((SysLog) log);
|
||||
}
|
||||
/**
|
||||
* 1秒最多100个日志
|
||||
*/
|
||||
ThreadUtils.sleep(10);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Throwable e) {
|
||||
logger.error("SmsServer taskExecutor.execute() fail", e);
|
||||
} finally {
|
||||
ThreadUtils.sleep(1000);
|
||||
}
|
||||
}
|
||||
|
||||
public void start() {
|
||||
new Thread(this, "SaveLogServer").start();
|
||||
if (logger.isInfoEnabled()) {
|
||||
logger.info("启动SaveLogServer!");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setLogService(LogService logService) {
|
||||
this.logService = logService;
|
||||
}
|
||||
|
||||
public void setSysLogService(SysLogService sysLogService) {
|
||||
this.sysLogService = sysLogService;
|
||||
}
|
||||
}
|
||||
30
comm/Log/src/project/log/internal/SysLogServiceImpl.java
Executable file
30
comm/Log/src/project/log/internal/SysLogServiceImpl.java
Executable file
@@ -0,0 +1,30 @@
|
||||
package project.log.internal;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
|
||||
|
||||
import project.log.SysLog;
|
||||
import project.log.SysLogService;
|
||||
|
||||
public class SysLogServiceImpl extends HibernateDaoSupport implements SysLogService {
|
||||
|
||||
@Override
|
||||
public void saveSync(SysLog entity) {
|
||||
entity.setCreateTime(new Date());
|
||||
this.getHibernateTemplate().save(entity);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveAsyn(SysLog entity) {
|
||||
entity.setCreateTime(new Date());
|
||||
AbstractLogQueue.add(entity);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
30
comm/Log/src/project/log/mapping/ApiLog.hbm.xml
Executable file
30
comm/Log/src/project/log/mapping/ApiLog.hbm.xml
Executable file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping>
|
||||
<class name="project.log.ApiLog" table="T_API_LOG">
|
||||
<id name="id" type="java.lang.String">
|
||||
<column name="UUID" />
|
||||
<generator class="uuid.hex" />
|
||||
</id>
|
||||
<property name="partyId" type="java.lang.String">
|
||||
<column name="PARTY_ID" />
|
||||
</property>
|
||||
<property name="ip" type="java.lang.String">
|
||||
<column name="IP" />
|
||||
</property>
|
||||
<property name="api" type="java.lang.String">
|
||||
<column name="API" />
|
||||
</property>
|
||||
<property name="log" type="java.lang.String">
|
||||
<column name="LOG" />
|
||||
</property>
|
||||
<property name="extra" type="java.lang.String">
|
||||
<column name="EXTRA" />
|
||||
</property>
|
||||
<property name="createTime" type="timestamp">
|
||||
<column name="CREATE_TIME" />
|
||||
</property>
|
||||
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
27
comm/Log/src/project/log/mapping/CodeLog.hbm.xml
Executable file
27
comm/Log/src/project/log/mapping/CodeLog.hbm.xml
Executable file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping>
|
||||
<class name="project.log.CodeLog" table="T_CODE_LOG">
|
||||
<id name="id" type="java.lang.String">
|
||||
<column name="UUID" />
|
||||
<generator class="uuid.hex" />
|
||||
</id>
|
||||
<property name="partyId" type="java.lang.String">
|
||||
<column name="PARTY_ID" />
|
||||
</property>
|
||||
<property name="username" type="java.lang.String">
|
||||
<column name="USERNAME" />
|
||||
</property>
|
||||
<property name="target" type="java.lang.String">
|
||||
<column name="TARGET" />
|
||||
</property>
|
||||
<property name="log" type="java.lang.String">
|
||||
<column name="LOG" />
|
||||
</property>
|
||||
<property name="createTime" type="timestamp">
|
||||
<column name="CREATE_TIME" />
|
||||
</property>
|
||||
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
33
comm/Log/src/project/log/mapping/Log.hbm.xml
Executable file
33
comm/Log/src/project/log/mapping/Log.hbm.xml
Executable file
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping>
|
||||
<class name="project.log.Log" table="T_LOG">
|
||||
<id name="id" type="java.lang.String">
|
||||
<column name="UUID" />
|
||||
<generator class="uuid.hex" />
|
||||
</id>
|
||||
<property name="partyId" type="java.lang.String">
|
||||
<column name="PARTY_ID" />
|
||||
</property>
|
||||
<property name="username" type="java.lang.String">
|
||||
<column name="USERNAME" />
|
||||
</property>
|
||||
<property name="operator" type="java.lang.String">
|
||||
<column name="OPERATOR" />
|
||||
</property>
|
||||
<property name="category" type="java.lang.String">
|
||||
<column name="CATEGORY" />
|
||||
</property>
|
||||
<property name="log" type="java.lang.String">
|
||||
<column name="LOG" />
|
||||
</property>
|
||||
<property name="extra" type="java.lang.String">
|
||||
<column name="EXTRA" />
|
||||
</property>
|
||||
<property name="createTime" type="timestamp">
|
||||
<column name="CREATE_TIME" />
|
||||
</property>
|
||||
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
39
comm/Log/src/project/log/mapping/MoneyFreeze.hbm.xml
Executable file
39
comm/Log/src/project/log/mapping/MoneyFreeze.hbm.xml
Executable file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping>
|
||||
<class name="project.log.MoneyFreeze" table="T_MONEY_FREEZE">
|
||||
<id name="id" type="java.lang.String">
|
||||
<column name="UUID" />
|
||||
<generator class="uuid.hex" />
|
||||
</id>
|
||||
<property name="partyId" type="java.lang.String">
|
||||
<column name="PARTY_ID" />
|
||||
</property>
|
||||
<property name="operator" type="java.lang.String">
|
||||
<column name="OPERATOR" />
|
||||
</property>
|
||||
<property name="amount" type="double">
|
||||
<column name="AMOUNT" />
|
||||
</property>
|
||||
|
||||
<property name="moneyLog" type="java.lang.String">
|
||||
<column name="MONEY_LOG" />
|
||||
</property>
|
||||
<property name="beginTime" type="timestamp">
|
||||
<column name="BEGIN_TIME" />
|
||||
</property>
|
||||
<property name="endTime" type="timestamp">
|
||||
<column name="END_TIME" />
|
||||
</property>
|
||||
<property name="createTime" type="timestamp">
|
||||
<column name="CREATE_TIME" />
|
||||
</property>
|
||||
<property name="status" type="int">
|
||||
<column name="STATUS" />
|
||||
</property>
|
||||
<property name="reason" type="java.lang.String">
|
||||
<column name="REASON" />
|
||||
</property>
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
47
comm/Log/src/project/log/mapping/MoneyLog.hbm.xml
Executable file
47
comm/Log/src/project/log/mapping/MoneyLog.hbm.xml
Executable file
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping>
|
||||
<class name="project.log.MoneyLog" table="T_MONEY_LOG">
|
||||
<id name="id" type="java.lang.String">
|
||||
<column name="UUID" />
|
||||
<generator class="uuid.hex" />
|
||||
</id>
|
||||
<property name="partyId" type="java.lang.String">
|
||||
<column name="PARTY_ID" />
|
||||
</property>
|
||||
<property name="log" type="java.lang.String">
|
||||
<column name="LOG" />
|
||||
</property>
|
||||
|
||||
<property name="wallettype" type="java.lang.String">
|
||||
<column name="WALLETTYPE" />
|
||||
</property>
|
||||
<property name="category" type="java.lang.String">
|
||||
<column name="CATEGORY" />
|
||||
</property>
|
||||
|
||||
<property name="amount_before" type="java.lang.Double">
|
||||
<column name="AMOUNT_BEFORE" />
|
||||
</property>
|
||||
<property name="amount" type="java.lang.Double">
|
||||
<column name="AMOUNT" />
|
||||
</property>
|
||||
<property name="amount_after" type="java.lang.Double">
|
||||
<column name="AMOUNT_AFTER" />
|
||||
</property>
|
||||
|
||||
<property name="createTime" type="timestamp">
|
||||
<column name="CREATE_TIME" />
|
||||
</property>
|
||||
<property name="content_type" type="java.lang.String">
|
||||
<column name="CONTENT_TYPE" />
|
||||
</property>
|
||||
<property name="freeze" type="int">
|
||||
<column name="FREEZE" />
|
||||
</property>
|
||||
<property name="remarks" type="java.lang.String">
|
||||
<column name="REMARKS" />
|
||||
</property>
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
28
comm/Log/src/project/log/mapping/SysLog.hbm.xml
Executable file
28
comm/Log/src/project/log/mapping/SysLog.hbm.xml
Executable file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping>
|
||||
|
||||
<class name="project.log.SysLog" table="T_SYSLOG">
|
||||
<id name="id" type="java.lang.String">
|
||||
<column name="UUID" />
|
||||
<generator class="uuid.hex" />
|
||||
</id>
|
||||
<property name="category" type="java.lang.String">
|
||||
<column name="CATEGORY" />
|
||||
</property>
|
||||
<property name="level" type="java.lang.String">
|
||||
<column name="LEVEL" />
|
||||
</property>
|
||||
<property name="log" type="java.lang.String">
|
||||
<column name="LOG" />
|
||||
</property>
|
||||
<property name="extra" type="java.lang.String">
|
||||
<column name="EXTRA" />
|
||||
</property>
|
||||
<property name="createTime" type="timestamp">
|
||||
<column name="CREATE_TIME" />
|
||||
</property>
|
||||
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
123
comm/Log/src/project/web/admin/AdminCodeLogController.java
Executable file
123
comm/Log/src/project/web/admin/AdminCodeLogController.java
Executable file
@@ -0,0 +1,123 @@
|
||||
package project.web.admin;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.providers.encoding.PasswordEncoder;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import kernel.exception.BusinessException;
|
||||
import kernel.util.StringUtils;
|
||||
import kernel.web.PageActionSupport;
|
||||
import project.Constants;
|
||||
import project.log.AdminLogService;
|
||||
import project.log.Log;
|
||||
import project.log.LogService;
|
||||
import security.SecUser;
|
||||
import security.internal.SecUserService;
|
||||
|
||||
@RestController
|
||||
public class AdminCodeLogController extends PageActionSupport {
|
||||
|
||||
@Autowired
|
||||
private AdminLogService adminLogService;
|
||||
@Autowired
|
||||
private LogService logService;
|
||||
@Autowired
|
||||
private SecUserService secUserService;
|
||||
@Autowired
|
||||
private PasswordEncoder passwordEncoder;
|
||||
|
||||
private final String action = "normal/adminCodeLogAction!";
|
||||
|
||||
@RequestMapping(action + "list.action")
|
||||
public ModelAndView list(HttpServletRequest request) {
|
||||
this.checkAndSetPageNo(request.getParameter("pageNo"));
|
||||
this.pageSize = 30;
|
||||
String loginPartyId = getLoginPartyId();
|
||||
|
||||
String date_para = request.getParameter("date_para");
|
||||
String log_para = request.getParameter("log_para");
|
||||
String name_para = request.getParameter("name_para");
|
||||
String target = request.getParameter("target");
|
||||
|
||||
List<Date> date_range = toRangeDate(date_para);
|
||||
this.page = this.adminLogService.pagedQueryCodeLog(this.pageNo, pageSize, log_para, name_para, target,
|
||||
date_range.get(0), date_range.get(1), loginPartyId, this.getUsername_login(),null);
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.addObject("pageNo", this.pageNo);
|
||||
modelAndView.addObject("pageSize", this.pageSize);
|
||||
modelAndView.addObject("page", this.page);
|
||||
modelAndView.addObject("message", message);
|
||||
modelAndView.addObject("error", error);
|
||||
modelAndView.addObject("date_para", date_para);
|
||||
modelAndView.addObject("log_para", log_para);
|
||||
modelAndView.addObject("name_para", name_para);
|
||||
modelAndView.addObject("target", target);
|
||||
modelAndView.setViewName("code_log_list");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
@RequestMapping(action + "get_code.action")
|
||||
public ModelAndView get_code(HttpServletRequest request) {
|
||||
|
||||
String login_safeword = request.getParameter("login_safeword");
|
||||
String log_id = request.getParameter("log_id");
|
||||
|
||||
String error = "";
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
|
||||
try {
|
||||
if (StringUtils.isEmptyString(login_safeword)) {
|
||||
throw new BusinessException("资金密码不能为空");
|
||||
}
|
||||
SecUser sec = this.secUserService.findUserByLoginName(this.getUsername_login());
|
||||
|
||||
checkLoginSafeword(sec, this.getUsername_login(), login_safeword);
|
||||
|
||||
this.page = this.adminLogService.pagedQueryCodeLog(pageNo, pageSize, null, null, null,
|
||||
null, null, getLoginPartyId(), this.getUsername_login(), log_id);
|
||||
List<Map> list = page.getElements();
|
||||
Map map = list.get(0);
|
||||
Log log = new Log();
|
||||
log.setCategory(Constants.LOG_CATEGORY_OPERATION);
|
||||
log.setUsername("");
|
||||
log.setOperator(this.getUsername_login());
|
||||
log.setLog("管理员查看手机号/邮箱号["+String.valueOf(map.get("target"))+"]的验证码,管理员ip["+this.getIp(getRequest())+"]");
|
||||
logService.saveSync(log);
|
||||
|
||||
modelAndView.addObject("page", this.page);
|
||||
modelAndView.addObject("message", "操作成功");
|
||||
modelAndView.setViewName("code_log_get");
|
||||
return modelAndView;
|
||||
} catch (BusinessException e) {
|
||||
modelAndView.addObject("error", e.getMessage());
|
||||
modelAndView.setViewName("code_log_list");
|
||||
return modelAndView;
|
||||
} catch (Throwable t) {
|
||||
error = ("[ERROR] " + t.getMessage());
|
||||
modelAndView.addObject("error", error);
|
||||
modelAndView.setViewName("code_log_list");
|
||||
return modelAndView;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 验证登录人资金密码
|
||||
*/
|
||||
private void checkLoginSafeword(SecUser secUser,String operatorUsername,String loginSafeword) {
|
||||
String sysSafeword = secUser.getSafeword();
|
||||
String safeword_md5 = passwordEncoder.encodePassword(loginSafeword, operatorUsername);
|
||||
if (!safeword_md5.equals(sysSafeword)) {
|
||||
throw new BusinessException("登录人资金密码错误");
|
||||
}
|
||||
}
|
||||
}
|
||||
94
comm/Log/src/project/web/api/MoneyLogController.java
Executable file
94
comm/Log/src/project/web/api/MoneyLogController.java
Executable file
@@ -0,0 +1,94 @@
|
||||
package project.web.api;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import kernel.exception.BusinessException;
|
||||
import kernel.util.DateUtils;
|
||||
import kernel.util.StringUtils;
|
||||
import kernel.web.BaseAction;
|
||||
import kernel.web.Page;
|
||||
import kernel.web.ResultObject;
|
||||
import project.Constants;
|
||||
import project.log.MoneyLog;
|
||||
import project.log.MoneyLogService;
|
||||
|
||||
@RestController
|
||||
@CrossOrigin
|
||||
public class MoneyLogController extends BaseAction {
|
||||
|
||||
private Logger logger = LogManager.getLogger(MoneyLogController.class);
|
||||
|
||||
private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
|
||||
|
||||
@Autowired
|
||||
protected MoneyLogService moneyLogService;
|
||||
|
||||
@RequestMapping("api/moneylog!list.action")
|
||||
public Object list(HttpServletRequest request) throws IOException {
|
||||
|
||||
ResultObject resultObject = new ResultObject();
|
||||
resultObject = readSecurityContextFromSession(resultObject);
|
||||
|
||||
if (!"0".equals(resultObject.getCode())) {
|
||||
return resultObject;
|
||||
}
|
||||
String partyId = this.getLoginPartyId();
|
||||
try {
|
||||
|
||||
String page_no = request.getParameter("page_no");
|
||||
if (StringUtils.isNullOrEmpty(page_no)
|
||||
|| !StringUtils.isInteger(page_no) || Integer.valueOf(page_no) <= 0) {
|
||||
page_no = "1";
|
||||
}
|
||||
int pageNo = Integer.valueOf(page_no);
|
||||
String category = request.getParameter("category");
|
||||
String content_type = request.getParameter("content_type");
|
||||
|
||||
String beginTime = request.getParameter("beginTime");
|
||||
String endTimeStr = request.getParameter("endTime");
|
||||
Date startTime = null;
|
||||
Date endTime = null;
|
||||
try {
|
||||
startTime = format.parse(beginTime);
|
||||
endTime = format.parse(endTimeStr);
|
||||
}catch (Exception exception){
|
||||
|
||||
}
|
||||
Page pagedQuery = moneyLogService.pagedQuery(pageNo, 20, category, content_type, partyId, startTime, endTime);
|
||||
for (MoneyLog log : (List<MoneyLog>) pagedQuery.getElements()) {
|
||||
String contentType = log.getContent_type();
|
||||
if (StringUtils.isNotEmpty(contentType) && contentType.equals(Constants.MONEYLOG_CONTNET_ORDER_INCOME)){
|
||||
String logType = log.getLog();
|
||||
if (StringUtils.isNotEmpty(logType)){
|
||||
logType = logType.replaceAll("订单:", "");
|
||||
log.setDetail(moneyLogService.getOrderRebate(logType));
|
||||
}
|
||||
}
|
||||
log.setCreateTimeStr(DateUtils.format(log.getCreateTime(), DateUtils.DF_yyyyMMddHHmmss));
|
||||
}
|
||||
resultObject.setData(pagedQuery.getElements());
|
||||
} catch (BusinessException e) {
|
||||
resultObject.setCode("1");
|
||||
resultObject.setMsg(e.getMessage());
|
||||
} catch (Throwable t) {
|
||||
resultObject.setCode("1");
|
||||
resultObject.setMsg("程序错误");
|
||||
logger.error("error:", t);
|
||||
}
|
||||
return resultObject;
|
||||
}
|
||||
|
||||
}
|
||||
27
comm/Log/struts/normal.xml
Executable file
27
comm/Log/struts/normal.xml
Executable file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE struts PUBLIC
|
||||
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
|
||||
"http://struts.apache.org/dtds/struts-2.0.dtd">
|
||||
<struts>
|
||||
<package name="normal" namespace="/normal" extends="root">
|
||||
<result-types>
|
||||
<result-type name="json" class="org.apache.struts2.json.JSONResult" />
|
||||
</result-types>
|
||||
<interceptors>
|
||||
<interceptor name="json"
|
||||
class="org.apache.struts2.json.JSONInterceptor" />
|
||||
</interceptors>
|
||||
|
||||
<action name="NewsAction" class="project.news.action.NewsAction">
|
||||
<result name="list">/news_list.jsp</result>
|
||||
<result name="details">/news_details.jsp</result>
|
||||
</action>
|
||||
|
||||
<action name="AdminNewsAction" class="project.news.action.AdminNewsAction">
|
||||
<result name="view">/news_list.jsp</result>
|
||||
<result name="add">/news_add.jsp</result>
|
||||
<result name="update">/news_update.jsp</result>
|
||||
</action>
|
||||
|
||||
</package>
|
||||
</struts>
|
||||
Reference in New Issue
Block a user