From 50b2901ecf5aa6ec3823265a51397a37ade2f0d7 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 22 Mar 2021 14:13:35 +0800 Subject: [PATCH] 20210319 平仓加载中 --- src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java | 9 + src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractOrderMapper.java | 10 + src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java | 53 +++++++ src/main/java/com/xcong/excoin/modules/trademanage/vo/PositionSettingVo.java | 49 +++++++ src/main/resources/mapper/modules/ContractOrderMapper.xml | 66 +++++++++ src/main/resources/templates/febs/views/modules/trademanage/positionSetting.html | 159 ++++++++++++++++++++++ src/main/java/com/xcong/excoin/modules/trademanage/controller/TradeManageController.java | 35 +++++ src/main/java/com/xcong/excoin/modules/trademanage/service/TradeManageService.java | 10 + src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java | 10 + 9 files changed, 400 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java index f6a93e7..35cce4e 100644 --- a/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java @@ -149,6 +149,13 @@ * 是否是交易员1是2否 */ private Integer isTrader; + + /** + * 是否可平仓 1:否 0:是 + */ + private Integer pcState; + public static final int PCSTATE_Y = 0; + public static final int PCSTATE_N = 1; /** * 是否设置预估强平价系数 0-否1-是 @@ -157,6 +164,8 @@ @TableField(exist = false) private String account; + @TableField(exist = false) + private String accounts; @TableField(exist = false) private String firstName; diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/controller/TradeManageController.java b/src/main/java/com/xcong/excoin/modules/trademanage/controller/TradeManageController.java index c408f1b..cb70597 100644 --- a/src/main/java/com/xcong/excoin/modules/trademanage/controller/TradeManageController.java +++ b/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; @@ -26,6 +30,37 @@ public class TradeManageController extends BaseController{ 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 diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java b/src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java index 27f0b10..277c9ae 100644 --- a/src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java +++ b/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 */ diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractOrderMapper.java b/src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractOrderMapper.java index 727f425..72f0873 100644 --- a/src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractOrderMapper.java +++ b/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); + } diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/service/TradeManageService.java b/src/main/java/com/xcong/excoin/modules/trademanage/service/TradeManageService.java index 5cbf6b8..e1c201f 100644 --- a/src/main/java/com/xcong/excoin/modules/trademanage/service/TradeManageService.java +++ b/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); + } diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java b/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java index 1be5517..0d25b6e 100644 --- a/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java +++ b/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 @@ -1162,6 +1170,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(); + } diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/vo/PositionSettingVo.java b/src/main/java/com/xcong/excoin/modules/trademanage/vo/PositionSettingVo.java new file mode 100644 index 0000000..23e12ee --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/trademanage/vo/PositionSettingVo.java @@ -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; + +} diff --git a/src/main/resources/mapper/modules/ContractOrderMapper.xml b/src/main/resources/mapper/modules/ContractOrderMapper.xml index 7436b9c..c761ff6 100644 --- a/src/main/resources/mapper/modules/ContractOrderMapper.xml +++ b/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 * diff --git a/src/main/resources/templates/febs/views/modules/trademanage/positionSetting.html b/src/main/resources/templates/febs/views/modules/trademanage/positionSetting.html new file mode 100644 index 0000000..df70f6e --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/trademanage/positionSetting.html @@ -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"></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> +<!-- 表格操作栏 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> \ No newline at end of file -- Gitblit v1.9.1