first commit

This commit is contained in:
Ray
2026-02-19 03:37:37 +08:00
commit ccfd8c79a4
2813 changed files with 453657 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Class-Path:

View File

@@ -0,0 +1,207 @@
<%@ 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/adminContractApplyOrderAction!list.action"
method="post" id="queryForm">
<s:hidden name="status_para"></s:hidden>
<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:select id="rolename_para" cssClass="form-control "
name="rolename_para"
list="#{'MEMBER':'正式账号','GUEST':'演示账号'}" listKey="key"
listValue="value" headerKey="" headerValue="所有账号"
value="rolename_para" />
</div>
</div>
</fieldset>
</div>
<div class="col-md-12 col-lg-2">
<button type="submit" class="btn btn-light btn-block">查询</button>
</div>
<div class="col-md-12 col-lg-12" style="margin-top: 10px;">
<div class="mailbox clearfix">
<div class="mailbox-menu">
<ul class="menu">
<li><a href="javascript:setState('')"> 全部</a></li>
<li><a href="javascript:setState('submitted')"> 已提交</a></li>
<li><a href="javascript:setState('canceled')"> 已撤销</a></li>
<li><a href="javascript:setState('created')"> 委托完成</a></li>
</ul>
</div>
</div>
</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>委托张数</td>
<td>杠杆</td>
<td>报价类型</td>
<td>限价</td>
<td>止盈止损</td>
<td>状态</td>
<td width="130px"></td>
</tr>
</thead>
<tbody>
<s:iterator value="page.elements" status="stat">
<tr>
<td><s:property value="username" /></td>
<td><s:property value="itemname" /></td>
<td><s:if test='offset=="open"'>开</s:if><s:if test='offset=="close"'>平</s:if><s:if test='direction=="buy"'>多</s:if><s:if
test='direction=="sell"'>空</s:if></td>
<td><fmt:formatNumber value="${volume_open}" pattern="#0.00" /></td>
<td><fmt:formatNumber value="${lever_rate}" pattern="#0.00" /></td>
<td><s:if test='order_price_type=="limit"'>限价</s:if><s:if test='order_price_type=="opponent"'>市价</s:if></td>
<td><fmt:formatNumber
value="${price}" pattern="#0.00" /></td>
<td><s:property value="stop_price_profit" />/<s:property value="stop_price_loss" /></td>
<td><s:if test='state=="submitted"'>
已提交
</s:if> <s:if test='state=="canceled"'>已撤销</s:if> <s:if test='state=="created"'>
<span class="right label label-success">委托完成</span>
</s:if> </td>
<td>
<sec:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ROOT">
<div class="btn-group">
<button type="button" class="btn btn-light">操作</button>
<button type="button" class="btn btn-light dropdown-toggle"
data-toggle="dropdown" aria-expanded="false">
<span class="caret"></span> <span class="sr-only">Toggle
Dropdown</span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a
href="javascript:onclose('<s:property value="order_no" />')">撤销</a></li>
</ul>
</div>
</sec:authorize>
</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"%>
<sec:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ROOT">
<form action="normal/adminContractApplyOrderAction!close.action" method="post"
id="onclose">
<input type="hidden" name="pageNo" id="pageNo" value="${param.pageNo}">
<s:hidden name="status_para"></s:hidden>
<s:hidden name="rolename_para"></s:hidden>
</form>
<script type="text/javascript">
function onclose(order_no) {
$("#order_no").val(order_no);
swal({
title : "是否确认撤销?",
text : "",
type : "warning",
showCancelButton : true,
confirmButtonColor : "#DD6B55",
confirmButtonText : "确认",
closeOnConfirm : false
}, function() {
document.getElementById("onclose").submit();
});
}
</script>
</sec:authorize>
<script type="text/javascript">
function setState(state){
document.getElementById("status_para").value=state;
document.getElementById("queryForm").submit();
}
</script>
</body>
</html>

View File

@@ -0,0 +1,463 @@
<%@ 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/adminContractOrderAction!list.action"
method="post" id="queryForm">
<s:hidden name="status_para"></s:hidden>
<input type="hidden" name="pageNo" id="pageNo"
value="${param.pageNo}">
<div class="col-md-12 col-lg-3">
<s:textfield id="start_time" name="start_time"
cssClass="form-control " placeholder="开始日期" />
</div>
<div class="col-md-12 col-lg-3">
<s:textfield id="end_time" name="end_time"
cssClass="form-control " placeholder="结束日期" />
</div>
<div class="col-md-12 col-lg-4">
<fieldset>
<div class="control-group">
<div class="controls">
<s:select id="rolename_para" cssClass="form-control "
name="rolename_para"
list="#{'MEMBER':'正式账号合约','GUEST':'演示账号合约'}" listKey="key"
listValue="value" headerKey="" headerValue="所有合约"
value="rolename_para" />
</div>
</div>
</fieldset>
</div>
<div class="col-md-12 col-lg-2">
<button type="submit" class="btn btn-light btn-block">查询</button>
</div>
<div class="col-md-12 col-lg-12" style="margin-top: 10px;">
<div class="mailbox clearfix">
<div class="mailbox-menu">
<ul class="menu">
<li><a href="javascript:setState('')"> 全部</a></li>
<li><a href="javascript:setState('submitted')"> 持仓</a></li>
<li><a href="javascript:setState('created')"> 已平仓</a></li>
</ul>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- END queryForm -->
<!-- //////////////////////////////////////////////////////////////////////////// -->
<sec:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ROOT">
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-title">调整</div>
<div class="panel-body">
<div class="col-md-12 col-lg-12">
<div class="mailbox clearfix">
<div class="mailbox-menu">
<ul class="menu">
<s:iterator value="items" status="stat">
<li><a href="#" data-toggle="modal"
data-target="#myModal3"
onclick="showModal('<s:property value="symbol" />','<s:property value="name" />');"
id='<s:property value="symbol" />'> <s:property
value="name" /></a></li>
</s:iterator>
</ul>
</div>
</div>
<div class="modal fade" id="myModal3" tabindex="-1"
role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="item_name">调整</h4>
</div>
<form class="form-horizontal"
action="<%=basePath%>normal/adminContractOrderAction!adjust.action"
method="post" id="mainForm">
<input type="hidden" id="adjust_symbol" name="symbol" />
<s:hidden name="pageNo"></s:hidden>
<s:hidden name="status_para"></s:hidden>
<s:hidden name="start_time"></s:hidden>
<s:hidden name="end_time"></s:hidden>
<s:hidden name="rolename_para"></s:hidden>
<div class="modal-body">
<div class="form-area">
请输入正负调整值 <input type="text" id="adjust" name="value"
class="form-control" placeholder="正负调整值"
onchange="getValue(2);">
<button type="button"
class="btn btn-default btn-icon btn-sm"
style="margin-top: 6px;" id="adjust_add_button"
onclick="getValue(0);"></button>
&nbsp;
<button type="button"
class="btn btn-default btn-icon btn-sm"
style="margin-top: 6px;" id="adjust_sub_button"
onclick="getValue(1);"></button>
<div class="form-area">
生效趋势0秒为即时生效 <input type="text" id="second"
name="second" class="form-control" value="0">
</div>
</div>
<div class="form-area">
调整值
<table class="table table-bordered table-striped">
<thead>
<tr>
<td>原值</td>
<td>调整后</td>
<td>累计修正值</td>
</tr>
</thead>
<tbody>
<tr>
<td id="adjust_value_before"><span
class="label label-danger" id="adjust_value_before"></span></td>
<td><span class="label label-danger"
id="adjust_value_after"></span></td>
<td id="adjust_value"></td>
</tr>
</table>
</div>
<div class="form-area">
生效趋势
<table class="table table-bordered table-striped">
<thead>
<tr>
<td>待生效值</td>
<td>时间(秒)</td>
</tr>
</thead>
<tbody>
<tr>
<td id="adjust_delay"></td>
<td id="adjust_second"></td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white"
data-dismiss="modal">取消</button>
<button type="submit" class="btn btn-danger">确定</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</sec:authorize>
<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>操作</td>
<td>成交均价</td>
<td>止盈止损</td>
<td>剩余/委托金额</td>
<td>剩余/委托保证金</td>
<td>用户钱包余额</td>
<td>盈亏</td>
<td>状态</td>
<td width="130px"></td>
</tr>
</thead>
<tbody>
<s:iterator value="page.elements" status="stat">
<tr>
<td><s:property value="username" /></td>
<td><s:property value="order_no" /></td>
<td><s:property value="itemname" /></td>
<td><s:if test='offset=="open"'>开</s:if><s:if test='offset=="close"'>平</s:if><s:if test='direction=="buy"'>多</s:if><s:if
test='direction=="sell"'>空</s:if></td>
<td><s:property value="trade_avg_price" /></td>
<td><s:property value="stop_price_profit" />/<s:property value="stop_price_loss" /></td>
<td><span class="right label label-success"><fmt:formatNumber value="${volume*unit_amount}" pattern="#0.00" /></span>/<fmt:formatNumber value="${volume_open*unit_amount}" pattern="#0.00" /></td>
<td><span class="right label label-success"><fmt:formatNumber value="${deposit}" pattern="#0.00" /></span>/<fmt:formatNumber value="${deposit_open}" pattern="#0.00" /></td>
<td><fmt:formatNumber value="${money}" pattern="#0.00" /></td>
<td>
<s:if test='state=="submitted"'>
<s:if test="(amount_close+profit+deposit) >=deposit_open">
<span class="right label label-danger"><fmt:formatNumber
value="${amount_close+profit+deposit-deposit_open}" pattern="#0.00" /> </span>
</s:if>
<s:else>
<span class="right label label-success"><fmt:formatNumber
value="${amount_close+profit+deposit-deposit_open}" pattern="#0.00" /> </span>
</s:else>
</s:if>
<s:else>
<s:if test="(amount_close+deposit) >=deposit_open">
<span class="right label label-danger"><fmt:formatNumber
value="${amount_close+deposit-deposit_open}" pattern="#0.00" /> </span>
</s:if>
<s:else>
<span class="right label label-success"><fmt:formatNumber
value="${amount_close+deposit-deposit_open}" pattern="#0.00" /> </span>
</s:else>
</s:else>
</td>
<td><s:if test='state=="submitted"'>
持仓
</s:if> <s:if test='state=="created"'>
<span class="right label label-success">已平仓</span>
</s:if> </td>
<td>
<sec:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ROOT">
<div class="btn-group">
<button type="button" class="btn btn-light">操作</button>
<button type="button" class="btn btn-light dropdown-toggle"
data-toggle="dropdown" aria-expanded="false">
<span class="caret"></span> <span class="sr-only">Toggle
Dropdown</span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a
href="javascript:onclose('<s:property value="order_no" />')">平仓</a></li>
</ul>
</div>
</sec:authorize>
</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">
$.fn.datetimepicker.dates['zh'] = {
days : [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" ],
daysShort : [ "日", "一", "二", "三", "四", "五", "六", "日" ],
daysMin : [ "日", "一", "二", "三", "四", "五", "六", "日" ],
months : [ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月",
"十月", "十一月", "十二月" ],
monthsShort : [ "一", "二", "三", "四", "五", "六", "七", "八", "九", "十",
"十一", "十二" ],
meridiem : [ "上午", "下午" ],
//suffix: ["st", "nd", "rd", "th"],
today : "今天",
clear : "清空"
};
$(function() {
$('#start_time').datetimepicker({
format : 'yyyy-mm-dd',
language : 'zh',
weekStart : 1,
todayBtn : 1,
autoclose : 1,
todayHighlight : 1,
startView : 2,
clearBtn : true,
minView : 2
})
$('#end_time').datetimepicker({
format : 'yyyy-mm-dd',
language : 'zh',
weekStart : 1,
todayBtn : 1,
autoclose : 1,
todayHighlight : 1,
startView : 2,
clearBtn : true,
minView : 2
})
});
</script>
<sec:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ROOT">
<form action="normal/adminContractOrderAction!close.action" method="post"
id="onclose">
<input type="hidden" name="pageNo" id="pageNo" value="${param.pageNo}">
<s:hidden name="order_no" id="order_no"></s:hidden>
<s:hidden name="status_para"></s:hidden>
<s:hidden name="start_time"></s:hidden>
<s:hidden name="end_time"></s:hidden>
<s:hidden name="rolename_para"></s:hidden>
</form>
<script type="text/javascript">
function onclose(order_no) {
$("#order_no").val(order_no);
swal({
title : "是否确认平仓?",
text : "",
type : "warning",
showCancelButton : true,
confirmButtonColor : "#DD6B55",
confirmButtonText : "确认",
closeOnConfirm : false
}, function() {
document.getElementById("onclose").submit();
});
}
</script>
</sec:authorize>
<script type="text/javascript">
function setState(state){
document.getElementById("status_para").value=state;
document.getElementById("queryForm").submit();
}
</script>
<sec:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ROOT">
<script type="text/javascript">
function showModal(symbol,name){
$("#adjust_symbol").val(symbol);
$("#adjust").val(0);
$("#item_name").html("调整"+name);
$.ajax({
type: "get",
url: "<%=basePath%>normal/adminContractOrderAction!showModal.action?random=" + Math.random(),
dataType: "json",
data: {"symbol":symbol},
success: function(data) {
var temp = $.parseJSON(data)
$("#adjust_add_button").html("加" +temp.pips);
$("#adjust_sub_button").html("减" +temp.pips);
$("#adjust_value_before").html(temp.new_price);
$("#adjust_value_after").html(temp.new_price+temp.adjust_value);
$("#adjust_value").html(temp.adjust_value);
$("#adjust_delay").html(temp.delay_value);
$("#adjust_second").html(temp.delay_second);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("请求错误");
}
});
}
function getValue(type){
var value = $("#adjust").val();
var symbol = $("#adjust_symbol").val();
$.ajax({
type: "get",
url: "<%=basePath%>normal/adminContractOrderAction!getValue.action?random="
+ Math.random(),
dataType : "json",
data : {
"symbol" : symbol,
"type" : type,
"value" : value
},
success : function(data) {
var temp = $.parseJSON(data);
$("#adjust").val(temp.adjust_current_value);
$("#adjust_value_before").html(temp.new_price);
$("#adjust_value_after").html(
temp.adjust_value_after);
$("#adjust_value").html(temp.adjust_value);
$("#adjust_delay").html(temp.delay_value);
$("#adjust_second").html(temp.delay_second);
},
error : function(XMLHttpRequest, textStatus,
errorThrown) {
console.log("请求错误");
}
});
}
</script>
</sec:authorize>
</body>
</html>

View File

@@ -0,0 +1,31 @@
<?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="traderFollowUserService"
interface="project.follow.TraderFollowUserService" check="false" />
<dubbo:reference id="traderFollowUserOrderService"
interface="project.follow.TraderFollowUserOrderService" check="false" />
<dubbo:reference id="traderUserService"
interface="project.follow.TraderUserService" check="false" />
</beans>

26
comm/FollowUp/config/api.xml Executable file
View File

@@ -0,0 +1,26 @@
<?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="api" namespace="/api" 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="trader"
class="project.follow.web.TraderAction">
</action>
<action name="traderFollowUser"
class="project.follow.web.TraderFollowUserAction">
</action>
<action name="traderUser"
class="project.follow.web.TraderUserAction">
</action>
</package>
</struts>

View File

@@ -0,0 +1,10 @@
admin
<!-- trader -->
<value>adminTraderService</value>
api
<!-- trader -->
<value>traderService</value>

View File

@@ -0,0 +1,70 @@
<?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 ">
<bean id="traderService"
class="project.follow.internal.TraderServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="pagedQueryDao" ref="pagedDao" />
<property name="contractOrderService" ref="contractOrderService" />
</bean>
<bean id="traderFollowUserService"
class="project.follow.internal.TraderFollowUserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="traderService" ref="traderService" />
<property name="traderUserService" ref="traderUserService" />
<property name="pagedQueryDao" ref="pagedDao" />
</bean>
<bean id="traderFollowUserOrderService"
class="project.follow.internal.TraderFollowUserOrderServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="traderService" ref="traderService" />
<property name="contractApplyOrderService" ref="contractApplyOrderService" />
<property name="traderFollowUserService" ref="traderFollowUserService" />
<property name="contractOrderService" ref="contractOrderService" />
<property name="traderUserService" ref="traderUserService" />
<property name="pagedQueryDao" ref="pagedDao" />
<property name="walletService" ref="walletService" />
<property name="moneyLogService" ref="moneyLogService" />
</bean>
<bean id="traderUserService"
class="project.follow.internal.TraderUserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="partyService" ref="partyService" />
<property name="pagedQueryDao" ref="pagedDao" />
</bean>
<dubbo:service
interface="project.follow.TraderUserService" ref="traderUserService" />
<dubbo:service
interface="project.follow.TraderService" ref="traderService" />
<dubbo:service
interface="project.follow.TraderFollowUserService" ref="traderFollowUserService" />
<dubbo:service
interface="project.follow.TraderFollowUserOrderService" ref="traderFollowUserOrderService" />
</beans>

View File

@@ -0,0 +1,48 @@
<?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 ">
<bean id="adminTraderService"
class="project.follow.internal.AdminTraderServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="pagedQueryDao" ref="pagedDao" />
</bean>
<bean id="adminTraderUserService"
class="project.follow.internal.AdminTraderUserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="pagedQueryDao" ref="pagedDao" />
</bean>
<bean id="adminTraderFollowUserService"
class="project.follow.internal.AdminTraderFollowUserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="pagedQueryDao" ref="pagedDao" />
<property name="traderFollowUserService" ref="traderFollowUserService" />
</bean>
<bean id="adminTraderFollowUserOrderService"
class="project.follow.internal.AdminTraderFollowUserOrderServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="pagedQueryDao" ref="pagedDao" />
</bean>
</beans>

View File

@@ -0,0 +1,56 @@
<?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 ">
<bean id="traderService"
class="project.follow.internal.TraderServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="pagedQueryDao" ref="pagedDao" />
<property name="contractOrderService" ref="contractOrderService" />
</bean>
<bean id="traderFollowUserService"
class="project.follow.internal.TraderFollowUserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="traderService" ref="traderService" />
<property name="traderUserService" ref="traderUserService" />
<property name="pagedQueryDao" ref="pagedDao" />
</bean>
<bean id="traderFollowUserOrderService"
class="project.follow.internal.TraderFollowUserOrderServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="traderService" ref="traderService" />
<property name="contractApplyOrderService" ref="contractApplyOrderService" />
<property name="traderFollowUserService" ref="traderFollowUserService" />
<property name="contractOrderService" ref="contractOrderService" />
<property name="traderUserService" ref="traderUserService" />
<property name="pagedQueryDao" ref="pagedDao" />
<property name="walletService" ref="walletService" />
<property name="moneyLogService" ref="moneyLogService" />
</bean>
<bean id="traderUserService"
class="project.follow.internal.TraderUserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="partyService" ref="partyService" />
<property name="pagedQueryDao" ref="pagedDao" />
</bean>
</beans>

25
comm/FollowUp/config/normal.xml Executable file
View File

@@ -0,0 +1,25 @@
<action name="adminTraderAction"
class="project.follow.web.AdminTraderAction">
<result name="list">/trader_list.jsp</result>
<result name="add">/trader_add.jsp</result>
<result name="update">/trader_update.jsp</result>
</action>
<action name="adminTraderFollowUserAction"
class="project.follow.web.AdminTraderFollowUserAction">
<result name="list">/trader_follow_user_list.jsp</result>
<result name="add">/trader_follow_user_add.jsp</result>
<result name="update">/trader_follow_user_update.jsp</result>
</action>
<action name="adminTraderFollowUserOrderAction"
class="project.follow.web.AdminTraderFollowUserOrderAction">
<result name="list">/trader_follow_user_order_list.jsp</result>
</action>
<action name="adminTraderUserAction"
class="project.follow.web.AdminTraderUserAction">
<result name="list">/trader_user_list.jsp</result>
<result name="add">/trader_user_add.jsp</result>
<result name="update">/trader_user_update.jsp</result>
</action>

View File

@@ -0,0 +1,229 @@
DROP TABLE IF EXISTS `T_TRADER`;
CREATE TABLE `T_TRADER` (
`UUID` varchar(32) NOT NULL COMMENT '主键',
`PARTY_ID` varchar(32) ,
`NAME` varchar(32) ,
`REMARKS` varchar(1024) DEFAULT NULL,
`SYMBOLS` varchar(64) COMMENT '代码',
`PROFIT` double ,
`PROFIT_RATIO` double ,
`ORDER_PROFIT` int ,
`ORDER_LOSS` int ,
`ORDER_SUM` int ,
`FOLLOWER_SUM` int ,
`PROFIT_SHARE_RATIO` double ,
`FOLLOWER_NOW` int ,
`FOLLOWER_MAX` int ,
`STATE` varchar(32) ,
`CREATE_TIME` datetime ,
`IMG` varchar(64),
PRIMARY KEY (`UUID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create index INDEX_TRADER_PARTY_ID_STATE on T_TRADER (
`PARTY_ID`,`STATE`
);
create index INDEX_TRADER_NAME on T_TRADER (
`NAME`
);
create index INDEX_TRADER_STATE on T_TRADER (
`STATE`
);
create index INDEX_TRADER_PROFIT_STATE on T_TRADER (
`PROFIT`,`STATE`
);
create index INDEX_TRADER_PROFIT_RATIO_STATE on T_TRADER (
`PROFIT_RATIO`,`STATE`
);
DROP TABLE IF EXISTS `T_TRADER_FOLLOW_USER`;
CREATE TABLE `T_TRADER_FOLLOW_USER` (
`UUID` varchar(32) NOT NULL COMMENT '主键',
`PARTY_ID` varchar(32) DEFAULT NULL,
`TRADER_PARTY_ID` varchar(32) DEFAULT NULL,
`SYMBOL` varchar(64) DEFAULT NULL,
`FOLLOW_TYPE` varchar(32) DEFAULT NULL,
`VOLUME` double DEFAULT '0',
`VOLUME_MAX` double DEFAULT '0',
`STOP_PFOFIT` double DEFAULT '0',
`STOP_LOSS` double DEFAULT '0',
`STATE` varchar(2) DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
PRIMARY KEY (`UUID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create index INDEX_PARTY_ID_TRADER_PARTY_ID_STATE on T_TRADER_FOLLOW_USER (
`PARTY_ID`,`TRADER_PARTY_ID`,`STATE`
);
create index INDEX_PARTY_ID_TRADER_PARTY_ID on T_TRADER_FOLLOW_USER (
`PARTY_ID`,`TRADER_PARTY_ID`
);
create index INDEX_PARTY_ID on T_TRADER_FOLLOW_USER (
`PARTY_ID`
);
create index INDEX_TRADER_PARTY_ID on T_TRADER_FOLLOW_USER (
`TRADER_PARTY_ID`
);
DROP TABLE IF EXISTS `T_TRADER_FOLLOW_USER_ORDER`;
CREATE TABLE `T_TRADER_FOLLOW_USER_ORDER` (
`UUID` varchar(32) NOT NULL COMMENT '主键',
`PARTY_ID` varchar(32) DEFAULT NULL,
`TRADER_PARTY_ID` varchar(32) DEFAULT NULL,
`USER_ORDER_NO` varchar(64) DEFAULT NULL,
`TRADER_ORDER_NO` varchar(64) DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
PRIMARY KEY (`UUID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create index INDEX_PARTY_ID_TRADER_PARTY_ID on T_TRADER_FOLLOW_USER_ORDER (
`PARTY_ID`,`TRADER_PARTY_ID`
);
create index INDEX_PARTY_ID on T_TRADER_FOLLOW_USER_ORDER (
`PARTY_ID`
);
create index INDEX_TRADER_PARTY_ID on T_TRADER_FOLLOW_USER_ORDER (
`TRADER_PARTY_ID`
);
ALTER TABLE `T_TRADER`
ADD COLUMN `WEEK_3_PROFIT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `WEEK_3_ORDER_AMOUNT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `WEEK_3_PROFIT_RATIO` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `ORDER_AMOUNT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `WEEK_3_ORDER_SUM` int NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `WEEK_3_ORDER_PROFIT` int NULL DEFAULT 0;
ALTER TABLE `T_TRADER_FOLLOW_USER`
ADD COLUMN `USERNAME` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `PARTY_ID`;
ALTER TABLE `T_TRADER_FOLLOW_USER_ORDER`
ADD COLUMN `VOLUME` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER_FOLLOW_USER_ORDER`
ADD COLUMN `STATE` varchar(32) NULL DEFAULT NULL;
ALTER TABLE `T_TRADER_FOLLOW_USER_ORDER`
MODIFY COLUMN `USER_ORDER_NO` varchar(64) NULL DEFAULT NULL;
ALTER TABLE `T_TRADER_FOLLOW_USER_ORDER`
MODIFY COLUMN `TRADER_ORDER_NO` varchar(64) NULL DEFAULT NULL;
DROP TABLE IF EXISTS `T_TRADER_USER`;
CREATE TABLE `T_TRADER_USER` (
`UUID` varchar(32) NOT NULL COMMENT '主键',
`PARTY_ID` varchar(32) ,
`NAME` varchar(32) ,
`PROFIT` double ,
`AMOUNT_SUM` double ,
`CREATE_TIME` datetime DEFAULT NULL,
PRIMARY KEY (`UUID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create index INDEX_PARTY_ID on T_TRADER_USER (
`PARTY_ID`
);
create index INDEX_NAME on T_TRADER_USER (
`NAME`
);
ALTER TABLE `T_TRADER_FOLLOW_USER`
ADD COLUMN `PROFIT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER_FOLLOW_USER`
ADD COLUMN `AMOUNT_SUM` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_PROFIT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_ORDER_AMOUNT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_PROFIT_RATIO` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_ORDER_PROFIT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_ORDER_LOSS` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_ORDER_SUM` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_FOLLOWER_SUM` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_FOLLOWER_NOW` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_WEEK_3_PROFIT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_WEEK_3_ORDER_AMOUNT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_WEEK_3_PROFIT_RATIO` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_WEEK_3_ORDER_PROFIT` double NULL DEFAULT 0;
ALTER TABLE `T_TRADER`
ADD COLUMN `DEVIATION_WEEK_3_ORDER_SUM` double NULL DEFAULT 0;

View File

@@ -0,0 +1,15 @@
package project.follow;
import kernel.web.Page;
public interface AdminTraderFollowUserOrderService {
/**
* 分页查询 name_para交易员名称 username 用户名
*
*/
public Page pagedQuery(int pageNo, int pageSize, String trader_name_para,
String username,String rolename);
}

View File

@@ -0,0 +1,21 @@
package project.follow;
import kernel.web.Page;
public interface AdminTraderFollowUserService {
/**
* 分页查询 name_para交易员名称 username 用户名
*
*/
public Page pagedQuery(int pageNo, int pageSize, String name_para, String username);
public void delete(String id);
public void update(TraderFollowUser entity);
public void save(TraderFollowUser entity, String trader_id);
public TraderFollowUser findById(String id);
}

View File

@@ -0,0 +1,23 @@
package project.follow;
import kernel.web.Page;
public interface AdminTraderOrderService {
/**
* 分页查询 name_para交易员名称 username 用户名
*
*/
public Page pagedQuery(int pageNo, int pageSize, String trader_name_para,
String username,String rolename);
public void delete(String id);
public void update(TraderOrder entity);
public void save(TraderOrder entity);
public TraderOrder findById(String id);
}

View File

@@ -0,0 +1,20 @@
package project.follow;
import kernel.web.Page;
public interface AdminTraderService {
/**
* 分页查询
*/
public Page pagedQuery(int pageNo, int pageSize, String name_para,String username);
public void save(Trader entity);
public void delete(String id);
public void update(Trader entity);
public Trader findByPartyId(String partyId);
public Trader findById(String id);
}

View File

@@ -0,0 +1,28 @@
package project.follow;
import java.util.List;
import kernel.web.Page;
/**
* 用户跟随交易员记录
*/
public interface AdminTraderUserService {
/**
* 分页查询
*/
public Page pagedQuery(int pageNo, int pageSize, String name_para, String username);
public void save(TraderUser entity);
public void delete(String id);
public void update(TraderUser entity);
public List<TraderUser> findByPartyId(String partyId);
public List<TraderUser> findByTraderPartyId(String traderPartyId);
public TraderUser findById(String id);
}

View File

@@ -0,0 +1,139 @@
<?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.follow.Trader" table="T_TRADER">
<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="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="remarks" type="java.lang.String">
<column name="REMARKS" />
</property>
<property name="symbols" type="java.lang.String">
<column name="SYMBOLS" />
</property>
<property name="state" type="java.lang.String">
<column name="STATE" />
</property>
<property name="follower_max" type="int">
<column name="FOLLOWER_MAX" />
</property>
<property name="img" type="java.lang.String">
<column name="IMG" />
</property>
<property name="create_time" type="timestamp">
<column name="CREATE_TIME" />
</property>
<property name="profit" type="double">
<column name="PROFIT" />
</property>
<property name="order_amount" type="double">
<column name="ORDER_AMOUNT" />
</property>
<property name="profit_ratio" type="double">
<column name="PROFIT_RATIO" />
</property>
<property name="order_profit" type="int">
<column name="ORDER_PROFIT" />
</property>
<property name="order_loss" type="int">
<column name="ORDER_LOSS" />
</property>
<property name="order_sum" type="int">
<column name="ORDER_SUM" />
</property>
<property name="follower_sum" type="int">
<column name="FOLLOWER_SUM" />
</property>
<property name="profit_share_ratio" type="double">
<column name="PROFIT_SHARE_RATIO" />
</property>
<property name="follower_now" type="int">
<column name="FOLLOWER_NOW" />
</property>
<property name="week_3_profit" type="double">
<column name="WEEK_3_PROFIT" />
</property>
<property name="week_3_order_amount" type="double">
<column name="WEEK_3_ORDER_AMOUNT" />
</property>
<property name="week_3_profit_ratio" type="double">
<column name="WEEK_3_PROFIT_RATIO" />
</property>
<property name="week_3_order_profit" type="int">
<column name="WEEK_3_ORDER_PROFIT" />
</property>
<property name="week_3_order_sum" type="int">
<column name="WEEK_3_ORDER_SUM" />
</property>
<property name="deviation_profit" type="double">
<column name="DEVIATION_PROFIT" />
</property>
<property name="deviation_order_amount" type="double">
<column name="DEVIATION_ORDER_AMOUNT" />
</property>
<property name="deviation_profit_ratio" type="double">
<column name="DEVIATION_PROFIT_RATIO" />
</property>
<property name="deviation_order_profit" type="int">
<column name="DEVIATION_ORDER_PROFIT" />
</property>
<property name="deviation_order_loss" type="int">
<column name="DEVIATION_ORDER_LOSS" />
</property>
<property name="deviation_order_sum" type="int">
<column name="DEVIATION_ORDER_SUM" />
</property>
<property name="deviation_follower_sum" type="int">
<column name="DEVIATION_FOLLOWER_SUM" />
</property>
<property name="deviation_follower_now" type="int">
<column name="DEVIATION_FOLLOWER_NOW" />
</property>
<property name="deviation_week_3_profit" type="double">
<column name="DEVIATION_WEEK_3_PROFIT" />
</property>
<property name="deviation_week_3_order_amount" type="double">
<column name="DEVIATION_WEEK_3_ORDER_AMOUNT" />
</property>
<property name="deviation_week_3_profit_ratio" type="double">
<column name="DEVIATION_WEEK_3_PROFIT_RATIO" />
</property>
<property name="deviation_week_3_order_profit" type="int">
<column name="DEVIATION_WEEK_3_ORDER_PROFIT" />
</property>
<property name="deviation_week_3_order_sum" type="int">
<column name="DEVIATION_WEEK_3_ORDER_SUM" />
</property>
<property name="follow_volumn_min" type="int">
<column name="FOLLOW_VOLUMN_MIN" />
</property>
</class>
</hibernate-mapping>

View File

@@ -0,0 +1,467 @@
package project.follow;
import java.io.Serializable;
import java.util.Date;
import kernel.bo.EntityObject;
/**
* 交易员
*/
public class Trader extends EntityObject {
private static final long serialVersionUID = -1617033543659508052L;
private Serializable partyId;
/**
* 交易员名称
*/
private String name;
/**
* 交易员简介
*/
private String remarks;
/**
* 带单币种(多品种的话用;隔开)
*/
private String symbols;
/**
* 利润分成比例---PROFIT_SHARE_RATIO
*/
private double profit_share_ratio;
/**
* 状态(是否开启跟单)---STATE,0为未开启1为开启
*/
private String state;
/**
* 此次跟单最多跟随人数---FOLLOWER_MAX
*/
private int follower_max;
/**
* 入驻时间----CREATE_TIME
*/
private Date create_time;
/**
* 头像图片---IMG
*/
private String img;
/**
* 近3周
*/
/**
* 近3周收益
*/
private double week_3_profit;
/**
* 近3周累计金额
*/
private double week_3_order_amount;
/**
* 近3周收益率
*/
private double week_3_profit_ratio;
/**
* 近3周盈利笔数
*/
private int week_3_order_profit;
/**
* 近3周交易笔数
*/
private int week_3_order_sum;
/**
* 累计金额
*/
private double order_amount;
/**
* 累计收益
*/
private double profit;
/**
* 累计收益率
*/
private double profit_ratio;
/**
* 累计盈利笔数
*/
private int order_profit;
/**
* 累计亏损笔数
*/
private int order_loss;
/**
* 累计交易笔数
*/
private int order_sum;
/**
* 累计跟随人数
*/
private int follower_sum;
/**
* 当前跟随人数---FOLLOWER_NOW
*/
private int follower_now;
/**
* 近3周收益--------------------偏差值
*/
private double deviation_week_3_profit;
/**
* 近3周累计金额-偏差值
*/
private double deviation_week_3_order_amount;
/**
* 近3周收益率-偏差值
*/
private double deviation_week_3_profit_ratio;
/**
* 近3周盈利笔数-偏差值
*/
private Integer deviation_week_3_order_profit;
/**
* 近3周交易笔数-偏差值
*/
private Integer deviation_week_3_order_sum;
/**
* 累计金额-偏差值
*/
private double deviation_order_amount;
/**
* 累计收益-偏差值
*/
private double deviation_profit;
/**
* 累计收益率-偏差值
*/
private double deviation_profit_ratio;
/**
* 累计盈利笔数-偏差值
*/
private int deviation_order_profit;
/**
* 累计亏损笔数-偏差值
*/
private int deviation_order_loss;
/**
* 累计交易笔数-偏差值
*/
private int deviation_order_sum;
/**
* 累计跟随人数-偏差值
*/
private int deviation_follower_sum;
/**
* 当前跟随人数-偏差值---DEVIATION_FOLLOWER_NOW
*/
private int deviation_follower_now;
/**
* 跟单最小下单数
*/
private int follow_volumn_min;
public Serializable getPartyId() {
return partyId;
}
public String getName() {
return name;
}
public String getRemarks() {
return remarks;
}
public String getSymbols() {
return symbols;
}
public double getProfit_share_ratio() {
return profit_share_ratio;
}
public String getState() {
return state;
}
public int getFollower_max() {
return follower_max;
}
public Date getCreate_time() {
return create_time;
}
public String getImg() {
return img;
}
public double getWeek_3_profit() {
return week_3_profit;
}
public double getWeek_3_order_amount() {
return week_3_order_amount;
}
public double getWeek_3_profit_ratio() {
return week_3_profit_ratio;
}
public int getWeek_3_order_profit() {
return week_3_order_profit;
}
public int getWeek_3_order_sum() {
return week_3_order_sum;
}
public double getOrder_amount() {
return order_amount;
}
public double getProfit() {
return profit;
}
public double getProfit_ratio() {
return profit_ratio;
}
public int getOrder_profit() {
return order_profit;
}
public int getOrder_loss() {
return order_loss;
}
public int getOrder_sum() {
return order_sum;
}
public int getFollower_sum() {
return follower_sum;
}
public int getFollower_now() {
return follower_now;
}
public double getDeviation_week_3_profit() {
return deviation_week_3_profit;
}
public double getDeviation_week_3_order_amount() {
return deviation_week_3_order_amount;
}
public double getDeviation_week_3_profit_ratio() {
return deviation_week_3_profit_ratio;
}
public Integer getDeviation_week_3_order_profit() {
return deviation_week_3_order_profit;
}
public Integer getDeviation_week_3_order_sum() {
return deviation_week_3_order_sum;
}
public double getDeviation_order_amount() {
return deviation_order_amount;
}
public double getDeviation_profit() {
return deviation_profit;
}
public double getDeviation_profit_ratio() {
return deviation_profit_ratio;
}
public int getDeviation_order_profit() {
return deviation_order_profit;
}
public int getDeviation_order_loss() {
return deviation_order_loss;
}
public int getDeviation_order_sum() {
return deviation_order_sum;
}
public int getDeviation_follower_sum() {
return deviation_follower_sum;
}
public int getDeviation_follower_now() {
return deviation_follower_now;
}
public void setPartyId(Serializable partyId) {
this.partyId = partyId;
}
public void setName(String name) {
this.name = name;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public void setSymbols(String symbols) {
this.symbols = symbols;
}
public void setProfit_share_ratio(double profit_share_ratio) {
this.profit_share_ratio = profit_share_ratio;
}
public void setState(String state) {
this.state = state;
}
public void setFollower_max(int follower_max) {
this.follower_max = follower_max;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public void setImg(String img) {
this.img = img;
}
public void setWeek_3_profit(double week_3_profit) {
this.week_3_profit = week_3_profit;
}
public void setWeek_3_order_amount(double week_3_order_amount) {
this.week_3_order_amount = week_3_order_amount;
}
public void setWeek_3_profit_ratio(double week_3_profit_ratio) {
this.week_3_profit_ratio = week_3_profit_ratio;
}
public void setWeek_3_order_profit(int week_3_order_profit) {
this.week_3_order_profit = week_3_order_profit;
}
public void setWeek_3_order_sum(int week_3_order_sum) {
this.week_3_order_sum = week_3_order_sum;
}
public void setOrder_amount(double order_amount) {
this.order_amount = order_amount;
}
public void setProfit(double profit) {
this.profit = profit;
}
public void setProfit_ratio(double profit_ratio) {
this.profit_ratio = profit_ratio;
}
public void setOrder_profit(int order_profit) {
this.order_profit = order_profit;
}
public void setOrder_loss(int order_loss) {
this.order_loss = order_loss;
}
public void setOrder_sum(int order_sum) {
this.order_sum = order_sum;
}
public void setFollower_sum(int follower_sum) {
this.follower_sum = follower_sum;
}
public void setFollower_now(int follower_now) {
this.follower_now = follower_now;
}
public void setDeviation_week_3_profit(double deviation_week_3_profit) {
this.deviation_week_3_profit = deviation_week_3_profit;
}
public void setDeviation_week_3_order_amount(double deviation_week_3_order_amount) {
this.deviation_week_3_order_amount = deviation_week_3_order_amount;
}
public void setDeviation_week_3_profit_ratio(double deviation_week_3_profit_ratio) {
this.deviation_week_3_profit_ratio = deviation_week_3_profit_ratio;
}
public void setDeviation_week_3_order_profit(Integer deviation_week_3_order_profit) {
this.deviation_week_3_order_profit = deviation_week_3_order_profit;
}
public void setDeviation_week_3_order_sum(Integer deviation_week_3_order_sum) {
this.deviation_week_3_order_sum = deviation_week_3_order_sum;
}
public void setDeviation_order_amount(double deviation_order_amount) {
this.deviation_order_amount = deviation_order_amount;
}
public void setDeviation_profit(double deviation_profit) {
this.deviation_profit = deviation_profit;
}
public void setDeviation_profit_ratio(double deviation_profit_ratio) {
this.deviation_profit_ratio = deviation_profit_ratio;
}
public void setDeviation_order_profit(int deviation_order_profit) {
this.deviation_order_profit = deviation_order_profit;
}
public void setDeviation_order_loss(int deviation_order_loss) {
this.deviation_order_loss = deviation_order_loss;
}
public void setDeviation_order_sum(int deviation_order_sum) {
this.deviation_order_sum = deviation_order_sum;
}
public void setDeviation_follower_sum(int deviation_follower_sum) {
this.deviation_follower_sum = deviation_follower_sum;
}
public void setDeviation_follower_now(int deviation_follower_now) {
this.deviation_follower_now = deviation_follower_now;
}
public int getFollow_volumn_min() {
return follow_volumn_min;
}
public void setFollow_volumn_min(int follow_volumn_min) {
this.follow_volumn_min = follow_volumn_min;
}
}

View File

@@ -0,0 +1,55 @@
<?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.follow.TraderFollowUser" table="T_TRADER_FOLLOW_USER">
<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="trader_partyId" type="java.lang.String">
<column name="TRADER_PARTY_ID" />
</property>
<property name="symbol" type="java.lang.String">
<column name="SYMBOL" />
</property>
<property name="follow_type" type="java.lang.String">
<column name="FOLLOW_TYPE" />
</property>
<property name="username" type="java.lang.String">
<column name="USERNAME" />
</property>
<property name="volume" type="double">
<column name="VOLUME" />
</property>
<property name="volume_max" type="double">
<column name="VOLUME_MAX" />
</property>
<property name="profit" type="double">
<column name="PROFIT" />
</property>
<property name="amount_sum" type="double">
<column name="AMOUNT_SUM" />
</property>
<property name="stop_profit" type="double">
<column name="STOP_PFOFIT" />
</property>
<property name="stop_loss" type="double">
<column name="STOP_LOSS" />
</property>
<property name="state" type="java.lang.String">
<column name="STATE" />
</property>
<property name="create_time" type="timestamp">
<column name="CREATE_TIME" />
</property>
</class>
</hibernate-mapping>

View File

@@ -0,0 +1,177 @@
package project.follow;
import java.io.Serializable;
import java.util.Date;
import kernel.bo.EntityObject;
/**
* 用户跟随交易员详情表
*/
public class TraderFollowUser extends EntityObject {
private static final long serialVersionUID = -1617033543659508052L;
private Serializable partyId;
/**
* 用户名
*/
private String username;
/**
* 交易员partyId TRADER_PARTYID
*/
private Serializable trader_partyId;
/**
* 跟随购买品种 symbol
*/
private String symbol;
/**
* 跟单固定张数/固定比例---选择 1,固定张数2固定比例
*/
private String follow_type;
/**
* 状态 是否还在跟随状态 1,跟随2取消跟随
*/
private String state;
/**
* 跟单张数或比例---具体值
*/
private double volume;
/**
* 最大持仓张数
*/
private double volume_max;
/**
* 累计跟单收益 PROFIT
*/
private double profit;
/**
* 累计跟单本金 AMOUNT_SUM
*/
private double amount_sum;
/**
* 止盈百分比
*/
private double stop_profit;
/**
* 止损百分比
*/
private double stop_loss;
/**
* 跟随时间----CREATE_TIME
*/
private Date create_time;
public Serializable getPartyId() {
return partyId;
}
public void setPartyId(Serializable partyId) {
this.partyId = partyId;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public Serializable getTrader_partyId() {
return trader_partyId;
}
public void setTrader_partyId(Serializable trader_partyId) {
this.trader_partyId = trader_partyId;
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public double getVolume() {
return volume;
}
public void setVolume(double volume) {
this.volume = volume;
}
public double getVolume_max() {
return volume_max;
}
public void setVolume_max(double volume_max) {
this.volume_max = volume_max;
}
public double getStop_profit() {
return stop_profit;
}
public void setStop_profit(double stop_profit) {
this.stop_profit = stop_profit;
}
public double getStop_loss() {
return stop_loss;
}
public void setStop_loss(double stop_loss) {
this.stop_loss = stop_loss;
}
public String getFollow_type() {
return follow_type;
}
public void setFollow_type(String follow_type) {
this.follow_type = follow_type;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public double getProfit() {
return profit;
}
public double getAmount_sum() {
return amount_sum;
}
public void setProfit(double profit) {
this.profit = profit;
}
public void setAmount_sum(double amount_sum) {
this.amount_sum = amount_sum;
}
}

View File

@@ -0,0 +1,35 @@
<?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.follow.TraderFollowUserOrder" table="T_TRADER_FOLLOW_USER_ORDER">
<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="trader_partyId" type="java.lang.String">
<column name="TRADER_PARTY_ID" />
</property>
<property name="user_order_no" type="java.lang.String">
<column name="USER_ORDER_NO" />
</property>
<property name="state" type="java.lang.String">
<column name="STATE" />
</property>
<property name="volume" type="double">
<column name="VOLUME" />
</property>
<property name="trader_order_no" type="java.lang.String">
<column name="TRADER_ORDER_NO" />
</property>
<property name="create_time" type="timestamp">
<column name="CREATE_TIME" />
</property>
</class>
</hibernate-mapping>

View File

@@ -0,0 +1,105 @@
package project.follow;
import java.io.Serializable;
import java.util.Date;
import kernel.bo.EntityObject;
/**
* 用户跟随交易员详情表
*/
public class TraderFollowUserOrder extends EntityObject {
private static final long serialVersionUID = -1617033543659508052L;
private Serializable partyId;
/**
* 交易员partyId TRADER_PARTYID
*/
private Serializable trader_partyId;
/**
* 用户合约持仓单号订单号 USER_ORDER_NO
*/
private String user_order_no;
/**
* 当前订单张数
*/
private double volume;
/**
* 跟随的交易员合约持仓单号 TRADER_ORDER_NO
*/
private String trader_order_no;
/**
* 状态。submitted 已提交持仓canceled 已撤销, created 完成(平仓)
*/
private String state = "submitted";
/**
* 下单时间----CREATE_TIME
*/
private Date create_time;
public Serializable getPartyId() {
return partyId;
}
public void setPartyId(Serializable partyId) {
this.partyId = partyId;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public Serializable getTrader_partyId() {
return trader_partyId;
}
public void setTrader_partyId(Serializable trader_partyId) {
this.trader_partyId = trader_partyId;
}
public String getUser_order_no() {
return user_order_no;
}
public void setUser_order_no(String user_order_no) {
this.user_order_no = user_order_no;
}
public String getTrader_order_no() {
return trader_order_no;
}
public void setTrader_order_no(String trader_order_no) {
this.trader_order_no = trader_order_no;
}
public double getVolume() {
return volume;
}
public void setVolume(double volume) {
this.volume = volume;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}

View File

@@ -0,0 +1,39 @@
package project.follow;
import java.util.List;
import java.util.Map;
import project.contract.ContractOrder;
/**
* 用户跟随交易员详情
*/
public interface TraderFollowUserOrderService {
/**
*交易员进入市场后的持仓单
*/
public void traderOpen(ContractOrder order);
/**
* 平仓,按订单进行平仓
*/
public void traderClose(ContractOrder order);
/**
* @param partyId 用户partyId
* @param apply_oder_no 委托单订单号
*/
public TraderFollowUserOrder findByPartyIdAndOrderNo(String partyId, String apply_oder_no);
public void update(TraderFollowUserOrder entity);
/**
* APP查询订单列表
*
* @return
*/
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String partyId);
}

View File

@@ -0,0 +1,53 @@
package project.follow;
import java.util.List;
import java.util.Map;
/**
* 用户跟随交易员详情
*/
public interface TraderFollowUserService {
/**
* APP查询交易员列表
*
* @param pageNo
* @param pageSize partyId profit_or_loss
*/
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String partyId, String profit_or_loss);
/**
*
* @param entity
* @param trader_name 交易员id
*/
public void save(TraderFollowUser entity, String trader_id);
/**
* 后台修改跟随参数
*
* @param entity
*/
public void update(TraderFollowUser entity);
/**
* 取消跟随
*/
public void deleteCancel(String id);
/**
* 查询跟随交易员的用户
*/
public List<TraderFollowUser> findByTrader_partyId(String trader_partyId);
/**
* 查询跟随交易员的某个用户
*/
public TraderFollowUser findByPartyIdAndTrader_partyId(String partyId, String trader_partyId);
/**
* 查询用户跟随的所有交易员信息
*/
public List<TraderFollowUser> findByPartyId(String partyId);
}

View File

@@ -0,0 +1,52 @@
<?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.follow.TraderOrder" table="T_TRADER_ORDER">
<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="order_no" type="java.lang.String">
<column name="ORDER_NO" />
</property>
<property name="symbol" type="java.lang.String">
<column name="SYMBOL" />
</property>
<property name="direction" type="java.lang.String">
<column name="DIRECTION" />
</property>
<property name="create_time" type="timestamp">
<column name="CREATE_TIME" />
</property>
<property name="close_time" type="timestamp">
<column name="CLOSE_TIME" />
</property>
<property name="lever_rate" type="double">
<column name="LEVER_RATE" />
</property>
<property name="state" type="java.lang.String">
<column name="STATE" />
</property>
<property name="volume_open" type="double">
<column name="VOLUME_OPEN" />
</property>
<property name="profit" type="double">
<column name="PROFIT" />
</property>
<property name="change_ratio" type="double">
<column name="CHANGE_RATIO" />
</property>
<property name="trade_avg_price" type="double">
<column name="TRADE_AVG_PRICE" />
</property>
<property name="close_avg_price" type="double">
<column name="CLOSE_AVG_PRICE" />
</property>
</class>
</hibernate-mapping>

View File

@@ -0,0 +1,156 @@
package project.follow;
import java.io.Serializable;
import java.util.Date;
import kernel.bo.EntityObject;
/**
* 交易员历史订单(保护虚假订单)
*/
public class TraderOrder extends EntityObject {
/**
*
*/
private static final long serialVersionUID = -7332111188993920706L;
private Serializable partyId;
/**
* 品种
*/
private String symbol;
/**
* 订单 号
*/
private String order_no;
/**
* "buy":买(多) "sell":卖(空)
*/
private String direction;
/**
* 收益
*/
private double profit;
private Date create_time;
/**
* 平仓时间
*/
private Date close_time;
/**
* 杠杆倍数[“开仓”若有10倍多单就不能再下20倍多单]
*/
private Double lever_rate;
/**
* 委托数量(张)
*/
private Double volume_open;
/**
* 涨跌幅
*/
private double change_ratio;
/**
* 状态。submitted 已提交(持仓), created 完成(平仓)
*/
private String state = "created";
/**
* 成交均价(成本)
*/
private Double trade_avg_price;
/**
* 平仓均价
*/
private Double close_avg_price;
public Serializable getPartyId() {
return partyId;
}
public String getSymbol() {
return symbol;
}
public String getOrder_no() {
return order_no;
}
public String getDirection() {
return direction;
}
public double getProfit() {
return profit;
}
public Date getCreate_time() {
return create_time;
}
public Date getClose_time() {
return close_time;
}
public Double getLever_rate() {
return lever_rate;
}
public Double getVolume_open() {
return volume_open;
}
public double getChange_ratio() {
return change_ratio;
}
public void setPartyId(Serializable partyId) {
this.partyId = partyId;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public void setOrder_no(String order_no) {
this.order_no = order_no;
}
public void setDirection(String direction) {
this.direction = direction;
}
public void setProfit(double profit) {
this.profit = profit;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public void setClose_time(Date close_time) {
this.close_time = close_time;
}
public void setLever_rate(Double lever_rate) {
this.lever_rate = lever_rate;
}
public void setVolume_open(Double volume_open) {
this.volume_open = volume_open;
}
public void setChange_ratio(double change_ratio) {
this.change_ratio = change_ratio;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Double getTrade_avg_price() {
return trade_avg_price;
}
public Double getClose_avg_price() {
return close_avg_price;
}
public void setTrade_avg_price(Double trade_avg_price) {
this.trade_avg_price = trade_avg_price;
}
public void setClose_avg_price(Double close_avg_price) {
this.close_avg_price = close_avg_price;
}
}

View File

@@ -0,0 +1,28 @@
package project.follow;
import java.util.List;
import java.util.Map;
/**
* 交易员历史订单查询
*/
public interface TraderOrderService {
/**
* APP查询订单列表
*
* @return
*/
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String partyId);
public void delete(String id);
public void update(TraderOrder entity);
public void save(TraderOrder entity);
public TraderOrder findById(String id);
}

View File

@@ -0,0 +1,35 @@
package project.follow;
import java.util.List;
import java.util.Map;
/**
* 交易员
*
*/
public interface TraderService {
public Trader findById(String id);
public Trader findByPartyId(String partyId);
public void update(Trader entity);
/**
* 每次下单和平仓计算一次交易员自身的数据
*/
public void updateTrader(Trader entity);
/**
* APP查询交易员列表
*
* @param pageNo
* @param pageSize
* @param name
* @param state 状态
* orderBy_type 按什么排序
*/
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String name, String state,String orderBy_type);
}

View 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.follow.TraderUser" table="T_TRADER_USER">
<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="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="profit" type="double">
<column name="PROFIT" />
</property>
<property name="amount_sum" type="double">
<column name="AMOUNT_SUM" />
</property>
<property name="create_time" type="timestamp">
<column name="CREATE_TIME" />
</property>
</class>
</hibernate-mapping>

View File

@@ -0,0 +1,80 @@
package project.follow;
import java.io.Serializable;
import java.util.Date;
import kernel.bo.EntityObject;
/**
* 用户跟随交易员累计收益表
*/
public class TraderUser extends EntityObject {
private static final long serialVersionUID = -1617033543659508052L;
private Serializable partyId;
/**
* 用户账号 邮箱号或手机号
*/
private String name;
/**
* 累计跟单收益 PROFIT
*/
private double profit;
/**
* 累计跟单本金 AMOUNT_SUM
*/
private double amount_sum;
/**
* 入驻时间----CREATE_TIME
*/
private Date create_time;
public Serializable getPartyId() {
return partyId;
}
public void setPartyId(Serializable partyId) {
this.partyId = partyId;
}
public double getProfit() {
return profit;
}
public void setProfit(double profit) {
this.profit = profit;
}
public double getAmount_sum() {
return amount_sum;
}
public void setAmount_sum(double amount_sum) {
this.amount_sum = amount_sum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
}

View File

@@ -0,0 +1,27 @@
package project.follow;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 用户跟随交易员累计表
*
*/
public interface TraderUserService {
/**
* APP查询用户列表
*/
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String partyId, String type);
/**
* 查找若无则保存用户累计表并返回
*/
public TraderUser saveTraderUserByPartyId(Serializable partyId);
public void save(TraderUser traderUser);
public void update(TraderUser traderUser);
}

View File

@@ -0,0 +1,54 @@
package project.follow.internal;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.follow.AdminTraderFollowUserOrderService;
public class AdminTraderFollowUserOrderServiceImpl extends HibernateDaoSupport
implements AdminTraderFollowUserOrderService {
private PagedQueryDao pagedQueryDao;
public Page pagedQuery(int pageNo, int pageSize, String name, String username, String rolename) {
StringBuffer queryString = new StringBuffer(" SELECT trader.NAME trader_name,"
+ " trader_user.USERNAME username,party.USERCODE usercode,party.ROLENAME rolename,"
+ " trader_user_order.UUID id,trader_user_order.STATE state , "
+ " trader_user_order.VOLUME volume,trader_user_order.USER_ORDER_NO user_order_no, "
+ " trader_user_order.TRADER_ORDER_NO trader_order_no ,trader_user_order.CREATE_TIME create_time ");
queryString.append(" FROM T_TRADER_FOLLOW_USER_ORDER trader_user_order ");
queryString.append(
" LEFT JOIN T_TRADER_FOLLOW_USER trader_user ON trader_user.PARTY_ID = trader_user_order.PARTY_ID ");
queryString.append(" LEFT JOIN PAT_PARTY party ON party.UUID = trader_user_order.PARTY_ID ");
queryString.append(" LEFT JOIN T_TRADER trader ON trader.PARTY_ID = trader_user_order.TRADER_PARTY_ID ");
queryString.append(" WHERE 1 = 1 ");
Map<String, Object> parameters = new HashMap();
if (StringUtils.isNotEmpty(name)) {
queryString.append(" AND trader.NAME =:name ");
parameters.put("name", name);
}
if (StringUtils.isNotEmpty(rolename)) {
queryString.append(" and party.ROLENAME = :rolename ");
parameters.put("rolename", rolename);
}
if (StringUtils.isNotEmpty(username)) {
queryString.append("AND (trader_user.USERNAME like:username OR party.USERCODE like:username ) ");
parameters.put("username", "%" + username + "%");
}
queryString.append(" order by trader_user_order.CREATE_TIME desc ");
Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
return page;
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
}

View File

@@ -0,0 +1,80 @@
package project.follow.internal;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.follow.AdminTraderFollowUserService;
import project.follow.TraderFollowUser;
import project.follow.TraderFollowUserService;
public class AdminTraderFollowUserServiceImpl extends HibernateDaoSupport implements AdminTraderFollowUserService {
private PagedQueryDao pagedQueryDao;
private TraderFollowUserService traderFollowUserService;
@Override
public void save(TraderFollowUser entity, String trader_id) {
this.traderFollowUserService.save(entity, trader_id);
}
public TraderFollowUser findById(String id) {
return (TraderFollowUser) getHibernateTemplate().get(TraderFollowUser.class, id);
}
@Override
public void update(TraderFollowUser entity) {
this.traderFollowUserService.update(entity);
}
@Override
public void delete(String id) {
TraderFollowUser entity = findById(id);
if (entity != null) {
this.traderFollowUserService.deleteCancel(id);
}
}
public Page pagedQuery(int pageNo, int pageSize, String name, String username) {
StringBuffer queryString = new StringBuffer(" SELECT trader.NAME trader_name,"
+ " trader_user.USERNAME username,party.USERCODE usercode,party.ROLENAME rolename,"
+ " trader_user.UUID id,trader_user.STATE state ,trader_user.SYMBOL symbol, "
+ " trader_user.FOLLOW_TYPE follow_type ,trader_user.VOLUME volume, "
+ " trader_user.PROFIT profit ,trader_user.AMOUNT_SUM amount_sum, "
+ " trader_user.STOP_PFOFIT stop_profit ,trader_user.STOP_LOSS stop_loss, "
+ " trader_user.VOLUME_MAX volume_max ,trader_user.CREATE_TIME create_time ");
queryString.append(" FROM T_TRADER_FOLLOW_USER trader_user ");
queryString.append(" LEFT JOIN PAT_PARTY party ON party.UUID = trader_user.PARTY_ID ");
queryString.append(" LEFT JOIN T_TRADER trader ON trader.PARTY_ID = trader_user.TRADER_PARTY_ID ");
queryString.append(" WHERE 1 = 1 ");
Map<String, Object> parameters = new HashMap();
if (StringUtils.isNotEmpty(name)) {
queryString.append(" AND trader.NAME =:name ");
parameters.put("name", name);
}
if (StringUtils.isNotEmpty(username)) {
queryString.append("AND (trader_user.USERNAME like:username OR party.USERCODE like:username ) ");
parameters.put("username", "%" + username + "%");
}
queryString.append(" order by trader_user.CREATE_TIME desc ");
Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
return page;
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
public void setTraderFollowUserService(TraderFollowUserService traderFollowUserService) {
this.traderFollowUserService = traderFollowUserService;
}
}

View File

@@ -0,0 +1,89 @@
package project.follow.internal;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.follow.AdminTraderFollowUserOrderService;
import project.follow.AdminTraderOrderService;
import project.follow.TraderOrder;
import project.follow.TraderOrderService;
public class AdminTraderOrderServiceImpl extends HibernateDaoSupport
implements AdminTraderOrderService {
private PagedQueryDao pagedQueryDao;
private TraderOrderService traderOrderService;
public Page pagedQuery(int pageNo, int pageSize, String name, String username, String rolename) {
StringBuffer queryString = new StringBuffer(" SELECT trader.NAME trader_name,"
+ " party.USERNAME username,party.USERCODE usercode,party.ROLENAME rolename,"
+ " trader_order.UUID id,trader_order.STATE state , "
+ " trader_order.VOLUME_OPEN volume_open,trader_order.ORDER_NO order_no, "
+ " trader_order.CREATE_TIME create_time,trader_order.CLOSE_TIME close_time, "
+ " trader_order.TRADE_AVG_PRICE trade_avg_price,trader_order.close_avg_price CLOSE_AVG_PRICE, "
+ "trader_order.CLOSE_TIME close_time,trader_order.CHANGE_RATIO change_ratio, "
+ " trader_order.DIRECTION direction,trader_order.PROFIT profit,item.NAME itemname ");
queryString.append(" FROM T_TRADER_ORDER trader_order ");
queryString.append(" LEFT JOIN PAT_PARTY party ON party.UUID = trader_order.PARTY_ID ");
queryString.append(" LEFT JOIN T_TRADER trader ON trader.PARTY_ID = trader_order.PARTY_ID ");
queryString.append(" LEFT JOIN T_ITEM item ON trader_order.SYMBOL=item.SYMBOL ");
queryString.append(" WHERE 1 = 1 ");
Map<String, Object> parameters = new HashMap();
if (StringUtils.isNotEmpty(name)) {
queryString.append(" AND trader.NAME =:name ");
parameters.put("name", name);
}
if (StringUtils.isNotEmpty(rolename)) {
queryString.append(" and party.ROLENAME = :rolename ");
parameters.put("rolename", rolename);
}
if (StringUtils.isNotEmpty(username)) {
queryString.append("AND (party.USERNAME like:username OR party.USERCODE like:username ) ");
parameters.put("username", "%" + username + "%");
}
queryString.append(" order by trader_order.CREATE_TIME desc ");
Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
return page;
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
@Override
public void delete(String id) {
traderOrderService.delete(id);
}
@Override
public void update(TraderOrder entity) {
traderOrderService.update(entity);
}
@Override
public void save(TraderOrder entity) {
traderOrderService.save(entity);
}
@Override
public TraderOrder findById(String id) {
return traderOrderService.findById(id);
}
public void setTraderOrderService(TraderOrderService traderOrderService) {
this.traderOrderService = traderOrderService;
}
}

View File

@@ -0,0 +1,93 @@
package project.follow.internal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.follow.AdminTraderService;
import project.follow.Trader;
public class AdminTraderServiceImpl extends HibernateDaoSupport implements AdminTraderService {
private PagedQueryDao pagedQueryDao;
@Override
public void save(Trader entity) {
this.getHibernateTemplate().save(entity);
}
@Override
public void update(Trader entity) {
this.getHibernateTemplate().update(entity);
}
public Trader findByPartyId(String partyId) {
StringBuffer queryString = new StringBuffer(" FROM Trader where partyId=?");
List<Trader> list = (List<Trader>) getHibernateTemplate().find(queryString.toString(), new Object[] { partyId });
if (list.size() > 0) {
return list.get(0);
}
return null;
}
public Trader findById(String id) {
return (Trader) getHibernateTemplate().get(Trader.class, id);
}
@Override
public void delete(String id) {
Trader entity = findById(id);
if (entity != null) {
this.getHibernateTemplate().delete(entity);
}
}
public Page pagedQuery(int pageNo, int pageSize, String name,String username) {
StringBuffer queryString = new StringBuffer(" SELECT trader.NAME name,"
+ " party.USERNAME username,party.USERCODE usercode,party.ROLENAME rolename,"
+ " trader.UUID id,trader.REMARKS remarks ,trader.SYMBOLS symbols,"
+ " trader.PROFIT profit ,trader.PROFIT_RATIO profit_ratio ,trader.ORDER_PROFIT order_profit,"
+ " trader.ORDER_LOSS order_loss , trader.ORDER_SUM order_sum , trader.FOLLOWER_SUM follower_sum ,"
+ " trader.FOLLOWER_NOW follower_now ,"
+ " trader.DEVIATION_PROFIT deviation_profit ,trader.DEVIATION_PROFIT_RATIO deviation_profit_ratio ,"
+ "trader.DEVIATION_ORDER_PROFIT deviation_order_profit,"
+ " trader.DEVIATION_ORDER_LOSS deviation_order_loss , trader.DEVIATION_ORDER_SUM deviation_order_sum , "
+ "trader.DEVIATION_FOLLOWER_SUM deviation_follower_sum ,"
+ " trader.DEVIATION_FOLLOWER_NOW deviation_follower_now ,"
+ " trader.PROFIT_SHARE_RATIO profit_share_ratio ,trader.STATE state , "
+ "trader.FOLLOWER_MAX follower_max, "
+ " trader.IMG img ,trader.CREATE_TIME create_time ");
queryString.append(" FROM T_TRADER trader ");
queryString.append(" LEFT JOIN PAT_PARTY party ON party.UUID = trader.PARTY_ID ");
queryString.append(" WHERE 1 = 1 ");
Map<String, Object> parameters = new HashMap();
if (StringUtils.isNotEmpty(name)) {
queryString.append(" AND trader.NAME =:name ");
parameters.put("name", name);
}
if (StringUtils.isNotEmpty(username)) {
queryString.append("AND (party.USERNAME like:username OR party.USERCODE like:username ) ");
parameters.put("username","%"+username+"%");
}
queryString.append(" order by trader.CREATE_TIME desc ");
Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
return page;
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
}

View File

@@ -0,0 +1,89 @@
package project.follow.internal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.follow.AdminTraderUserService;
import project.follow.TraderUser;
public class AdminTraderUserServiceImpl extends HibernateDaoSupport implements AdminTraderUserService {
private PagedQueryDao pagedQueryDao;
@Override
public void save(TraderUser entity) {
this.getHibernateTemplate().save(entity);
}
@Override
public void update(TraderUser entity) {
this.getHibernateTemplate().update(entity);
}
public List<TraderUser> findByPartyId(String partyId) {
StringBuffer queryString = new StringBuffer(" FROM TraderUser where partyId=?");
List<TraderUser> list = (List<TraderUser>) getHibernateTemplate().find(queryString.toString(), new Object[] { partyId });
if (list.size() > 0) {
return list;
}
return null;
}
public List<TraderUser> findByTraderPartyId(String trader_partyId) {
StringBuffer queryString = new StringBuffer(" FROM TraderUser where trader_partyId=?");
List<TraderUser> list = (List<TraderUser>) getHibernateTemplate().find(queryString.toString(), new Object[] { trader_partyId });
if (list.size() > 0) {
return list;
}
return null;
}
public TraderUser findById(String id) {
return (TraderUser) getHibernateTemplate().get(TraderUser.class, id);
}
@Override
public void delete(String id) {
TraderUser entity = findById(id);
if (entity != null) {
this.getHibernateTemplate().delete(entity);
}
}
public Page pagedQuery(int pageNo, int pageSize, String name, String username) {
StringBuffer queryString = new StringBuffer(" SELECT trader_user.NAME name,"
+ " party.USERNAME username,party.USERCODE usercode,party.ROLENAME rolename,"
+ " trader_user.UUID id,trader_user.PROFIT profit ,trader_user.AMOUNT_SUM amount_sum,"
+ " trader_user.CREATE_TIME create_time ");
queryString.append(" FROM T_TRADER_USER trader_user ");
queryString.append(" LEFT JOIN PAT_PARTY party ON party.UUID = trader_user.PARTY_ID ");
queryString.append(" WHERE 1 = 1 ");
Map<String, Object> parameters = new HashMap();
if (StringUtils.isNotEmpty(name)) {
queryString.append(" AND T_TRADER_USER.NAME =:name ");
parameters.put("name", name);
}
if (StringUtils.isNotEmpty(username)) {
queryString.append("AND (party.USERNAME like:username OR party.USERCODE like:username ) ");
parameters.put("username", "%" + username + "%");
}
queryString.append(" order by trader_user.CREATE_TIME desc ");
Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
return page;
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
}

View File

@@ -0,0 +1,714 @@
package project.follow.internal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.util.Arith;
import kernel.util.DateUtils;
import kernel.util.ThreadUtils;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.Constants;
import project.contract.ContractApplyOrder;
import project.contract.ContractApplyOrderService;
import project.contract.ContractOrder;
import project.contract.ContractOrderService;
import project.follow.Trader;
import project.follow.TraderFollowUser;
import project.follow.TraderFollowUserOrder;
import project.follow.TraderFollowUserOrderService;
import project.follow.TraderFollowUserService;
import project.follow.TraderOrder;
import project.follow.TraderOrderService;
import project.follow.TraderService;
import project.follow.TraderUser;
import project.follow.TraderUserService;
import project.log.MoneyLog;
import project.log.MoneyLogService;
import project.party.PartyService;
import project.party.model.Party;
import project.party.model.UserRecom;
import project.party.recom.UserRecomService;
import project.syspara.SysparaService;
import project.wallet.Wallet;
import project.wallet.WalletService;
public class TraderFollowUserOrderServiceImpl extends HibernateDaoSupport implements TraderFollowUserOrderService {
private TraderService traderService;
private ContractApplyOrderService contractApplyOrderService;
private ContractOrderService contractOrderService;
private TraderFollowUserService traderFollowUserService;
private TraderUserService traderUserService;
private PagedQueryDao pagedQueryDao;
private WalletService walletService;
private MoneyLogService moneyLogService;
private TraderOrderService traderOrderService;
private UserRecomService userRecomService;
private PartyService partyService;
private SysparaService sysparaService;
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String partyId) {
StringBuffer queryString = new StringBuffer(" SELECT orders.SYMBOL symbol,orders.AMOUNT_CLOSE amount_close, "
+ " orders.TRADE_AVG_PRICE trade_avg_price, "
+ " orders.DIRECTION direction,orders.UNIT_AMOUNT unit_amount, "
+ " orders.STATE state,orders.FEE fee,orders.PROFIT profit, "
+ " orders.DEPOSIT deposit,orders.DEPOSIT_OPEN deposit_open,orders.CLOSE_AVG_PRICE close_avg_price, "
+ " orders.CLOSE_TIME closeTime,orders.CREATE_TIME createTime, "
+ " orders.VOLUME_OPEN volume_open,orders.VOLUME volume,item.NAME itemname, "
+ " trader_user_order.USER_ORDER_NO order_no ");
queryString.append(" FROM T_TRADER_FOLLOW_USER_ORDER trader_user_order ");
queryString
.append(" LEFT JOIN T_CONTRACT_ORDER orders ON orders.ORDER_NO = trader_user_order.USER_ORDER_NO ");
queryString.append(" LEFT JOIN T_ITEM item ON orders.SYMBOL = item.SYMBOL ");
queryString.append(" WHERE 1 = 1 ");
Map<String, Object> parameters = new HashMap();
queryString.append(" and trader_user_order.PARTY_ID =:partyId");
parameters.put("partyId", partyId);
queryString.append(" order by trader_user_order.CREATE_TIME desc ");
Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
List<Map<String, Object>> data = this.bulidData(page.getElements());
return data;
}
private List<Map<String, Object>> bulidData(List<Map<String, Object>> traders) {
List<Map<String, Object>> result_traders = new ArrayList();
DecimalFormat df2 = new DecimalFormat("#.##");
df2.setRoundingMode(RoundingMode.FLOOR);// 向下取整
if (traders == null) {
return result_traders;
}
for (int i = 0; i < traders.size(); i++) {
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> entity = traders.get(i);
map.put("order_no", entity.get("order_no"));
map.put("close_avg_price", entity.get("close_avg_price"));
map.put("amount_close", entity.get("amount_close"));
map.put("trade_avg_price", entity.get("trade_avg_price"));
map.put("direction", entity.get("direction"));
map.put("unit_amount", entity.get("unit_amount"));
map.put("state", entity.get("state"));
map.put("fee", entity.get("fee"));
map.put("profit", entity.get("profit"));
map.put("deposit", entity.get("deposit"));
map.put("deposit_open", entity.get("deposit_open"));
if (entity.get("closeTime") != null) {
map.put("closeTime",
DateUtils.format(
DateUtils.toDate(entity.get("closeTime").toString(), DateUtils.DF_yyyyMMddHHmmss),
"MM-dd HH:mm:ss"));
} else {
map.put("closeTime", "");
}
map.put("createTime",
DateUtils.format(DateUtils.toDate(entity.get("createTime").toString(), DateUtils.DF_yyyyMMddHHmmss),
"MM-dd HH:mm:ss"));
// map.put("createTime", entity.get("createTime"));
map.put("volume_open", entity.get("volume_open"));
map.put("volume", entity.get("volume"));
map.put("itemname", entity.get("itemname"));
map.put("volume", entity.get("volume"));
map.put("change_ratio", getChange_ratio(entity.get("state").toString(),
Double.valueOf(entity.get("amount_close").toString()),
Double.valueOf(entity.get("profit").toString()), Double.valueOf(entity.get("deposit").toString()),
Double.valueOf(entity.get("deposit_open").toString())));
result_traders.add(map);
}
return result_traders;
}
public Double getChange_ratio(String state, double amount_close, double profit, double deposit,
double deposit_open) {
double change_ratio = 0;
if (ContractOrder.STATE_SUBMITTED.equals(state)) {
change_ratio = Arith.div(Arith.sub(Arith.add(Arith.add(amount_close, profit), deposit), deposit_open),
deposit_open);
} else {
change_ratio = Arith.div(Arith.sub(Arith.add(amount_close, deposit), deposit_open), deposit_open);
}
change_ratio = Arith.mul(change_ratio, 100);
DecimalFormat df = new DecimalFormat("#.##");
return Double.valueOf(df.format(change_ratio));
}
/**
* 判断是否是交易员
*/
public boolean isOrNotTrader(String partyId) {
Trader trader = this.traderService.findByPartyId(partyId);
if (trader != null) {
return true;
} else {
return false;
}
}
public void update(TraderFollowUserOrder entity) {
this.getHibernateTemplate().update(entity);
}
@Override
public void traderOpen(ContractOrder contractOrder) {
if (isOrNotTrader(contractOrder.getPartyId().toString())) {
CreateDelayThread lockDelayThread = new CreateDelayThread(contractOrder, this.contractApplyOrderService);
Thread t = new Thread(lockDelayThread);
t.start();
}
}
@Override
public void traderClose(ContractOrder contractOrder) {
if (isOrNotTrader(contractOrder.getPartyId().toString())) {
CloseDelayThread lockDelayThread = new CloseDelayThread(contractOrder, this.contractOrderService);
Thread t = new Thread(lockDelayThread);
t.start();
}
// else {
// CloseOrderDelayThread lockOrderDelayThread = new CloseOrderDelayThread(contractOrder);
// Thread t = new Thread(lockOrderDelayThread);
// t.start();
//
// }
}
/**
* 用户跟随交易员创建委托单
*/
public class CreateDelayThread implements Runnable {
private ContractOrder contractOrder;
private ContractApplyOrderService contractApplyOrderService;
public void run() {
try {
List<TraderFollowUser> users = traderFollowUserService
.findByTrader_partyId(contractOrder.getPartyId().toString());
if (users != null) {
for (TraderFollowUser user : users) {
if (!"".equals(user.getPartyId())) {
/**
* 判断当前用户最多还可以买几张
*/
try {
List<TraderFollowUserOrder> userOrders = findByPartyIdAndTraderPartyIdAndState(
user.getPartyId().toString(), contractOrder.getPartyId().toString(),
ContractOrder.STATE_SUBMITTED);
double volume_last = user.getVolume_max();
if (userOrders != null) {
for (TraderFollowUserOrder userOrder : userOrders) {
volume_last = Arith.sub(volume_last, userOrder.getVolume());
}
}
if (volume_last <= 0) {
continue;
}
ContractApplyOrder order = new ContractApplyOrder();
order.setPartyId(user.getPartyId());
order.setSymbol(contractOrder.getSymbol());
order.setDirection(contractOrder.getDirection());
order.setOffset(ContractApplyOrder.OFFSET_OPEN);
/**
* 跟单固定张数/固定比例---选择 1,固定张数2固定比例
*/
if ("1".equals(user.getFollow_type())) {
if (volume_last < user.getVolume()) {
order.setVolume(volume_last);
order.setVolume_open(volume_last);
} else {
order.setVolume(user.getVolume());
order.setVolume_open(user.getVolume());
}
}
if ("2".equals(user.getFollow_type())) {
if (volume_last < Arith.mul(contractOrder.getVolume_open(), user.getVolume())) {
order.setVolume(volume_last);
order.setVolume_open(volume_last);
} else {
order.setVolume(Arith.mul(contractOrder.getVolume_open(), user.getVolume()));
order.setVolume_open(
Arith.mul(contractOrder.getVolume_open(), user.getVolume()));
}
}
order.setLever_rate(contractOrder.getLever_rate());
// order.setPrice(contractOrder.getPrice());
order.setStop_price_profit(contractOrder.getStop_price_profit());
order.setStop_price_loss(contractOrder.getStop_price_loss());
/**
* 默认市价单
*/
order.setOrder_price_type(ContractApplyOrder.ORDER_PRICE_TYPE_OPPONENT);
if (order.getVolume_open() <= 0) {
continue;
}
this.contractApplyOrderService.saveCreate(order);
/**
* 跟单产生的交易手续费,奖励给推荐人
*/
saveFeeBounsHandle(order);
/**
* 跟随交易员添加下单记录
*/
TraderFollowUserOrder traderFollowUserOrder = new TraderFollowUserOrder();
traderFollowUserOrder.setPartyId(user.getPartyId());
traderFollowUserOrder.setTrader_partyId(contractOrder.getPartyId());
/**
* 交易员的持仓单号
*/
traderFollowUserOrder.setTrader_order_no(contractOrder.getOrder_no());
traderFollowUserOrder.setUser_order_no(order.getOrder_no());
traderFollowUserOrder.setVolume(order.getVolume_open());
traderFollowUserOrder.setState(order.getState());
traderFollowUserOrder.setCreate_time(order.getCreate_time());
getHibernateTemplate().save(traderFollowUserOrder);
/**
* 将数据加入用户跟随总累计收益表
*/
TraderUser traderUser = traderUserService.saveTraderUserByPartyId(user.getPartyId());
traderUser.setAmount_sum(Arith.add(traderUser.getAmount_sum(),
Arith.mul(order.getVolume_open(), order.getUnit_amount())));
traderUserService.update(traderUser);
/**
* 给用户跟随表添加累计金额
*/
user.setAmount_sum(Arith.add(user.getAmount_sum(),
Arith.mul(order.getVolume_open(), order.getUnit_amount())));
traderFollowUserService.update(user);
} catch (Exception e) {
logger.error("TraderFollowUserOrderServiceImpl_error:", e);
}
}
ThreadUtils.sleep(10);
}
}
/**
* 交易员自身数据更新
*/
Trader trader = traderService.findByPartyId(contractOrder.getPartyId().toString());
trader.setOrder_amount(Arith.add(trader.getOrder_amount(),
Arith.mul(contractOrder.getVolume_open(), contractOrder.getUnit_amount())));
trader.setOrder_sum((int) Arith.add(trader.getOrder_sum(), 1));
/**
* 近三周数据更新 累计数据更新
*/
traderService.updateTrader(trader);
} catch (Exception e) {
logger.error("error:", e);
}
}
public CreateDelayThread(ContractOrder contractOrder, ContractApplyOrderService contractApplyOrderService) {
this.contractOrder = contractOrder;
this.contractApplyOrderService = contractApplyOrderService;
}
}
/**
* 交易员平仓
*
*/
public class CloseDelayThread implements Runnable {
private ContractOrder contractOrder;
private ContractOrderService contractOrderService;
public void run() {
try {
if (ContractOrder.STATE_CREATED.equals(contractOrder.getState())) {
List<TraderFollowUserOrder> orders = findByTraderPartyIdAndOrder_no(
contractOrder.getPartyId().toString(), contractOrder.getOrder_no(),
ContractOrder.STATE_SUBMITTED);
if (orders != null) {
for (TraderFollowUserOrder order : orders) {
try {
if (ContractOrder.STATE_SUBMITTED.equals(order.getState())) {
ContractOrder user_contract_order = this.contractOrderService
.saveClose(order.getPartyId().toString(), order.getUser_order_no());
order.setState(ContractOrder.STATE_CREATED);
getHibernateTemplate().update(order);
if (user_contract_order != null) {
closeUserContractOrder(user_contract_order);
}
}
} catch (Exception e) {
logger.error("error:", e);
} finally {
}
ThreadUtils.sleep(10);
}
}
/**
* 交易员自身数据更新
*/
Trader trader = traderService.findByPartyId(contractOrder.getPartyId().toString());
trader.setProfit(Arith.add(trader.getProfit(), contractOrder.getProfit()));
if (contractOrder.getProfit() >= 0) {
trader.setOrder_profit((int) Arith.add(trader.getOrder_profit(), 1));
} else {
trader.setOrder_loss((int) Arith.add(trader.getOrder_loss(), 1));
}
/**
* 近三周数据更新 累计数据更新
*/
traderService.updateTrader(trader);
TraderOrder trader_order = new TraderOrder();
trader_order.setPartyId(contractOrder.getPartyId());
trader_order.setOrder_no(contractOrder.getOrder_no());
trader_order.setSymbol(contractOrder.getSymbol());
trader_order.setProfit(contractOrder.getProfit());
trader_order.setChange_ratio(contractOrder.getChange_ratio());
trader_order.setClose_avg_price(contractOrder.getClose_avg_price());
trader_order.setTrade_avg_price(contractOrder.getTrade_avg_price());
trader_order.setClose_time(contractOrder.getClose_time());
trader_order.setCreate_time(contractOrder.getCreate_time());
trader_order.setDirection(contractOrder.getDirection());
trader_order.setLever_rate(contractOrder.getLever_rate());
trader_order.setState(contractOrder.getState());
trader_order.setVolume_open(contractOrder.getVolume_open());
traderOrderService.save(trader_order);
}
} catch (Exception e) {
logger.error("error:", e);
}
}
public CloseDelayThread(ContractOrder contractOrder, ContractOrderService contractOrderService) {
this.contractOrder = contractOrder;
this.contractOrderService = contractOrderService;
}
}
/**
* 用户平仓
*
* @param contractOrder
*/
public void closeUserContractOrder(ContractOrder contractOrder) {
ThreadUtils.sleep(1000);
TraderFollowUserOrder traderFollowUserOrder = findByPartyIdAndOrderNo(contractOrder.getPartyId().toString(),
contractOrder.getOrder_no());
/**
* 是否跟单判断
*/
double follow_order_profit = 0;
if (traderFollowUserOrder != null && contractOrder.getProfit() > 0) {
Trader trader = traderService.findByPartyId(traderFollowUserOrder.getTrader_partyId().toString());
follow_order_profit = Arith.mul(contractOrder.getProfit(), trader.getProfit_share_ratio());
Wallet wallet = walletService.saveWalletByPartyId(contractOrder.getPartyId().toString());
double wallet_before = wallet.getMoney();
walletService.update(contractOrder.getPartyId().toString(), Arith.sub(0, follow_order_profit));
MoneyLog moneylog = new MoneyLog();
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_CONTRACT);
moneylog.setAmount_before(wallet_before);
moneylog.setAmount(Arith.sub(0, follow_order_profit));
moneylog.setAmount_after(Arith.sub(wallet_before, follow_order_profit));
moneylog.setLog("交易员订单号[" + traderFollowUserOrder.getTrader_order_no() + "],跟单用户订单号["
+ contractOrder.getOrder_no() + "],跟单手续费[" + Arith.sub(0, follow_order_profit) + "]");
moneylog.setPartyId(contractOrder.getPartyId().toString());
moneylog.setWallettype(Constants.WALLET);
moneylog.setContent_type(Constants.MONEYLOG_CONTENT_FOLLOW_UP_FEE);
moneyLogService.save(moneylog);
Wallet wallet_trader = walletService.saveWalletByPartyId(trader.getPartyId().toString());
double wallet_trader_before = wallet_trader.getMoney();
walletService.update(wallet_trader.getPartyId().toString(), follow_order_profit);
MoneyLog moneylog_trader = new MoneyLog();
moneylog_trader.setCategory(Constants.MONEYLOG_CATEGORY_CONTRACT);
moneylog_trader.setAmount_before(wallet_trader_before);
moneylog_trader.setAmount(follow_order_profit);
moneylog_trader.setAmount_after(Arith.add(wallet_trader_before, follow_order_profit));
moneylog_trader.setLog("交易员订单号[" + traderFollowUserOrder.getTrader_order_no() + "],跟单用户订单号["
+ contractOrder.getOrder_no() + "],带单手续费收益[" + follow_order_profit + "]");
moneylog_trader.setPartyId(wallet_trader.getPartyId().toString());
moneylog_trader.setWallettype(Constants.WALLET);
moneylog_trader.setContent_type(Constants.MONEYLOG_CONTENT_FOLLOW_UP_FEE);
moneyLogService.save(moneylog_trader);
/**
* 检查是否是跟单订单如果是需要将TraderFollowUserOrder里的订单状态修改
*/
if (traderFollowUserOrder != null) {
traderFollowUserOrder.setState(contractOrder.getState());
update(traderFollowUserOrder);
/**
* 将收益加入用户跟随累计
*/
TraderUser traderUser = traderUserService.saveTraderUserByPartyId(contractOrder.getPartyId());
traderUser.setProfit(Arith.add(traderUser.getProfit(), contractOrder.getProfit()));
traderUserService.update(traderUser);
TraderFollowUser traderFollowUser = traderFollowUserService.findByPartyIdAndTrader_partyId(
traderFollowUserOrder.getPartyId().toString(),
traderFollowUserOrder.getTrader_partyId().toString());
/**
* 给用户跟随表添加累计金额
*/
traderFollowUser.setProfit(Arith.add(traderFollowUser.getProfit(), contractOrder.getProfit()));
traderFollowUserService.update(traderFollowUser);
}
saveProfitBounsHandle(contractOrder);
}
}
public TraderFollowUserOrder findByPartyIdAndOrderNo(String partyId, String apply_oder_no) {
StringBuffer queryString = new StringBuffer(
" FROM TraderFollowUserOrder where partyId=?0 and user_order_no= ?1 ");
List<TraderFollowUserOrder> list = (List<TraderFollowUserOrder>) getHibernateTemplate().find(queryString.toString(),
new Object[] { partyId, apply_oder_no });
if (list.size() > 0) {
return list.get(0);
}
return null;
}
public List<TraderFollowUserOrder> findByPartyIdAndTraderPartyIdAndState(String partyId, String trader_partyId,
String state) {
StringBuffer queryString = new StringBuffer(
" FROM TraderFollowUserOrder where partyId=?0 and trader_partyId = ?1 and state = ?2 ");
List<TraderFollowUserOrder> list = (List<TraderFollowUserOrder>) getHibernateTemplate().find(queryString.toString(),
new Object[] { partyId, trader_partyId, state });
if (list.size() > 0) {
return list;
}
return null;
}
public List<TraderFollowUserOrder> findByTraderPartyIdAndOrder_no(String trader_partyId, String trader_order_no,
String state) {
StringBuffer queryString = new StringBuffer(
" FROM TraderFollowUserOrder where trader_partyId=?0 and trader_order_no= ?1 and state = ?2 ");
List<TraderFollowUserOrder> list = (List<TraderFollowUserOrder>) getHibernateTemplate().find(queryString.toString(),
new Object[] { trader_partyId, trader_order_no, state });
if (list.size() > 0) {
return list;
}
return null;
}
/**
* 跟单产生手续费,奖励给推荐人
*
* @param entity
*/
public void saveFeeBounsHandle(ContractApplyOrder entity) {
List<UserRecom> recom_parents = userRecomService.getParents(entity.getPartyId());
if (recom_parents == null) {
return;
}
if (recom_parents.size() == 0) {
return;
}
/**
* 上级为空则直接结束
*/
if ("".equals(recom_parents.get(0).getReco_id()) || recom_parents.get(0).getReco_id() == null) {
return;
}
/**
* 获取数据库奖金分成比例
*/
String trade_follow_bonus_parameters = sysparaService.find("trade_follow_bonus_parameters").getValue();
String[] trade_follow_bonus_array = trade_follow_bonus_parameters.split(",");
/**
* 判断有几个父级代理最多不超过3个有奖励
*/
for (int i = 0; i < recom_parents.size(); i++) {
if (i >= 3) {
return;
}
/**
* 邀请人是正式用户和演示用户才加奖金
*/
Party party = new Party();
party = this.partyService.cachePartyBy(recom_parents.get(i).getReco_id(), true);
if (!"MEMBER".equals(party.getRolename()) && !"GUEST".equals(party.getRolename())) {
continue;
}
double pip_amount = Double.valueOf(trade_follow_bonus_array[i]);
double get_money = Arith.mul(entity.getFee(), pip_amount);
Wallet wallet = walletService.saveWalletByPartyId(recom_parents.get(i).getReco_id());
double amount_before = wallet.getMoney();
// wallet.setMoney(Arith.add(wallet.getMoney(), get_money));
walletService.update(wallet.getPartyId().toString(), get_money);
/**
* 保存资金日志
*/
MoneyLog moneyLog = new MoneyLog();
moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_REWARD);
moneyLog.setAmount_before(amount_before);
moneyLog.setAmount(get_money);
moneyLog.setAmount_after(Arith.add(amount_before, get_money));
moneyLog.setLog("" + (i + 1) + "代用户跟单产生了交易,手续费奖励[" + get_money + "]");
moneyLog.setPartyId(recom_parents.get(i).getReco_id());
moneyLog.setWallettype(Constants.WALLET);
moneyLog.setContent_type(Constants.MONEYLOG_CONTENT_REWARD);
moneyLogService.save(moneyLog);
}
}
/**
* 跟单产生收益,奖励给推荐人
*
* @param entity
*/
public void saveProfitBounsHandle(ContractOrder entity) {
List<UserRecom> recom_parents = userRecomService.getParents(entity.getPartyId());
if (recom_parents == null) {
return;
}
if (recom_parents.size() == 0) {
return;
}
/**
* 上级为空则直接结束
*/
if ("".equals(recom_parents.get(0).getReco_id()) || recom_parents.get(0).getReco_id() == null) {
return;
}
/**
* 获取数据库奖金分成比例
*/
String trade_follow_profit_bonus_parameters = sysparaService.find("trade_follow_profit_bonus_parameters")
.getValue();
String[] trade_follow_profit_bonus_array = trade_follow_profit_bonus_parameters.split(",");
/**
* 判断有几个父级代理最多不超过1个有奖励
*/
for (int i = 0; i < recom_parents.size(); i++) {
if (i >= 1) {
return;
}
/**
* 邀请人是正式用户和演示用户才加奖金
*/
Party party = new Party();
party = this.partyService.cachePartyBy(recom_parents.get(i).getReco_id(), false);
if (!"MEMBER".equals(party.getRolename()) && !"GUEST".equals(party.getRolename())) {
continue;
}
double pip_amount = Double.valueOf(trade_follow_profit_bonus_array[i]);
double get_money = Arith.mul(entity.getProfit(), pip_amount);
Wallet wallet = walletService.saveWalletByPartyId(recom_parents.get(i).getReco_id());
double amount_before = wallet.getMoney();
// wallet.setMoney(Arith.add(wallet.getMoney(), get_money));
walletService.update(wallet.getPartyId().toString(), get_money);
/**
* 保存资金日志
*/
MoneyLog moneyLog = new MoneyLog();
moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_REWARD);
moneyLog.setAmount_before(amount_before);
moneyLog.setAmount(get_money);
moneyLog.setAmount_after(Arith.add(amount_before, get_money));
moneyLog.setLog("" + (i + 1) + "代用户跟单产生了交易,分红奖励[" + get_money + "]");
moneyLog.setPartyId(recom_parents.get(i).getReco_id());
moneyLog.setWallettype(Constants.WALLET);
moneyLog.setContent_type(Constants.MONEYLOG_CONTENT_REWARD);
moneyLogService.save(moneyLog);
}
}
public void setTraderService(TraderService traderService) {
this.traderService = traderService;
}
public void setContractApplyOrderService(ContractApplyOrderService contractApplyOrderService) {
this.contractApplyOrderService = contractApplyOrderService;
}
public void setTraderFollowUserService(TraderFollowUserService traderFollowUserService) {
this.traderFollowUserService = traderFollowUserService;
}
public void setContractOrderService(ContractOrderService contractOrderService) {
this.contractOrderService = contractOrderService;
}
public void setTraderUserService(TraderUserService traderUserService) {
this.traderUserService = traderUserService;
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
public void setWalletService(WalletService walletService) {
this.walletService = walletService;
}
public void setMoneyLogService(MoneyLogService moneyLogService) {
this.moneyLogService = moneyLogService;
}
public void setTraderOrderService(TraderOrderService traderOrderService) {
this.traderOrderService = traderOrderService;
}
public void setUserRecomService(UserRecomService userRecomService) {
this.userRecomService = userRecomService;
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public void setSysparaService(SysparaService sysparaService) {
this.sysparaService = sysparaService;
}
}

View File

@@ -0,0 +1,220 @@
package project.follow.internal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.exception.BusinessException;
import kernel.util.Arith;
import kernel.util.StringUtils;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.follow.Trader;
import project.follow.TraderFollowUser;
import project.follow.TraderFollowUserService;
import project.follow.TraderService;
import project.follow.TraderUserService;
public class TraderFollowUserServiceImpl extends HibernateDaoSupport implements TraderFollowUserService {
private TraderService traderService;
private TraderUserService traderUserService;
private PagedQueryDao pagedQueryDao;
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String partyId, String profit) {
StringBuffer queryString = new StringBuffer("");
queryString.append(" FROM ");
queryString.append(" TraderFollowUser ");
queryString.append(" where 1=1 ");
Map<String, Object> parameters = new HashMap();
queryString.append(" and trader_partyId = :partyId");
parameters.put("partyId", partyId);
if (!StringUtils.isNullOrEmpty(profit)) {
queryString.append(" and profit >= 0 ");
}
queryString.append(" order by profit desc ");
Page page = this.pagedQueryDao.pagedQueryHql(pageNo, pageSize, queryString.toString(), parameters);
List<Map<String, Object>> data = this.bulidData(page.getElements());
return data;
}
private List<Map<String, Object>> bulidData(List<TraderFollowUser> traderFollowUsers) {
List<Map<String, Object>> result_traders = new ArrayList();
DecimalFormat df2 = new DecimalFormat("#.##");
df2.setRoundingMode(RoundingMode.FLOOR);// 向下取整
if (traderFollowUsers == null) {
return result_traders;
}
for (int i = 0; i < traderFollowUsers.size(); i++) {
Map<String, Object> map = new HashMap<String, Object>();
TraderFollowUser entity = traderFollowUsers.get(i);
map.put("name", entity.getUsername());
map.put("profit", df2.format(entity.getProfit()));
map.put("amount_sum", df2.format(entity.getAmount_sum()));
result_traders.add(map);
}
return result_traders;
}
@Override
public void save(TraderFollowUser entity, String trader_id) {
if (entity.getVolume() % 1 != 0 || entity.getVolume() <= 0 || entity.getVolume_max() % 1 != 0) {
throw new BusinessException(1, "跟单参数输入错误");
}
if (entity.getFollow_type() == "1" && (entity.getVolume() > 3000 || entity.getVolume() < 1)) {
throw new BusinessException(1, "跟单参数输入错误");
}
if (entity.getFollow_type() == "2" && (entity.getVolume() > 5 || entity.getVolume() < 1)) {
throw new BusinessException(1, "跟单倍数输入错误");
}
Trader trader = this.traderService.findById(trader_id);
if (trader == null) {
throw new BusinessException(1, "交易员不存在");
}
if ("0".equals(trader.getState())) {
throw new BusinessException(1, "交易员未开启带单");
}
if (findByStateAndPartyId(entity.getPartyId().toString(), trader.getPartyId().toString(), "1") != null) {
throw new BusinessException(1, "用户已跟随交易员");
}
if (Arith.sub(trader.getFollower_max(), trader.getFollower_now()) < 1) {
throw new BusinessException(1, "交易员跟随人数已满");
}
if (entity.getPartyId().equals(trader.getPartyId())) {
throw new BusinessException(1, "交易员不能跟随自己");
}
Trader trader_user = this.traderService.findByPartyId(entity.getPartyId().toString());
if (trader_user != null) {
throw new BusinessException(1, "交易员无法跟随另一个交易员");
}
// 跟单固定张数/固定比例---选择 1,固定张数2固定比例
if (trader.getFollow_volumn_min() > 0) {
switch (entity.getFollow_type()) {
case "1":
if (entity.getVolume() < trader.getFollow_volumn_min()) {
throw new BusinessException(1, "跟单参数输入错误");
}
if (entity.getVolume_max() < trader.getFollow_volumn_min()) {
throw new BusinessException(1, "跟单参数输入错误");
}
break;
case "2":
throw new BusinessException(1, "交易员已设置最小下单数,无法通过固定比例跟单");
default:
break;
}
}
entity.setTrader_partyId(trader.getPartyId().toString());
entity.setCreate_time(new Date());
trader.setFollower_now((int) Arith.add(trader.getFollower_now(), 1));
trader.setFollower_sum((int) Arith.add(trader.getFollower_sum(), 1));
this.traderService.update(trader);
/**
* 创建累计用户跟随累计表
*/
this.traderUserService.saveTraderUserByPartyId(entity.getPartyId());
this.getHibernateTemplate().save(entity);
}
@Override
public void update(TraderFollowUser entity) {
if (entity.getVolume() % 1 != 0 || entity.getVolume() <= 0 || entity.getVolume_max() % 1 != 0) {
throw new BusinessException(1, "跟单参数输入错误");
}
if (entity.getFollow_type() == "1" && (entity.getVolume() > 3000 || entity.getVolume() < 1)) {
throw new BusinessException(1, "跟单参数输入错误");
}
if (entity.getFollow_type() == "2" && (entity.getVolume() > 5 || entity.getVolume() < 1)) {
throw new BusinessException(1, "跟单倍数输入错误");
}
this.getHibernateTemplate().update(entity);
}
@Override
public void deleteCancel(String id) {
TraderFollowUser entity = findById(id);
/**
* 将旧的交易员跟随用户-1
*/
Trader trader_before = this.traderService.findByPartyId(entity.getTrader_partyId().toString());
trader_before.setFollower_now((int) Arith.sub(trader_before.getFollower_now(), 1));
this.traderService.update(trader_before);
if (entity != null) {
this.getHibernateTemplate().delete(entity);
}
}
public List<TraderFollowUser> findByStateAndPartyId(String partyId, String trader_partyId, String state) {
List<TraderFollowUser> list = (List<TraderFollowUser>) getHibernateTemplate().find(
" FROM TraderFollowUser WHERE partyId = ? AND trader_partyId = ? AND state = ? ",
new Object[] { partyId, trader_partyId, state });
if (list.size() > 0)
return list;
return null;
}
public List<TraderFollowUser> findByTrader_partyId(String trader_partyId) {
List<TraderFollowUser> list = (List<TraderFollowUser>) getHibernateTemplate().find(" FROM TraderFollowUser WHERE trader_partyId = ? ",
new Object[] { trader_partyId });
if (list.size() > 0)
return list;
return null;
}
public List<TraderFollowUser> findByPartyId(String partyId) {
List<TraderFollowUser> list = (List<TraderFollowUser>) getHibernateTemplate().find(" FROM TraderFollowUser WHERE partyId = ? ",
new Object[] { partyId });
if (list.size() > 0)
return list;
return null;
}
public TraderFollowUser findByPartyIdAndTrader_partyId(String partyId, String trader_partyId) {
List<TraderFollowUser> list = (List<TraderFollowUser>) getHibernateTemplate().find(
" FROM TraderFollowUser WHERE partyId= ? and trader_partyId = ? ",
new Object[] { partyId, trader_partyId });
if (list.size() > 0)
return list.get(0);
return null;
}
public TraderFollowUser findById(String id) {
return (TraderFollowUser) getHibernateTemplate().get(TraderFollowUser.class, id);
}
public void setTraderService(TraderService traderService) {
this.traderService = traderService;
}
public void setTraderUserService(TraderUserService traderUserService) {
this.traderUserService = traderUserService;
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
}

View File

@@ -0,0 +1,106 @@
package project.follow.internal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.follow.TraderOrder;
import project.follow.TraderOrderService;
public class TraderOrderServiceImpl extends HibernateDaoSupport implements TraderOrderService {
private PagedQueryDao pagedQueryDao;
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String partyId) {
StringBuffer queryString = new StringBuffer(" " + " SELECT trader_order.SYMBOL symbol , "
+ " trader_order.TRADE_AVG_PRICE trade_avg_price, " + " trader_order.DIRECTION direction , "
+ " trader_order.STATE state,trader_order.PROFIT profit, "
+ " trader_order.CLOSE_AVG_PRICE close_avg_price,trader_order.CHANGE_RATIO change_ratio , "
+ " trader_order.CLOSE_TIME close_time,trader_order.CREATE_TIME create_time, "
+ " trader_order.VOLUME_OPEN volume_open,item.NAME itemname, " + " trader_order.ORDER_NO order_no ");
queryString.append(" FROM T_TRADER_ORDER trader_order ");
queryString.append(" LEFT JOIN T_ITEM item ON trader_order.SYMBOL = item.SYMBOL ");
queryString.append(" WHERE 1 = 1 ");
Map<String, Object> parameters = new HashMap();
queryString.append(" and trader_order.PARTY_ID =:partyId");
parameters.put("partyId", partyId);
queryString.append(" order by trader_order.CREATE_TIME desc ");
Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
List<Map<String, Object>> data = this.bulidData(page.getElements());
return data;
}
private List<Map<String, Object>> bulidData(List<Map<String, Object>> traders) {
List<Map<String, Object>> result_traders = new ArrayList();
DecimalFormat df2 = new DecimalFormat("#.##");
df2.setRoundingMode(RoundingMode.FLOOR);// 向下取整
if (traders == null) {
return result_traders;
}
for (int i = 0; i < traders.size(); i++) {
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> entity = traders.get(i);
map.put("order_no", entity.get("order_no"));
map.put("name", entity.get("itemname"));
map.put("close_avg_price", entity.get("close_avg_price"));
map.put("trade_avg_price", entity.get("trade_avg_price"));
map.put("direction", entity.get("direction"));
map.put("state", entity.get("state"));
map.put("profit", entity.get("profit"));
if (entity.get("close_time") != null) {
map.put("close_time", entity.get("close_time").toString());
} else {
map.put("close_time", "");
}
map.put("create_time", entity.get("create_time").toString());
map.put("volume_open", entity.get("volume_open"));
map.put("itemname", entity.get("itemname"));
map.put("change_ratio", entity.get("change_ratio"));
result_traders.add(map);
}
return result_traders;
}
@Override
public void delete(String id) {
TraderOrder entity = findById(id);
if (entity != null) {
this.getHibernateTemplate().delete(entity);
}
}
@Override
public void update(TraderOrder entity) {
this.getHibernateTemplate().update(entity);
}
@Override
public void save(TraderOrder entity) {
this.getHibernateTemplate().save(entity);
}
@Override
public TraderOrder findById(String id) {
return (TraderOrder) getHibernateTemplate().get(TraderOrder.class, id);
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
}

View File

@@ -0,0 +1,241 @@
package project.follow.internal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.util.Arith;
import kernel.util.StringUtils;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.Constants;
import project.contract.ContractOrder;
import project.contract.ContractOrderService;
import project.follow.Trader;
import project.follow.TraderService;
public class TraderServiceImpl extends HibernateDaoSupport implements TraderService {
private PagedQueryDao pagedQueryDao;
private ContractOrderService contractOrderService;
public Trader findById(String id) {
return (Trader) getHibernateTemplate().get(Trader.class, id);
}
public Trader findByPartyId(String partyId) {
List<Trader> list = (List<Trader>) getHibernateTemplate().find(" FROM Trader WHERE partyId = ?0", new Object[] { partyId });
if (list.size() > 0)
return list.get(0);
return null;
}
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String name, String state,
String orderBy_type) {
StringBuffer queryString = new StringBuffer("");
queryString.append(" FROM ");
queryString.append(" Trader ");
queryString.append(" where 1=1 ");
Map<String, Object> parameters = new HashMap();
if (!StringUtils.isNullOrEmpty(name)) {
queryString.append(" and name like :name");
parameters.put("name", "%" + name + "%");
}
if (!StringUtils.isNullOrEmpty(state)) {
queryString.append(" and state =:state ");
parameters.put("state", state);
}
if (!StringUtils.isNullOrEmpty(orderBy_type) && !"create_time".equals(orderBy_type)) {
queryString.append(" order by (" + orderBy_type + "+ DEVIATION_" + orderBy_type + ") desc ");
// parameters.put("orderBy_type", orderBy_type);
} else {
queryString.append(" order by create_time desc ");
}
Page page = this.pagedQueryDao.pagedQueryHql(pageNo, pageSize, queryString.toString(), parameters);
List<Map<String, Object>> data = this.bulidData(page.getElements());
return data;
}
private List<Map<String, Object>> bulidData(List<Trader> traders) {
List<Map<String, Object>> result_traders = new ArrayList();
DecimalFormat df2 = new DecimalFormat("#.##");
df2.setRoundingMode(RoundingMode.FLOOR);// 向下取整
if (traders == null) {
return result_traders;
}
for (int i = 0; i < traders.size(); i++) {
Map<String, Object> map = new HashMap<String, Object>();
Trader entity = traders.get(i);
String path = Constants.WEB_URL + "/public/showimg!showImg.action?imagePath=" + entity.getImg();
map.put("img", path);
map.put("id", entity.getId());
map.put("partyId", entity.getPartyId());
map.put("name", entity.getName());
map.put("remarks", entity.getRemarks());
// map.put("symbols", "btc;eth");
map.put("symbol_name", entity.getSymbols());
map.put("follower_max", entity.getFollower_max());
/**
* 近3周收益week_3_profit
*/
map.put("week_3_profit",
df2.format(Arith.add(entity.getWeek_3_profit(), entity.getDeviation_week_3_profit())));
/**
* 近3周累计金额week_3_order_amount
*/
map.put("week_3_order_amount",
df2.format(Arith.add(entity.getWeek_3_order_amount(), entity.getDeviation_week_3_order_amount())));
/**
* 近3周盈利笔数week_3_order_profit
*/
map.put("week_3_order_profit",
df2.format(Arith.add(entity.getWeek_3_order_profit(), entity.getDeviation_week_3_order_profit())));
/**
* 近3周交易笔数week_3_order_sum
*/
map.put("week_3_order_sum",
df2.format(Arith.add(entity.getWeek_3_order_sum(), entity.getDeviation_week_3_order_sum())));
/**
* 累计金额order_amount
*/
map.put("order_amount",
df2.format(Arith.add(entity.getOrder_amount(), entity.getDeviation_order_amount())));
// map.put("symbol_name", "BTC/USDT;ETH/USDT");
map.put("profit", df2.format(Arith.add(entity.getProfit(), entity.getDeviation_profit())));
map.put("order_profit", (int) Arith.add(entity.getOrder_profit(), entity.getDeviation_order_profit()));
map.put("order_loss", (int) Arith.add(entity.getOrder_loss(), entity.getDeviation_order_loss()));
map.put("order_sum", (int) Arith.add(Arith.add(entity.getOrder_profit(), entity.getOrder_loss()),
Arith.add(entity.getDeviation_order_profit(), entity.getDeviation_order_loss())));
map.put("follower_sum", (int) Arith.add(entity.getFollower_sum(), entity.getDeviation_follower_sum()));
map.put("follower_now", (int) Arith.add(entity.getFollower_now(), entity.getDeviation_follower_now()));
// Deviation_w
/**
* 近3周收益率 = 近3周收益/近3周累计金额 + 近3周收益率偏差值
*/
map.put("week_3_profit_ratio",
df2.format(Arith.add(Arith.mul(entity.getDeviation_week_3_profit_ratio(), 100),
Arith.mul(entity.getWeek_3_profit_ratio(), 100))));
/**
* 近3周胜率 week_3_order_profit_ratio
*/
double week_3_order_profit_ratio = 0;
if(Arith.add(entity.getWeek_3_order_sum(), entity.getDeviation_week_3_order_sum()) == 0) {
week_3_order_profit_ratio = 0;
}else {
week_3_order_profit_ratio = Arith.mul(
Arith.div(Arith.add(entity.getWeek_3_order_profit(), entity.getDeviation_week_3_order_profit()),
Arith.add(entity.getWeek_3_order_sum(), entity.getDeviation_week_3_order_sum())),
100);
}
if (week_3_order_profit_ratio > 100) {
week_3_order_profit_ratio = 100;
}
if (week_3_order_profit_ratio < 0) {
week_3_order_profit_ratio = 0;
}
map.put("week_3_order_profit_ratio", df2.format(week_3_order_profit_ratio));
/**
* 累计收益率
*/
map.put("profit_ratio", df2.format(Arith.add(Arith.mul(entity.getDeviation_profit_ratio(), 100),
Arith.mul(entity.getProfit_ratio(), 100))));
map.put("profit_share_ratio", df2.format(Arith.mul(entity.getProfit_share_ratio(), 100)));
result_traders.add(map);
}
return result_traders;
}
public void update(Trader entity) {
this.getHibernateTemplate().update(entity);
}
public void updateTrader(Trader entity) {
List<ContractOrder> orders = contractOrderService.findSubmitted(entity.getPartyId().toString(),"","");
double week_3_profit = 0;
double week_3_order_amount = 0;;
if(orders != null) {
Date date_now = new Date();// 取时间
for(ContractOrder order : orders) {
double last_days = 22;
try {
last_days = daysBetween(date_now, order.getCreate_time());
} catch (ParseException e) {
e.printStackTrace();
}
if (last_days <= 21 ) {
week_3_profit = Arith.add(week_3_profit, order.getProfit());
week_3_order_amount = Arith.add(week_3_order_amount, Arith.mul(order.getVolume_open(), order.getUnit_amount()));
}
}
if(week_3_order_amount != 0) {
entity.setWeek_3_profit_ratio(Arith.div(week_3_profit, week_3_order_amount));
}else {
entity.setWeek_3_profit_ratio(0);
}
}
if( entity.getOrder_amount() != 0) {
entity.setProfit_ratio(Arith.div(entity.getProfit(), entity.getOrder_amount()));
}else {
entity.setProfit_ratio(0);
}
update(entity);
}
public static int daysBetween(Date smdate, Date bdate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
smdate = sdf.parse(sdf.format(smdate));
bdate = sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days = (time2 - time1) / (1000 * 3600 * 24);
return Integer.parseInt(String.valueOf(between_days));
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
public void setContractOrderService(ContractOrderService contractOrderService) {
this.contractOrderService = contractOrderService;
}
}

View File

@@ -0,0 +1,112 @@
package project.follow.internal;
import java.io.Serializable;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.util.Arith;
import kernel.util.StringUtils;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.Constants;
import project.follow.Trader;
import project.follow.TraderUser;
import project.follow.TraderUserService;
import project.party.PartyService;
import project.party.model.Party;
public class TraderUserServiceImpl extends HibernateDaoSupport implements TraderUserService {
private PartyService partyService;
private PagedQueryDao pagedQueryDao;
public List<Map<String, Object>> getPaged(int pageNo, int pageSize, String partyId, String type){
StringBuffer queryString = new StringBuffer("");
queryString.append(" FROM ");
queryString.append(" TraderUser ");
queryString.append(" where 1=1 ");
Map<String, Object> parameters = new HashMap();
queryString.append(" and partyId = :partyId");
parameters.put("partyId", partyId );
// if (!StringUtils.isNullOrEmpty(state)) {
// queryString.append(" and state =:state ");
// parameters.put("state", state);
// }
Page page = this.pagedQueryDao.pagedQueryHql(pageNo, pageSize, queryString.toString(), parameters);
List<Map<String, Object>> data = this.bulidData(page.getElements());
return data;
}
private List<Map<String, Object>> bulidData(List<TraderUser> traderUsers) {
List<Map<String, Object>> result_traders = new ArrayList();
DecimalFormat df2 = new DecimalFormat("#.##");
df2.setRoundingMode(RoundingMode.FLOOR);// 向下取整
if (traderUsers == null) {
return result_traders;
}
for (int i = 0; i < traderUsers.size(); i++) {
Map<String, Object> map = new HashMap<String, Object>();
TraderUser entity = traderUsers.get(i);
map.put("name", entity.getName());
/**
* 累计金额order_amount
*/
map.put("amount_sum", df2.format(entity.getAmount_sum()));
map.put("profit", df2.format(entity.getProfit()));
result_traders.add(map);
}
return result_traders;
}
@Override
public TraderUser saveTraderUserByPartyId(Serializable partyId) {
List<TraderUser> list = (List<TraderUser>) getHibernateTemplate().find(" FROM TraderUser WHERE partyId = ?",
new Object[] { partyId });
if (list.size() > 0) {
TraderUser traderUser = list.get(0);
return traderUser;
} else {
Party party = this.partyService.cachePartyBy(partyId, true);
TraderUser traderUser = new TraderUser();
traderUser.setPartyId(partyId);
traderUser.setName(party.getUsername());
traderUser.setCreate_time(party.getCreateTime());
save(traderUser);
return traderUser;
}
}
public void save(TraderUser traderUser) {
this.getHibernateTemplate().save(traderUser);
}
public void update(TraderUser traderUser) {
this.getHibernateTemplate().update(traderUser);
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
this.pagedQueryDao = pagedQueryDao;
}
}

View File

@@ -0,0 +1,877 @@
package project.follow.web;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import kernel.exception.BusinessException;
import kernel.util.Arith;
import kernel.util.DateUtils;
import kernel.util.StringUtils;
import kernel.web.PageActionSupport;
import project.Constants;
import project.follow.AdminTraderService;
import project.follow.Trader;
import project.party.PartyService;
import project.party.model.Party;
public class AdminTraderAction extends PageActionSupport {
private static final long serialVersionUID = 6138149637303319862L;
private static Log logger = LogFactory.getLog(AdminTraderAction.class);
private AdminTraderService adminTraderService;
private PartyService partyService;
/**
* 查询参数
*/
private String name_para;
private String username_para;
/**
* 修改参数
*/
/**
* 用户名称
*/
/**
* 用户Uid
*/
private String usercode;
private String id;
/**
* 交易员名称
*/
private String name;
/**
* 交易员简介
*/
private String remarks;
/**
* 带单币种(多品种的话用;隔开)
*/
private String symbols;
/**
* 近3周收益
*/
private double week_3_profit;
/**
* 近3周累计金额
*/
private double week_3_order_amount;
/**
* 近3周收益率
*/
private double week_3_profit_ratio;
/**
* 近3周盈利笔数
*/
private int week_3_order_profit;
/**
* 近3周交易笔数
*/
private int week_3_order_sum;
/**
* 累计金额
*/
private double order_amount;
/**
* 累计收益
*/
private double profit;
/**
* 累计收益率
*/
private double profit_ratio;
/**
* 累计盈利笔数
*/
private int order_profit;
/**
* 累计亏损笔数
*/
private int order_loss;
/**
* 累计交易笔数
*/
private int order_sum;
/**
* 累计跟随人数
*/
private int follower_sum;
/**
* 利润分成比例---PROFIT_SHARE_RATIO
*/
private double profit_share_ratio;
/**
* 状态(是否开启跟单)---STATE,0为未开启1为开启
*/
private String state;
/**
* 当前跟随人数---FOLLOWER_NOW
*/
private int follower_now;
/**
* 此次跟单最多跟随人数---FOLLOWER_MAX
*/
private int follower_max;
/**
* 入驻时间----CREATE_TIME
*/
private Date create_time;
/**
* 头像图片---IMG
*/
private String img;
/**
* 近3周收益--------------------偏差值
*/
private double deviation_week_3_profit;
/**
* 近3周累计金额-偏差值
*/
private double deviation_week_3_order_amount;
/**
* 近3周收益率-偏差值
*/
private double deviation_week_3_profit_ratio;
/**
* 近3周盈利笔数-偏差值
*/
private int deviation_week_3_order_profit;
/**
* 近3周交易笔数-偏差值
*/
private int deviation_week_3_order_sum;
/**
* 累计金额-偏差值
*/
private double deviation_order_amount;
/**
* 累计收益-偏差值
*/
private double deviation_profit;
/**
* 累计收益率-偏差值
*/
private double deviation_profit_ratio;
/**
* 累计盈利笔数-偏差值
*/
private int deviation_order_profit;
/**
* 累计亏损笔数-偏差值
*/
private int deviation_order_loss;
/**
* 累计交易笔数-偏差值
*/
private int deviation_order_sum;
/**
* 累计跟随人数-偏差值
*/
private int deviation_follower_sum;
/**
* 当前跟随人数-偏差值---DEVIATION_FOLLOWER_NOW
*/
private int deviation_follower_now;
/**
* 跟单最小下单数
*/
private int follow_volumn_min;
public String list() {
this.pageSize = 20;
this.page = this.adminTraderService.pagedQuery(this.pageNo, this.pageSize, this.name_para, this.username_para);
for (Map<String, Object> data : (List<Map<String, Object>>) (page.getElements())) {
data.put("profit_ratio", Arith.mul(Arith.add(Double.parseDouble(data.get("profit_ratio").toString()),
Double.parseDouble(data.get("deviation_profit_ratio").toString())), 100));
data.put("profit_share_ratio",
Arith.mul(Double.parseDouble(data.get("profit_share_ratio").toString()), 100));
data.put("follower_now", Arith.add(Double.parseDouble(data.get("follower_now").toString()),
Double.parseDouble(data.get("deviation_follower_now").toString())));
data.put("follower_sum", Arith.add(Double.parseDouble(data.get("follower_sum").toString()),
Double.parseDouble(data.get("deviation_follower_sum").toString())));
data.put("profit", Arith.add(Double.parseDouble(data.get("profit").toString()),
Double.parseDouble(data.get("deviation_profit").toString())));
}
return "list";
}
public String toAdd() {
return "add";
}
private String verification() {
if (StringUtils.isEmptyString(this.name))
return "请输入交易员名称";
if (StringUtils.isEmptyString(this.img))
return "请上传交易员头像";
if (this.create_time == null)
return "请输入入驻时间";
// if (StringUtils.isEmptyString(this.remarks))
// return "请输入交易员简介";
if (StringUtils.isEmptyString(this.symbols))
return "请输入带币品种";
// if (Arith.add(this.profit,this.deviation_profit) < 0.0D)
// return "累计收益加偏差值不能小于0";
// if (Arith.add(this.profit_ratio,this.deviation_profit_ratio) < 0.0D)
// return "累计收益率加偏差值不能小于0";
if (Arith.add(this.order_profit, this.deviation_order_profit) < 0)
return "累计盈利笔数加偏差值不能小于0";
if (Arith.add(this.order_loss, this.deviation_order_loss) < 0)
return "累计亏损笔数加偏差值不能小于0";
// if (Arith.add(this.week_3_profit,this.deviation_week_3_profit) < 0.0D)
// return "近3周收益加偏差值不能小于0";
if (Arith.add(this.week_3_order_amount, this.deviation_week_3_order_amount) < 0.0D)
return "近3周累计金额加偏差值不能小于0";
// if (Arith.add(this.week_3_profit_ratio,this.deviation_week_3_profit_ratio) < 0.0D)
// return "近3周收益率加偏差值不能小于0";
if (Arith.add(this.week_3_order_profit, this.deviation_week_3_order_profit) < 0)
return "近3周盈利笔数加偏差值不能小于0";
if (Arith.add(this.week_3_order_sum, this.deviation_week_3_order_sum) < 0)
return "近3周交易笔数加偏差值不能小于0";
if (Arith.add(this.order_amount, this.deviation_order_amount) < 0.0D)
return "累计金额加偏差值不能小于0";
if (Arith.add(this.follower_sum, this.deviation_follower_sum) < 0)
return "累计跟随加偏差值人数不能小于0";
if (Arith.add(this.follower_now, this.deviation_follower_now) < 0)
return "当前跟随人数加偏差值不能小于0";
if (this.profit_share_ratio < 0.0D)
return "利润分成比例不能小于0";
if (this.follower_max <= 0)
return "此次跟单最多跟随人数不能小于等于0";
if (StringUtils.isEmptyString(this.img))
return "请上传头像";
if (this.follower_max < Arith.add(this.follower_now, this.deviation_follower_now))
return "此次跟单最多跟随人数不能小于当前跟随人数加偏差值";
if (this.follow_volumn_min < 0)
return "最小跟单张数不能小于0";
return null;
}
public String add() {
try {
this.error = verification();
if (!StringUtils.isNullOrEmpty(this.error))
return toAdd();
Party party = this.partyService.findPartyByUsercode(usercode);
if (party == null) {
this.error = "UID不存在!";
return toAdd();
}
if (Constants.SECURITY_ROLE_TEST.equals(party.getRolename())) {
this.error = "试用用户无法添加";
return toAdd();
}
if (this.adminTraderService.findByPartyId(party.getId().toString()) != null) {
this.error = "交易员已存在!";
return toAdd();
}
Trader trader = new Trader();
trader.setPartyId(party.getId());
trader.setName(this.name);
trader.setRemarks(this.remarks);
trader.setSymbols(this.symbols);
/**
* 统计数据
*/
trader.setWeek_3_profit(this.week_3_profit);
trader.setWeek_3_order_amount(this.week_3_order_amount);
trader.setWeek_3_profit_ratio(Arith.div(this.week_3_profit_ratio, 100));
trader.setWeek_3_order_profit(this.week_3_order_profit);
trader.setWeek_3_order_sum(this.week_3_order_sum);
trader.setOrder_amount(this.order_amount);
trader.setProfit(this.profit);
trader.setProfit_ratio(Arith.div(this.profit_ratio, 100));
trader.setOrder_profit(this.order_profit);
trader.setOrder_loss(this.order_loss);
trader.setOrder_sum((int) Arith.add(this.order_loss, this.order_profit));
trader.setFollower_sum(this.follower_sum);
trader.setFollower_now(this.follower_now);
/**
* 偏差值Deviation_w
*/
trader.setDeviation_week_3_profit(this.deviation_week_3_profit);
trader.setDeviation_week_3_order_amount(this.deviation_week_3_order_amount);
trader.setDeviation_week_3_profit_ratio(Arith.div(this.deviation_week_3_profit_ratio, 100));
trader.setDeviation_week_3_order_profit(this.deviation_week_3_order_profit);
trader.setDeviation_week_3_order_sum(this.deviation_week_3_order_sum);
trader.setDeviation_order_amount(this.deviation_order_amount);
trader.setDeviation_profit(this.deviation_profit);
trader.setDeviation_profit_ratio(Arith.div(this.deviation_profit_ratio, 100));
trader.setDeviation_order_profit(this.deviation_order_profit);
trader.setDeviation_order_loss(this.deviation_order_loss);
trader.setDeviation_order_sum((int) Arith.add(this.deviation_order_loss, this.deviation_order_profit));
trader.setDeviation_follower_sum(this.deviation_follower_sum);
trader.setDeviation_follower_now(this.deviation_follower_now);
trader.setProfit_share_ratio(Arith.div(this.profit_share_ratio, 100));
trader.setState(this.state);
trader.setFollower_max(this.follower_max);
trader.setCreate_time(this.create_time);
trader.setImg(this.img);
trader.setFollow_volumn_min(follow_volumn_min);
this.adminTraderService.save(trader);
this.message = "操作成功";
} catch (BusinessException e) {
this.error = e.getMessage();
return toAdd();
} catch (Throwable t) {
logger.error("UserAction.register error ", t);
this.error = "[ERROR] " + t.getMessage();
return toAdd();
}
return list();
}
private String verificationUpdate() {
if (StringUtils.isEmptyString(this.name))
return "请输入交易员名称";
if (StringUtils.isEmptyString(this.img))
return "请上传交易员头像";
if (this.create_time == null)
return "请输入入驻时间";
// if (StringUtils.isEmptyString(this.remarks))
// return "请输入交易员简介";
if (StringUtils.isEmptyString(this.symbols))
return "请输入带币品种";
if (this.profit_share_ratio < 0.0D)
return "利润分成比例不能小于0";
if (this.follower_max <= 0)
return "此次跟单最多跟随人数不能小于等于0";
if (StringUtils.isEmptyString(this.img))
return "请上传头像";
// if (Arith.add(this.profit,this.deviation_profit) < 0.0D)
// return "累计收益加偏差值不能小于0";
// if (Arith.add(this.profit_ratio,this.deviation_profit_ratio) < 0.0D)
// return "累计收益率加偏差值不能小于0";
if (Arith.add(this.order_profit, this.deviation_order_profit) < 0)
return "累计盈利笔数加偏差值不能小于0";
if (Arith.add(this.order_loss, this.deviation_order_loss) < 0)
return "累计亏损笔数加偏差值不能小于0";
// if (Arith.add(this.week_3_profit,this.deviation_week_3_profit) < 0.0D)
// return "近3周收益加偏差值不能小于0";
if (Arith.add(this.week_3_order_amount, this.deviation_week_3_order_amount) < 0.0D)
return "近3周累计金额加偏差值不能小于0";
// if (Arith.add(this.week_3_profit_ratio,this.deviation_week_3_profit_ratio) < 0.0D)
// return "近3周收益率加偏差值不能小于0";
if (Arith.add(this.week_3_order_profit, this.deviation_week_3_order_profit) < 0)
return "近3周盈利笔数加偏差值不能小于0";
if (Arith.add(this.week_3_order_sum, this.deviation_week_3_order_sum) < 0)
return "近3周交易笔数加偏差值不能小于0";
if (Arith.add(this.order_amount, this.deviation_order_amount) < 0.0D)
return "累计金额加偏差值不能小于0";
if (Arith.add(this.follower_sum, this.deviation_follower_sum) < 0)
return "累计跟随加偏差值人数不能小于0";
if (Arith.add(this.follower_now, this.deviation_follower_now) < 0)
return "当前跟随人数加偏差值不能小于0";
if (this.follower_max < Arith.add(this.follower_now, this.deviation_follower_now))
return "此次跟单最多跟随人数不能小于当前跟随人数加偏差值";
// if (this.daily_rate < 0.0D) {
// return "日利率不能小于0";
// }
//
if (this.follow_volumn_min < 0)
return "最小跟单张数不能小于0";
return null;
}
public String toUpdate() {
Trader trader = this.adminTraderService.findById(this.id);
Party party = this.partyService.cachePartyBy(trader.getPartyId(), true);
this.usercode = party.getUsercode();
this.name = trader.getName();
this.remarks = trader.getRemarks();
this.symbols = trader.getSymbols();
this.profit = trader.getProfit();
this.profit_ratio = Arith.mul(trader.getProfit_ratio(), 100);
this.order_profit = trader.getOrder_profit();
this.order_loss = trader.getOrder_loss();
this.follower_sum = trader.getFollower_sum();
this.profit_share_ratio = Arith.mul(trader.getProfit_share_ratio(), 100);
this.follower_max = trader.getFollower_max();
this.follower_now = trader.getFollower_now();
this.week_3_profit = trader.getWeek_3_profit();
this.week_3_order_amount = trader.getWeek_3_order_amount();
this.week_3_profit_ratio = Arith.mul(trader.getWeek_3_profit_ratio(), 100);
this.week_3_order_profit = trader.getWeek_3_order_profit();
this.week_3_order_sum = trader.getWeek_3_order_sum();
this.order_amount = trader.getOrder_amount();
/**
* 偏差值Deviation_w
*/
this.deviation_week_3_profit = trader.getDeviation_week_3_profit();
this.deviation_week_3_order_amount = trader.getDeviation_week_3_order_amount();
this.deviation_week_3_profit_ratio = Arith.mul(trader.getDeviation_week_3_profit_ratio(), 100);
this.deviation_week_3_order_profit = trader.getDeviation_week_3_order_profit();
this.deviation_week_3_order_sum = trader.getDeviation_week_3_order_sum();
this.deviation_order_amount = trader.getDeviation_order_amount();
this.deviation_profit = trader.getDeviation_profit();
this.deviation_profit_ratio = Arith.mul(trader.getDeviation_profit_ratio(), 100);
this.deviation_order_profit = trader.getDeviation_order_profit();
this.deviation_order_loss = trader.getDeviation_order_loss();
this.deviation_follower_sum = trader.getDeviation_follower_sum();
this.deviation_follower_now = trader.getDeviation_follower_now();
this.img = trader.getImg();
this.state = trader.getState();
this.create_time = DateUtils.toDate(trader.getCreate_time().toString(), DateUtils.DF_yyyyMMdd);
this.follow_volumn_min = trader.getFollow_volumn_min();
return "update";
}
public String update() {
Trader trader = this.adminTraderService.findById(this.id);
try {
this.error = verificationUpdate();
if (!StringUtils.isNullOrEmpty(this.error))
return "update";
trader.setName(this.name);
trader.setRemarks(this.remarks);
trader.setSymbols(this.symbols);
/**
* 统计数据
*/
trader.setWeek_3_profit(this.week_3_profit);
trader.setWeek_3_order_amount(this.week_3_order_amount);
trader.setWeek_3_profit_ratio(Arith.div(this.week_3_profit_ratio, 100));
trader.setWeek_3_order_profit(this.week_3_order_profit);
trader.setWeek_3_order_sum(this.week_3_order_sum);
trader.setOrder_amount(this.order_amount);
trader.setProfit(this.profit);
trader.setProfit_ratio(Arith.div(this.profit_ratio, 100));
trader.setOrder_profit(this.order_profit);
trader.setOrder_loss(this.order_loss);
trader.setOrder_sum((int) Arith.add(this.order_loss, this.order_profit));
trader.setFollower_sum(this.follower_sum);
trader.setFollower_now(this.follower_now);
/**
* 偏差值Deviation_w
*/
trader.setDeviation_week_3_profit(this.deviation_week_3_profit);
trader.setDeviation_week_3_order_amount(this.deviation_week_3_order_amount);
trader.setDeviation_week_3_profit_ratio(Arith.div(this.deviation_week_3_profit_ratio, 100));
trader.setDeviation_week_3_order_profit(this.deviation_week_3_order_profit);
trader.setDeviation_week_3_order_sum(this.deviation_week_3_order_sum);
trader.setDeviation_order_amount(this.deviation_order_amount);
trader.setDeviation_profit(this.deviation_profit);
trader.setDeviation_profit_ratio(Arith.div(this.deviation_profit_ratio, 100));
trader.setDeviation_order_profit(this.deviation_order_profit);
trader.setDeviation_order_loss(this.deviation_order_loss);
trader.setDeviation_order_sum((int) Arith.add(this.deviation_order_loss, this.deviation_order_profit));
trader.setDeviation_follower_sum(this.deviation_follower_sum);
trader.setDeviation_follower_now(this.deviation_follower_now);
trader.setState(this.state);
trader.setFollower_max(this.follower_max);
trader.setProfit_share_ratio(Arith.div(this.profit_share_ratio, 100));
trader.setCreate_time(this.create_time);
trader.setImg(this.img);
trader.setFollow_volumn_min(follow_volumn_min);
this.adminTraderService.update(trader);
this.message = "操作成功";
return list();
} catch (BusinessException e) {
this.error = e.getMessage();
return "update";
} catch (Throwable t) {
logger.error("update error ", t);
this.error = "程序错误";
return "update";
}
}
public String toDelete() {
try {
this.adminTraderService.delete(this.id);
this.message = "操作成功";
return list();
} catch (BusinessException e) {
this.error = e.getMessage();
return list();
} catch (Throwable t) {
logger.error("update error ", t);
this.error = "程序错误";
return list();
}
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public String getName_para() {
return name_para;
}
public void setName_para(String name_para) {
this.name_para = name_para;
}
public String getUsername_para() {
return username_para;
}
public void setUsername_para(String username_para) {
this.username_para = username_para;
}
public String getUsercode() {
return usercode;
}
public void setUsercode(String usercode) {
this.usercode = usercode;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public String getSymbols() {
return symbols;
}
public void setSymbols(String symbols) {
this.symbols = symbols;
}
public double getProfit() {
return profit;
}
public void setProfit(double profit) {
this.profit = profit;
}
public double getProfit_ratio() {
return profit_ratio;
}
public void setProfit_ratio(double profit_ratio) {
this.profit_ratio = profit_ratio;
}
public int getOrder_profit() {
return order_profit;
}
public void setOrder_profit(int order_profit) {
this.order_profit = order_profit;
}
public int getOrder_loss() {
return order_loss;
}
public void setOrder_loss(int order_loss) {
this.order_loss = order_loss;
}
public int getOrder_sum() {
return order_sum;
}
public void setOrder_sum(int order_sum) {
this.order_sum = order_sum;
}
public int getFollower_sum() {
return follower_sum;
}
public void setFollower_sum(int follower_sum) {
this.follower_sum = follower_sum;
}
public double getProfit_share_ratio() {
return profit_share_ratio;
}
public void setProfit_share_ratio(double profit_share_ratio) {
this.profit_share_ratio = profit_share_ratio;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public int getFollower_now() {
return follower_now;
}
public void setFollower_now(int follower_now) {
this.follower_now = follower_now;
}
public int getFollower_max() {
return follower_max;
}
public void setFollower_max(int follower_max) {
this.follower_max = follower_max;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public void setAdminTraderService(AdminTraderService adminTraderService) {
this.adminTraderService = adminTraderService;
}
public double getWeek_3_profit() {
return week_3_profit;
}
public void setWeek_3_profit(double week_3_profit) {
this.week_3_profit = week_3_profit;
}
public double getWeek_3_order_amount() {
return week_3_order_amount;
}
public void setWeek_3_order_amount(double week_3_order_amount) {
this.week_3_order_amount = week_3_order_amount;
}
public double getWeek_3_profit_ratio() {
return week_3_profit_ratio;
}
public void setWeek_3_profit_ratio(double week_3_profit_ratio) {
this.week_3_profit_ratio = week_3_profit_ratio;
}
public Integer getWeek_3_order_profit() {
return week_3_order_profit;
}
public void setWeek_3_order_profit(Integer week_3_order_profit) {
this.week_3_order_profit = week_3_order_profit;
}
public Integer getWeek_3_order_sum() {
return week_3_order_sum;
}
public void setWeek_3_order_sum(Integer week_3_order_sum) {
this.week_3_order_sum = week_3_order_sum;
}
public double getOrder_amount() {
return order_amount;
}
public void setOrder_amount(double order_amount) {
this.order_amount = order_amount;
}
public double getDeviation_week_3_profit() {
return deviation_week_3_profit;
}
public double getDeviation_week_3_order_amount() {
return deviation_week_3_order_amount;
}
public double getDeviation_week_3_profit_ratio() {
return deviation_week_3_profit_ratio;
}
public int getDeviation_week_3_order_profit() {
return deviation_week_3_order_profit;
}
public int getDeviation_week_3_order_sum() {
return deviation_week_3_order_sum;
}
public double getDeviation_order_amount() {
return deviation_order_amount;
}
public double getDeviation_profit() {
return deviation_profit;
}
public double getDeviation_profit_ratio() {
return deviation_profit_ratio;
}
public int getDeviation_order_profit() {
return deviation_order_profit;
}
public int getDeviation_order_loss() {
return deviation_order_loss;
}
public int getDeviation_order_sum() {
return deviation_order_sum;
}
public int getDeviation_follower_sum() {
return deviation_follower_sum;
}
public int getDeviation_follower_now() {
return deviation_follower_now;
}
public void setWeek_3_order_profit(int week_3_order_profit) {
this.week_3_order_profit = week_3_order_profit;
}
public void setWeek_3_order_sum(int week_3_order_sum) {
this.week_3_order_sum = week_3_order_sum;
}
public void setDeviation_week_3_profit(double deviation_week_3_profit) {
this.deviation_week_3_profit = deviation_week_3_profit;
}
public void setDeviation_week_3_order_amount(double deviation_week_3_order_amount) {
this.deviation_week_3_order_amount = deviation_week_3_order_amount;
}
public void setDeviation_week_3_profit_ratio(double deviation_week_3_profit_ratio) {
this.deviation_week_3_profit_ratio = deviation_week_3_profit_ratio;
}
public void setDeviation_week_3_order_profit(int deviation_week_3_order_profit) {
this.deviation_week_3_order_profit = deviation_week_3_order_profit;
}
public void setDeviation_week_3_order_sum(int deviation_week_3_order_sum) {
this.deviation_week_3_order_sum = deviation_week_3_order_sum;
}
public void setDeviation_order_amount(double deviation_order_amount) {
this.deviation_order_amount = deviation_order_amount;
}
public void setDeviation_profit(double deviation_profit) {
this.deviation_profit = deviation_profit;
}
public void setDeviation_profit_ratio(double deviation_profit_ratio) {
this.deviation_profit_ratio = deviation_profit_ratio;
}
public void setDeviation_order_profit(int deviation_order_profit) {
this.deviation_order_profit = deviation_order_profit;
}
public void setDeviation_order_loss(int deviation_order_loss) {
this.deviation_order_loss = deviation_order_loss;
}
public void setDeviation_order_sum(int deviation_order_sum) {
this.deviation_order_sum = deviation_order_sum;
}
public void setDeviation_follower_sum(int deviation_follower_sum) {
this.deviation_follower_sum = deviation_follower_sum;
}
public void setDeviation_follower_now(int deviation_follower_now) {
this.deviation_follower_now = deviation_follower_now;
}
public int getFollow_volumn_min() {
return follow_volumn_min;
}
public void setFollow_volumn_min(int follow_volumn_min) {
this.follow_volumn_min = follow_volumn_min;
}
}

View File

@@ -0,0 +1,414 @@
package project.follow.web;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import kernel.exception.BusinessException;
import kernel.util.StringUtils;
import kernel.web.PageActionSupport;
import project.follow.AdminTraderFollowUserService;
import project.follow.AdminTraderService;
import project.follow.Trader;
import project.follow.TraderFollowUser;
import project.party.PartyService;
import project.party.model.Party;
public class AdminTraderFollowUserAction extends PageActionSupport {
private static final long serialVersionUID = 8332128342431706931L;
private static Log logger = LogFactory.getLog(AdminTraderFollowUserAction.class);
private AdminTraderService adminTraderService;
private AdminTraderFollowUserService adminTraderFollowUserService;
private PartyService partyService;
/**
* 查询参数 交易员名称
*/
private String name_para;
/**
* 用户名
*/
private String username_para;
/**
* 修改参数
*/
/**
* 用户Uid
*/
private String usercode;
/**
* 添加用户类型 '1':'真实用户','2':'虚假用户'
*/
private String user_type;
private String username;
private String id;
private String trader_usercode;
private String trader_username;
/**
* 跟随购买品种 symbol
*/
private String symbol;
/**
* 跟单固定张数/固定比例---选择 1,固定张数2固定比例
*/
private String follow_type;
/**
* 跟单张数或比例---具体值
*/
private double volume;
/**
* 最大持仓张数
*/
private double volume_max;
/**
* 累计跟单收益 PROFIT
*/
private double profit;
/**
* 累计跟单本金 AMOUNT_SUM
*/
private double amount_sum;
/**
* 止盈百分比
*/
private double stop_profit;
/**
* 止损百分比
*/
private double stop_loss;
public String list() {
this.pageSize = 20;
this.page = this.adminTraderFollowUserService.pagedQuery(this.pageNo, this.pageSize, this.name_para,
this.username_para);
return "list";
}
public String toAdd() {
return "add";
}
private String verification() {
if (StringUtils.isEmptyString(this.trader_usercode))
return "请输入交易员UID";
if (StringUtils.isEmptyString(this.usercode))
return "请输入用户UID";
if (this.volume < 0)
return "跟单张数或比例不能小于0";
if (this.volume_max < 0)
return "最大持仓张数不能小于0";
if (this.profit < 0)
return "累计跟单收益不能小于0";
if (this.amount_sum < 0)
return "累计跟单本金不能小于0";
return null;
}
public String add() {
try {
this.error = verification();
if (!StringUtils.isNullOrEmpty(this.error))
return toAdd();
Party party = this.partyService.findPartyByUsercode(this.usercode);
if (party == null && "1".equals(this.user_type)) {
this.error = "用户UID不存在!";
return toAdd();
}
Party trader_party = this.partyService.findPartyByUsercode(this.trader_usercode);
if (trader_party == null) {
this.error = "交易员不存在!";
return toAdd();
}
Trader trader = this.adminTraderService.findByPartyId(trader_party.getId().toString());
if (trader == null) {
this.error = "交易员不存在!";
return toAdd();
}
TraderFollowUser entity = new TraderFollowUser();
if (party == null) {
entity.setPartyId("");
entity.setUsername(this.username);
} else {
entity.setPartyId(party.getId());
entity.setUsername(party.getUsername());
}
/**
* 跟单固定张数/固定比例---选择 1,固定张数2固定比例
*/
entity.setFollow_type(this.follow_type);
entity.setStop_loss(this.stop_loss);
entity.setStop_profit(this.stop_profit);
entity.setSymbol(this.symbol);
entity.setVolume(this.volume);
entity.setProfit(this.profit);
entity.setAmount_sum(this.amount_sum);
entity.setVolume_max(this.volume_max);
/**
* 状态 是否还在跟随状态 1,跟随2取消跟随
*/
entity.setState("1");
this.adminTraderFollowUserService.save(entity, trader.getId().toString());
this.message = "操作成功";
} catch (BusinessException e) {
this.error = e.getMessage();
return toAdd();
} catch (Throwable t) {
logger.error("error ", t);
this.error = "[ERROR] " + t.getMessage();
return toAdd();
}
return list();
}
private String verificationUpdate() {
if (this.volume < 0)
return "跟单张数或比例不能小于0";
if (this.volume_max < 0)
return "最大持仓张数不能小于0";
if (this.profit < 0)
return "累计跟单收益不能小于0";
if (this.amount_sum < 0)
return "累计跟单本金不能小于0";
return null;
}
public String toUpdate() {
TraderFollowUser entity = adminTraderFollowUserService.findById(this.id);
Trader trader = this.adminTraderService.findByPartyId(entity.getTrader_partyId().toString());
Party party = this.partyService.cachePartyBy(entity.getTrader_partyId().toString(), true);
this.trader_username = trader.getName();
this.trader_usercode = party.getUsercode();
this.username = entity.getUsername();
this.follow_type = entity.getFollow_type();
this.stop_loss = entity.getStop_loss();
this.stop_profit = entity.getStop_profit();
this.symbol = entity.getSymbol();
this.volume = entity.getVolume();
this.volume_max = entity.getVolume_max();
this.profit = entity.getProfit();
this.amount_sum = entity.getAmount_sum();
return "update";
}
public String update() {
try {
this.error = verificationUpdate();
if (!StringUtils.isNullOrEmpty(this.error))
return toUpdate();
TraderFollowUser entity = adminTraderFollowUserService.findById(this.id);
/**
* 跟单固定张数/固定比例---选择 1,固定张数2固定比例
*/
entity.setFollow_type(this.follow_type);
entity.setSymbol(this.symbol);
entity.setVolume(this.volume);
entity.setVolume_max(this.volume_max);
entity.setProfit(this.profit);
entity.setAmount_sum(this.amount_sum);
/**
* 状态 是否还在跟随状态 1,跟随2取消跟随
*/
entity.setState("1");
this.adminTraderFollowUserService.update(entity);
this.message = "操作成功";
return list();
} catch (BusinessException e) {
this.error = e.getMessage();
return toUpdate();
} catch (Throwable t) {
logger.error("update error ", t);
this.error = "程序错误";
return toUpdate();
}
}
public String toCancel() {
try {
this.adminTraderFollowUserService.delete(this.id);
this.message = "操作成功";
return list();
} catch (BusinessException e) {
this.error = e.getMessage();
return list();
} catch (Throwable t) {
logger.error("update error ", t);
this.error = "程序错误";
return list();
}
}
public PartyService getPartyService() {
return partyService;
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public String getName_para() {
return name_para;
}
public void setName_para(String name_para) {
this.name_para = name_para;
}
public String getUsername_para() {
return username_para;
}
public void setUsername_para(String username_para) {
this.username_para = username_para;
}
public String getUsercode() {
return usercode;
}
public void setUsercode(String usercode) {
this.usercode = usercode;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTrader_usercode() {
return trader_usercode;
}
public void setTrader_usercode(String trader_usercode) {
this.trader_usercode = trader_usercode;
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public String getFollow_type() {
return follow_type;
}
public void setFollow_type(String follow_type) {
this.follow_type = follow_type;
}
public double getVolume() {
return volume;
}
public void setVolume(double volume) {
this.volume = volume;
}
public double getVolume_max() {
return volume_max;
}
public void setVolume_max(double volume_max) {
this.volume_max = volume_max;
}
public double getStop_profit() {
return stop_profit;
}
public void setStop_profit(double stop_profit) {
this.stop_profit = stop_profit;
}
public double getStop_loss() {
return stop_loss;
}
public void setStop_loss(double stop_loss) {
this.stop_loss = stop_loss;
}
public String getUser_type() {
return user_type;
}
public void setUser_type(String user_type) {
this.user_type = user_type;
}
public void setAdminTraderService(AdminTraderService adminTraderService) {
this.adminTraderService = adminTraderService;
}
public void setAdminTraderFollowUserService(AdminTraderFollowUserService adminTraderFollowUserService) {
this.adminTraderFollowUserService = adminTraderFollowUserService;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getTrader_username() {
return trader_username;
}
public void setTrader_username(String trader_username) {
this.trader_username = trader_username;
}
public double getProfit() {
return profit;
}
public double getAmount_sum() {
return amount_sum;
}
public void setProfit(double profit) {
this.profit = profit;
}
public void setAmount_sum(double amount_sum) {
this.amount_sum = amount_sum;
}
}

View File

@@ -0,0 +1,129 @@
package project.follow.web;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import kernel.web.PageActionSupport;
import project.follow.AdminTraderFollowUserOrderService;
import project.follow.AdminTraderFollowUserService;
import project.follow.AdminTraderService;
import project.party.PartyService;
public class AdminTraderFollowUserOrderAction extends PageActionSupport {
private static final long serialVersionUID = -8594296082160028590L;
private static Log logger = LogFactory.getLog(AdminTraderFollowUserOrderAction.class);
private AdminTraderFollowUserOrderService adminTraderFollowUserOrderService;
private PartyService partyService;
/**
* 查询参数 交易员名称
*/
private String name_para;
/**
* 用户名
*/
private String username_para;
private String rolename_para;
/**
* 添加用户类型 '1':'真实用户','2':'虚假用户'
*/
private String user_type;
private String username;
private String id;
public String list() {
this.pageSize = 20;
this.page = this.adminTraderFollowUserOrderService.pagedQuery(this.pageNo, this.pageSize, this.name_para,
this.username_para,this.rolename_para);
return "list";
}
public PartyService getPartyService() {
return partyService;
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public String getName_para() {
return name_para;
}
public void setName_para(String name_para) {
this.name_para = name_para;
}
public String getUsername_para() {
return username_para;
}
public void setUsername_para(String username_para) {
this.username_para = username_para;
}
public String getUser_type() {
return user_type;
}
public String getUsername() {
return username;
}
public String getId() {
return id;
}
public void setAdminTraderFollowUserOrderService(AdminTraderFollowUserOrderService adminTraderFollowUserOrderService) {
this.adminTraderFollowUserOrderService = adminTraderFollowUserOrderService;
}
public void setUser_type(String user_type) {
this.user_type = user_type;
}
public void setUsername(String username) {
this.username = username;
}
public void setId(String id) {
this.id = id;
}
public String getRolename_para() {
return rolename_para;
}
public void setRolename_para(String rolename_para) {
this.rolename_para = rolename_para;
}
}

View File

@@ -0,0 +1,441 @@
package project.follow.web;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import kernel.exception.BusinessException;
import kernel.util.StringUtils;
import kernel.web.PageActionSupport;
import project.follow.AdminTraderFollowUserService;
import project.follow.AdminTraderOrderService;
import project.follow.AdminTraderService;
import project.follow.Trader;
import project.follow.TraderFollowUser;
import project.follow.TraderOrder;
import project.item.ItemService;
import project.item.model.Item;
import project.party.PartyService;
import project.party.model.Party;
public class AdminTraderOrderAction extends PageActionSupport {
private static final long serialVersionUID = 767846072581152211L;
private static Log logger = LogFactory.getLog(AdminTraderOrderAction.class);
Map<String,String> item_map = new HashMap<String,String>();
private AdminTraderService adminTraderService;
private AdminTraderOrderService adminTraderOrderService;
private ItemService itemService;
private PartyService partyService;
/**
* 查询参数 交易员名称
*/
private String name_para;
/**
* 用户名
*/
private String username_para;
private String rolename_para;
private String id;
/**
* 修改参数
*/
/**
* 交易员Uid
*/
private String usercode;
/**
* 品种
*/
private String symbol;
/**
* 订单 号
*/
private String order_no;
/**
* "buy":买(多) "sell":卖(空)
*/
private String direction;
/**
* 收益
*/
private double profit;
private Date create_time;
/**
* 平仓时间
*/
private Date close_time;
/**
* 杠杆倍数[“开仓”若有10倍多单就不能再下20倍多单]
*/
private Double lever_rate;
/**
* 委托数量(张)
*/
private Double volume_open;
/**
* 涨跌幅
*/
private double change_ratio;
/**
* 状态。submitted 已提交(持仓), created 完成(平仓)
*/
private String state = "created";
/**
* 成交均价(成本)
*/
private Double trade_avg_price;
/**
* 平仓均价
*/
private Double close_avg_price;
public String list() {
this.pageSize = 20;
this.page = this.adminTraderOrderService.pagedQuery(this.pageNo, this.pageSize, this.name_para,
this.username_para,this.rolename_para);
return "list";
}
public String toAdd() {
return "add";
}
private String verification() {
if (StringUtils.isEmptyString(this.usercode))
return "请输入交易员UID";
if (StringUtils.isEmptyString(this.symbol))
return "请输入品种";
if (this.create_time == null)
return "请输入开仓时间";
if (this.close_time == null)
return "请输入平仓时间";
if (this.lever_rate <= 0 || this.lever_rate %1 != 0)
return "杠杆倍数不能小于等于0,并且不能有小数";
if (this.volume_open <= 0 || this.volume_open %1 != 0)
return "委托数量不能小于等于0,并且不能有小数";
if (this.trade_avg_price < 0)
return "买入价格不能小于0";
if (this.close_avg_price < 0)
return "平常价格不能小于0";
return null;
}
public String add() {
try {
this.error = verification();
if (!StringUtils.isNullOrEmpty(this.error))
return toAdd();
Party party = this.partyService.findPartyByUsercode(this.usercode);
if (party == null ) {
this.error = "交易员UID不存在!";
return toAdd();
}
Trader trader = this.adminTraderService.findByPartyId(party.getId().toString());
if (trader == null) {
this.error = "交易员不存在!";
return toAdd();
}
TraderOrder entity = new TraderOrder();
entity.setPartyId(party.getId());
entity.setSymbol(this.symbol);
entity.setProfit(this.profit);
entity.setChange_ratio(this.change_ratio);
entity.setClose_avg_price(this.close_avg_price);
entity.setTrade_avg_price(this.trade_avg_price);
entity.setClose_time(this.close_time);
entity.setCreate_time(this.create_time);
entity.setDirection(this.direction);
entity.setLever_rate(this.lever_rate);
entity.setProfit(this.profit);
entity.setState(this.state);
entity.setVolume_open(this.volume_open);
this.adminTraderOrderService.save(entity);
this.message = "操作成功";
} catch (BusinessException e) {
this.error = e.getMessage();
return toAdd();
} catch (Throwable t) {
logger.error("error ", t);
this.error = "[ERROR] " + t.getMessage();
return toAdd();
}
return list();
}
private String verificationUpdate() {
if (StringUtils.isEmptyString(this.usercode))
return "请输入交易员UID";
if (StringUtils.isEmptyString(this.symbol))
return "请输入品种";
if (this.create_time == null)
return "请输入开仓时间";
if (this.close_time == null)
return "请输入平仓时间";
if (this.lever_rate <= 0 || this.lever_rate %1 != 0)
return "杠杆倍数不能小于等于0,并且不能有小数";
if (this.volume_open <= 0 || this.volume_open %1 != 0)
return "委托数量不能小于等于0,并且不能有小数";
if (this.trade_avg_price < 0)
return "买入价格不能小于0";
if (this.close_avg_price < 0)
return "平常价格不能小于0";
return null;
}
public String toUpdate() {
TraderOrder entity = adminTraderOrderService.findById(this.id);
Party party = this.partyService.cachePartyBy(entity.getPartyId(), true);
this.usercode = party.getUsercode();
this.symbol = entity.getSymbol();
this.profit = entity.getProfit();
this.change_ratio = entity.getChange_ratio();
this.close_avg_price = entity.getClose_avg_price();
this.trade_avg_price = entity.getTrade_avg_price();
this.close_time = entity.getClose_time();
this.create_time = entity.getCreate_time();
this.direction = entity.getDirection();
this.lever_rate = entity.getLever_rate();
this.profit = entity.getProfit();
this.state = entity.getState();
this.volume_open = entity.getVolume_open();
return "update";
}
public String update() {
try {
this.error = verificationUpdate();
if (!StringUtils.isNullOrEmpty(this.error))
return toUpdate();
TraderOrder entity = adminTraderOrderService.findById(this.id);
entity.setSymbol(this.symbol);
entity.setProfit(this.profit);
entity.setChange_ratio(this.change_ratio);
entity.setClose_avg_price(this.close_avg_price);
entity.setTrade_avg_price(this.trade_avg_price);
entity.setClose_time(this.close_time);
entity.setCreate_time(this.create_time);
entity.setDirection(this.direction);
entity.setLever_rate(this.lever_rate);
entity.setProfit(this.profit);
entity.setState(this.state);
entity.setVolume_open(this.volume_open);
this.adminTraderOrderService.update(entity);
this.message = "操作成功";
return list();
} catch (BusinessException e) {
this.error = e.getMessage();
return toUpdate();
} catch (Throwable t) {
logger.error("update error ", t);
this.error = "程序错误";
return toUpdate();
}
}
public String toDelete() {
try {
this.adminTraderOrderService.delete(this.id);
this.message = "操作成功";
return list();
} catch (BusinessException e) {
this.error = e.getMessage();
return list();
} catch (Throwable t) {
logger.error("update error ", t);
this.error = "程序错误";
return list();
}
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public String getName_para() {
return name_para;
}
public void setName_para(String name_para) {
this.name_para = name_para;
}
public String getUsername_para() {
return username_para;
}
public void setUsername_para(String username_para) {
this.username_para = username_para;
}
public String getSymbol() {
return symbol;
}
public String getOrder_no() {
return order_no;
}
public String getDirection() {
return direction;
}
public double getProfit() {
return profit;
}
public Date getCreate_time() {
return create_time;
}
public Date getClose_time() {
return close_time;
}
public Double getLever_rate() {
return lever_rate;
}
public Double getVolume_open() {
return volume_open;
}
public double getChange_ratio() {
return change_ratio;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public void setOrder_no(String order_no) {
this.order_no = order_no;
}
public void setDirection(String direction) {
this.direction = direction;
}
public void setProfit(double profit) {
this.profit = profit;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public void setClose_time(Date close_time) {
this.close_time = close_time;
}
public void setLever_rate(Double lever_rate) {
this.lever_rate = lever_rate;
}
public void setVolume_open(Double volume_open) {
this.volume_open = volume_open;
}
public void setChange_ratio(double change_ratio) {
this.change_ratio = change_ratio;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Double getTrade_avg_price() {
return trade_avg_price;
}
public Double getClose_avg_price() {
return close_avg_price;
}
public void setTrade_avg_price(Double trade_avg_price) {
this.trade_avg_price = trade_avg_price;
}
public void setClose_avg_price(Double close_avg_price) {
this.close_avg_price = close_avg_price;
}
public String getRolename_para() {
return rolename_para;
}
public void setAdminTraderService(AdminTraderService adminTraderService) {
this.adminTraderService = adminTraderService;
}
public void setAdminTraderOrderService(AdminTraderOrderService adminTraderOrderService) {
this.adminTraderOrderService = adminTraderOrderService;
}
public void setRolename_para(String rolename_para) {
this.rolename_para = rolename_para;
}
public String getId() {
return id;
}
public String getUsercode() {
return usercode;
}
public void setId(String id) {
this.id = id;
}
public void setUsercode(String usercode) {
this.usercode = usercode;
}
public Map<String, String> getItem_map() {
List<Item> items = this.itemService.cacheGetAll();
if(items != null) {
for(Item item :items) {
this.item_map.put(item.getSymbol().toString(), item.getName().toString());
}
}
return item_map;
}
public void setItem_map(Map<String, String> item_map) {
this.item_map = item_map;
}
public void setItemService(ItemService itemService) {
this.itemService = itemService;
}
}

View File

@@ -0,0 +1,275 @@
package project.follow.web;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import kernel.exception.BusinessException;
import kernel.util.StringUtils;
import kernel.web.PageActionSupport;
import project.follow.AdminTraderUserService;
import project.follow.TraderUser;
import project.party.PartyService;
import project.party.model.Party;
public class AdminTraderUserAction extends PageActionSupport {
private static final long serialVersionUID = 6847335915005935672L;
private static Log logger = LogFactory.getLog(AdminTraderUserAction.class);
private AdminTraderUserService adminTraderUserService;
private PartyService partyService;
/**
* 查询参数
*/
private String name_para;
private String username_para;
private String rolename_para;
/**
* 修改参数
*/
/**
* 用户Uid
*/
private String usercode;
private String id;
private String name;
/**
* 累计金额
*/
private double amount_sum;
/**
* 累计收益
*/
private double profit;
/**
* 入驻时间----CREATE_TIME
*/
private Date create_time;
public String list() {
this.pageSize = 20;
this.page = this.adminTraderUserService.pagedQuery(this.pageNo, this.pageSize, this.name_para,
this.username_para);
// for (Map<String, Object> data : (List<Map<String, Object>>) (page.getElements())) {
// data.put("profit_ratio", Arith.mul(Double.parseDouble(data.get("profit_ratio").toString()), 100));
// data.put("profit_share_ratio",
// Arith.mul(Double.parseDouble(data.get("profit_share_ratio").toString()), 100));
//
// }
return "list";
}
public String toAdd() {
return "add";
}
private String verification() {
if (this.create_time == null)
return "请输入入驻时间";
if (this.amount_sum < 0.0D)
return "累计金额不能小于0";
if (this.profit < 0.0D)
return "累计收益不能小于0";
if (StringUtils.isEmptyString(this.name))
return "请输入名称";
return null;
}
public String add() {
try {
this.error = verification();
if (!StringUtils.isNullOrEmpty(this.error))
return toAdd();
Party party = this.partyService.findPartyByUsercode(usercode);
if (party == null) {
this.error = "UID不存在!";
return toAdd();
}
TraderUser trader_user = new TraderUser();
trader_user.setPartyId(party.getId());
trader_user.setName(this.name);
trader_user.setAmount_sum(this.amount_sum);
trader_user.setProfit(this.profit);
trader_user.setCreate_time(this.create_time);
this.adminTraderUserService.save(trader_user);
this.message = "操作成功";
} catch (BusinessException e) {
this.error = e.getMessage();
return toAdd();
} catch (Throwable t) {
logger.error("AdminTraderUserAction.add error ", t);
this.error = "[ERROR] " + t.getMessage();
return toAdd();
}
return list();
}
private String verificationUpdate() {
if (this.create_time == null)
return "请输入入驻时间";
if (this.amount_sum < 0.0D)
return "累计金额不能小于0";
if (this.profit < 0.0D)
return "累计收益不能小于0";
if (StringUtils.isEmptyString(this.name))
return "请输入名称";
return null;
}
public String toUpdate() {
TraderUser trader_user = this.adminTraderUserService.findById(this.id);
this.name = trader_user.getName();
this.amount_sum = trader_user.getAmount_sum();
this.profit = trader_user.getProfit();
this.create_time = trader_user.getCreate_time();
return "update";
}
public String update() {
TraderUser trader_user = this.adminTraderUserService.findById(this.id);
try {
this.error = verificationUpdate();
if (!StringUtils.isNullOrEmpty(this.error))
return "update";
trader_user.setName(this.name);
trader_user.setAmount_sum(this.amount_sum);
trader_user.setProfit(this.profit);
trader_user.setCreate_time(this.create_time);
this.adminTraderUserService.update(trader_user);
this.message = "操作成功";
return list();
} catch (BusinessException e) {
this.error = e.getMessage();
return "update";
} catch (Throwable t) {
logger.error("update error ", t);
this.error = "程序错误";
return "update";
}
}
public String toDelete() {
try {
this.adminTraderUserService.delete(this.id);
this.message = "操作成功";
return list();
} catch (BusinessException e) {
this.error = e.getMessage();
return list();
} catch (Throwable t) {
logger.error("update error ", t);
this.error = "程序错误";
return list();
}
}
public PartyService getPartyService() {
return partyService;
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public String getName_para() {
return name_para;
}
public void setName_para(String name_para) {
this.name_para = name_para;
}
public String getUsername_para() {
return username_para;
}
public void setUsername_para(String username_para) {
this.username_para = username_para;
}
public String getUsercode() {
return usercode;
}
public void setUsercode(String usercode) {
this.usercode = usercode;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getProfit() {
return profit;
}
public void setProfit(double profit) {
this.profit = profit;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public String getRolename_para() {
return rolename_para;
}
public double getAmount_sum() {
return amount_sum;
}
public void setRolename_para(String rolename_para) {
this.rolename_para = rolename_para;
}
public void setAmount_sum(double amount_sum) {
this.amount_sum = amount_sum;
}
public void setAdminTraderUserService(AdminTraderUserService adminTraderUserService) {
this.adminTraderUserService = adminTraderUserService;
}
}

View File

@@ -0,0 +1,402 @@
package project.follow.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
// import org.apache.struts2.ServletActionContext;
import kernel.exception.BusinessException;
import kernel.sessiontoken.SessionTokenService;
import kernel.util.Arith;
import kernel.util.DateUtils;
import kernel.util.JsonUtils;
import kernel.util.StringUtils;
import kernel.web.BaseAction;
import kernel.web.ResultObject;
import project.Constants;
import project.contract.ContractOrderService;
import project.follow.Trader;
import project.follow.TraderFollowUser;
import project.follow.TraderFollowUserOrderService;
import project.follow.TraderFollowUserService;
import project.follow.TraderOrderService;
import project.follow.TraderService;
/**
* 交易员api接口
*/
public class TraderAction extends BaseAction {
/**
*
*/
private static final long serialVersionUID = -816097638237895124L;
/**
* 交易员api接口
*/
private static Log logger = LogFactory.getLog(TraderAction.class);
private TraderService traderService;
private TraderFollowUserService traderFollowUserService;
private TraderFollowUserOrderService traderFollowUserOrderService;
private TraderOrderService traderOrderService;
private ContractOrderService contractOrderService;
private String session_token;
private SessionTokenService sessionTokenService;
private String id;
private String orderBy_type;
private String symbol;
/**
* 查询类型。 orders 当前委托单 hisorders 历史委托单 user 跟随者
*/
private String type;
private String name;
private int page_no;
// public String list() throws IOException {
// HttpServletResponse response = ServletActionContext.getResponse();
// response.setContentType("application/json;charset=UTF-8");
// response.setHeader("Access-Control-Allow-Origin", "*");
// ResultObject resultObject = new ResultObject();
// PrintWriter out = response.getWriter();
// List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
//
// try {
// if (!StringUtils.isEmptyString(this.name)) {
// this.name = URLDecoder.decode(this.name, "utf-8");
// }
//
// data = this.traderService.getPaged(this.page_no, 10, this.name, "1", this.orderBy_type);
// if (data != null) {
// for (int i = 0; i < data.size(); i++) {
// Map<String, Object> map = data.get(i);
// if (this.getLoginPartyId() != null) {
// TraderFollowUser user = this.traderFollowUserService.findByPartyIdAndTrader_partyId(
// this.getLoginPartyId().toString(), map.get("partyId").toString());
// if (user != null) {
// /**
// * 1跟随2未跟随
// */
// map.put("follow_state", "1");
// map.remove("partyId");
// } else {
// map.put("follow_state", "2");
// map.remove("partyId");
// }
//
// } else {
// map.put("follow_state", "2");
// map.remove("partyId");
// }
//
// }
//
// }
//
// // List<Trader> data = traderService.findAllState_1();
//
//// resultObject.setData(bulidData(data));
// resultObject.setData(data);
// resultObject.setCode("0");
// } catch (BusinessException e) {
// resultObject.setCode("1");
// resultObject.setMsg(e.getMessage());
// } catch (Exception e) {
// resultObject.setCode("1");
// resultObject.setMsg("程序错误");
// logger.error("error:", e);
// }
//
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
//
// }
//
// public String get() throws IOException {
// HttpServletResponse response = ServletActionContext.getResponse();
// response.setContentType("application/json;charset=UTF-8");
// response.setHeader("Access-Control-Allow-Origin", "*");
// ResultObject resultObject = new ResultObject();
// PrintWriter out = response.getWriter();
//
// try {
//
// Trader data = traderService.findById(id);
//
// resultObject.setData(bulidData(data));
// resultObject.setCode("0");
// } catch (BusinessException e) {
// resultObject.setCode("1");
// resultObject.setMsg(e.getMessage());
// } catch (Exception e) {
// resultObject.setCode("1");
// resultObject.setMsg("程序错误");
// logger.error("error:", e);
// }
//
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
//
// }
private Map<String, Object> bulidData(Trader entity) throws ParseException {
DecimalFormat df2 = new DecimalFormat("#.##");
List<Map<String, Object>> trader_order = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> trader_user = new ArrayList<Map<String, Object>>();
/**
* 跟随用户
*/
if ("user".equals(this.type)) {
trader_user = traderFollowUserService.getPaged(page_no, 10, entity.getPartyId().toString(), "profit");
if (trader_user != null) {
for (Map<String, Object> follow_user : trader_user) {
String username = follow_user.get("name").toString();
char[] username_char = username.toCharArray();
StringBuffer sb = new StringBuffer();
if (username_char.length > 6) {
for (int i = 0; i < username_char.length; i++) {
String aa = "";
if (i < 6) {
aa = String.valueOf(username_char[i]).replaceAll(String.valueOf(username_char[i]), "*");
} else {
aa = String.valueOf(username_char[i]);
}
sb.append(aa);
}
} else {
for (int i = 0; i < username_char.length; i++) {
String aa = "";
if (i < username_char.length) {
aa = String.valueOf(username_char[i]).replaceAll(String.valueOf(username_char[i]), "*");
} else {
aa = String.valueOf(username_char[i]);
}
sb.append(aa);
}
}
follow_user.put("name", sb);
}
}
} else {
/**
* 查询类型。 orders 当前委托单 hisorders 历史委托单 user 跟随者
*/
if ("hisorders".equals(type)) {
trader_order = this.traderOrderService.getPaged(page_no, 10, entity.getPartyId().toString());
} else {
trader_order = this.contractOrderService.getPaged(page_no, 10, entity.getPartyId().toString(), symbol,
type);
}
}
if (trader_order != null) {
for (Map<String, Object> order : trader_order) {
order.put("create_time",
DateUtils.format(
DateUtils.toDate(order.get("create_time").toString(), DateUtils.DF_yyyyMMddHHmmss),
"MM-dd HH:mm:ss"));
if (order.get("close_time") != null && !"".equals(order.get("close_time"))) {
order.put("close_time",
DateUtils.format(
DateUtils.toDate(order.get("close_time").toString(), DateUtils.DF_yyyyMMddHHmmss),
"MM-dd HH:mm:ss"));
} else {
order.put("close_time", "");
}
}
}
Map<String, Object> map = new HashMap<String, Object>();
String path = Constants.WEB_URL + "/public/showimg!showImg.action?imagePath=" + entity.getImg();
map.put("img", path);
map.put("trader_order", trader_order);
map.put("trader_user", trader_user);
map.put("id", entity.getId());
map.put("name", entity.getName());
map.put("remarks", entity.getRemarks());
/**
* 累计金额order_amount
*/
map.put("order_amount", df2.format(Arith.add(entity.getOrder_amount(), entity.getDeviation_order_amount())));
// map.put("symbol_name", "BTC/USDT;ETH/USDT");
map.put("profit", df2.format(Arith.add(entity.getProfit(), entity.getDeviation_profit())));
map.put("order_profit", (int) Arith.add(entity.getOrder_profit(), entity.getDeviation_order_profit()));
map.put("order_loss", (int) Arith.add(entity.getOrder_loss(), entity.getDeviation_order_loss()));
map.put("order_sum", (int) Arith.add(Arith.add(entity.getOrder_profit(), entity.getOrder_loss()),
Arith.add(entity.getDeviation_order_profit(), entity.getDeviation_order_loss())));
map.put("follower_sum", (int) Arith.add(entity.getFollower_sum(), entity.getDeviation_follower_sum()));
map.put("follower_now", (int) Arith.add(entity.getFollower_now(), entity.getDeviation_follower_now()));
/**
* 累计收益率
*/
map.put("profit_ratio", df2.format(Arith.add(Arith.mul(entity.getDeviation_profit_ratio(), 100),
Arith.mul(entity.getProfit_ratio(), 100))));
map.put("profit_share_ratio", Arith.mul(entity.getProfit_share_ratio(), 100));
map.put("follower_max", entity.getFollower_max());
Date date_now = new Date();// 取时间
int days = daysBetween(entity.getCreate_time(), date_now);
if (days < 0) {
days = 0;
}
map.put("create_days", days);
String partyId = this.getLoginPartyId();
if (!StringUtils.isNullOrEmpty(partyId)) {
session_token = sessionTokenService.savePut(partyId);
map.put("session_token", session_token);
}
if (this.getLoginPartyId() != null) {
TraderFollowUser user = this.traderFollowUserService
.findByPartyIdAndTrader_partyId(this.getLoginPartyId().toString(), entity.getPartyId().toString());
if (user != null) {
map.put("follow_volume", user.getVolume());
map.put("follow_volume_max", user.getVolume_max());
/**
* 跟单固定张数/固定比例---选择 1,固定张数2固定比例
*/
map.put("follow_type", user.getFollow_type());
map.put("follow_state", "1");
} else {
map.put("follow_state", "2");
}
} else {
map.put("follow_state", "2");
map.remove("partyId");
}
map.put("follow_volumn_min", entity.getFollow_volumn_min());
return map;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setTraderService(TraderService traderService) {
this.traderService = traderService;
}
public static int daysBetween(Date smdate, Date bdate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
smdate = sdf.parse(sdf.format(smdate));
bdate = sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days = (time2 - time1) / (1000 * 3600 * 24);
return Integer.parseInt(String.valueOf(between_days));
}
public int getPage_no() {
return page_no;
}
public void setPage_no(int page_no) {
this.page_no = page_no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSession_token() {
return session_token;
}
public void setSession_token(String session_token) {
this.session_token = session_token;
}
public void setSessionTokenService(SessionTokenService sessionTokenService) {
this.sessionTokenService = sessionTokenService;
}
public String getOrderBy_type() {
return orderBy_type;
}
public void setOrderBy_type(String orderBy_type) {
this.orderBy_type = orderBy_type;
}
public void setContractOrderService(ContractOrderService contractOrderService) {
this.contractOrderService = contractOrderService;
}
public String getSymbol() {
return symbol;
}
public String getType() {
return type;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public void setType(String type) {
this.type = type;
}
public void setTraderFollowUserService(TraderFollowUserService traderFollowUserService) {
this.traderFollowUserService = traderFollowUserService;
}
public void setTraderFollowUserOrderService(TraderFollowUserOrderService traderFollowUserOrderService) {
this.traderFollowUserOrderService = traderFollowUserOrderService;
}
public void setTraderOrderService(TraderOrderService traderOrderService) {
this.traderOrderService = traderOrderService;
}
}

View File

@@ -0,0 +1,341 @@
package project.follow.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
// import org.apache.struts2.ServletActionContext;
import kernel.exception.BusinessException;
import kernel.sessiontoken.SessionTokenService;
import kernel.util.JsonUtils;
import kernel.web.BaseAction;
import kernel.web.ResultObject;
import project.follow.Trader;
import project.follow.TraderFollowUser;
import project.follow.TraderFollowUserService;
import project.follow.TraderService;
import project.party.PartyService;
import project.party.model.Party;
/**
* 用户准备跟随交易员api接口
*/
public class TraderFollowUserAction extends BaseAction {
private static final long serialVersionUID = 623416500874018208L;
/**
* 交易员api接口
*/
private static Log logger = LogFactory.getLog(TraderFollowUserAction.class);
private TraderFollowUserService traderFollowUserService;
private TraderService traderService;
private PartyService partyService;
private String session_token;
private SessionTokenService sessionTokenService;
private String trader_id;
private String trader_name;
/**
* 跟随购买品种 symbol
*/
private String symbol;
/**
* 跟单固定张数/固定比例---选择 1,固定张数2固定比例
*/
private String follow_type;
/**
* 跟单张数或比例---具体值
*/
private double volume;
/**
* 最大持仓张数
*/
private double volume_max;
/**
* 止盈百分比
*/
private double stop_profit;
/**
* 止损百分比
*/
private double stop_loss;
/**
* 用户跟随交易员
*/
// public String saveCreate() throws IOException {
// HttpServletResponse response = ServletActionContext.getResponse();
// response.setContentType("application/json;charset=UTF-8");
// response.setHeader("Access-Control-Allow-Origin", "*");
// ResultObject resultObject = new ResultObject();
// resultObject = readSecurityContextFromSession(resultObject);
// PrintWriter out = response.getWriter();
// if (!"0".equals(resultObject.getCode())) {
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
// String partyId = this.getLoginPartyId();
// try {
//
// Object object = this.sessionTokenService.cacheGet(session_token);
// this.sessionTokenService.del(session_token);
// if ((object == null) || (!this.getLoginPartyId().equals((String) object))) {
// resultObject.setCode("1");
// resultObject.setMsg("请稍后再试");
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
//
// Party party = this.partyService.cachePartyBy(partyId, false);
// if (!party.getEnabled()) {
// throw new BusinessException(506, error);
// }
//// if (!party.getKyc_authority()) {
//// resultObject.setCode("401");
//// resultObject.setMsg(error);
//// this.result = JsonUtils.getJsonString(resultObject);
//// out.println(this.result);
//// return null;
//// }
// TraderFollowUser entity = new TraderFollowUser();
// entity.setPartyId(partyId);
// entity.setUsername(party.getUsername());
// /**
// * 跟单固定张数/固定比例---选择 1,固定张数2固定比例
// */
// entity.setFollow_type(follow_type);
// entity.setStop_loss(stop_loss);
// entity.setStop_profit(stop_profit);
// entity.setSymbol(symbol);
// entity.setVolume(volume);
// entity.setVolume_max(volume_max);
// /**
// * 状态 是否还在跟随状态 1,跟随2取消跟随
// */
// entity.setState("1");
//
// this.traderFollowUserService.save(entity, trader_id);
// resultObject.setCode("0");
// } catch (BusinessException e) {
// resultObject.setCode(e.getSign() + "");
// resultObject.setMsg(e.getMessage());
// } catch (Exception e) {
// resultObject.setCode("1");
// resultObject.setMsg("程序错误");
// logger.error("error:", e.fillInStackTrace());
// } finally {
//
// }
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
//
// public String changeFollow() throws IOException {
// HttpServletResponse response = ServletActionContext.getResponse();
// response.setContentType("application/json;charset=UTF-8");
// response.setHeader("Access-Control-Allow-Origin", "*");
// ResultObject resultObject = new ResultObject();
// resultObject = readSecurityContextFromSession(resultObject);
// PrintWriter out = response.getWriter();
// if (!"0".equals(resultObject.getCode())) {
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
// String partyId = this.getLoginPartyId();
// try {
//
// Object object = this.sessionTokenService.cacheGet(session_token);
// this.sessionTokenService.del(session_token);
// if ((object == null) || (!this.getLoginPartyId().equals((String) object))) {
// resultObject.setCode("1");
// resultObject.setMsg("请稍后再试");
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
//
// Party party = this.partyService.cachePartyBy(partyId, false);
// if (!party.getEnabled()) {
// throw new BusinessException(506, error);
// }
//// if (!party.getKyc_authority()) {
//// resultObject.setCode("401");
//// resultObject.setMsg(error);
//// this.result = JsonUtils.getJsonString(resultObject);
//// out.println(this.result);
//// return null;
//// }
// Trader trader = this.traderService.findById(trader_id);
// TraderFollowUser entity = this.traderFollowUserService.findByPartyIdAndTrader_partyId(partyId,
// trader.getPartyId().toString());
// /**
// * 跟单固定张数/固定比例---选择 1,固定张数2固定比例
// */
// entity.setFollow_type(follow_type);
// entity.setStop_loss(stop_loss);
// entity.setStop_profit(stop_profit);
// entity.setSymbol(symbol);
// entity.setVolume(volume);
// entity.setVolume_max(volume_max);
// /**
// * 状态 是否还在跟随状态 1,跟随2取消跟随
// */
// entity.setState("1");
//
// this.traderFollowUserService.update(entity);
// resultObject.setCode("0");
// } catch (BusinessException e) {
// resultObject.setCode(e.getSign() + "");
// resultObject.setMsg(e.getMessage());
// } catch (Exception e) {
// resultObject.setCode("1");
// resultObject.setMsg("程序错误");
// logger.error("error:", e.fillInStackTrace());
// } finally {
//
// }
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
//
// /**
// * 取消跟随
// */
// public String cancelFollow() throws IOException {
// HttpServletResponse response = ServletActionContext.getResponse();
// response.setContentType("application/json;charset=UTF-8");
// response.setHeader("Access-Control-Allow-Origin", "*");
// ResultObject resultObject = new ResultObject();
// resultObject = readSecurityContextFromSession(resultObject);
// PrintWriter out = response.getWriter();
// if (!"0".equals(resultObject.getCode())) {
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
// String partyId = this.getLoginPartyId();
// try {
// Trader trader = this.traderService.findById(this.trader_id);
// TraderFollowUser traderFoolowUser = this.traderFollowUserService.findByPartyIdAndTrader_partyId(partyId,
// trader.getPartyId().toString());
// if (traderFoolowUser != null) {
// this.traderFollowUserService.deleteCancel(traderFoolowUser.getId().toString());
// }
//
// resultObject.setCode("0");
// } catch (BusinessException e) {
// resultObject.setCode(e.getSign() + "");
// resultObject.setMsg(e.getMessage());
// } catch (Exception e) {
// resultObject.setCode("1");
// resultObject.setMsg("程序错误");
// logger.error("error:", e.fillInStackTrace());
// } finally {
//
// }
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
public String getTrader_id() {
return trader_id;
}
public void setTrader_id(String trader_id) {
this.trader_id = trader_id;
}
public String getTrader_name() {
return trader_name;
}
public void setTrader_name(String trader_name) {
this.trader_name = trader_name;
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public String getFollow_type() {
return follow_type;
}
public void setFollow_type(String follow_type) {
this.follow_type = follow_type;
}
public double getVolume() {
return volume;
}
public void setVolume(double volume) {
this.volume = volume;
}
public double getVolume_max() {
return volume_max;
}
public void setVolume_max(double volume_max) {
this.volume_max = volume_max;
}
public double getStop_profit() {
return stop_profit;
}
public void setStop_profit(double stop_profit) {
this.stop_profit = stop_profit;
}
public double getStop_loss() {
return stop_loss;
}
public void setStop_loss(double stop_loss) {
this.stop_loss = stop_loss;
}
public void setTraderFollowUserService(TraderFollowUserService traderFollowUserService) {
this.traderFollowUserService = traderFollowUserService;
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public String getSession_token() {
return session_token;
}
public void setSession_token(String session_token) {
this.session_token = session_token;
}
public void setSessionTokenService(SessionTokenService sessionTokenService) {
this.sessionTokenService = sessionTokenService;
}
public void setTraderService(TraderService traderService) {
this.traderService = traderService;
}
}

View File

@@ -0,0 +1,249 @@
package project.follow.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
// import org.apache.struts2.ServletActionContext;
import kernel.exception.BusinessException;
import kernel.util.JsonUtils;
import kernel.web.BaseAction;
import kernel.web.ResultObject;
import project.Constants;
import project.contract.ContractOrderService;
import project.follow.Trader;
import project.follow.TraderFollowUser;
import project.follow.TraderFollowUserOrderService;
import project.follow.TraderFollowUserService;
import project.follow.TraderService;
import project.follow.TraderUser;
import project.follow.TraderUserService;
/**
* 用户api接口累计数据
*/
public class TraderUserAction extends BaseAction {
/**
*
*/
private static final long serialVersionUID = -3217562997540384508L;
/**
* 交易员api接口
*/
private static Log logger = LogFactory.getLog(TraderUserAction.class);
private TraderService traderService;
private TraderUserService traderUserService;
private TraderFollowUserService traderFollowUserService;
private TraderFollowUserOrderService traderFollowUserOrderService;
private ContractOrderService contractOrderService;
private String id;
private String orderBy_type;
private String symbol;
/**
* 查询类型。 orders 我的跟单 trader 我的交易员
*/
private String type;
/**
* 我的跟单查询类型。 orders 当前委托单 hisorders 历史委托单
*/
private String type_order;
private String name;
private int page_no;
// public String get() throws IOException {
// HttpServletResponse response = ServletActionContext.getResponse();
// response.setContentType("application/json;charset=UTF-8");
// response.setHeader("Access-Control-Allow-Origin", "*");
// ResultObject resultObject = new ResultObject();
// PrintWriter out = response.getWriter();
// resultObject = readSecurityContextFromSession(resultObject);
// if (!"0".equals(resultObject.getCode())) {
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
// }
// try {
//
// TraderUser data = traderUserService.saveTraderUserByPartyId(this.getLoginPartyId());
//
// resultObject.setData(bulidData(data));
// resultObject.setCode("0");
// } catch (BusinessException e) {
// resultObject.setCode("1");
// resultObject.setMsg(e.getMessage());
// } catch (Exception e) {
// resultObject.setCode("1");
// resultObject.setMsg("程序错误");
// logger.error("error:", e);
// }
//
// this.result = JsonUtils.getJsonString(resultObject);
// out.println(this.result);
// return null;
//
// }
private Map<String, Object> bulidData(TraderUser entity) throws ParseException {
List<Map<String, Object>> trader_order = new ArrayList<Map<String, Object>>();
List<TraderFollowUser> follow_users = new ArrayList<TraderFollowUser>();
List<Map<String, Object>> follow_traders = new ArrayList<Map<String, Object>>();
follow_users = traderFollowUserService.findByPartyId(entity.getPartyId().toString());
double folllow_trader_num = 0;
if (follow_users != null) {
folllow_trader_num = follow_users.size();
}
/**
* 跟随的交易员
*/
if ("trader".equals(type)) {
if (follow_users != null) {
for (TraderFollowUser user : follow_users) {
Trader trader = traderService.findByPartyId(user.getTrader_partyId().toString());
Map<String, Object> follow_trader = new HashMap<String, Object>();
follow_trader.put("profit", user.getProfit());
follow_trader.put("amount_sum", user.getAmount_sum());
follow_trader.put("username", trader.getName());
String path = Constants.WEB_URL + "/public/showimg!showImg.action?imagePath=" + trader.getImg();
follow_trader.put("img", path);
follow_trader.put("id", trader.getId());
follow_trader.put("follow_state", "1");
follow_traders.add(follow_trader);
}
}
}
if ("orders".equals(type)) {
trader_order = this.traderFollowUserOrderService.getPaged(page_no, 10, entity.getPartyId().toString());
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("orders", trader_order);
map.put("traders", follow_traders);
map.put("folllow_trader_num", folllow_trader_num);
map.put("id", entity.getId());
map.put("name", entity.getName());
map.put("profit", entity.getProfit());
map.put("amount_sum", entity.getAmount_sum());
Date date_now = new Date();// 取时间
int days = daysBetween(entity.getCreate_time(), date_now);
if (days < 0) {
days = 0;
}
map.put("create_days", days);
return map;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setTraderService(TraderService traderService) {
this.traderService = traderService;
}
public static int daysBetween(Date smdate, Date bdate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
smdate = sdf.parse(sdf.format(smdate));
bdate = sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days = (time2 - time1) / (1000 * 3600 * 24);
return Integer.parseInt(String.valueOf(between_days));
}
public int getPage_no() {
return page_no;
}
public void setPage_no(int page_no) {
this.page_no = page_no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOrderBy_type() {
return orderBy_type;
}
public void setOrderBy_type(String orderBy_type) {
this.orderBy_type = orderBy_type;
}
public void setContractOrderService(ContractOrderService contractOrderService) {
this.contractOrderService = contractOrderService;
}
public String getSymbol() {
return symbol;
}
public String getType() {
return type;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public void setType(String type) {
this.type = type;
}
public void setTraderUserService(TraderUserService traderUserService) {
this.traderUserService = traderUserService;
}
public void setTraderFollowUserService(TraderFollowUserService traderFollowUserService) {
this.traderFollowUserService = traderFollowUserService;
}
public String getType_order() {
return type_order;
}
public void setType_order(String type_order) {
this.type_order = type_order;
}
public void setTraderFollowUserOrderService(TraderFollowUserOrderService traderFollowUserOrderService) {
this.traderFollowUserOrderService = traderFollowUserOrderService;
}
}