xiaoyong931011
2021-03-22 50b2901ecf5aa6ec3823265a51397a37ade2f0d7
20210319  平仓加载中
7 files modified
2 files added
401 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/trademanage/controller/TradeManageController.java 35 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractOrderMapper.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/trademanage/service/TradeManageService.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java 53 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/trademanage/vo/PositionSettingVo.java 49 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/ContractOrderMapper.xml 66 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/trademanage/positionSetting.html 159 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java
@@ -151,12 +151,21 @@
    private Integer isTrader;
    /**
     * 是否可平仓   1:否   0:是
     */
    private Integer pcState;
    public static final int PCSTATE_Y = 0;
    public static final int PCSTATE_N = 1;
    /**
     * 是否设置预估强平价系数 0-否1-是
     */
    private Integer isForce;
    
    @TableField(exist = false)
    private String account;
    @TableField(exist = false)
    private String accounts;
    
    @TableField(exist = false)
    private String firstName;
src/main/java/com/xcong/excoin/modules/trademanage/controller/TradeManageController.java
@@ -2,11 +2,15 @@
import java.util.Map;
import javax.validation.constraints.NotNull;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.xcong.excoin.common.annotation.ControllerEndpoint;
import com.xcong.excoin.common.controller.BaseController;
import com.xcong.excoin.common.entity.FebsResponse;
import com.xcong.excoin.common.entity.QueryRequest;
@@ -28,6 +32,37 @@
    private final TradeManageService tradeManageService;
    
    /**
     * 持仓设置---列表
     */
    @GetMapping("positionSetting")
    public FebsResponse getPositionSettingList(MemberEntity memberEntity, QueryRequest request) {
        Map<String, Object> data = getDataTable(tradeManageService.getPositionSettingList(memberEntity, request));
        return new FebsResponse().success().data(data);
    }
     /**
     * 持仓设置---禁止
     * @param id
     * @return
     */
    @GetMapping("disagreePositionSetting/{id}")
    @ControllerEndpoint(operation = "持仓设置---禁止", exceptionMessage = "禁止失败")
    public FebsResponse disagreePositionSetting(@NotNull(message = "{required}") @PathVariable Long id) {
        return tradeManageService.disagreePositionSetting(id);
    }
    /**
     * 持仓设置---开启
     * @param id
     * @return
     */
    @GetMapping("agreePositionSetting/{id}")
    @ControllerEndpoint(operation = "持仓设置---开启", exceptionMessage = "开启失败")
    public FebsResponse agreePositionSetting(@NotNull(message = "{required}") @PathVariable Long id) {
        return tradeManageService.agreePositionSetting(id);
    }
    /**
     * 历史委托明细---列表---17773261001
     */
    @GetMapping("historyOrderInfoAloneOne")
src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java
@@ -16,6 +16,16 @@
public class ViewController {
    
    /**
     * 持仓设置---列表
     * @return
     */
    @GetMapping("positionSetting")
    @RequiresPermissions("positionSetting:view")
    public String positionSetting() {
        return FebsUtil.view("modules/trademanage/positionSetting");
    }
    /**
     * 历史委托明细---17773261001
     * @return
     */
src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractOrderMapper.java
@@ -1,11 +1,15 @@
package com.xcong.excoin.modules.trademanage.mapper;
import java.math.BigDecimal;
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.MemberEntity;
import com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity;
import com.xcong.excoin.modules.trademanage.vo.PositionSettingVo;
public interface ContractOrderMapper extends BaseMapper<ContractOrderEntity> {
@@ -33,4 +37,10 @@
    IPage<ContractOrderEntity> findHistoryOrderInfoAloneAllInPage(Page<ContractOrderEntity> page,
            @Param("record")ContractOrderEntity contractOrderEntity);
    IPage<PositionSettingVo> getPositionSettingList(Page<PositionSettingVo> page, @Param("record")MemberEntity memberEntity);
    IPage<PositionSettingVo> getPositionSettingsList(Page<PositionSettingVo> page, @Param("record")MemberEntity memberEntity);
    BigDecimal selectRewardAmountBymemberId(@Param("memberId")Long memberId);
}
src/main/java/com/xcong/excoin/modules/trademanage/service/TradeManageService.java
@@ -1,7 +1,10 @@
package com.xcong.excoin.modules.trademanage.service;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
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;
@@ -9,6 +12,7 @@
import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity;
import com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity;
import com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo;
import com.xcong.excoin.modules.trademanage.vo.PositionSettingVo;
/**
 * @author helius
@@ -85,4 +89,10 @@
    IPage<ContractOrderEntity> findHistoryOrderInfoAloneAllInPage(ContractOrderEntity contractOrderEntity, QueryRequest request);
    IPage<PositionSettingVo> getPositionSettingList(MemberEntity memberEntity, QueryRequest request);
    FebsResponse disagreePositionSetting(@NotNull(message = "{required}") Long id);
    FebsResponse agreePositionSetting(@NotNull(message = "{required}") Long id);
}
src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java
@@ -6,11 +6,17 @@
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Service;
import javax.validation.constraints.NotNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.FebsResponse;
import com.xcong.excoin.common.entity.QueryRequest;
import com.xcong.excoin.common.utils.CoinTypeConvert;
import com.xcong.excoin.common.utils.RedisUtils;
@@ -30,9 +36,11 @@
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 com.xcong.excoin.modules.trademanage.vo.PositionSettingVo;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
@Service
@@ -1163,6 +1171,49 @@
        return findMemberAccountInfoListInPage;
    }
    
    @Override
    public IPage<PositionSettingVo> getPositionSettingList(MemberEntity memberEntity, QueryRequest request) {
        Page<PositionSettingVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<PositionSettingVo> positionSettingVoIPage = contractHoldOrderMapper.getPositionSettingList(page, memberEntity);
        if(StrUtil.isNotEmpty(memberEntity.getAccounts())) {
            positionSettingVoIPage = contractHoldOrderMapper.getPositionSettingsList(page, memberEntity);
        }
        List<PositionSettingVo> records = positionSettingVoIPage.getRecords();
        if(records != null && records.size() > 0) {
            for(PositionSettingVo positionSettingVo : records) {
                Long memberId = positionSettingVo.getId();
                //当前持仓总盈亏
                BigDecimal sumRewardAmount = contractHoldOrderMapper.selectRewardAmountBymemberId(memberId);
                positionSettingVo.setSumRewardAmount(sumRewardAmount);
            }
        }
        return positionSettingVoIPage;
    }
    @Override
    @Transactional
    public FebsResponse disagreePositionSetting(@NotNull(message = "{required}") Long id) {
        MemberEntity memberEntity = memberMapper.selectById(id);
        if(ObjectUtil.isEmpty(memberEntity)) {
            return new FebsResponse().fail().message("会员信息不存在");
        }
        memberEntity.setPcState(MemberEntity.PCSTATE_N);
        memberMapper.updateById(memberEntity);
        return new FebsResponse().success();
    }
    @Override
    public FebsResponse agreePositionSetting(@NotNull(message = "{required}") Long id) {
        MemberEntity memberEntity = memberMapper.selectById(id);
        if(ObjectUtil.isEmpty(memberEntity)) {
            return new FebsResponse().fail().message("会员信息不存在");
        }
        memberEntity.setPcState(MemberEntity.PCSTATE_Y);
        memberMapper.updateById(memberEntity);
        return new FebsResponse().success();
    }
    
    
    
src/main/java/com/xcong/excoin/modules/trademanage/vo/PositionSettingVo.java
New file
@@ -0,0 +1,49 @@
package com.xcong.excoin.modules.trademanage.vo;
import java.math.BigDecimal;
import com.xcong.excoin.common.entity.BaseEntity;
import lombok.Data;
@Data
public class PositionSettingVo extends BaseEntity {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    /**
     * 手机号(包含国际手机号)
     */
    private String phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 邀请码
     */
    private String inviteId;
    /**
     * 账号类型
     */
    private int accountType;
    private int pcState;
    /**
     * 姓名
     */
    private String realName;
    /**
     * 认证状态
     */
    private Integer certifyStatus;
    /**
     * 当前持仓总盈亏
     */
    private BigDecimal sumRewardAmount;
}
src/main/resources/mapper/modules/ContractOrderMapper.xml
@@ -2,6 +2,72 @@
<!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="selectRewardAmountBymemberId" resultType="java.math.BigDecimal">
        SELECT
            IFNULL(SUM(reward_amount), 0)
        FROM
            contract_hold_order
        WHERE
            is_can_closing = 1
          and member_id=#{memberId}
    </select>
    <select id="getPositionSettingsList" resultType="com.xcong.excoin.modules.trademanage.vo.PositionSettingVo">
        SELECT
        a.id,
        a.phone,
        a.email,
        a.invite_id,
        a.account_type,
        a.create_time,
               a.pc_state,
        CONCAT(b.first_name, b.second_name) realName
        FROM
        member a
        LEFT JOIN member_authentication b ON a.id = b.member_id
        <where>
            a.certify_status = 2
            and a.account_status = 1
            <if test="record != null" >
                <if test="record.accounts!=null and record.accounts!=''">
                    and (FIND_IN_SET(#{record.accounts}, a.referer_ids) or a.invite_id = #{record.accounts} )
                </if>
                <if test="record.isTest!=null and record.isTest!=''">
                    and a.account_type= #{record.isTest}
                </if>
            </if>
        </where>
        order by a.create_time desc
    </select>
    <select id="getPositionSettingList" resultType="com.xcong.excoin.modules.trademanage.vo.PositionSettingVo">
        SELECT
        a.id,
        a.phone,
        a.email,
        a.invite_id,
        a.account_type,
        a.create_time,
        a.pc_state,
        CONCAT(b.first_name, b.second_name) realName
        FROM
        member a
        LEFT JOIN member_authentication b ON a.id = b.member_id
        <where>
            a.certify_status = 2
            and a.account_status = 1
            <if test="record != null" >
                <if test="record.account!=null and record.account!=''">
                    and (a.phone = #{record.account} or a.email = #{record.account} or a.invite_id=#{record.account})
                </if>
                <if test="record.isTest!=null and record.isTest!=''">
                    and a.account_type= #{record.isTest}
                </if>
            </if>
        </where>
        order by a.create_time desc
    </select>
    <select id="findHistoryOrderInfoAloneAllInPage" resultType="com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity">
        SELECT
            *
src/main/resources/templates/febs/views/modules/trademanage/positionSetting.html
New file
@@ -0,0 +1,159 @@
<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="持仓设置">
    <div class="layui-row febs-container">
        <div class="layui-col-md12">
            <div class="layui-card">
                <div class="layui-card-body febs-table-full">
                    <form class="layui-form layui-table-form" lay-filter="user-table-form">
                        <div class="layui-row">
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="手机号/邮箱/邀请码" name="account" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="查询线下" name="accounts" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label layui-form-label-sm">账号类型</label>
                                        <div class="layui-input-inline">
                                            <select name="isTest">
                                                <option value=""></option>
                                                <option value="1">正常账号</option>
                                                <option value="2">测试账号</option>
                                            </select>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
                                    <i class="layui-icon">&#xe848;</i>
                                </div>
                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
                                    <i class="layui-icon">&#xe79b;</i>
                                </div>
                            </div>
                        </div>
                    </form>
                    <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- 表格操作栏 end -->
<script data-th-inline="none" type="text/javascript">
    // 引入组件并初始化
    layui.use(['jquery', 'form', 'table', 'febs'], function () {
        var $ = layui.jquery,
            febs = layui.febs,
            form = layui.form,
            table = layui.table,
            $view = $('#febs-user'),
            $query = $view.find('#query'),
            $reset = $view.find('#reset'),
            $searchForm = $view.find('form'),
            sortObject = {field: 'createTime', type: null},
            tableIns;
        form.render();
        // 表格初始化
        initTable();
        // 初始化表格操作栏各个按钮功能
        table.on('tool(userTable)', function (obj) {
            var data = obj.data,
                layEvent = obj.event;
            if (layEvent === 'disagree') {
                febs.modal.confirm('禁止', '确认禁止平仓功能?', function () {
                    disagree(data.id);
                });
            }
            if (layEvent === 'agree') {
                febs.modal.confirm('开启', '确认开启平仓功能?', function () {
                    agree(data.id);
                });
            }
        });
        function disagree(id) {
            febs.get(ctx + 'tradeManage/disagreePositionSetting/' + id, null, function () {
                febs.alert.success('禁止成功');
                $query.click();
            });
        }
        function agree(id) {
            febs.get(ctx + 'tradeManage/agreePositionSetting/' + id, null, function () {
                febs.alert.success('开启成功');
                $query.click();
            });
        }
        // 查询按钮
        $query.on('click', function () {
            var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
            tableIns.reload({where: params, page: {curr: 1}});
        });
        // 刷新按钮
        $reset.on('click', function () {
            $searchForm[0].reset();
            tableIns.reload({where: getQueryParams(), page: {curr: 1}});
        });
        function initTable() {
            tableIns = febs.table.init({
                elem: $view.find('table'),
                id: 'userTable',
                url: ctx + 'tradeManage/positionSetting',
                totalRow: true,
                cols: [[
                    {field: 'phone', title: '账号',minWidth: 100,align:'left',totalRowText: '合计'},
                    {field: 'email', title: '邮箱', minWidth: 100,align:'left'},
                    {field: 'realName', title: '姓名', minWidth: 120,align:'left'},
                    {field: 'inviteId', title: '邀请码', minWidth: 120,align:'center'},
                    {field: 'createTime', title: '时间', minWidth: 120,align:'center'},
                    {field: 'sumRewardAmount', title: '持仓总盈亏', minWidth: 120,align:'center'},
                    {field: 'pcState', title: '是否可平仓',
                        templet: function (d) {
                            if (d.pcState == 1) {
                                return '<span style="color:red;">否</span>'
                            } else {
                                return '<span style="color:green;">是</span>'
                            }
                        },minWidth: 100,align:'center'},
                    {field: 'accountType', title: '账号类型',
                        templet: function (d) {
                            if (d.accountType === 2) {
                                return '<span style="color:red;">测试账号</span>'
                            } else {
                                return '<span style="color:green;">正常账号</span>'
                            }
                        },minWidth: 100,align:'center'},
                    {title: '操作',
                        templet: function (d) {
                            if (d.pcState === 1) {
                                return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="agree" shiro:hasPermission="user:update">开启</button>'
                            }else{
                                return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="disagree" shiro:hasPermission="user:update">禁止</button>'
                            }
                        },minWidth: 300,align:'center'}
                ]]
            });
        }
        // 获取查询参数
        function getQueryParams() {
            return {
                account: $searchForm.find('input[name="account"]').val().trim(),
                accounts: $searchForm.find('input[name="accounts"]').val().trim(),
                isTest: $searchForm.find("select[name='isTest']").val(),
            };
        }
    })
</script>