xiaoyong931011
2020-07-16 a3d192d43e4090011d941e412a5bb44d59a6a049
20200716   代码提交
6 files modified
466 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java 134 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java 306 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/trademanage/vo/MemberAccountInfoVo.java 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MemberMapper.xml 10 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/trademanage/accountInfo.html 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java
@@ -1,66 +1,68 @@
package com.xcong.excoin.modules.member.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.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.vo.MemberDataInfoVo;
import com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo;
import java.util.List;
import org.apache.ibatis.annotations.Param;
/**
 * @author wzy
 * @date 2020-06-10
 **/
public interface MemberMapper extends BaseMapper<MemberEntity> {
    IPage<MemberEntity> selectMemberListInPage(Page<MemberEntity> page, @Param("record") MemberEntity memberEntity);
    IPage<MemberDataInfoVo> selectMemberDataInfoDtoListInPage(Page<MemberEntity> page, @Param("record") MemberEntity memberEntity);
    IPage<MemberAccountInfoVo> findMemberAccountInfoListInPage(Page<MemberEntity> page, @Param("record")MemberEntity memberEntity);
    String selectAgentForAccount(long memberId);
    String selectTradeSetting();
    String selectMemberDataInfoCount();
    String selectTotalAmountUsdtBForBasicRealData();
    String selectTotalAmountUsdtSForBasicRealData();
    String selectTotalAmountUsdtCZForBasicRealData();
    String selectTotalAmountUsdtTXForBasicRealData();
    String selectReturnMoneyForBasicRealData();
    String selectClosingpriceForBasicRealData();
    String selectSellClosingpriceForBasicRealData();
    String selectRewardratioForBasicRealData();
    String selectZCYHForBasicRealData();
    String selectSFCCForBasicRealData();
    String selectBBZHForBasicRealData();
    String selectHYZHForBasicRealData();
    String selectprepriceForBasicRealData();
    String selectBBZCForBasicRealData();
    String selectHYZCForBasicRealData();
    String selectDLZCForBasicRealData();
    List<String> selectMemberBylowLevelInviteId(String lowLevelInviteId);
}
package com.xcong.excoin.modules.member.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.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.vo.MemberDataInfoVo;
import com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo;
import java.util.List;
import org.apache.ibatis.annotations.Param;
/**
 * @author wzy
 * @date 2020-06-10
 **/
public interface MemberMapper extends BaseMapper<MemberEntity> {
    IPage<MemberEntity> selectMemberListInPage(Page<MemberEntity> page, @Param("record") MemberEntity memberEntity);
    IPage<MemberDataInfoVo> selectMemberDataInfoDtoListInPage(Page<MemberEntity> page, @Param("record") MemberEntity memberEntity);
    IPage<MemberAccountInfoVo> findMemberAccountInfoListInPage(Page<MemberEntity> page, @Param("record")MemberEntity memberEntity);
    String selectAgentForAccount(long memberId);
    String selectTradeSetting();
    String selectMemberDataInfoCount();
    String selectTotalAmountUsdtBForBasicRealData();
    String selectTotalAmountUsdtSForBasicRealData();
    String selectTotalAmountUsdtCZForBasicRealData();
    String selectTotalAmountUsdtTXForBasicRealData();
    String selectReturnMoneyForBasicRealData();
    String selectClosingpriceForBasicRealData();
    String selectSellClosingpriceForBasicRealData();
    String selectRewardratioForBasicRealData();
    String selectZCYHForBasicRealData();
    String selectSFCCForBasicRealData();
    String selectBBZHForBasicRealData();
    String selectHYZHForBasicRealData();
    String selectprepriceForBasicRealData();
    String selectBBZCForBasicRealData();
    String selectHYZCForBasicRealData();
    String selectDLZCForBasicRealData();
    List<String> selectMemberBylowLevelInviteId(String lowLevelInviteId);
    String selectRewardratioForBasicRealDataBymid(Long memberId);
}
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -564,9 +564,13 @@
            selectById.setCertifyStatus(MemberEntity.CERTIFY_STATUS_Y);
        }else {
            selectById.setCertifyStatus(MemberEntity.CERTIFY_STATUS_N);
            Map<String, Object> columnMap = new HashMap<>();
            columnMap.put("member_id", selectById);
            memberAuthenticationMapper.deleteByMap(columnMap);
        }
        selectById.setIdcardNo(memberAuthenticationEntity.getIdcardNo());
        memberMapper.updateById(selectById);
        return new FebsResponse().success();
    }
src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java
@@ -1,151 +1,155 @@
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.AgentReturnEntity;
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.AgentReturnMapper;
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 AgentReturnMapper agentReturnMapper;
    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;
    }
    @Override
    public IPage<AgentReturnEntity> findMemberAgentReturnInfosInPage(AgentReturnEntity agentReturnEntity,
            QueryRequest request) {
        Page<AgentReturnEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<AgentReturnEntity> findMemberAccountInfoListInPage = agentReturnMapper.findMemberAgentReturnInfosInPage(page, agentReturnEntity);
        return findMemberAccountInfoListInPage;
    }
    @Override
    public IPage<ContractOrderEntity> findMemberHistoryOrderAllInfoInPage(ContractOrderEntity contractOrderEntity,
            QueryRequest request) {
        Page<ContractOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<ContractOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderMapper.findMemberHistoryOrderInfoAllInPage(page, contractOrderEntity);
        return findMemberAccountInfoListInPage;
    }
}
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.AgentReturnEntity;
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.AgentReturnMapper;
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 AgentReturnMapper agentReturnMapper;
    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 rewardratioByMid = memberMapper.selectRewardratioForBasicRealDataBymid(memberId);
                BigDecimal bd=new BigDecimal(rewardratioByMid);
                memberAccountInfoVo.setRewardratioByMid(bd);
                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;
    }
    @Override
    public IPage<AgentReturnEntity> findMemberAgentReturnInfosInPage(AgentReturnEntity agentReturnEntity,
            QueryRequest request) {
        Page<AgentReturnEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<AgentReturnEntity> findMemberAccountInfoListInPage = agentReturnMapper.findMemberAgentReturnInfosInPage(page, agentReturnEntity);
        return findMemberAccountInfoListInPage;
    }
    @Override
    public IPage<ContractOrderEntity> findMemberHistoryOrderAllInfoInPage(ContractOrderEntity contractOrderEntity,
            QueryRequest request) {
        Page<ContractOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<ContractOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderMapper.findMemberHistoryOrderInfoAllInPage(page, contractOrderEntity);
        return findMemberAccountInfoListInPage;
    }
}
src/main/java/com/xcong/excoin/modules/trademanage/vo/MemberAccountInfoVo.java
@@ -44,6 +44,10 @@
     */
    private BigDecimal walletFrozenBalance;
    /**
     *总盈亏
     */
    private BigDecimal rewardratioByMid;
    /**
     * 是否是代理
     */
    private int isSuAccount;
src/main/resources/mapper/modules/MemberMapper.xml
@@ -206,6 +206,16 @@
            AND account_status = '1'
        )
    </select>
    <select id="selectRewardratioForBasicRealDataBymid" resultType="java.lang.String">
        SELECT
            IFNULL(SUM(a.reward_amount), '0')
        FROM
            contract_order a
        WHERE
            a.closing_type IN (2,3,4, 5, 6, 7, 8, 9)
        AND a.order_status = '1'
        AND a.member_id  = #{memberId}
    </select>
    <select id="selectSFCCForBasicRealData" resultType="java.lang.String">
        SELECT
            COUNT(b.id)
src/main/resources/templates/febs/views/modules/trademanage/accountInfo.html
@@ -76,6 +76,14 @@
                    {field: 'phone', title: '手机号', minWidth: 100,align:'left',totalRowText: '合计'},
                    {field: 'email', title: '邮箱', minWidth: 200,align:'left'},
                    {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'},
                    {field: 'rewardratioByMid', title: '盈亏',
                        templet: function (d) {
                            if (d.rewardratioByMid > 0) {
                                return '<span style="color:green;">'+d.rewardratioByMid+'</span>'
                            } else {
                                return '<span style="color:red;">'+d.rewardratioByMid+'</span>'
                            }
                        }, minWidth: 80,align:'center',totalRow: true},
                    {field: 'walletAvailableBalance', title: '币币可用', minWidth: 80,align:'center',totalRow: true},
                    {field: 'walletFrozenBalance', title: '币币冻结', minWidth: 80,align:'center',totalRow: true},
                    {field: 'walletCoinAvailableBalance', title: '合约可用', minWidth: 80,align:'center',totalRow: true},