4 files deleted
	
		
		21 files modified
	
		
		17 files added
	
	
 
	
	
	
	
	
	
	
	
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.common.utils; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @author wzy | 
 |  |  |  * @date 2020-05-28 | 
 |  |  |  **/ | 
 |  |  | public class CoinTypeConvert { | 
 |  |  |  | 
 |  |  |     public static String convert(String symbol) { | 
 |  |  |         switch (symbol) { | 
 |  |  |             case "btcusdt": | 
 |  |  |                 return "BTC/USDT"; | 
 |  |  |             case "ethusdt": | 
 |  |  |                 return "ETH/USDT"; | 
 |  |  |             case "xrpusdt": | 
 |  |  |                 return "XRP/USDT"; | 
 |  |  |             case "ltcusdt": | 
 |  |  |                 return "LTC/USDT"; | 
 |  |  |             case "bchusdt": | 
 |  |  |                 return "BCH/USDT"; | 
 |  |  |             case "eosusdt": | 
 |  |  |                 return "EOS/USDT"; | 
 |  |  |             case "etcusdt": | 
 |  |  |                 return "ETC/USDT"; | 
 |  |  |             default: | 
 |  |  |                 return null; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static String convertToKey(String symbol) { | 
 |  |  |         switch (symbol) { | 
 |  |  |             case "BTC/USDT": | 
 |  |  |                 return "BTC_NEW_PRICE"; | 
 |  |  |             case "ETH/USDT": | 
 |  |  |                 return "ETH_NEW_PRICE"; | 
 |  |  |             case "XRP/USDT": | 
 |  |  |                 return "XRP_NEW_PRICE"; | 
 |  |  |             case "LTC/USDT": | 
 |  |  |                 return "LTC_NEW_PRICE"; | 
 |  |  |             case "BCH/USDT": | 
 |  |  |                 return "BCH_NEW_PRICE"; | 
 |  |  |             case "EOS/USDT": | 
 |  |  |                 return "EOS_NEW_PRICE"; | 
 |  |  |             case "ETC/USDT": | 
 |  |  |                 return "ETC_NEW_PRICE"; | 
 |  |  |             default: | 
 |  |  |                 return null; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.common.utils;
 | 
 |  |  | 
 | 
 |  |  | import org.springframework.data.redis.core.RedisTemplate;
 | 
 |  |  | import org.springframework.stereotype.Component;
 | 
 |  |  | import org.springframework.util.CollectionUtils;
 | 
 |  |  | 
 | 
 |  |  | import javax.annotation.Resource;
 | 
 |  |  | import java.util.List;
 | 
 |  |  | import java.util.Map;
 | 
 |  |  | import java.util.Set;
 | 
 |  |  | import java.util.concurrent.TimeUnit;
 | 
 |  |  | 
 | 
 |  |  | /**
 | 
 |  |  |  * @Author wzy
 | 
 |  |  |  * @Date 2020/5/10
 | 
 |  |  |  * @email wangdoubleone@gmail.com
 | 
 |  |  |  * @Version V1.0
 | 
 |  |  |  **/
 | 
 |  |  | @Component
 | 
 |  |  | public class RedisUtils {
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  |     @Resource
 | 
 |  |  |     private RedisTemplate<String, Object> redisTemplate;
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  |     // =============================common============================
 | 
 |  |  |     /**
 | 
 |  |  |      * 指定缓存失效时间
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param time 时间(秒)
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public boolean expire(String key, long time) {
 | 
 |  |  |         try {
 | 
 |  |  |             if (time > 0) {
 | 
 |  |  |                 redisTemplate.expire(key, time, TimeUnit.SECONDS);
 | 
 |  |  |             }
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 根据key 获取过期时间
 | 
 |  |  |      * @param key 键 不能为null
 | 
 |  |  |      * @return 时间(秒) 返回0代表为永久有效
 | 
 |  |  |      */
 | 
 |  |  |     public long getExpire(String key) {
 | 
 |  |  |         return redisTemplate.getExpire(key, TimeUnit.SECONDS);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 判断key是否存在
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @return true 存在 false不存在
 | 
 |  |  |      */
 | 
 |  |  |     public boolean hasKey(String key) {
 | 
 |  |  |         try {
 | 
 |  |  |             return redisTemplate.hasKey(key);
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 删除缓存
 | 
 |  |  |      * @param key 可以传一个值 或多个
 | 
 |  |  |      */
 | 
 |  |  |     @SuppressWarnings("unchecked")
 | 
 |  |  |     public void del(String... key) {
 | 
 |  |  |         if (key != null && key.length > 0) {
 | 
 |  |  |             if (key.length == 1) {
 | 
 |  |  |                 redisTemplate.delete(key[0]);
 | 
 |  |  |             } else {
 | 
 |  |  |                 redisTemplate.delete(CollectionUtils.arrayToList(key));
 | 
 |  |  |             }
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     // ============================String=============================
 | 
 |  |  |     /**
 | 
 |  |  |      * 普通缓存获取
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @return 值
 | 
 |  |  |      */
 | 
 |  |  |     public Object get(String key) {
 | 
 |  |  |         return key == null ? null : redisTemplate.opsForValue().get(key);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 普通缓存获取
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @return 值
 | 
 |  |  |      */
 | 
 |  |  |     public String getString(String key) {
 | 
 |  |  |         Object obj = key == null ? null : redisTemplate.opsForValue().get(key);
 | 
 |  |  |         if(obj!=null){
 | 
 |  |  |             return obj.toString();
 | 
 |  |  |         }
 | 
 |  |  |         return null;
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 普通缓存放入
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @return true成功 false失败
 | 
 |  |  |      */
 | 
 |  |  |     public boolean set(String key, Object value) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForValue().set(key, value);
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 普通缓存放入并设置时间
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
 | 
 |  |  |      * @return true成功 false 失败
 | 
 |  |  |      */
 | 
 |  |  |     public boolean set(String key, Object value, long time) {
 | 
 |  |  |         try {
 | 
 |  |  |             if (time > 0) {
 | 
 |  |  |                 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
 | 
 |  |  |             } else {
 | 
 |  |  |                 set(key, value);
 | 
 |  |  |             }
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     public boolean setNotExist(String key, Object value, long time) {
 | 
 |  |  |         return redisTemplate.opsForValue().setIfAbsent(key, value, time, TimeUnit.SECONDS);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 递增
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param delta 要增加几(大于0)
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public long incr(String key, long delta) {
 | 
 |  |  |         if (delta < 0) {
 | 
 |  |  |             throw new RuntimeException("递增因子必须大于0");
 | 
 |  |  |         }
 | 
 |  |  |         return redisTemplate.opsForValue().increment(key, delta);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 递减
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param delta 要减少几(小于0)
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public long decr(String key, long delta) {
 | 
 |  |  |         if (delta < 0) {
 | 
 |  |  |             throw new RuntimeException("递减因子必须大于0");
 | 
 |  |  |         }
 | 
 |  |  |         return redisTemplate.opsForValue().increment(key, -delta);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  |     // ================================Map=================================
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * HashGet
 | 
 |  |  |      * @param key 键 不能为null
 | 
 |  |  |      * @param item 项 不能为null
 | 
 |  |  |      * @return 值
 | 
 |  |  |      */
 | 
 |  |  |     public Object hget(String key, String item) {
 | 
 |  |  |         return redisTemplate.opsForHash().get(key, item);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 获取hashKey对应的所有键值
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @return 对应的多个键值
 | 
 |  |  |      */
 | 
 |  |  |     public Map<Object, Object> hmget(String key) {
 | 
 |  |  |         return redisTemplate.opsForHash().entries(key);
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * HashSet
 | 
 |  |  | 
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param map 对应多个键值
 | 
 |  |  |      * @return true 成功 false 失败
 | 
 |  |  |      */
 | 
 |  |  |     public boolean hmset(String key, Map<String, Object> map) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForHash().putAll(key, map);
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * HashSet 并设置时间
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param map 应多个键值
 | 
 |  |  |      * @param time 时间(秒)
 | 
 |  |  |      * @return true成功 false失败
 | 
 |  |  |      */
 | 
 |  |  |     public boolean hmset(String key, Map<String, Object> map, long time) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForHash().putAll(key, map);
 | 
 |  |  |             if (time > 0) {
 | 
 |  |  |                 expire(key, time);
 | 
 |  |  |             }
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 向一张hash表中放入数据,如果不存在将创建
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param item 项
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @return true 成功 false失败
 | 
 |  |  |      */
 | 
 |  |  |     public boolean hset(String key, String item, Object value) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForHash().put(key, item, value);
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 向一张hash表中放入数据,如果不存在将创建
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param item 项
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
 | 
 |  |  |      * @return true 成功 false失败
 | 
 |  |  |      */
 | 
 |  |  |     public boolean hset(String key, String item, Object value, long time) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForHash().put(key, item, value);
 | 
 |  |  |             if (time > 0) {
 | 
 |  |  |                 expire(key, time);
 | 
 |  |  |             }
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 删除hash表中的值
 | 
 |  |  |      * @param key 键 不能为null
 | 
 |  |  |      * @param item 项 可以使多个 不能为null
 | 
 |  |  |      */
 | 
 |  |  |     public void hdel(String key, Object... item) {
 | 
 |  |  |         redisTemplate.opsForHash().delete(key, item);
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 判断hash表中是否有该项的值
 | 
 |  |  |      * @param key 键 不能为null
 | 
 |  |  |      * @param item 项 不能为null
 | 
 |  |  |      * @return true 存在 false不存在
 | 
 |  |  |      */
 | 
 |  |  |     public boolean hHasKey(String key, String item) {
 | 
 |  |  |         return redisTemplate.opsForHash().hasKey(key, item);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * hash递增 如果不存在,就会创建一个 并把新增后的值返回
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param item 项
 | 
 |  |  |      * @param by 要增加几(大于0)
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public double hincr(String key, String item, double by) {
 | 
 |  |  |         return redisTemplate.opsForHash().increment(key, item, by);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * hash递减
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param item 项
 | 
 |  |  |      * @param by 要减少记(小于0)
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public double hdecr(String key, String item, double by) {
 | 
 |  |  |         return redisTemplate.opsForHash().increment(key, item, -by);
 | 
 |  |  |     }
 | 
 |  |  |     // ============================set=============================
 | 
 |  |  |     /**
 | 
 |  |  |      * 根据key获取Set中的所有值
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public Set<Object> sGet(String key) {
 | 
 |  |  |         try {
 | 
 |  |  |             return redisTemplate.opsForSet().members(key);
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return null;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 根据value从一个set中查询,是否存在
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @return true 存在 false不存在
 | 
 |  |  |      */
 | 
 |  |  |     public boolean sHasKey(String key, Object value) {
 | 
 |  |  |         try {
 | 
 |  |  |             return redisTemplate.opsForSet().isMember(key, value);
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 将数据放入set缓存
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param values 值 可以是多个
 | 
 |  |  |      * @return 成功个数
 | 
 |  |  |      */
 | 
 |  |  |     public long sSet(String key, Object... values) {
 | 
 |  |  |         try {
 | 
 |  |  |             return redisTemplate.opsForSet().add(key, values);
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  | 
 | 
 |  |  |             return 0;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      336
 | 
 |  |  |      * 将set数据放入缓存
 | 
 |  |  |      337
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param time 时间(秒)
 | 
 |  |  |      * @param values 值 可以是多个
 | 
 |  |  |      * @return 成功个数
 | 
 |  |  |      */
 | 
 |  |  |     public long sSetAndTime(String key, long time, Object... values) {
 | 
 |  |  |         try {
 | 
 |  |  |             Long count = redisTemplate.opsForSet().add(key, values);
 | 
 |  |  |             if (time > 0)
 | 
 |  |  |                 expire(key, time);
 | 
 |  |  |             return count;
 | 
 |  |  | 
 | 
 |  |  |         }catch(Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return 0;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 获取set缓存的长度
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  | 
 | 
 |  |  |     public long sGetSetSize(String key) {
 | 
 |  |  |         try {
 | 
 |  |  |             return redisTemplate.opsForSet().size(key);
 | 
 |  |  | 
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return 0;
 | 
 |  |  |         }
 | 
 |  |  | 
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 移除值为value的
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param values 值 可以是多个
 | 
 |  |  |      * @return 移除的个数
 | 
 |  |  | 
 | 
 |  |  |      */
 | 
 |  |  |     public long setRemove(String key, Object... values) {
 | 
 |  |  |         try {
 | 
 |  |  |             Long count = redisTemplate.opsForSet().remove(key, values);
 | 
 |  |  |             return count;
 | 
 |  |  | 
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return 0;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     // ===============================list=================================
 | 
 |  |  |     /**
 | 
 |  |  |      * 获取list缓存的内容     * @param key 键
 | 
 |  |  |      * @param start 开始
 | 
 |  |  |      * @param end 结束 0 到 -1代表所有值
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public List<Object> lGet(String key, long start, long end) {
 | 
 |  |  |         try {
 | 
 |  |  |             return redisTemplate.opsForList().range(key, start, end);
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return null;
 | 
 |  |  |         }
 | 
 |  |  | 
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 获取list缓存的长度
 | 
 |  |  |      * @param key 键
 | 
 |  |  | 
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public long lGetListSize(String key) {        try {
 | 
 |  |  |         return redisTemplate.opsForList().size(key);
 | 
 |  |  |     } catch (Exception e) {
 | 
 |  |  | 
 | 
 |  |  |         e.printStackTrace();
 | 
 |  |  |         return 0;
 | 
 |  |  |     }
 | 
 |  |  |     }    /**
 | 
 |  |  |      * 通过索引 获取list中的值
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public Object lGetIndex(String key, long index) {
 | 
 |  |  | 
 | 
 |  |  |         try {
 | 
 |  |  |             return redisTemplate.opsForList().index(key, index);
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return null;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 将list放入缓存
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public boolean lSet(String key, Object value) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForList().rightPush(key, value);
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 将list放入缓存
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @param time 时间(秒)
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public boolean lSet(String key, Object value, long time) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForList().rightPush(key, value);
 | 
 |  |  |             if (time > 0)
 | 
 |  |  |                 expire(key, time);
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 将list放入缓存
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public boolean lSet(String key, List<Object> value) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForList().rightPushAll(key, value);
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 将list放入缓存
 | 
 |  |  |      *
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @param time 时间(秒)
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public boolean lSet(String key, List<Object> value, long time) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForList().rightPushAll(key, value);
 | 
 |  |  |             if (time > 0)
 | 
 |  |  |                 expire(key, time);
 | 
 |  |  |             return true;
 | 
 |  |  | 
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  |     /**
 | 
 |  |  |      * 根据索引修改list中的某条数据
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param index 索引
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @return
 | 
 |  |  |      */
 | 
 |  |  |     public boolean lUpdateIndex(String key, long index, Object value) {
 | 
 |  |  |         try {
 | 
 |  |  |             redisTemplate.opsForList().set(key, index, value);
 | 
 |  |  |             return true;
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return false;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 移除N个值为value
 | 
 |  |  |      * @param key 键
 | 
 |  |  |      * @param count 移除多少个
 | 
 |  |  |      * @param value 值
 | 
 |  |  |      * @return 移除的个数
 | 
 |  |  |      */
 | 
 |  |  |     public long lRemove(String key, long count, Object value) {
 | 
 |  |  |         try {
 | 
 |  |  |             return redisTemplate.opsForList().remove(key, count, value);
 | 
 |  |  |         } catch (Exception e) {
 | 
 |  |  |             e.printStackTrace();
 | 
 |  |  |             return 0;
 | 
 |  |  |         }
 | 
 |  |  |     }
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberEntity; | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberQuickBuySaleEntity; | 
 |  |  | import com.xcong.excoin.modules.member.service.IMemberService; | 
 |  |  | import com.xcong.excoin.system.entity.User; | 
 |  |  |  | 
 |  |  | import lombok.RequiredArgsConstructor; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.member.entity;
 | 
 |  |  | 
 | 
 |  |  | import java.math.BigDecimal;
 | 
 |  |  | import java.util.Date;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableField;
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableName;
 | 
 |  |  | import com.fasterxml.jackson.annotation.JsonFormat;
 | 
 |  |  | import com.xcong.excoin.common.entity.BaseEntity;
 | 
 |  |  | 
 | 
 |  |  | import lombok.Data;
 | 
 |  |  | 
 |  |  | @TableName("member_account_money_change")
 | 
 |  |  | public class MemberAccountMoneyChangeEntity extends BaseEntity {
 | 
 |  |  | private static final long serialVersionUID = 1L;
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  |     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
 | 
 |  |  |     private Date createTime;  | 
 |  |  |     
 | 
 |  |  |     /**
 | 
 |  |  |      *  类型【1:币币资产2:合约资产3:代理资产】
 | 
 |  |  | 
 |  |  |      * 状态【0:待审核 1:成功2:失败】
 | 
 |  |  |      */
 | 
 |  |  |     private int status;
 | 
 |  |  | 	 | 
 |  |  |     /**
 | 
 |  |  |      * 手机号(包含国际手机号)
 | 
 |  |  |      */
 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String phone;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 邮箱
 | 
 |  |  |      */
 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String email;
 | 
 |  |  | 	 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String account;
 | 
 |  |  |     /**
 | 
 |  |  |      * 邀请码
 | 
 |  |  |      */
 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String inviteId;
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.member.entity;
 | 
 |  |  | 
 | 
 |  |  | import java.math.BigDecimal;
 | 
 |  |  | import java.util.Date;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableField;
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableName;
 | 
 |  |  | import com.xcong.excoin.common.entity.BaseEntity;
 | 
 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.member.mapper;
 | 
 |  |  | 
 | 
 |  |  | import org.apache.ibatis.annotations.Param;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
 |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity;
 | 
 |  |  | 
 | 
 |  |  | public interface MemberAccountMoneyChangeMapper extends BaseMapper<MemberAccountMoneyChangeEntity>  {
 | 
 |  |  | 
 | 
 |  |  |     IPage<MemberAccountMoneyChangeEntity> findMemberAccountInfoListInPage(Page<MemberAccountMoneyChangeEntity> page,
 | 
 |  |  |             @Param("record") MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity);
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
 |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberEntity; | 
 |  |  | import com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo; | 
 |  |  |  | 
 |  |  | import org.apache.ibatis.annotations.Param; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  | public interface MemberMapper extends BaseMapper<MemberEntity> { | 
 |  |  |  | 
 |  |  |     IPage<MemberEntity> selectMemberListInPage(Page<MemberEntity> page, @Param("record") MemberEntity memberEntity); | 
 |  |  |  | 
 |  |  |     IPage<MemberAccountInfoVo> findMemberAccountInfoListInPage(Page<MemberEntity> page, @Param("record")MemberEntity memberEntity); | 
 |  |  | 	 | 
 |  |  |     String selectAgentForAccount(long memberId); | 
 |  |  | 	 | 
 |  |  |     String selectTradeSetting(); | 
 |  |  |      | 
 |  |  | } | 
 
 |  |  | 
 |  |  | import java.util.Date;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.IdType;
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableField;
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableId;
 | 
 |  |  | import com.fasterxml.jackson.annotation.JsonFormat;
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |      * 订单编号
 | 
 |  |  |      */
 | 
 |  |  |     private String orderCode;
 | 
 |  |  | 	 | 
 |  |  |     /**
 | 
 |  |  |      * 邀请码
 | 
 |  |  |      */
 | 
 |  |  |     private String inviteId;
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  |      * 是否内部转账 Y-是N-不是
 | 
 |  |  |      */
 | 
 |  |  |     private String isInside;
 | 
 |  |  | 	 | 
 |  |  |     private String inviteId;
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  |      * 订单编号
 | 
 |  |  |      */
 | 
 |  |  |     private String orderNo;
 | 
 |  |  |      | 
 |  |  |     private String inviteId;
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  |      * 订单编号
 | 
 |  |  |      */
 | 
 |  |  |     private String orderNo;
 | 
 |  |  | 	 | 
 |  |  |     private String inviteId;
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.controller;
 | 
 |  |  | 
 | 
 |  |  | import java.util.Map;
 | 
 |  |  | 
 | 
 |  |  | import org.springframework.validation.annotation.Validated;
 | 
 |  |  | import org.springframework.web.bind.annotation.GetMapping;
 | 
 |  |  | import org.springframework.web.bind.annotation.RequestMapping;
 | 
 |  |  | import org.springframework.web.bind.annotation.RestController;
 | 
 |  |  | 
 | 
 |  |  | import com.xcong.excoin.common.controller.BaseController;
 | 
 |  |  | import com.xcong.excoin.common.entity.FebsResponse;
 | 
 |  |  | import com.xcong.excoin.common.entity.QueryRequest;
 | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity;
 | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberEntity;
 | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity;
 | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity;
 | 
 |  |  | import com.xcong.excoin.modules.trademanage.service.TradeManageService;
 | 
 |  |  | 
 | 
 |  |  | import lombok.RequiredArgsConstructor;
 | 
 |  |  | 
 | 
 |  |  | @Validated
 | 
 |  |  | @RestController
 | 
 |  |  | @RequiredArgsConstructor
 | 
 |  |  | @RequestMapping(value = "/tradeManage")
 | 
 |  |  | public class TradeManageController extends BaseController{
 | 
 |  |  | 	 | 
 |  |  |     private final TradeManageService tradeManageService;
 | 
 |  |  | 	 | 
 |  |  |     /**
 | 
 |  |  |      * 当前持仓---列表
 | 
 |  |  |      */
 | 
 |  |  |     @GetMapping("contractHoldOrder")
 | 
 |  |  |     public FebsResponse getList(ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) {
 | 
 |  |  |         Map<String, Object> data = getDataTable(tradeManageService.findContractHoldOrderListInPage(contractHoldOrderEntity, request));
 | 
 |  |  |         return new FebsResponse().success().data(data);
 | 
 |  |  |     }
 | 
 |  |  | 	 | 
 |  |  |     /**
 | 
 |  |  |      * 账户信息---列表
 | 
 |  |  |      */
 | 
 |  |  |     @GetMapping("memberAccountInfo")
 | 
 |  |  |     public FebsResponse memberAccountInfo(MemberEntity memberEntity, QueryRequest request) {
 | 
 |  |  |         Map<String, Object> data = getDataTable(tradeManageService.findMemberAccountInfoListInPage(memberEntity, request));
 | 
 |  |  |         return new FebsResponse().success().data(data);
 | 
 |  |  |     }
 | 
 |  |  |      | 
 |  |  |     /**
 | 
 |  |  |      * 返佣明细---列表
 | 
 |  |  |      */
 | 
 |  |  |     @GetMapping("memberAgentReturnInfo")
 | 
 |  |  |     public FebsResponse memberAgentReturnInfo(MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity, QueryRequest request) {
 | 
 |  |  |         Map<String, Object> data = getDataTable(tradeManageService.findMemberAgentReturnInfoInPage(memberAccountMoneyChangeEntity, request));
 | 
 |  |  |         return new FebsResponse().success().data(data);
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 历史委托明细---列表
 | 
 |  |  |      */
 | 
 |  |  |     @GetMapping("historyOrderInfo")
 | 
 |  |  |     public FebsResponse historyOrderInfo(ContractOrderEntity contractOrderEntity, QueryRequest request) {
 | 
 |  |  |         Map<String, Object> data = getDataTable(tradeManageService.findMemberHistoryOrderInfoInPage(contractOrderEntity, request));
 | 
 |  |  |         return new FebsResponse().success().data(data);
 | 
 |  |  |     }
 | 
 |  |  |      | 
 |  |  | 
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  |  * @author wzy | 
 |  |  |  * @date 2020-06-10 | 
 |  |  |  **/ | 
 |  |  | @Controller("contractHoldOrderView") | 
 |  |  | @Controller("tradeManageView") | 
 |  |  | @RequestMapping(FebsConstant.VIEW_PREFIX + "modules/trademanage") | 
 |  |  | public class ViewController { | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 当前持仓 | 
 |  |  |      */ | 
 |  |  |     @GetMapping("contractHoldOrder") | 
 |  |  |     @RequiresPermissions("contractHoldOrder:view") | 
 |  |  |     public String contractHoldOrder() { | 
 |  |  |         return FebsUtil.view("modules/trademanage/contractHoldOrder"); | 
 |  |  |     } | 
 |  |  |      | 
 |  |  |     /** | 
 |  |  |      * 账户信息 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @GetMapping("accountInfo") | 
 |  |  |     @RequiresPermissions("accountInfo:view") | 
 |  |  |     public String accountInfo() { | 
 |  |  |         return FebsUtil.view("modules/trademanage/accountInfo"); | 
 |  |  |     } | 
 |  |  |      | 
 |  |  |     /** | 
 |  |  |      * 返佣明细 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @GetMapping("agentReturnInfo") | 
 |  |  |     @RequiresPermissions("agentReturnInfo:view") | 
 |  |  |     public String agentReturnInfo() { | 
 |  |  |         return FebsUtil.view("modules/trademanage/agentReturnInfo"); | 
 |  |  |     } | 
 |  |  |      | 
 |  |  |     /** | 
 |  |  |      * 历史委托明细 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @GetMapping("historyOrder") | 
 |  |  |     @RequiresPermissions("historyOrder:view") | 
 |  |  |     public String historyOrder() { | 
 |  |  |         return FebsUtil.view("modules/trademanage/historyOrder"); | 
 |  |  |     } | 
 |  |  |      | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.dto;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableField;
 | 
 |  |  | 
 | 
 |  |  | import lombok.Data;
 | 
 |  |  | @Data
 | 
 |  |  | public class MemberAccountInfoDto {
 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String account;
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  |  | 
 |  |  | import java.math.BigDecimal; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableField; | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableName; | 
 |  |  | import com.xcong.excoin.common.entity.BaseEntity; | 
 |  |  |  | 
 |  |  | 
 |  |  | public class ContractHoldOrderEntity extends BaseEntity { | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      *  | 
 |  |  |      */ | 
 |  |  |     private static final long serialVersionUID = 1L; | 
 |  |  |     /** | 
 |  |  |      * 是否可平仓 1-是 | 
 |  |  |      */ | 
 |  |  |     public static final int ORDER_CAN_CLOSING_Y = 1; | 
 |  |  | 
 |  |  |      * 批次号 队列平仓时使用,避免重复 | 
 |  |  |      */ | 
 |  |  |     public String batchNo; | 
 |  |  |      | 
 |  |  |     /** | 
 |  |  |      * 手机号(包含国际手机号) | 
 |  |  |      */ | 
 |  |  |     @TableField(exist = false) | 
 |  |  |     private String phone; | 
 |  |  |     /** | 
 |  |  |      * 邮箱 | 
 |  |  |      */ | 
 |  |  |     @TableField(exist = false) | 
 |  |  |     private String email; | 
 |  |  |     @TableField(exist = false) | 
 |  |  |     private String account; | 
 |  |  |     /** | 
 |  |  |      * 邀请码 | 
 |  |  |      */ | 
 |  |  |     @TableField(exist = false) | 
 |  |  |     private String inviteId; | 
 |  |  |     /** | 
 |  |  |      * 系统盈亏 | 
 |  |  |      */ | 
 |  |  |     @TableField(exist = false) | 
 |  |  |     private BigDecimal rewardRatio; | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.entity;
 | 
 |  |  | 
 | 
 |  |  | import java.math.BigDecimal;
 | 
 |  |  | import java.util.Date;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableField;
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableName;
 | 
 |  |  | import com.xcong.excoin.common.entity.BaseEntity;
 | 
 |  |  | 
 | 
 |  |  | import lombok.Data;
 | 
 |  |  | 
 | 
 |  |  | @Data
 | 
 |  |  | @TableName("contract_order")
 | 
 |  |  | public class ContractOrderEntity extends BaseEntity {/**
 | 
 |  |  |      *  | 
 |  |  |      */
 | 
 |  |  |     private static final long serialVersionUID = 1L;  | 
 |  |  |     /**
 | 
 |  |  |      * 交易类型 市价
 | 
 |  |  |      */
 | 
 |  |  |     public static final int TRADE_TYPE_MARK_PRICE = 1;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 交易类型 限价
 | 
 |  |  |      */
 | 
 |  |  |     public static final int TRADE_TYPE_LIMIT_PRICE = 2;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单状态 撤单
 | 
 |  |  |      */
 | 
 |  |  |     public static final int ORDER_STATUS_CANCEL = 2;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单状态 成交
 | 
 |  |  |      */
 | 
 |  |  |     public static final int ORDER_STATUS_SUCCESS = 1;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单类型 开多
 | 
 |  |  |      */
 | 
 |  |  |     public static final int ORDER_TYPE_OPEN_MORE = 1;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单类型 开空
 | 
 |  |  |      */
 | 
 |  |  |     public static final int ORDER_TYPE_OPEN_LESS = 2;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单类型 平多
 | 
 |  |  |      */
 | 
 |  |  |     public static final int ORDER_TYPE_CLOSE_MORE = 3;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单类型 平空
 | 
 |  |  |      */
 | 
 |  |  |     public static final int ORDER_TYPE_CLOSE_LESS = 4;
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 会员Id
 | 
 |  |  |      */
 | 
 |  |  |     private Long memberId;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单编号
 | 
 |  |  |      */
 | 
 |  |  |     private String orderNo;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 仓位类型 1-逐仓 2-全仓
 | 
 |  |  |      */
 | 
 |  |  |     private int positionType;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 交易类型 1-市价 2-限价
 | 
 |  |  |      */
 | 
 |  |  |     private int tradeType;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单类型 - 1开多,2开空,3平多,4平空
 | 
 |  |  |      */
 | 
 |  |  |     private int orderType;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 订单状态 - 1成交 2撤单
 | 
 |  |  |      */
 | 
 |  |  |     private int orderStatus = 1;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 委托开仓价
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal entrustOpeningPrice;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 委托时间
 | 
 |  |  |      */
 | 
 |  |  |     private Date entrustTime;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 币种
 | 
 |  |  |      */
 | 
 |  |  |     private String symbol;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 手数
 | 
 |  |  |      */
 | 
 |  |  |     private int symbolCnt;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 币种规格
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal symbolSku;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 平仓价
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal closingPrice;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 平仓手续费
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal closingFeeAmount;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 平仓时间
 | 
 |  |  |      */
 | 
 |  |  |     private Date closingTime;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 平仓类型 2平多3平空4爆仓平多5爆仓平空6止盈平多7止盈平空8止损平多9止损平空
 | 
 |  |  |      */
 | 
 |  |  |     private int closingType;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 杠杆倍率
 | 
 |  |  |      */
 | 
 |  |  |     private int leverRatio;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 止损价
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal stopLossPrice;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 止盈价
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal stopProfitPrice;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 盈亏金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal rewardAmount;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 盈亏比例
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal rewardRatio;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 开仓价
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal openingPrice;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 开仓手续费
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal openingFeeAmount;
 | 
 |  |  | 
 | 
 |  |  |     private Date openingTime;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 预付款金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal prePaymentAmount;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 保证金
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal bondAmount;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 市场价
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal markPrice;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 预估强平价
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal forceClosingPrice;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 持仓费
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal holdAmount;
 | 
 |  |  | 
 | 
 |  |  |     private int operateNo;
 | 
 |  |  |      | 
 |  |  |     /**
 | 
 |  |  |      * 手机号(包含国际手机号)
 | 
 |  |  |      */
 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String phone;
 | 
 |  |  |     /**
 | 
 |  |  |      * 邮箱
 | 
 |  |  |      */
 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String email;
 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String account;
 | 
 |  |  |     /**
 | 
 |  |  |      * 邀请码
 | 
 |  |  |      */
 | 
 |  |  |     @TableField(exist = false)
 | 
 |  |  |     private String inviteId;
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.entity;
 | 
 |  |  | 
 | 
 |  |  | import java.math.BigDecimal;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableName;
 | 
 |  |  | import com.xcong.excoin.common.entity.BaseEntity;
 | 
 |  |  | 
 | 
 |  |  | import lombok.Data;
 | 
 |  |  | 
 | 
 |  |  | /**
 | 
 |  |  |  * 代理用户钱包
 | 
 |  |  |  *
 | 
 |  |  |  * @author wzy
 | 
 |  |  |  * @date 2020-05-18
 | 
 |  |  |  **/
 | 
 |  |  | @Data
 | 
 |  |  | @TableName("member_wallet_agent")
 | 
 |  |  | public class MemberWalletAgentEntity extends BaseEntity {
 | 
 |  |  | 	 | 
 |  |  |     /**
 | 
 |  |  |      *  | 
 |  |  |      */
 | 
 |  |  |     private static final long serialVersionUID = 1L;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 用户Id
 | 
 |  |  |      */
 | 
 |  |  |     private Long memberId;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 可用余额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal availableBalance;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 总金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal totalBalance;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 冻结金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal frozenBalance;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 借入资产金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal borrowedFund;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 钱包标识
 | 
 |  |  |      */
 | 
 |  |  |     private String walletCode;
 | 
 |  |  | 
 | 
 |  |  |     /**
 | 
 |  |  |      * 钱包地址
 | 
 |  |  |      */
 | 
 |  |  |     private String walletAddress;
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.mapper; | 
 |  |  |  | 
 |  |  | import org.apache.ibatis.annotations.Param; | 
 |  |  | import org.mapstruct.Mapper; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
 |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @author wzy | 
 |  |  |  * @date 2020-05-31 | 
 |  |  |  **/ | 
 |  |  | @Mapper | 
 |  |  | public interface ContractHoldOrderEntityMapper extends BaseMapper<ContractHoldOrderEntity> { | 
 |  |  |  | 
 |  |  |     IPage<ContractHoldOrderEntity> selectContractHoldOrderListInPage(Page<ContractHoldOrderEntity> page, | 
 |  |  |             @Param("contractHoldOrderEntity") ContractHoldOrderEntity contractHoldOrderEntity); | 
 |  |  |             @Param("record") ContractHoldOrderEntity contractHoldOrderEntity); | 
 |  |  |      | 
 |  |  |     long countContractHoldOrderSql(@Param("contractHoldOrderEntity") ContractHoldOrderEntity contractHoldOrderEntity); | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.mapper;
 | 
 |  |  | 
 | 
 |  |  | import org.apache.ibatis.annotations.Param;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
 |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity;
 | 
 |  |  | 
 | 
 |  |  | public interface ContractOrderMapper extends BaseMapper<ContractOrderEntity> {
 | 
 |  |  | 
 | 
 |  |  |     IPage<ContractOrderEntity> findMemberHistoryOrderInfoInPage(Page<ContractOrderEntity> page,
 | 
 |  |  |             @Param("record") ContractOrderEntity contractOrderEntity);
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.mapper;
 | 
 |  |  | 
 | 
 |  |  | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.MemberWalletAgentEntity;
 | 
 |  |  | 
 | 
 |  |  | public interface MemberWalletAgentMapper extends BaseMapper<MemberWalletAgentEntity>{
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.service; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
 |  |  | import com.baomidou.mybatisplus.extension.service.IService; | 
 |  |  | import com.xcong.excoin.common.entity.QueryRequest; | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberEntity; | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity; | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity; | 
 |  |  | import com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @author helius | 
 |  |  |  */ | 
 |  |  | public interface TradeManageService extends IService<ContractHoldOrderEntity> { | 
 |  |  |  | 
 |  |  |     IPage<ContractHoldOrderEntity> findContractHoldOrderListInPage(ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request); | 
 |  |  |  | 
 |  |  |     IPage<MemberAccountInfoVo> findMemberAccountInfoListInPage(MemberEntity memberEntity, QueryRequest request); | 
 |  |  |  | 
 |  |  |     IPage<MemberAccountMoneyChangeEntity> findMemberAgentReturnInfoInPage(MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity, | 
 |  |  |             QueryRequest request); | 
 |  |  |  | 
 |  |  |     IPage<ContractOrderEntity> findMemberHistoryOrderInfoInPage(ContractOrderEntity contractOrderEntity, QueryRequest request); | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.service.impl; | 
 |  |  |  | 
 |  |  |  | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
 |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
 |  |  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
 |  |  | import com.xcong.excoin.common.entity.QueryRequest; | 
 |  |  | import com.xcong.excoin.common.utils.CoinTypeConvert; | 
 |  |  | import com.xcong.excoin.common.utils.RedisUtils; | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; | 
 |  |  | import com.xcong.excoin.modules.member.entity.MemberEntity; | 
 |  |  | import com.xcong.excoin.modules.member.mapper.MemberAccountMoneyChangeMapper; | 
 |  |  | import com.xcong.excoin.modules.member.mapper.MemberMapper; | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity; | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity; | 
 |  |  | import com.xcong.excoin.modules.trademanage.entity.MemberWalletAgentEntity; | 
 |  |  | import com.xcong.excoin.modules.trademanage.mapper.ContractHoldOrderEntityMapper; | 
 |  |  | import com.xcong.excoin.modules.trademanage.mapper.ContractOrderMapper; | 
 |  |  | import com.xcong.excoin.modules.trademanage.mapper.MemberWalletAgentMapper; | 
 |  |  | import com.xcong.excoin.modules.trademanage.service.TradeManageService; | 
 |  |  | import com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo; | 
 |  |  | import lombok.RequiredArgsConstructor; | 
 |  |  |  | 
 |  |  | @Service | 
 |  |  | @RequiredArgsConstructor | 
 |  |  | public class TradeManageServiceImpl extends ServiceImpl<ContractHoldOrderEntityMapper, ContractHoldOrderEntity> implements TradeManageService{ | 
 |  |  |  | 
 |  |  |     private final ContractHoldOrderEntityMapper contractHoldOrderEntityMapper; | 
 |  |  | 	 | 
 |  |  |     private final MemberMapper memberMapper; | 
 |  |  | 	 | 
 |  |  |     private final MemberWalletAgentMapper memberWalletAgentMapper; | 
 |  |  |  | 
 |  |  |     private final MemberAccountMoneyChangeMapper memberAccountMoneyChangeMapper; | 
 |  |  | 	 | 
 |  |  |     private final ContractOrderMapper contractHoldOrderMapper; | 
 |  |  | 	 | 
 |  |  |     private final RedisUtils redisUtils; | 
 |  |  | 	 | 
 |  |  |     @Override | 
 |  |  |     public IPage<ContractHoldOrderEntity> findContractHoldOrderListInPage( | 
 |  |  |             ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) { | 
 |  |  |         Page<ContractHoldOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); | 
 |  |  |         IPage<ContractHoldOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderEntityMapper.selectContractHoldOrderListInPage(page, contractHoldOrderEntity); | 
 |  |  |         List<ContractHoldOrderEntity> records = findMemberAccountInfoListInPage.getRecords(); | 
 |  |  | 		 | 
 |  |  |         if (records != null) { | 
 |  |  |             for (ContractHoldOrderEntity holdOrderEntity : records) { | 
 |  |  |                 MemberEntity selectById = memberMapper.selectById(holdOrderEntity.getMemberId()); | 
 |  |  |                 // 获取最新价 | 
 |  |  |                 BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol()))); | 
 |  |  |                 BigDecimal lotNumber = holdOrderEntity.getSymbolSku(); | 
 |  |  |                 // 盈亏 | 
 |  |  |                 BigDecimal rewardRatio = BigDecimal.ZERO; | 
 |  |  |                 // 开多 | 
 |  |  |                 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { | 
 |  |  |                     // (最新价-开仓价)*规格*张数 | 
 |  |  |                     rewardRatio = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())); | 
 |  |  |                     // 开空 | 
 |  |  |                 } else { | 
 |  |  |                     // (开仓价-最新价)*规格*张数 | 
 |  |  |                     rewardRatio = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (selectById.getIsProfit() == MemberEntity.IS_PROFIT_Y) { | 
 |  |  |                    String selectTradeSetting = memberMapper.selectTradeSetting(); | 
 |  |  |                     BigDecimal profitParam=new BigDecimal(selectTradeSetting);   | 
 |  |  |                     if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) { | 
 |  |  |                         rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(profitParam)); | 
 |  |  |                     } else { | 
 |  |  |                         rewardRatio = rewardRatio.multiply(BigDecimal.ONE.add(profitParam)); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 holdOrderEntity.setRewardRatio(rewardRatio); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return findMemberAccountInfoListInPage; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public IPage<MemberAccountInfoVo> findMemberAccountInfoListInPage(MemberEntity memberEntity, QueryRequest request) { | 
 |  |  |         Page<MemberEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); | 
 |  |  |         IPage<MemberAccountInfoVo> selectMemberListInPage = memberMapper.findMemberAccountInfoListInPage(page, memberEntity); | 
 |  |  |         List<MemberAccountInfoVo> records = selectMemberListInPage.getRecords(); | 
 |  |  |         if(records.size() > 0) { | 
 |  |  |             for(MemberAccountInfoVo memberAccountInfoVo : records) { | 
 |  |  |                 Long memberId = memberAccountInfoVo.getId(); | 
 |  |  |                 String inviteId = memberMapper.selectAgentForAccount(memberId); | 
 |  |  |                 if("".equals(inviteId) || inviteId == null) { | 
 |  |  |                     memberAccountInfoVo.setIsSuAccount(0); | 
 |  |  |                 }else { | 
 |  |  |                     memberAccountInfoVo.setIsSuAccount(1); | 
 |  |  |                 } | 
 |  |  |                 Map<String, Object> columnMap = new HashMap<>(); | 
 |  |  |                 columnMap.put("member_id", memberId); | 
 |  |  |                 List<MemberWalletAgentEntity> selectByMap = memberWalletAgentMapper.selectByMap(columnMap); | 
 |  |  |                 if(selectByMap.size() > 0) { | 
 |  |  |                     BigDecimal availableBalance = selectByMap.get(0).getAvailableBalance(); | 
 |  |  |                     memberAccountInfoVo.setAgentAvailableBalance(availableBalance); | 
 |  |  |                 } | 
 |  |  | 				 | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return selectMemberListInPage; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public IPage<MemberAccountMoneyChangeEntity> findMemberAgentReturnInfoInPage( | 
 |  |  |             MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity, QueryRequest request) { | 
 |  |  |         Page<MemberAccountMoneyChangeEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); | 
 |  |  |         IPage<MemberAccountMoneyChangeEntity> findMemberAccountInfoListInPage = memberAccountMoneyChangeMapper.findMemberAccountInfoListInPage(page, memberAccountMoneyChangeEntity); | 
 |  |  |         return findMemberAccountInfoListInPage; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public IPage<ContractOrderEntity> findMemberHistoryOrderInfoInPage( | 
 |  |  |             ContractOrderEntity contractOrderEntity, QueryRequest request) { | 
 |  |  |         Page<ContractOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); | 
 |  |  |         IPage<ContractOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderMapper.findMemberHistoryOrderInfoInPage(page, contractOrderEntity); | 
 |  |  |         return findMemberAccountInfoListInPage; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.modules.trademanage.vo;
 | 
 |  |  | 
 | 
 |  |  | import java.math.BigDecimal;
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.IdType;
 | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableId;
 | 
 |  |  | import lombok.Data;
 | 
 |  |  | 
 | 
 |  |  | @Data
 | 
 |  |  | public class MemberAccountInfoVo {
 | 
 |  |  | 	 | 
 |  |  |     @TableId(value = "id",type = IdType.AUTO)
 | 
 |  |  |     private Long id;
 | 
 |  |  |     /**
 | 
 |  |  |      * 手机号(包含国际手机号)
 | 
 |  |  |      */
 | 
 |  |  |     private String phone;
 | 
 |  |  |     /**
 | 
 |  |  |      * 邮箱
 | 
 |  |  |      */
 | 
 |  |  |     private String email;
 | 
 |  |  |     private String inviteId;
 | 
 |  |  |     /**
 | 
 |  |  |      * 币币可用金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal walletCoinAvailableBalance;
 | 
 |  |  |     /**
 | 
 |  |  |      * 币币总金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal walletCoinTotalBalance;
 | 
 |  |  |     /**
 | 
 |  |  |      * 币币冻结金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal walletCoinFrozenBalance;
 | 
 |  |  |     /**
 | 
 |  |  |      * 合约可用金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal walletAvailableBalance;
 | 
 |  |  |     /**
 | 
 |  |  |      * 合约总金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal walletTotalBalance;
 | 
 |  |  |     /**
 | 
 |  |  |      * 合约冻结金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal walletFrozenBalance;
 | 
 |  |  |     /**
 | 
 |  |  |      * 是否是代理
 | 
 |  |  |      */
 | 
 |  |  |     private int isSuAccount;
 | 
 |  |  |     /**
 | 
 |  |  |      * 代理可用金额
 | 
 |  |  |      */
 | 
 |  |  |     private BigDecimal agentAvailableBalance;
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 
| New file | 
 |  |  | 
 |  |  | <?xml version="1.0" encoding="UTF-8"?>
 | 
 |  |  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 | 
 |  |  | <mapper namespace="com.xcong.excoin.modules.trademanage.mapper.ContractHoldOrderEntityMapper">
 | 
 |  |  | 
 | 
 |  |  |     <select id="selectContractHoldOrderListInPage" resultType="com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity">
 | 
 |  |  |         SELECT
 | 
 |  |  |             *
 | 
 |  |  |         FROM
 | 
 |  |  |             contract_hold_order s
 | 
 |  |  |         LEFT JOIN member m ON m.id = s.member_id
 | 
 |  |  |         <where>
 | 
 |  |  |             <if test="record != null" >
 | 
 |  |  |                 <if test="record.account!=null and record.account!=''">
 | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account})
 | 
 |  |  |                 </if>
 | 
 |  |  |             </if>
 | 
 |  |  |         </where>	 | 
 |  |  |     </select>
 | 
 |  |  |      | 
 |  |  | </mapper> | 
 
| New file | 
 |  |  | 
 |  |  | <?xml version="1.0" encoding="UTF-8"?>
 | 
 |  |  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 | 
 |  |  | <mapper namespace="com.xcong.excoin.modules.trademanage.mapper.ContractOrderMapper">
 | 
 |  |  | 
 | 
 |  |  |     <select id="findMemberHistoryOrderInfoInPage" resultType="com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity">
 | 
 |  |  |         SELECT
 | 
 |  |  |             *
 | 
 |  |  |         FROM
 | 
 |  |  |             contract_order s
 | 
 |  |  |         LEFT JOIN member m ON m.id = s.member_id
 | 
 |  |  |         <where>
 | 
 |  |  |             <if test="record != null" >
 | 
 |  |  |                 <if test="record.account!=null and record.account!=''">
 | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account})
 | 
 |  |  |                 </if>
 | 
 |  |  |             </if>
 | 
 |  |  |         </where>	 | 
 |  |  |         order by s.order_no DESC,s.create_time asc
 | 
 |  |  |     </select>
 | 
 |  |  |      | 
 |  |  | </mapper> | 
 
| New file | 
 |  |  | 
 |  |  | <?xml version="1.0" encoding="UTF-8"?>
 | 
 |  |  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 | 
 |  |  | <mapper namespace="com.xcong.excoin.modules.member.mapper.MemberAccountMoneyChangeMapper">
 | 
 |  |  | 
 | 
 |  |  |     <select id="findMemberAccountInfoListInPage" resultType="com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity">
 | 
 |  |  |         SELECT
 | 
 |  |  |             m.phone,
 | 
 |  |  |             m.email,
 | 
 |  |  |             m.invite_id inviteId,
 | 
 |  |  |             s.symbol,
 | 
 |  |  |             s.amount,
 | 
 |  |  |             s.content,
 | 
 |  |  |             s.create_time createTime,
 | 
 |  |  |             s. STATUS,
 | 
 |  |  |             s.type
 | 
 |  |  |         FROM
 | 
 |  |  |             member_account_money_change s
 | 
 |  |  |         LEFT JOIN member m ON m.id = s.member_id
 | 
 |  |  |         <where>
 | 
 |  |  |         s.type = 3  | 
 |  |  |         and s.content like '%佣金入账%'  | 
 |  |  |             <if test="record != null" >
 | 
 |  |  |                 <if test="record.account!=null and record.account!=''">
 | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account})
 | 
 |  |  |                 </if>
 | 
 |  |  |             </if>
 | 
 |  |  |         </where>	 | 
 |  |  |     </select>
 | 
 |  |  |      | 
 |  |  | </mapper> | 
 
 |  |  | 
 |  |  |         <where>
 | 
 |  |  |             <if test="record != null" >
 | 
 |  |  |                 <if test="record.account!=null and record.account!=''">
 | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or s.member_id=#{record.account})
 | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account})
 | 
 |  |  |                 </if>
 | 
 |  |  |                 <if test="record.address!=null and record.address!=''">
 | 
 |  |  |                     and s.address=#{record.address}
 | 
 
 |  |  | 
 |  |  |          <where>
 | 
 |  |  |             <if test="record != null" >
 | 
 |  |  |                 <if test="record.account!=null and record.account!=''">
 | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or s.member_id=#{record.account})
 | 
 |  |  |                      and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account})
 | 
 |  |  |                 </if>
 | 
 |  |  |                 <if test="record.isInside!=null and record.isInside!=''">
 | 
 |  |  |                     and s.is_inside= #{record.isInside}
 | 
 
 |  |  | 
 |  |  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
 |  |  | <mapper namespace="com.xcong.excoin.modules.member.mapper.MemberMapper"> | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     <select id="selectMemberListInPage" resultType="com.xcong.excoin.modules.member.entity.MemberEntity"> | 
 |  |  |         select * from member | 
 |  |  |         <where> | 
 |  |  | 
 |  |  |         </where> | 
 |  |  |         order by create_time desc | 
 |  |  |     </select> | 
 |  |  |      | 
 |  |  |     <select id="findMemberAccountInfoListInPage" resultType="com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo"> | 
 |  |  |         SELECT | 
 |  |  |             m.id, | 
 |  |  |             m.phone, | 
 |  |  |             m.email, | 
 |  |  |             m.invite_id inviteId, | 
 |  |  |             a.available_balance walletCoinAvailableBalance, | 
 |  |  |             a.total_balance walletCoinTotalBalance, | 
 |  |  |             a.frozen_balance walletCoinFrozenBalance, | 
 |  |  |             b.available_balance walletAvailableBalance, | 
 |  |  |             b.total_balance walletTotalBalance, | 
 |  |  |             b.frozen_balance walletFrozenBalance | 
 |  |  |         FROM | 
 |  |  |             member m | 
 |  |  |         LEFT JOIN member_wallet_coin b ON m.id = b.member_id | 
 |  |  |         LEFT JOIN member_wallet_contract a ON a.member_id = m.id | 
 |  |  |         <where> | 
 |  |  |             b.wallet_code = 'USDT' | 
 |  |  |             <if test="record.account!=null and record.account!=''"> | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) | 
 |  |  |             </if> | 
 |  |  |         </where> | 
 |  |  |         order by m.create_time desc | 
 |  |  |     </select> | 
 |  |  | 	 | 
 |  |  |     <select id="selectAgentForAccount" resultType="java.lang.String"> | 
 |  |  |         select invite_id from agent_friend_relation where member_id = #{memberId} | 
 |  |  |     </select> | 
 |  |  | 	 | 
 |  |  |     <select id="selectTradeSetting" resultType="java.lang.String"> | 
 |  |  |         select profit_param from platform_trade_setting  | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  | </mapper> | 
 
 |  |  | 
 |  |  |         s.order_type = 'B' 
 | 
 |  |  |             <if test="record != null" >
 | 
 |  |  |                 <if test="record.account!=null and record.account!=''">
 | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or s.member_id=#{record.account})
 | 
 |  |  |                     and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account})
 | 
 |  |  |                 </if>
 | 
 |  |  |                 <if test="record.orderStatus!=null and record.orderStatus!= 0" >
 | 
 |  |  |                     and s.order_status = #{record.orderStatus}
 | 
 |  |  | 
 |  |  |             s.order_status orderStatus,
 | 
 |  |  |             m.name,
 | 
 |  |  |             m.account,
 | 
 |  |  |             a.invite_id inviteId,
 | 
 |  |  |             m.payment_qrcode paymentQrcode,
 | 
 |  |  |             m.bank,
 | 
 |  |  |             m.payment_type paymentType,
 | 
 |  |  | 
 |  |  |         s.order_type = 'S' 
 | 
 |  |  |             <if test="record != null" >
 | 
 |  |  |                 <if test="record.account!=null and record.account!=''">
 | 
 |  |  |                     and (a.phone = #{record.account} or a.email = #{record.account} or s.member_id=#{record.account})  | 
 |  |  |                     and (a.phone = #{record.account} or a.email = #{record.account} or a.invite_id=#{record.account})
 | 
 |  |  |                 </if>
 | 
 |  |  |                 <if test="record.orderStatus!=null and record.orderStatus!= 0" >
 | 
 |  |  |                     and s.order_status = #{record.orderStatus}
 | 
 
 |  |  | 
 |  |  |                 cols: [[
 | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 120,align:'left'},
 | 
 |  |  |                     {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
 | 
 |  |  |                     {field: 'memberId', title: '邀请码UID', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'symbol', title: '币种', minWidth: 60,align:'center'},
 | 
 |  |  |                     {field: 'tag', title: 'USDT类型', minWidth: 60,align:'center'},
 | 
 |  |  |                     {field: 'amount', title: '充币数量', minWidth: 100,align:'center'},
 | 
 
 |  |  | 
 |  |  |                 cols: [[
 | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 120,align:'left'},
 | 
 |  |  |                     {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
 | 
 |  |  |                     {field: 'memberId', title: '邀请码UID', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'inviteId', title: '邀请码UID', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'amountCny', title: '人民币金额', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'amountUsdt', title: 'USDT金额', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'unitPrice', title: '单价', minWidth: 80,align:'center'},
 | 
 
 |  |  | 
 |  |  |                 cols: [[
 | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 120,align:'left'},
 | 
 |  |  |                     {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
 | 
 |  |  |                     {field: 'memberId', title: '邀请码UID', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'amountCny', title: '人民币金额', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'amountUsdt', title: 'USDT金额', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'unitPrice', title: '单价', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'createTime', title: '提现时间', minWidth: 180,align:'center'},
 | 
 |  |  |                     {title: '提现状态', templet: '#order-Status', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'orderNo', title: '订单编号', minWidth: 150,align:'center'},
 | 
 |  |  |                     {title: '收款方式', templet: '#payment-Type', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'paymentQrcode', title: '支付码', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'orderNo', title: '订单编号', minWidth: 150,align:'center'},
 | 
 |  |  |                     {field: 'name', title: '收款人', minWidth: 150,align:'center'},
 | 
 |  |  |                     {field: 'account', title: '收款账号', minWidth: 150,align:'center'},
 | 
 |  |  |                     {title: '收款方式', templet: '#payment-Type', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'paymentAccount', title: '二维码', minWidth: 150,align:'center'},
 | 
 |  |  |                     {field: 'bank', title: '所属银行', minWidth: 150,align:'center'},
 | 
 |  |  |                     {title: '操作', toolbar: '#user-option', minWidth: 150, fixed : 'right'}
 | 
 
 |  |  | 
 |  |  |                 cols: [[
 | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 120,align:'left'},
 | 
 |  |  |                     {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
 | 
 |  |  |                     {field: 'memberId', title: '邀请码UID', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'symbol', title: '币种', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'amount', title: '提币数量', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'address', title: '提币地址', minWidth: 300,align:'center'},
 | 
 
| New file | 
 |  |  | 
 |  |  | <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>
 | 
 |  |  |                             </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"></i>
 | 
 |  |  |                                 </div>
 | 
 |  |  |                                 <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
 | 
 |  |  |                                     <i class="layui-icon"></i>
 | 
 |  |  |                                 </div>
 | 
 |  |  |                             </div>
 | 
 |  |  |                         </div>
 | 
 |  |  |                     </form>
 | 
 |  |  |                     <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table>
 | 
 |  |  |                 </div>
 | 
 |  |  |             </div>
 | 
 |  |  |         </div>
 | 
 |  |  |     </div>
 | 
 |  |  | </div>
 | 
 |  |  | <script type="text/html" id="isSuAccount">
 | 
 |  |  |     {{#
 | 
 |  |  |     var isSuAccount = {
 | 
 |  |  |     "1": {title: '是' , color: 'green'},
 | 
 |  |  |     "0": {title: '否' , color: 'red' }
 | 
 |  |  |     }[d.isSuAccount];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{isSuAccount.color}}">{{ isSuAccount.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <!-- 表格操作栏 end -->
 | 
 |  |  | <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,
 | 
 |  |  |             treeSelect = layui.treeSelect,
 | 
 |  |  |             dropdown = layui.dropdown,
 | 
 |  |  |             $view = $('#febs-user'),
 | 
 |  |  |             $query = $view.find('#query'),
 | 
 |  |  |             $reset = $view.find('#reset'),
 | 
 |  |  |             $searchForm = $view.find('form'),
 | 
 |  |  |             sortObject = {field: 'createTime', type: null},
 | 
 |  |  |             tableIns;
 | 
 |  |  | 
 | 
 |  |  |         form.render();
 | 
 |  |  | 
 | 
 |  |  |         // 表格初始化
 | 
 |  |  |         initTable();
 | 
 |  |  | 
 | 
 |  |  |         // 查询按钮
 | 
 |  |  |         $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';
 | 
 |  |  |             tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
 | 
 |  |  |         });
 | 
 |  |  | 
 | 
 |  |  |         function initTable() {
 | 
 |  |  |             tableIns = febs.table.init({
 | 
 |  |  |                 elem: $view.find('table'),
 | 
 |  |  |                 id: 'userTable',
 | 
 |  |  |                 url: ctx + 'tradeManage/memberAccountInfo',
 | 
 |  |  |                 cols: [[
 | 
 |  |  |                     {field: 'phone', title: '手机号', minWidth: 100,align:'left'},
 | 
 |  |  |                     {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
 | 
 |  |  |                     {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'walletCoinAvailableBalance', title: '币币可用', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'walletCoinFrozenBalance', title: '币币冻结', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'walletCoinTotalBalance', title: '币币总金额', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'walletAvailableBalance', title: '合约可用', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'walletFrozenBalance', title: '合约冻结', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'walletTotalBalance', title: '合约总金额', minWidth: 80,align:'center'},
 | 
 |  |  |                     {title: '是否是代理', templet: '#isSuAccount', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'agentAvailableBalance', title: '代理账户', minWidth: 80,align:'center'}
 | 
 |  |  |                 ]]
 | 
 |  |  |             });
 | 
 |  |  |         }
 | 
 |  |  | 
 | 
 |  |  |         // 获取查询参数
 | 
 |  |  |         function getQueryParams() {
 | 
 |  |  |             return {
 | 
 |  |  |                 account: $searchForm.find('input[name="account"]').val().trim(),
 | 
 |  |  |             };
 | 
 |  |  |         }
 | 
 |  |  |          | 
 |  |  |     })
 | 
 |  |  | </script> | 
 
| New file | 
 |  |  | 
 |  |  | <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>
 | 
 |  |  |                             </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"></i>
 | 
 |  |  |                                 </div>
 | 
 |  |  |                                 <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
 | 
 |  |  |                                     <i class="layui-icon"></i>
 | 
 |  |  |                                 </div>
 | 
 |  |  |                             </div>
 | 
 |  |  |                         </div>
 | 
 |  |  |                     </form>
 | 
 |  |  |                     <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table>
 | 
 |  |  |                 </div>
 | 
 |  |  |             </div>
 | 
 |  |  |         </div>
 | 
 |  |  |     </div>
 | 
 |  |  | </div>
 | 
 |  |  | <script type="text/html" id="isType">
 | 
 |  |  |     {{#
 | 
 |  |  |     var type = {
 | 
 |  |  |     "1": {title: '币币资产' , color: 'red'},
 | 
 |  |  |     "2": {title: '合约资产' , color: 'green'},
 | 
 |  |  |     "3": {title: '代理资产' , color: 'blue' }
 | 
 |  |  |     }[d.type];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{type.color}}">{{ type.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <script type="text/html" id="status">
 | 
 |  |  |     {{#
 | 
 |  |  |     var status = {
 | 
 |  |  |     "2": {title: '失败' , color: 'red'},
 | 
 |  |  |     "1": {title: '成功' , color: 'green'},
 | 
 |  |  |     "0": {title: '待审核' , color: 'blue' }
 | 
 |  |  |     }[d.status];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{status.color}}">{{ status.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <!-- 表格操作栏 end -->
 | 
 |  |  | <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,
 | 
 |  |  |             treeSelect = layui.treeSelect,
 | 
 |  |  |             dropdown = layui.dropdown,
 | 
 |  |  |             $view = $('#febs-user'),
 | 
 |  |  |             $query = $view.find('#query'),
 | 
 |  |  |             $reset = $view.find('#reset'),
 | 
 |  |  |             $searchForm = $view.find('form'),
 | 
 |  |  |             sortObject = {field: 'createTime', type: null},
 | 
 |  |  |             tableIns;
 | 
 |  |  | 
 | 
 |  |  |         form.render();
 | 
 |  |  | 
 | 
 |  |  |         // 表格初始化
 | 
 |  |  |         initTable();
 | 
 |  |  | 
 | 
 |  |  |         // 查询按钮
 | 
 |  |  |         $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';
 | 
 |  |  |             tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
 | 
 |  |  |         });
 | 
 |  |  | 
 | 
 |  |  |         function initTable() {
 | 
 |  |  |             tableIns = febs.table.init({
 | 
 |  |  |                 elem: $view.find('table'),
 | 
 |  |  |                 id: 'userTable',
 | 
 |  |  |                 url: ctx + 'tradeManage/memberAgentReturnInfo',
 | 
 |  |  |                 cols: [[
 | 
 |  |  |                     {field: 'phone', title: '手机号', minWidth: 100,align:'left'},
 | 
 |  |  |                     {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
 | 
 |  |  |                     {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'symbol', title: '币种', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'amount', title: '金额', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'content', title: '记录内容', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'createTime', title: '时间', minWidth: 80,align:'center'},
 | 
 |  |  |                     {title: '状态', templet: '#status', minWidth: 100,align:'center'},
 | 
 |  |  |                     {title: '类型', templet: '#isType', minWidth: 100,align:'center'},
 | 
 |  |  |                 ]]
 | 
 |  |  |             });
 | 
 |  |  |         }
 | 
 |  |  | 
 | 
 |  |  |         // 获取查询参数
 | 
 |  |  |         function getQueryParams() {
 | 
 |  |  |             return {
 | 
 |  |  |                 account: $searchForm.find('input[name="account"]').val().trim(),
 | 
 |  |  |             };
 | 
 |  |  |         }
 | 
 |  |  |          | 
 |  |  |     })
 | 
 |  |  | </script> | 
 
 |  |  | 
 |  |  |                             <div class="layui-col-md10">
 | 
 |  |  |                                 <div class="layui-form-item">
 | 
 |  |  |                                     <div class="layui-inline">
 | 
 |  |  |                                         <label class="layui-form-label layui-form-label-sm">用户名</label>
 | 
 |  |  |                                         <div class="layui-input-inline">
 | 
 |  |  |                                             <input type="text" name="username" autocomplete="off" class="layui-input">
 | 
 |  |  |                                             <input type="text" placeholder="手机号/邮箱/邀请码" name="account" autocomplete="off" class="layui-input">
 | 
 |  |  |                                         </div>
 | 
 |  |  |                                     </div>
 | 
 |  |  |                                 </div>
 | 
 |  |  | 
 |  |  |                                 <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
 | 
 |  |  |                                     <i class="layui-icon"></i>
 | 
 |  |  |                                 </div>
 | 
 |  |  |                                 <div class="layui-btn layui-btn-sm layui-btn-primary table-action action-more"
 | 
 |  |  |                                      shiro:hasAnyPermissions="user:add,user:update,user:password:reset,user:export">
 | 
 |  |  |                                     <i class="layui-icon"></i>
 | 
 |  |  |                                 </div>
 | 
 |  |  |                             </div>
 | 
 |  |  |                         </div>
 | 
 |  |  |                     </form>
 | 
 |  |  |                     <table lay-filter="contractHoldOrderTable" lay-data="{id: 'contractHoldOrderTable'}"></table>
 | 
 |  |  |                     <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table>
 | 
 |  |  |                 </div>
 | 
 |  |  |             </div>
 | 
 |  |  |         </div>
 | 
 |  |  |     </div>
 | 
 |  |  | </div>
 | 
 |  |  | <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>
 | 
 |  |  |     <a lay-event="detail" shiro:hasPermission="user:view"><i
 | 
 |  |  |             class="layui-icon febs-edit-area febs-green"></i></a>
 | 
 |  |  |     <a lay-event="edit" shiro:hasPermission="user:update"><i
 | 
 |  |  |             class="layui-icon febs-edit-area febs-blue"></i></a>
 | 
 |  |  |     <a lay-event="del" shiro:hasPermission="user:delete"><i class="layui-icon febs-edit-area febs-red"></i></a>
 | 
 |  |  | <script type="text/html" id="tradeType">
 | 
 |  |  |     {{#
 | 
 |  |  |     var tradeType = {
 | 
 |  |  |     1: {title: '市价' , color: 'green'},
 | 
 |  |  |     2: {title: '限价' , color: 'blue' }
 | 
 |  |  |     }[d.tradeType];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{tradeType.color}}">{{ tradeType.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <script type="text/html" id="openingType">
 | 
 |  |  |     {{#
 | 
 |  |  |     var openingType = {
 | 
 |  |  |     1: {title: '开多' , color: 'green'},
 | 
 |  |  |     2: {title: '开空' , color: 'red' }
 | 
 |  |  |     }[d.openingType];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{openingType.color}}">{{ openingType.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <!-- 表格操作栏 end -->
 | 
 |  |  | <script data-th-inline="none" type="text/javascript">
 | 
 |  |  |     // 引入组件并初始化
 | 
 |  |  |     layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () {
 | 
 |  |  |         var $ = layui.jquery,
 | 
 |  |  |             laydate = layui.laydate,
 | 
 |  |  | 
 |  |  |             $reset = $view.find('#reset'),
 | 
 |  |  |             $searchForm = $view.find('form'),
 | 
 |  |  |             sortObject = {field: 'createTime', type: null},
 | 
 |  |  |             tableIns,
 | 
 |  |  |             createTimeFrom,
 | 
 |  |  |             createTimeTo;
 | 
 |  |  |             tableIns;
 | 
 |  |  | 
 | 
 |  |  |         form.render();
 | 
 |  |  | 
 | 
 |  |  |         // 表格初始化
 | 
 |  |  |         initTable();
 | 
 |  |  | 
 | 
 |  |  |         // 查询按钮
 | 
 |  |  |         $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';
 | 
 |  |  |             tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
 | 
 |  |  |         });
 | 
 |  |  | 
 | 
 |  |  |         function initTable() {
 | 
 |  |  |             tableIns = febs.table.init({
 | 
 |  |  |                 elem: $view.find('table'),
 | 
 |  |  |                 id: 'contractHoldOrderTable',
 | 
 |  |  |                 url: ctx + 'contractHoldOrder/getList',
 | 
 |  |  |                 id: 'userTable',
 | 
 |  |  |                 url: ctx + 'tradeManage/contractHoldOrder',
 | 
 |  |  |                 cols: [[
 | 
 |  |  |                     {type: 'checkbox'},
 | 
 |  |  |                     {field: 'memberId', title: 'uId', minWidth: 100},
 | 
 |  |  |                     {field: 'memberId', title: '用户账号', minWidth: 100},
 | 
 |  |  |                     {field: 'symbol', title: '币种', minWidth: 100},
 | 
 |  |  |                     {field: 'tradeType', title: '建仓类型', minWidth: 100},
 | 
 |  |  |                     {field: 'openingPrice', title: '建仓价格', minWidth: 100},
 | 
 |  |  |                     {field: 'symbolCnt', title: '建仓张数', minWidth: 100}
 | 
 |  |  |                     {field: 'phone', title: '手机号', minWidth: 100,align:'left'},
 | 
 |  |  |                     {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
 | 
 |  |  |                     {field: 'inviteId', title: '邀请码UID', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'orderNo', title: '订单编号', minWidth: 200,align:'center'},
 | 
 |  |  |                     {title: '开仓类型', templet: '#openingType', minWidth: 80,align:'center'},
 | 
 |  |  |                     {title: '交易类型', templet: '#tradeType', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'symbol', title: '币种', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'symbolCnt', title: '手数', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'rewardRatio', title: '实时盈亏', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'symbolSku', title: '币种规格', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'openingPrice', title: '开仓价', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'openingFeeAmount', title: '开仓手续费', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'bondAmount', title: '保证金', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'leverRatio', title: '杠杆倍率', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'stopLossPrice', title: '止损价', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'stopProfitPrice', title: '止盈价', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'prePaymentAmount', title: '预付款金额', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'forceClosingPrice', title: '预估强平价', minWidth: 120,align:'center'}
 | 
 |  |  |                 ]]
 | 
 |  |  |             });
 | 
 |  |  |         }
 | 
 |  |  | 
 | 
 |  |  |         /* function getQueryParams() {
 | 
 |  |  |             var createTime = $searchForm.find('input[name="createTime"]').val();
 | 
 |  |  |             if (createTime) {
 | 
 |  |  |                 createTimeFrom = createTime.split(' - ')[0];
 | 
 |  |  |                 createTimeTo = createTime.split(' - ')[1];
 | 
 |  |  |             }
 | 
 |  |  |         // 获取查询参数
 | 
 |  |  |         function getQueryParams() {
 | 
 |  |  |             return {
 | 
 |  |  |                 createTimeFrom: createTimeFrom,
 | 
 |  |  |                 createTimeTo: createTimeTo,
 | 
 |  |  |                 username: $searchForm.find('input[name="username"]').val().trim(),
 | 
 |  |  |                 status: $searchForm.find("select[name='status']").val(),
 | 
 |  |  |                 sex: $searchForm.find("select[name='sex']").val(),
 | 
 |  |  |                 mobile: $searchForm.find("input[name='mobile']").val().trim(),
 | 
 |  |  |                 deptId: $searchForm.find("input[name='dept']").val().trim(),
 | 
 |  |  |                 invalidate_ie_cache: new Date()
 | 
 |  |  |                 account: $searchForm.find('input[name="account"]').val().trim(),
 | 
 |  |  |             };
 | 
 |  |  |         } */
 | 
 |  |  |         }
 | 
 |  |  |          | 
 |  |  |     })
 | 
 |  |  | </script> | 
 
| New file | 
 |  |  | 
 |  |  | <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>
 | 
 |  |  |                             </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"></i>
 | 
 |  |  |                                 </div>
 | 
 |  |  |                                 <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
 | 
 |  |  |                                     <i class="layui-icon"></i>
 | 
 |  |  |                                 </div>
 | 
 |  |  |                             </div>
 | 
 |  |  |                         </div>
 | 
 |  |  |                     </form>
 | 
 |  |  |                     <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table>
 | 
 |  |  |                 </div>
 | 
 |  |  |             </div>
 | 
 |  |  |         </div>
 | 
 |  |  |     </div>
 | 
 |  |  | </div>
 | 
 |  |  | <script type="text/html" id="tradeType">
 | 
 |  |  |     {{#
 | 
 |  |  |     var tradeType = {
 | 
 |  |  |     1: {title: '市价' , color: 'green'},
 | 
 |  |  |     2: {title: '限价' , color: 'blue' }
 | 
 |  |  |     }[d.tradeType];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{tradeType.color}}">{{ tradeType.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <script type="text/html" id="closingType">
 | 
 |  |  |     {{#
 | 
 |  |  |     var closingType = {
 | 
 |  |  |     0: {title: '开仓' , color: 'blue'},
 | 
 |  |  |     2: {title: '平多' , color: 'green'},
 | 
 |  |  |     3: {title: '平空' , color: 'red'},
 | 
 |  |  |     4: {title: '爆仓平多' , color: 'red'},
 | 
 |  |  |     5: {title: '爆仓平空' , color: 'red'},
 | 
 |  |  |     6: {title: '止盈平多' , color: 'green'},
 | 
 |  |  |     7: {title: '止盈平空' , color: 'green'},
 | 
 |  |  |     8: {title: '止损平多' , color: 'red'},
 | 
 |  |  |     9: {title: '止损平空' , color: 'red'}
 | 
 |  |  |     }[d.closingType];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{closingType.color}}">{{ closingType.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <script type="text/html" id="orderStatus">
 | 
 |  |  |     {{#
 | 
 |  |  |     var orderStatus = {
 | 
 |  |  |     1: {title: '成交' , color: 'green'},
 | 
 |  |  |     2: {title: '撤单' , color: 'blue' }
 | 
 |  |  |     }[d.orderStatus];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{orderStatus.color}}">{{ orderStatus.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <script type="text/html" id="orderType">
 | 
 |  |  |     {{#
 | 
 |  |  |     var orderType = {
 | 
 |  |  |     1: {title: '开多' , color: 'green'},
 | 
 |  |  |     2: {title: '开空' , color: 'red'},
 | 
 |  |  |     3: {title: '平多' , color: 'green'},
 | 
 |  |  |     4: {title: '平空' , color: 'red' }
 | 
 |  |  |     }[d.orderType];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{orderType.color}}">{{ orderType.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <script type="text/html" id="openingType">
 | 
 |  |  |     {{#
 | 
 |  |  |     var openingType = {
 | 
 |  |  |     1: {title: '开多' , color: 'green'},
 | 
 |  |  |     2: {title: '开空' , color: 'red' }
 | 
 |  |  |     }[d.openingType];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{openingType.color}}">{{ openingType.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <script type="text/html" id="isCanClosing">
 | 
 |  |  |     {{#
 | 
 |  |  |     var openingType = {
 | 
 |  |  |     1: {title: '是' , color: 'green'},
 | 
 |  |  |     0: {title: '否' , color: 'red' }
 | 
 |  |  |     }[d.isCanClosing];
 | 
 |  |  |     }}
 | 
 |  |  |     <span class="layui-badge febs-tag-{{isCanClosing.color}}">{{ isCanClosing.title }}</span>
 | 
 |  |  | </script>
 | 
 |  |  | <!-- 表格操作栏 end -->
 | 
 |  |  | <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,
 | 
 |  |  |             treeSelect = layui.treeSelect,
 | 
 |  |  |             dropdown = layui.dropdown,
 | 
 |  |  |             $view = $('#febs-user'),
 | 
 |  |  |             $query = $view.find('#query'),
 | 
 |  |  |             $reset = $view.find('#reset'),
 | 
 |  |  |             $searchForm = $view.find('form'),
 | 
 |  |  |             sortObject = {field: 'createTime', type: null},
 | 
 |  |  |             tableIns;
 | 
 |  |  | 
 | 
 |  |  |         form.render();
 | 
 |  |  | 
 | 
 |  |  |         // 表格初始化
 | 
 |  |  |         initTable();
 | 
 |  |  | 
 | 
 |  |  |         // 查询按钮
 | 
 |  |  |         $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';
 | 
 |  |  |             tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
 | 
 |  |  |         });
 | 
 |  |  | 
 | 
 |  |  |         function initTable() {
 | 
 |  |  |             tableIns = febs.table.init({
 | 
 |  |  |                 elem: $view.find('table'),
 | 
 |  |  |                 id: 'userTable',
 | 
 |  |  |                 url: ctx + 'tradeManage/historyOrderInfo',
 | 
 |  |  |                 cols: [[
 | 
 |  |  |                     {field: 'phone', title: '手机号', minWidth: 100,align:'left'},
 | 
 |  |  |                     {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
 | 
 |  |  |                     {field: 'inviteId', title: '邀请码UID', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'orderNo', title: '订单编号', minWidth: 200,align:'center'},
 | 
 |  |  |                     {title: '交易类型', templet: '#tradeType', minWidth: 120,align:'center'},
 | 
 |  |  |                     {title: '订单类型', templet: '#orderType', minWidth: 120,align:'center'},
 | 
 |  |  |                     {title: '订单状态', templet: '#orderStatus', minWidth: 120,align:'center'},
 | 
 |  |  |                     {title: '平仓类型', templet: '#closingType', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'rewardAmount', title: '盈亏金额',  | 
 |  |  |                         templet: function (d) {
 | 
 |  |  |                             if (d.rewardAmount > 0) {
 | 
 |  |  |                                 return '<span style="color:green;">' + d.rewardAmount + '</span>'
 | 
 |  |  |                             }
 | 
 |  |  |                             if (d.rewardAmount < 0) {
 | 
 |  |  |                                 return '<span style="color:red;">' + d.rewardAmount + '</span>'
 | 
 |  |  |                             }
 | 
 |  |  |                             if (d.rewardAmount == 0 ||  d.rewardAmount == "" || d.rewardAmount == null) {
 | 
 |  |  |                                 return '<span></span>'
 | 
 |  |  |                             }
 | 
 |  |  |                         },minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'openingPrice', title: '开仓价',  | 
 |  |  |                             templet: function (d) {
 | 
 |  |  |                                 if (d.closingPrice > 0 || d.closingPrice < 0) {
 | 
 |  |  |                                     return '<span></span>'
 | 
 |  |  |                                 }else{
 | 
 |  |  |                                        return '<span>' + d.openingPrice + '</span>'
 | 
 |  |  |                                 }
 | 
 |  |  |                             }, minWidth: 150,align:'center'},
 | 
 |  |  |                     {field: 'closingPrice', title: '平仓价', minWidth: 150,align:'center'},
 | 
 |  |  |                     {field: 'openingTime', title: '开仓时间', minWidth: 200,align:'center'},
 | 
 |  |  |                     {field: 'closingTime', title: '平仓时间', minWidth: 200,align:'center'},
 | 
 |  |  |                     {field: 'entrustOpeningPrice', title: '委托开仓价', minWidth: 150,align:'center'},
 | 
 |  |  |                     {field: 'entrustTime', title: '委托时间', minWidth: 200,align:'center'},
 | 
 |  |  |                      | 
 |  |  |                     {field: 'symbol', title: '币种', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'symbolCnt', title: '手数', minWidth: 80,align:'center'},
 | 
 |  |  |                     {field: 'symbolSku', title: '币种规格', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'leverRatio', title: '杠杆倍率', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'stopLossPrice', title: '止损价', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'stopProfitPrice', title: '止盈价', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'rewardRatio', title: '盈亏比例', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'prePaymentAmount', title: '预付款金额', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'forceClosingPrice', title: '预估强平价', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'bondAmount', title: '保证金', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'openingFeeAmount', title: '开仓手续费', minWidth: 120,align:'center'},
 | 
 |  |  |                     {field: 'closingFeeAmount', title: '平仓手续费', minWidth: 100,align:'center'},
 | 
 |  |  |                     {field: 'holdAmount', title: '持仓费', minWidth: 120,align:'center'}
 | 
 |  |  |                 ]]
 | 
 |  |  |             });
 | 
 |  |  |         }
 | 
 |  |  | 
 | 
 |  |  |         // 获取查询参数
 | 
 |  |  |         function getQueryParams() {
 | 
 |  |  |             return {
 | 
 |  |  |                 account: $searchForm.find('input[name="account"]').val().trim(),
 | 
 |  |  |             };
 | 
 |  |  |         }
 | 
 |  |  |          | 
 |  |  |     })
 | 
 |  |  | </script> |