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; 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 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 @@ -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(); } 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"></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>