From 9beb428f807920b0dd646edbed822313c47961c6 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 23 Apr 2021 14:45:56 +0800
Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/agent

---
 src/main/java/com/xcong/excoin/modules/agent/pojo/MemberDataInfoVo.java                    |   47 ++
 src/main/java/com/xcong/excoin/modules/contract/vo/CoinVo.java                             |    4 
 src/main/java/com/xcong/excoin/modules/contract/entity/ContractHoldOrderEntity.java        |   14 
 src/main/resources/templates/febs/views/modules/documentary/documentaryContract.html       |  205 ++++++++++++
 src/main/java/com/xcong/excoin/modules/agent/controller/ViewController.java                |   10 
 src/main/resources/templates/febs/views/modules/contract/total-data.html                   |   76 ++++
 src/main/java/com/xcong/excoin/common/utils/BigDecimalSerialize.java                       |   28 +
 src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java    |   29 +
 src/main/java/com/xcong/excoin/modules/contract/mapper/ContractOrderMapper.java            |    6 
 src/main/java/com/xcong/excoin/modules/agent/controller/MemberController.java              |   15 
 src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderProfitInfoEntity.java   |   99 +++++
 src/main/resources/templates/febs/views/modules/documentary/seeFollowerInfo.html           |  115 ++++++
 src/main/java/com/xcong/excoin/modules/contract/entity/FollowFollowerProfitEntity.java     |   48 ++
 src/main/java/com/xcong/excoin/modules/contract/entity/AgentReturnEntity.java              |    8 
 src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java            |   31 +
 src/main/java/com/xcong/excoin/modules/agent/service/impl/MemberServiceImpl.java           |    6 
 src/main/java/com/xcong/excoin/modules/contract/controller/ViewController.java             |   17 +
 src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderInfoEntity.java         |  106 ++++++
 src/main/java/com/xcong/excoin/modules/agent/service/IMemberService.java                   |    3 
 src/main/resources/mapper/modules/ContractOrderMapper.xml                                  |   74 ++++
 src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderLabelEntity.java        |   25 +
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractOrderServiceImpl.java |   25 +
 src/main/java/com/xcong/excoin/modules/contract/service/IContractOrderService.java         |    3 
 23 files changed, 994 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/common/utils/BigDecimalSerialize.java b/src/main/java/com/xcong/excoin/common/utils/BigDecimalSerialize.java
new file mode 100644
index 0000000..cea6d9e
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/common/utils/BigDecimalSerialize.java
@@ -0,0 +1,28 @@
+package com.xcong.excoin.common.utils;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * BigDecimal保留两位小数
+ * 
+ */
+public class BigDecimalSerialize extends JsonSerializer<BigDecimal> {
+
+	@Override
+	public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+		if (value != null && !"".equals(value)) {
+			gen.writeString(((BigDecimal) value).setScale(2, BigDecimal.ROUND_HALF_DOWN) + "");
+
+		} else {
+			gen.writeString(value + "");
+
+		}
+
+	}
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/agent/controller/MemberController.java b/src/main/java/com/xcong/excoin/modules/agent/controller/MemberController.java
index 8cdabf9..2fb1d11 100644
--- a/src/main/java/com/xcong/excoin/modules/agent/controller/MemberController.java
+++ b/src/main/java/com/xcong/excoin/modules/agent/controller/MemberController.java
@@ -45,6 +45,21 @@
         return new FebsResponse().success().data(data);
     }
 
+    /**
+     * 数据总览
+     * @param memberEntity
+     * @param request
+     * @return
+     */
+
+    @GetMapping("allMemberData")
+    public FebsResponse allMemberData(MemberEntity memberEntity, QueryRequest request) {
+        User user = getCurrentUser();
+        memberEntity.setRefererIds(FebsConstant.USER_TYPE_ADMIN.equals(user.getType()) ? FebsConstant.DEFAULT_REFERER_ID : user.getInviteId());
+        Map<String, Object> data = getDataTable(memberService.findAllMemberDataList(memberEntity, request));
+        return new FebsResponse().success().data(data);
+    }
+
     @GetMapping("getMemberAssets")
     public FebsResponse getMemberAssets(MemberEntity memberEntity, QueryRequest request) {
         User user = getCurrentUser();
diff --git a/src/main/java/com/xcong/excoin/modules/agent/controller/ViewController.java b/src/main/java/com/xcong/excoin/modules/agent/controller/ViewController.java
index 74b18b8..12b7ea0 100644
--- a/src/main/java/com/xcong/excoin/modules/agent/controller/ViewController.java
+++ b/src/main/java/com/xcong/excoin/modules/agent/controller/ViewController.java
@@ -23,6 +23,16 @@
 
     private final IUserService userService;
 
+    /**
+     * 数据总览
+     * @return
+     */
+    @GetMapping("allMemberData")
+    @RequiresPermissions("allMemberData:view")
+    public String allMemberData() {
+        return FebsUtil.view("modules/contract/total-data");
+    }
+
     @GetMapping("member")
     @RequiresPermissions("amember:view")
     public String member() {
diff --git a/src/main/java/com/xcong/excoin/modules/agent/pojo/MemberDataInfoVo.java b/src/main/java/com/xcong/excoin/modules/agent/pojo/MemberDataInfoVo.java
new file mode 100644
index 0000000..6b3c7e6
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/agent/pojo/MemberDataInfoVo.java
@@ -0,0 +1,47 @@
+package com.xcong.excoin.modules.agent.pojo;
+
+import lombok.Data;
+
+@Data
+public class MemberDataInfoVo {
+
+    private int memberCount;//注册人数
+    private String notNullNumber;//持仓人数
+
+    private String walletNumber;//币币账户不为空的人数
+    private String walletCoinNumber;//合约账户不为空的人数
+    private String platformProfitAndLoss;//平台总盈亏
+
+    private String walletNum;//币币余额
+    private String walletCoinNum;//合约余额
+    private String agentNum;//代理账户余额
+
+    private double avalableCoin;//币币可用
+
+    private double totalCoin;//总资产
+
+    private double avalableContract;//合约可用
+
+    private double totalContract;//合约总
+
+    private double chargeUsdt;//充值USDT
+
+    private double appealUsdt;//提现USDT
+
+    private double chargeCoin;//充币
+
+    private double appealCoin;//提币
+
+    private String fee;//佣金
+
+    private String closingPrice;//开仓费
+
+    private String sellClosingPrice;//平仓费
+
+    private String doingPrice;//持仓费
+
+    private String yingkui;
+
+    private double allCoin;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/agent/service/IMemberService.java b/src/main/java/com/xcong/excoin/modules/agent/service/IMemberService.java
index 972a07f..8abc9aa 100644
--- a/src/main/java/com/xcong/excoin/modules/agent/service/IMemberService.java
+++ b/src/main/java/com/xcong/excoin/modules/agent/service/IMemberService.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xcong.excoin.common.entity.QueryRequest;
 import com.xcong.excoin.modules.agent.entity.MemberEntity;
+import com.xcong.excoin.modules.agent.pojo.MemberDataInfoVo;
 
 /**
  * @author helius
@@ -15,4 +16,6 @@
     IPage<MemberEntity> findFeeAmountList(MemberEntity memberEntity, QueryRequest request);
 
     IPage<MemberEntity> findMemberAssetList(MemberEntity memberEntity, QueryRequest request);
+
+    IPage<MemberDataInfoVo> findAllMemberDataList(MemberEntity memberEntity, QueryRequest request);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/agent/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/agent/service/impl/MemberServiceImpl.java
index ceab7ed..2b48ad0 100644
--- a/src/main/java/com/xcong/excoin/modules/agent/service/impl/MemberServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/agent/service/impl/MemberServiceImpl.java
@@ -6,6 +6,7 @@
 import com.xcong.excoin.common.entity.QueryRequest;
 import com.xcong.excoin.modules.agent.entity.MemberEntity;
 import com.xcong.excoin.modules.agent.mapper.MemberMapper;
+import com.xcong.excoin.modules.agent.pojo.MemberDataInfoVo;
 import com.xcong.excoin.modules.agent.service.IMemberService;
 import org.springframework.stereotype.Service;
 
@@ -34,4 +35,9 @@
         Page<MemberEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
         return this.baseMapper.selectMemberAssetsList(page, memberEntity);
     }
+
+    @Override
+    public IPage<MemberDataInfoVo> findAllMemberDataList(MemberEntity memberEntity, QueryRequest request) {
+        return null;
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java b/src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
index bb5d759..7934a0d 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
@@ -47,6 +47,35 @@
         return new FebsResponse().success().data(data);
     }
 
+    @GetMapping("getHistoryDocumentaryList")
+    public FebsResponse getHistoryDocumentaryList(ContractOrderEntity contractOrderEntity, QueryRequest request) {
+        User user = getCurrentUser();
+        if (user.getType().equals(FebsConstant.USER_TYPE_ADMIN)) {
+            contractOrderEntity.setRefererIds(FebsConstant.DEFAULT_REFERER_ID);
+        } else {
+            contractOrderEntity.setRefererIds(user.getInviteId());
+        }
+        Map<String, Object> data = getDataTable(contractOrderService.findHistoryDocumentaryListInPage(contractOrderEntity, request));
+        return new FebsResponse().success().data(data);
+    }
+
+    @GetMapping("getHistoryDocumentaryprofitList")
+    public FebsResponse getHistoryDocumentaryprofitList(ContractOrderEntity contractOrderEntity, QueryRequest request,Integer parentId) {
+        User user = getCurrentUser();
+        if (user.getType().equals(FebsConstant.USER_TYPE_ADMIN)) {
+            contractOrderEntity.setRefererIds(FebsConstant.DEFAULT_REFERER_ID);
+        } else {
+            contractOrderEntity.setRefererIds(user.getInviteId());
+        }
+        if(parentId==null){
+            ViewController.idFromMember=0;
+        }
+        contractOrderEntity.setId(ViewController.idFromMember);
+        Map<String, Object> data = getDataTable(contractOrderService.findHistoryDocumentaryprofitListInPage(contractOrderEntity, request));
+        return new FebsResponse().success().data(data);
+    }
+
+
     @GetMapping("getHistoryList")
     public FebsResponse getHistoryList(ContractOrderEntity contractOrderEntity, QueryRequest request) {
         User user = getCurrentUser();
diff --git a/src/main/java/com/xcong/excoin/modules/contract/controller/ViewController.java b/src/main/java/com/xcong/excoin/modules/contract/controller/ViewController.java
index cec326d..71b29d4 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/controller/ViewController.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/controller/ViewController.java
@@ -4,7 +4,9 @@
 import com.xcong.excoin.common.utils.FebsUtil;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 /**
@@ -56,4 +58,19 @@
     public String returnMoney() {
         return FebsUtil.view("modules/contract/return-list");
     }
+
+    @GetMapping("getHistoryDocumentaryList")
+    @RequiresPermissions("getHistoryDocumentaryList:view")
+    public String getHistoryDocumentaryList() {
+        return FebsUtil.view("modules/documentary/documentaryContract");
+    }
+    /**
+     *交易员利润分成---详情
+     */
+    public static long idFromMember;
+    @GetMapping("seeFollowerInfo/{id}")
+    public String seeFollowerInfo(@PathVariable long id, Model model) {
+        idFromMember = id;
+        return FebsUtil.view("modules/documentary/seeFollowerInfo");
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/AgentReturnEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/AgentReturnEntity.java
index c57be1a..277206e 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/entity/AgentReturnEntity.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/entity/AgentReturnEntity.java
@@ -3,7 +3,9 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.xcong.excoin.common.entity.BaseEntity;
+import com.xcong.excoin.common.utils.BigDecimalSerialize;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -40,20 +42,26 @@
 
     private int orderType;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal closingFeeAmount;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal holdingFeeAmount;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal openingFeeAmount;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal returnAmount;
 
     private Long refererId;
 
     private String inviteId;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal returnRatio;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal childReturnRatio;
 
     /**
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/ContractHoldOrderEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/ContractHoldOrderEntity.java
index 35282e5..434b3a4 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/entity/ContractHoldOrderEntity.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/entity/ContractHoldOrderEntity.java
@@ -2,7 +2,9 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.xcong.excoin.common.entity.BaseEntity;
+import com.xcong.excoin.common.utils.BigDecimalSerialize;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -84,11 +86,13 @@
     /**
      * 币种规格
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal symbolSku;
 
     /**
      * 开仓价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal openingPrice;
 
     /**
@@ -99,11 +103,13 @@
     /**
      * 开仓手续费
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal openingFeeAmount;
 
     /**
      * 保证金
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal bondAmount;
 
     /**
@@ -114,26 +120,31 @@
     /**
      * 市场价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal markPrice;
 
     /**
      * 止损价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal stopLossPrice;
 
     /**
      * 止盈价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal stopProfitPrice;
 
     /**
      * 预付款金额
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal prePaymentAmount;
 
     /**
      * 预估强平价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal forceClosingPrice;
 
     private int operateNo;
@@ -151,12 +162,15 @@
     /**
      * 持仓费
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal holdAmount;
 
     private String inviteId;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal loseOrProfit;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal returnRatio;
 
     private int isProfit;
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java
index 1f94782..382c465 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java
@@ -2,11 +2,14 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.xcong.excoin.common.entity.BaseEntity;
+import com.xcong.excoin.common.utils.BigDecimalSerialize;
 import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 合约订单历史表
@@ -92,6 +95,7 @@
     /**
      * 委托开仓价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal entrustOpeningPrice;
 
     /**
@@ -112,16 +116,19 @@
     /**
      * 币种规格
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal symbolSku;
 
     /**
      * 平仓价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal closingPrice;
 
     /**
      * 平仓手续费
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal closingFeeAmount;
 
     /**
@@ -142,31 +149,37 @@
     /**
      * 止损价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal stopLossPrice;
 
     /**
      * 止盈价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal stopProfitPrice;
 
     /**
      * 盈亏金额
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal rewardAmount;
 
     /**
      * 盈亏比例
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal rewardRatio;
 
     /**
      * 开仓价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal openingPrice;
 
     /**
      * 开仓手续费
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal openingFeeAmount;
 
     private Date openingTime;
@@ -174,26 +187,36 @@
     /**
      * 预付款金额
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal prePaymentAmount;
 
     /**
      * 保证金
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal bondAmount;
 
     /**
      * 市场价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal markPrice;
 
     /**
      * 预估强平价
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal forceClosingPrice;
+
+    /**
+     * 1普通合约2跟单合约
+     */
+    private int contractType;
 
     /**
      * 持仓费
      */
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal holdAmount;
 
     private int operateNo;
@@ -211,6 +234,14 @@
 
     @TableField(exist = false)
     private String timeType;
+    /**
+     * 盈亏金额返利
+     */
+    @TableField(exist = false)
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal rewardAmountProfit;
+    @TableField(exist = false)
+    private List<Long> IDs;
 
 
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/FollowFollowerProfitEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/FollowFollowerProfitEntity.java
new file mode 100644
index 0000000..d16be8c
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/contract/entity/FollowFollowerProfitEntity.java
@@ -0,0 +1,48 @@
+package com.xcong.excoin.modules.contract.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xcong.excoin.common.entity.BaseEntity;
+import com.xcong.excoin.common.utils.BigDecimalSerialize;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("follow_follower_profit")
+public class FollowFollowerProfitEntity extends BaseEntity{
+
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	public static final Integer IS_FOLLOW_Y = 1;
+    public static final Integer IS_FOLLOW_N = 2;
+
+    /**
+     * 跟随者ID
+     */
+    private Long memberId;
+    /**
+     * 交易员ID
+     */
+    private Long tradeId;
+    /**
+     * 交易员会员ID
+     */
+    private Long tradeMemberId;
+    /**
+     * 累计跟随本金
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal totalPrincipal;
+    /**
+     * 累计收益
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal totalProfit;
+    /**
+     * 是否跟随 1-是 2-否
+     */
+    private Integer isFollow;
+}
\ No newline at end of file
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderInfoEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderInfoEntity.java
new file mode 100644
index 0000000..cb4dee2
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderInfoEntity.java
@@ -0,0 +1,106 @@
+package com.xcong.excoin.modules.contract.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xcong.excoin.common.entity.BaseEntity;
+import com.xcong.excoin.common.utils.BigDecimalSerialize;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 交易员信息表
+ */
+@Data
+@TableName("follow_trader_info")
+public class FollowTraderInfoEntity extends BaseEntity{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date entryTime;
+	 /**
+     * 会员ID
+     */
+    private Long memberId;
+    /**
+     * 头像
+     */
+    private String avatar;
+    /**
+     * 名称
+     */
+    private String nickname;
+    /**
+     * 宣言
+     */
+    private String declaration;
+    /**
+     * 是否满员 1-是2-否
+     */
+    private Integer isAll;
+    public static final Integer IS_ALL_Y = 1;
+    public static final Integer IS_ALL_N = 2;
+    /**
+     * 设置成首页
+     */
+    private Integer isSetFrist;
+    public static final Integer IS_SETFRIST_Y = 1;
+    public static final Integer IS_SETFRIST_N = 0;
+    /**
+     * 利润
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal profitRatio;
+    /**
+     * 审核状态 1通过2不通过3待审核
+     */
+    private Integer verifyStatus;
+    public static final Integer VERIFYSTATUS_Y = 1;
+    public static final Integer VERIFYSTATUS_N = 2;
+    public static final Integer VERIFYSTATUS_ING = 3;
+    /**
+     * 是否开启带单 1是2否
+     */
+    private Integer isOpen;
+    public static final Integer ISOPEN_Y = 1;
+    public static final Integer ISOPEN_N = 2;
+
+    /**
+     * 最大跟随人数
+     */
+    private Integer followNum;
+    
+    @TableField(exist = false)
+    private String account;
+    
+    @TableField(exist = false)
+    private String realName;
+    @TableField(exist = false)
+    private String phone;
+    @TableField(exist = false)
+    private String email;
+    @TableField(exist = false)
+    private String inviteId;
+    @TableField(exist = false)
+    private int accountType;
+    
+    @TableField(exist = false)
+    private double walletNum;
+    @TableField(exist = false)
+    private double walletCoinNum;
+    @TableField(exist = false)
+    private double agentNum;
+    @TableField(exist = false)
+    private String isok;
+    //当前跟随人数
+    @TableField(exist = false)
+    private String followNumNow;
+    
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderLabelEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderLabelEntity.java
new file mode 100644
index 0000000..29b440d
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderLabelEntity.java
@@ -0,0 +1,25 @@
+package com.xcong.excoin.modules.contract.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("follow_trader_label")
+public class FollowTraderLabelEntity{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	@TableId(value = "id",type = IdType.AUTO)
+    private Long id;
+	/**
+     * 标签
+     */
+    private String labels;
+
+}
+
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderProfitInfoEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderProfitInfoEntity.java
new file mode 100644
index 0000000..7cae739
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/contract/entity/FollowTraderProfitInfoEntity.java
@@ -0,0 +1,99 @@
+package com.xcong.excoin.modules.contract.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xcong.excoin.common.entity.BaseEntity;
+import com.xcong.excoin.common.utils.BigDecimalSerialize;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("follow_trader_profit_info")
+public class FollowTraderProfitInfoEntity extends BaseEntity{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+     * 交易员ID
+     */
+    private Long traderId;
+    /**
+     * 会员ID
+     */
+    private Long memberId;
+    /**
+     * 累计收益率
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal totalProfitRatio;
+    /**
+     * 带单总收益
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal totalProfit;
+    /**
+     * 跟随者总收益
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal followerTotalProfit;
+    /**
+     * 胜率
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal winRate;
+    /**
+     * 累计跟随人数
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal totalFollowerCnt;
+    /**
+     * 交易笔数
+     */
+    @JsonSerialize(using = BigDecimalSerialize.class)
+    private BigDecimal totalOrderCnt;
+
+    @TableField(exist = false)
+    private String account;
+
+    @TableField(exist = false)
+    private String realName;
+    /**
+     * 手机号(包含国际手机号)
+     */
+	@TableField(exist = false)
+    private String phone;
+    /**
+     * 邮箱
+     */
+	@TableField(exist = false)
+    private String email;
+	/**
+     * 邀请码
+     */
+	@TableField(exist = false)
+    private String inviteId;
+	
+	/**
+	 * 账号类型
+	 */
+	@TableField(exist = false)
+	private int accountType;
+	
+	/**
+     * 利润率
+     */
+	@TableField(exist = false)
+    private BigDecimal profitRatio;
+	/**
+	 * 总返利
+	 */
+	@TableField(exist = false)
+	private BigDecimal profitRatioTotal;
+    
+
+}
+
diff --git a/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractOrderMapper.java b/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractOrderMapper.java
index 7a74b40..9b2744a 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractOrderMapper.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractOrderMapper.java
@@ -6,10 +6,16 @@
 import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @author helius
  */
 public interface ContractOrderMapper extends BaseMapper<ContractOrderEntity> {
 
     IPage<ContractOrderEntity> selectHistoryOrderListInPage(Page<ContractOrderEntity> page, @Param("record") ContractOrderEntity contractOrderEntity);
+    IPage<ContractOrderEntity> selectHistoryDocumentaryListInPage(Page<ContractOrderEntity> page, @Param("record") ContractOrderEntity contractOrderEntity);
+    IPage<ContractOrderEntity> selectHistoryDocumentaryprofitListInPage(Page<ContractOrderEntity> page, @Param("record") ContractOrderEntity contractOrderEntity);
+
+    List<Long> selectFollowContractIdList(@Param("orderNoTrade")String orderNoTrade);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/IContractOrderService.java b/src/main/java/com/xcong/excoin/modules/contract/service/IContractOrderService.java
index eb6d315..63ead6f 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/IContractOrderService.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/IContractOrderService.java
@@ -13,5 +13,8 @@
 
     IPage<ContractOrderEntity> findHistoryOrderListInPage(ContractOrderEntity contractOrderEntity, QueryRequest request);
 
+    IPage<ContractOrderEntity> findHistoryDocumentaryListInPage(ContractOrderEntity contractOrderEntity, QueryRequest request);
+    IPage<ContractOrderEntity> findHistoryDocumentaryprofitListInPage(ContractOrderEntity contractOrderEntity, QueryRequest request);
+
     IPage<AgentReturnEntity> findAgentReturnList(AgentReturnEntity agentReturnEntity, QueryRequest request);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractOrderServiceImpl.java
index 055633d..f55834b 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractOrderServiceImpl.java
@@ -1,5 +1,6 @@
 package com.xcong.excoin.modules.contract.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,6 +13,8 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * @author wzy
@@ -31,6 +34,28 @@
     }
 
     @Override
+    public IPage<ContractOrderEntity> findHistoryDocumentaryListInPage(ContractOrderEntity contractOrderEntity, QueryRequest request) {
+        Page<ContractOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
+        return this.baseMapper.selectHistoryDocumentaryListInPage(page, contractOrderEntity);
+    }
+
+    @Override
+    public IPage<ContractOrderEntity> findHistoryDocumentaryprofitListInPage(ContractOrderEntity contractOrderEntity, QueryRequest request) {
+        //获取当前订单的全部跟随合约List<Long> IDs
+        ContractOrderEntity contractOrderEntityTrade = this.baseMapper.selectById(contractOrderEntity.getId());
+        String orderNoTrade = contractOrderEntityTrade.getOrderNo();
+        List<Long> ids = this.baseMapper.selectFollowContractIdList(orderNoTrade);
+        if(CollUtil.isEmpty(ids)){
+            return null;
+        }
+        contractOrderEntity.setIDs(ids);
+        //查询全部跟单合约和返佣
+        Page<ContractOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<ContractOrderEntity> contractOrderEntityIPage = this.baseMapper.selectHistoryDocumentaryprofitListInPage(page, contractOrderEntity);
+        return this.baseMapper.selectHistoryDocumentaryprofitListInPage(page, contractOrderEntity);
+    }
+
+    @Override
     public IPage<AgentReturnEntity> findAgentReturnList(AgentReturnEntity agentReturnEntity, QueryRequest request) {
         Page<AgentReturnEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
         return agentReturnMapper.selectAgentReturnList(page, agentReturnEntity);
diff --git a/src/main/java/com/xcong/excoin/modules/contract/vo/CoinVo.java b/src/main/java/com/xcong/excoin/modules/contract/vo/CoinVo.java
index ce2bae0..0c3268c 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/vo/CoinVo.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/vo/CoinVo.java
@@ -1,5 +1,7 @@
 package com.xcong.excoin.modules.contract.vo;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xcong.excoin.common.utils.BigDecimalSerialize;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -19,8 +21,10 @@
 
     private String email;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal usdtAmount;
 
+    @JsonSerialize(using = BigDecimalSerialize.class)
     private BigDecimal coinAmount;
 
     private String orderNo;
diff --git a/src/main/resources/mapper/modules/ContractOrderMapper.xml b/src/main/resources/mapper/modules/ContractOrderMapper.xml
index 2133347..37962b3 100644
--- a/src/main/resources/mapper/modules/ContractOrderMapper.xml
+++ b/src/main/resources/mapper/modules/ContractOrderMapper.xml
@@ -43,4 +43,78 @@
         order by c.create_time desc
     </select>
 
+    <select id="selectHistoryDocumentaryListInPage" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity">
+        select
+        a.phone,
+        a.email,
+        a.referer_id,
+        concat(b.first_name, b.second_name) name,
+        c.opening_fee_amount*(select fee_spread_ratio from platform_trade_setting) opening_fee_amount,
+        c.closing_fee_amount*(select fee_spread_ratio from platform_trade_setting) closing_fee_amount,
+        c.*
+        from member a
+        left join member_authentication b on a.id=b.member_id
+        inner join contract_order c on a.id=c.member_id
+        <where>
+            <if test="record!=null">
+                <if test="record.refererIds!=null and record.refererIds!=''">
+                    and a.invite_id=#{record.refererIds}
+                </if>
+                <if test="record.name!=null and record.name!=''">
+                    and (a.phone=#{record.name} or a.email=#{record.name} or a.invite_id=#{record.name})
+                </if>
+                <if test='record.timeType=="1"'>
+                    and TO_DAYS(c.create_time) = TO_DAYS(NOW())
+                </if>
+                <if test='record.timeType=="2"'>
+                    and TO_DAYS(NOW()) - TO_DAYS(c.create_time) = 1
+                </if>
+                <if test='record.timeType=="3"'>
+                    and YEARWEEK(date_format(c.create_time,'%Y-%m-%d')) = YEARWEEK(now())
+                </if>
+                <if test='record.timeType=="4"'>
+                    and DATE_FORMAT(c.create_time, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' )
+                </if>
+                and c.order_status = 1
+                and c.contract_type = 2
+                and c.closing_time is not null
+            </if>
+        </where>
+        order by c.create_time desc
+    </select>
+
+    <select id="selectHistoryDocumentaryprofitListInPage" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity">
+        select
+        a.phone,
+        a.email,
+        a.referer_id,
+        concat(b.first_name, b.second_name) name,
+        c.opening_fee_amount*(select fee_spread_ratio from platform_trade_setting) opening_fee_amount,
+        c.closing_fee_amount*(select fee_spread_ratio from platform_trade_setting) closing_fee_amount,
+        c.*,
+        d.amount rewardAmountProfit
+        from member a
+        left join member_authentication b on a.id=b.member_id
+        inner join contract_order c on a.id=c.member_id
+        left join follow_trader_profit_detail d on d.order_no = c.order_no
+        where
+        c.id in (
+        <foreach collection="record.IDs" item="Ids" separator=",">
+            #{Ids}
+        </foreach>
+        )
+        order by d.amount desc
+    </select>
+
+    <select id="selectFollowContractIdList" resultType="long">
+        SELECT
+            order_id
+        FROM
+            follow_follower_order_relation
+        WHERE
+            order_type = 2
+          and trade_order_no = #{orderNoTrade}
+          and member_id != trade_member_id
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/contract/total-data.html b/src/main/resources/templates/febs/views/modules/contract/total-data.html
new file mode 100644
index 0000000..f4c714d
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/contract/total-data.html
@@ -0,0 +1,76 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="数据总览">
+    <div class="layui-row febs-container">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-body febs-table-full">
+                    <table id=usersTable></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="user-option">
+    <span shiro:lacksPermission="user:view,user:update,user:delete">
+        <span class="layui-badge-dot febs-bg-orange"></span> 无权限
+    </span>
+</script>
+<!-- 表格操作栏 end -->
+<script data-th-inline="none" type="text/javascript">
+    // 引入组件并初始化
+    layui.use([ 'jquery',  'form', 'table', 'febs'], function () {
+        var $ = layui.jquery,
+            laydate = layui.laydate,
+            febs = layui.febs,
+            form = layui.form,
+            table = layui.table,
+            $view = $('#febs-user'),
+            tableIns;
+
+        form.render();
+        // 表格初始化
+        initTable();
+
+        function initTable() {
+
+            tableInss = febs.table.init({
+                elem: $('#usersTable'),
+                url: ctx + 'member/memberDataInfo',
+                cols: [[
+                    {field: 'memberCount', title: '注册用户数', minWidth: 120,align:'center'},
+                    {field: 'notNullNumber', title: '持仓用户数', minWidth: 120,align:'center'},
+                    {field: 'walletNumber', title: '币币账户有余额个数', minWidth: 200,align:'center'},
+                    {field: 'walletNum', title: '币币账户余额', minWidth: 200,align:'center'},
+                    {field: 'walletCoinNumber', title: '合约账户有余额个数', minWidth: 200,align:'center'},
+                    {field: 'walletCoinNum', title: '合约账户余额', minWidth: 200,align:'center'},
+                    {field: 'agentNum', title: '代理账户余额', minWidth: 200,align:'center'},
+                    {field: 'allCoin', title: '平台总资产', minWidth: 200,align:'center'},
+                    {field: 'platformProfitAndLoss', title: '平台剩余USDT',
+                        templet: function (d) {
+                            if (d.platformProfitAndLoss > '0') {
+                                return '<span style="color:green;">'+d.platformProfitAndLoss+'</span>'
+                            } else {
+                                return '<span style="color:red;">'+d.platformProfitAndLoss+'</span>'
+                            }
+                        }, minWidth: 200,align:'center'},
+                    {field: 'chargeCoin', title: '充币', minWidth: 200,align:'center'},
+                    {field: 'appealCoin', title: '提币', minWidth: 200,align:'center'},
+                    {field: 'fee', title: '佣金', minWidth: 200,align:'center'},
+                    {field: 'closingPrice', title: '开仓手续费', minWidth: 200,align:'center'},
+                    {field: 'sellClosingPrice', title: '平仓手续费', minWidth: 200,align:'center'},
+                    {field: 'doingPrice', title: '持仓手续费', minWidth: 200,align:'center'},
+                    {field: 'yingkui', title: '订单盈亏',
+                        templet: function (d) {
+                            if (d.yingkui > '0') {
+                                return '<span style="color:green;">'+d.yingkui+'</span>'
+                            } else {
+                                return '<span style="color:red;">'+d.yingkui+'</span>'
+                            }
+                        }, minWidth: 200,align:'center'},
+                    {field: 'chargeUsdt', title: 'usdt充值', minWidth: 200,align:'center'},
+                    {field: 'appealUsdt', title: 'usdt提现', minWidth: 200,align:'center'},
+                ]]
+            });
+        }
+    })
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/documentary/documentaryContract.html b/src/main/resources/templates/febs/views/modules/documentary/documentaryContract.html
new file mode 100644
index 0000000..b81357b
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/documentary/documentaryContract.html
@@ -0,0 +1,205 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="跟单分红">
+    <div class="layui-row febs-container">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-body febs-table-full">
+                    <form class="layui-form layui-table-form" lay-filter="user-table-form">
+                        <div class="layui-row">
+                            <div class="layui-col-md10">
+                                <div class="layui-form-item">
+                                    <div class="layui-inline">
+                                        <div class="layui-input-inline">
+                                            <input type="text" placeholder="手机号/邮箱/邀请码" name="account"
+                                                   autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-inline">
+                                        <div class="layui-input-inline">
+                                            <input type="text" placeholder="上级UID" name="refererId"
+                                                   autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-inline">
+                                        <div class="layui-input-block">
+                                            <input type="radio" name="timeType" value="1" title="今日">
+                                            <input type="radio" name="timeType" value="2" title="昨日">
+                                            <input type="radio" name="timeType" value="3" title="本周">
+                                            <input type="radio" name="timeType" value="4" title="本月">
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action"
+                                     id="query">
+                                    <i class="layui-icon">&#xe848;</i>
+                                </div>
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action"
+                                     id="reset">
+                                    <i class="layui-icon">&#xe79b;</i>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                    <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 表格字段状态格式化 start -->
+<script type="text/html" id="open-type">
+    {{#
+    var openType = {
+    1: {title: '开多', color : 'blue'},
+    2: {title: '开空', color : 'red'},
+    3: {title: '平多', color : 'blue'},
+    4: {title: '平空', color : 'red'}
+    }[d.orderType];
+    }}
+    <span class="layui-badge febs-bg-{{openType.color}}">{{ openType.title }}</span>
+</script>
+<script type="text/html" id="closing-type">
+    {{#
+    var closingType = {
+    0: {title: '-'},
+    2: {title: '平多'},
+    3: {title: '平空'},
+    4: {title: '爆仓平多'},
+    5: {title: '爆仓平空'},
+    6: {title: '止盈平多'},
+    7: {title: '止盈平空'},
+    8: {title: '止损平多'},
+    9: {title: '止损平空'},
+    }[d.closingType];
+    }}
+    <span>{{ closingType.title }}</span>
+</script>
+
+<script type="text/html" id="contract-type">
+    {{#
+    var contractType = {
+    1: {title: '普通合约'},
+    2: {title: '跟单合约'},
+    }[d.contractType];
+    }}
+    <span>{{ contractType.title }}</span>
+</script>
+<script type="text/html" id="loseOrProfit">
+    {{# if(d.orderType == 3 || d.orderType == 4){  }}
+    {{# if(d.rewardAmount >= 0){ }}
+    <span style="color: green">{{ d.rewardAmount }}</span>
+    {{# } else { }}
+    <span style="color: red">{{ d.rewardAmount }}</span>
+    {{# } }}
+    {{# } }}
+</script>
+<!-- 表格字段状态格式化 start -->
+
+<script data-th-inline="none" type="text/javascript">
+    // 引入组件并初始化
+    layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () {
+        var $ = layui.jquery,
+            laydate = layui.laydate,
+            febs = layui.febs,
+            form = layui.form,
+            table = layui.table,
+            $view = $('#febs-user'),
+            $query = $view.find('#query'),
+            $reset = $view.find('#reset'),
+            $searchForm = $view.find('form'),
+            sortObject = {field: 'createTime', type: null},
+            tableIns,
+            timeType;
+
+        form.render();
+
+        // 表格初始化
+        initTable();
+        // 初始化表格操作栏各个按钮功能
+        table.on('tool(userTable)', function (obj) {
+            var data = obj.data,
+                layEvent = obj.event;
+            if (layEvent === 'seeFollowerInfo') {
+                febs.modal.open('跟单分红', 'contract/seeFollowerInfo/' + data.id, {
+                    area: $(window).width() <= 750 ? '90%' : '80%',
+                    offset: '30px',
+                    btn2: function () {
+                        layer.closeAll();
+                    },
+                    cancel: function(){
+                        var index=parent.layer.getFrameIndex(window.name); //获取当前窗口的name
+                        parent.layer.close(index);//关闭当前窗口
+                        window.parent.location.reload();//刷新
+                    }
+                });
+                $query.click();
+            }
+        });
+
+        // 查询按钮
+        $query.on('click', function () {
+            var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+            tableIns.reload({where: params, page: {curr: 1}});
+        });
+
+        // 刷新按钮
+        $reset.on('click', function () {
+            $searchForm[0].reset();
+            sortObject.type = 'null';
+            timeType = null;
+            tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+        });
+
+        function initTable() {
+            tableIns = febs.table.init({
+                elem: $view.find('table'),
+                id: 'userTable',
+                url: ctx + 'order/getHistoryDocumentaryList',
+                cols: [[
+                    {type: 'checkbox'},
+                    {field: 'orderNo', title: '订单编号', minWidth: 180, align: 'center'},
+                    {field: 'symbol', title: '合约名称', minWidth: 100, align: 'center'},
+                    {title: '跟单分红',
+                        templet: function (d) {
+                            return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeFollowerInfo" shiro:hasPermission="user:update">查看</button>'
+                        }, minWidth: 100,align:'center'},
+                    { title: '合约类型', templet: '#contract-type', minWidth: 100, align: 'center'},
+                    {field: 'refererId', title: '上级UID', minWidth: 100, align: 'center'},
+                    {field: 'name', title: '姓名', minWidth: 130, align: 'center'},
+                    {field: 'phone', title: '联系方式', minWidth: 130, align: 'center'},
+                    {field: 'email', title: '邮箱', minWidth: 140, align: 'center'},
+                    {title: '开仓类型', templet: '#open-type', minWidth: 100, align: 'center'},
+                    {field: 'entrustPrice', title: '委托价', minWidth: 100, align: 'center'},
+                    {field: 'openingPrice', title: '开仓价', minWidth: 130, align: 'center'},
+                    {field: 'openingFeeAmount', title: '开仓手续费', minWidth: 130, align: 'center'},
+                    {field: 'openingTime', title: '开仓时间', minWidth: 180, align: 'center'},
+                    {field: 'bondAmount', title: '保证金', minWidth: 120, align: 'center'},
+                    {field: 'symbolCnt', title: '成交量', minWidth: 100, align: 'center'},
+                    {field: 'stopProfitPrice', title: '止盈', minWidth: 100, align: 'center'},
+                    {field: 'stopLossPrice', title: '止损', minWidth: 120, align: 'center'},
+                    {field: 'holdAmount', title: '持仓费', minWidth: 140, align: 'center'},
+                    {templet: '#loseOrProfit', title: '平仓盈亏', minWidth: 140, align: 'center'},
+                    {field: 'closingPrice', title: '平仓价', minWidth: 140, align: 'center'},
+                    {field: 'closingFeeAmount', title: '平仓手续费', minWidth: 140, align: 'center'},
+                    { title: '平仓类型', templet: '#closing-type', minWidth: 100, align: 'center'},
+                    {field: 'closingTime', title: '平仓时间', minWidth: 180, align: 'center'},
+                ]]
+            });
+        }
+
+        // 获取查询参数
+        function getQueryParams() {
+            var type = $searchForm.find('input[name="timeType"]:checked').val();
+            if (type) {
+                timeType = type;
+            }
+            return {
+                timeType : timeType,
+                name: $searchForm.find('input[name="account"]').val().trim(),
+                refererId: $searchForm.find('input[name="refererId"]').val().trim(),
+                invalidate_ie_cache: new Date()
+            };
+        }
+    })
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/documentary/seeFollowerInfo.html b/src/main/resources/templates/febs/views/modules/documentary/seeFollowerInfo.html
new file mode 100644
index 0000000..16d1339
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/documentary/seeFollowerInfo.html
@@ -0,0 +1,115 @@
+
+<div class="layui-fluid layui-anim febs-anim" id="febs-user-child" lay-title="跟单详情">
+    <div class="layui-row febs-container">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-body febs-table-full">
+                    <table lay-filter="userTableChild" lay-data="{id: 'userTableChild'}"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 表格字段状态格式化 start -->
+<script type="text/html" id="open-type">
+    {{#
+    var openType = {
+    1: {title: '开多', color : 'blue'},
+    2: {title: '开空', color : 'red'},
+    3: {title: '平多', color : 'blue'},
+    4: {title: '平空', color : 'red'}
+    }[d.orderType];
+    }}
+    <span class="layui-badge febs-bg-{{openType.color}}">{{ openType.title }}</span>
+</script>
+<script type="text/html" id="closing-type">
+    {{#
+    var closingType = {
+    0: {title: '-'},
+    2: {title: '平多'},
+    3: {title: '平空'},
+    4: {title: '爆仓平多'},
+    5: {title: '爆仓平空'},
+    6: {title: '止盈平多'},
+    7: {title: '止盈平空'},
+    8: {title: '止损平多'},
+    9: {title: '止损平空'},
+    }[d.closingType];
+    }}
+    <span>{{ closingType.title }}</span>
+</script>
+
+<script type="text/html" id="contract-type">
+    {{#
+    var contractType = {
+    1: {title: '普通合约'},
+    2: {title: '跟单合约'},
+    }[d.contractType];
+    }}
+    <span>{{ contractType.title }}</span>
+</script>
+<script type="text/html" id="loseOrProfit">
+    {{# if(d.orderType == 3 || d.orderType == 4){  }}
+    {{# if(d.rewardAmount >= 0){ }}
+    <span style="color: green">{{ d.rewardAmount }}</span>
+    {{# } else { }}
+    <span style="color: red">{{ d.rewardAmount }}</span>
+    {{# } }}
+    {{# } }}
+</script>
+<script data-th-inline="none" type="text/javascript">
+    layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect' ,'eleTree'], function () {
+        var $ = layui.jquery,
+            laydate = layui.laydate,
+            febs = layui.febs,
+            form = layui.form,
+            table = layui.table,
+            treeSelect = layui.treeSelect,
+            dropdown = layui.dropdown,
+            $view = $('#febs-user-child'),
+            $query = $view.find('#queryChild'),
+            $searchForm = $view.find('formChild'),
+            sortObject = {field: 'createTime', type: null},
+            tableIns,
+            createTimeFrom,
+            createTimeTo;
+
+        form.render();
+
+        initTable();
+
+        laydate.render({
+            elem: '#user-createTime',
+            range: true,
+            trigger: 'click'
+        });
+
+
+        function initTable() {
+            tableIns = febs.table.init({
+                elem: $view.find('table'),
+                id: 'userTable',
+                url: ctx + 'order/getHistoryDocumentaryprofitList?parentId=1',
+                totalRow: true,
+                cols: [[
+                    {field: 'orderNo', title: '订单编号', minWidth: 180, align: 'center'},
+                    {field: 'symbol', title: '合约名称', minWidth: 100, align: 'center'},
+                    { title: '合约类型', templet: '#contract-type', minWidth: 100, align: 'center'},
+                    {field: 'rewardAmountProfit', title: '返利金额', minWidth: 100, align: 'center',totalRow: true},
+                    {title: '开仓类型', templet: '#open-type', minWidth: 100, align: 'center'},
+                    {field: 'openingPrice', title: '开仓价', minWidth: 130, align: 'center'},
+                    {field: 'openingFeeAmount', title: '开仓手续费', minWidth: 130, align: 'center'},
+                    {field: 'openingTime', title: '开仓时间', minWidth: 180, align: 'center'},
+                    {field: 'bondAmount', title: '保证金', minWidth: 120, align: 'center'},
+                    {field: 'symbolCnt', title: '成交量', minWidth: 100, align: 'center'},
+                    {templet: '#loseOrProfit', title: '平仓盈亏', minWidth: 140, align: 'center'},
+                    {field: 'closingPrice', title: '平仓价', minWidth: 140, align: 'center'},
+                    {field: 'closingFeeAmount', title: '平仓手续费', minWidth: 140, align: 'center'},
+                    { title: '平仓类型', templet: '#closing-type', minWidth: 100, align: 'center'},
+                    {field: 'closingTime', title: '平仓时间', minWidth: 180, align: 'center'},
+                ]]
+            });
+        }
+
+    })
+</script>
\ No newline at end of file

--
Gitblit v1.9.1