Helius
2021-05-13 17ee2c1ef2b679eb657db34286c244544e8f68cb
Merge branch 'yunding' of http://120.27.238.55:7000/r/exchange into yunding
5 files added
8 files modified
337 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/yunding/controller/YunDingController.java 28 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicLevelSettingDao.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/dto/BugAgentLeveldto.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/dto/InsureChangeUsdtDto.java 7 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/dto/YdAgentDto.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/entity/YdBasicLevelSettingEntity.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java 163 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/service/YunDingService.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/vo/AgentVo.java 39 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/member/MemberAccountMoneyChangeDao.xml 3 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/yunding/YdBasicLevelSettingDao.xml 7 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/yunding/YdOrderDao.xml 15 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/yunding/controller/YunDingController.java
@@ -1,10 +1,7 @@
package com.xcong.excoin.modules.yunding.controller;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.yunding.dto.InsureChangeUsdtDto;
import com.xcong.excoin.modules.yunding.dto.PayProductDto;
import com.xcong.excoin.modules.yunding.dto.YdOrderListDto;
import com.xcong.excoin.modules.yunding.dto.YdProductListDto;
import com.xcong.excoin.modules.yunding.dto.*;
import com.xcong.excoin.modules.yunding.service.YunDingService;
import com.xcong.excoin.modules.yunding.vo.*;
import io.swagger.annotations.*;
@@ -133,5 +130,28 @@
        return yunDingService.insureChangeUsdt(insureChangeUsdtdto);
    }
    /**
     * 获取代理级别列表
     */
    @ApiOperation(value = "获取代理级别列表")
    @ApiResponses({
            @ApiResponse(code = 0, message = "success", response = AgentVo.class)
    })
    @PostMapping(value = "/getAgentList")
    public Result getAgentList(@RequestBody @Validated YdAgentDto ydAgentDto) {
        return yunDingService.getAgentList(ydAgentDto);
    }
    /**
     * 购买代理级别
     */
    @ApiOperation(value = "购买代理级别")
    @PostMapping(value = "/bugAgentLevel")
    public Result bugAgentLevel(@RequestBody @Validated BugAgentLeveldto bugAgentLeveldto){
        return yunDingService.bugAgentLevel(bugAgentLeveldto);
    }
}
src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicLevelSettingDao.java
New file
@@ -0,0 +1,7 @@
package com.xcong.excoin.modules.yunding.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xcong.excoin.modules.yunding.entity.YdBasicLevelSettingEntity;
public interface YdBasicLevelSettingDao extends BaseMapper<YdBasicLevelSettingEntity> {
}
src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java
@@ -4,7 +4,9 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xcong.excoin.modules.yunding.dto.YdOrderListDto;
import com.xcong.excoin.modules.yunding.entity.YdBasicLevelSettingEntity;
import com.xcong.excoin.modules.yunding.entity.YdOrderEntity;
import com.xcong.excoin.modules.yunding.vo.AgentVo;
import com.xcong.excoin.modules.yunding.vo.YdOrderVo;
import org.apache.ibatis.annotations.Param;
@@ -17,7 +19,12 @@
    List<YdOrderEntity> selectNeedReturnOrders();
    List<YdOrderEntity> selectAllValidOrders();
    void UpdateByIdAndState(@Param("id")Long id, @Param("state")int state);
    void updateAgentLevel(@Param("id")Long id, @Param("levelId")int ilevelIdd);
    YdOrderVo selectOrderByMemberIdAndId(@Param("memberId")Long memberId, @Param("id")Long id);
    IPage<AgentVo> getAgentList(Page<AgentVo> page, @Param("record")  YdBasicLevelSettingEntity ydBasicLevelSettingEntity);
}
src/main/java/com/xcong/excoin/modules/yunding/dto/BugAgentLeveldto.java
New file
@@ -0,0 +1,27 @@
package com.xcong.excoin.modules.yunding.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Data
@ApiModel(value = "BugAgentLeveldto", description = "确认入参类")
public class BugAgentLeveldto {
    @NotNull
    @ApiModelProperty(value = "ID", example = "2")
    private Long id;
    /**
     * 资金交易密码
     */
    @NotNull
    @ApiModelProperty(value = "交易密码", example = "2")
    private String tradePassword;
}
src/main/java/com/xcong/excoin/modules/yunding/dto/InsureChangeUsdtDto.java
@@ -15,9 +15,12 @@
    @ApiModelProperty(value = "XCH数量", example = "2")
    private BigDecimal xchNum;
    /**
     * 资金交易密码
     */
    @NotNull
    @ApiModelProperty(value = "XCH当前价格", example = "2")
    private BigDecimal currentPrice;
    @ApiModelProperty(value = "交易密码", example = "2")
    private String tradePassword;
}
src/main/java/com/xcong/excoin/modules/yunding/dto/YdAgentDto.java
New file
@@ -0,0 +1,23 @@
package com.xcong.excoin.modules.yunding.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "YdAgentDto", description = "订单列表入参类")
public class YdAgentDto {
    @NotNull
    @Min(1)
    @ApiModelProperty(value = "第几页", example = "1")
    private int pageNum;
    @NotNull
    @ApiModelProperty(value = "每页数量", example = "10")
    private int pageSize;
}
src/main/java/com/xcong/excoin/modules/yunding/entity/YdBasicLevelSettingEntity.java
@@ -24,5 +24,7 @@
    private BigDecimal calculationPower;
    private BigDecimal salePrice;
    private Integer level;
}
src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java
@@ -1,6 +1,7 @@
package com.xcong.excoin.modules.yunding.service.Impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -12,21 +13,24 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.excoin.common.LoginUserUtils;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.coin.dao.MemberAccountMoneyChangeDao;
import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange;
import com.xcong.excoin.modules.member.dao.MemberDao;
import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.modules.yunding.dao.YdBasicLevelSettingDao;
import com.xcong.excoin.modules.yunding.dao.YdBasicSettingDao;
import com.xcong.excoin.modules.yunding.dao.YdOrderDao;
import com.xcong.excoin.modules.yunding.dao.YdProductDao;
import com.xcong.excoin.modules.yunding.dto.InsureChangeUsdtDto;
import com.xcong.excoin.modules.yunding.dto.PayProductDto;
import com.xcong.excoin.modules.yunding.dto.YdOrderListDto;
import com.xcong.excoin.modules.yunding.dto.YdProductListDto;
import com.xcong.excoin.modules.yunding.dto.*;
import com.xcong.excoin.modules.yunding.entity.YdBasicLevelSettingEntity;
import com.xcong.excoin.modules.yunding.entity.YdBasicSettingEntity;
import com.xcong.excoin.modules.yunding.entity.YdOrderEntity;
import com.xcong.excoin.modules.yunding.entity.YdProductEntity;
import com.xcong.excoin.modules.yunding.service.YunDingService;
import com.xcong.excoin.modules.yunding.vo.*;
import com.xcong.excoin.utils.LogRecordUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -50,6 +54,12 @@
    private YdOrderDao ydOrderDao;
    @Resource
    private MemberWalletCoinDao memberWalletCoinDao;
    @Resource
    private MemberAccountMoneyChangeDao memberAccountMoneyChangeDao;
    @Resource
    private YdBasicLevelSettingDao ydBasicLevelSettingDao;
    @Resource
    private MemberDao memberDao;
    @Override
    public Result findAllInfo() {
@@ -221,6 +231,9 @@
        ydOrderEntity.setEndTime(endTime);
        ydOrderEntity.setReturnState(YdOrderEntity.RETURN_STATE_READY);
        ydOrderDao.insert(ydOrderEntity);
        //生成流水记录
        LogRecordUtils.insertMemberAccountMoneyChangeWithId(memberId, "购买产品", multiplyUsdt,
                "USDT", 1, 3, ydOrderEntity.getId());
        return Result.ok("支付成功");
    }
@@ -251,7 +264,7 @@
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        Long memberId = memberEntity.getId();
//        Long memberId = 28L;
//        Long memberId = 442L;
        OrderAllInfoVo orderAllInfoVo = new OrderAllInfoVo();
        DecimalFormat decimalFormat = new DecimalFormat("0.0000#");
        //历史总收益
@@ -284,7 +297,7 @@
        QueryWrapper<YdOrderEntity> powerReradyQuery = new QueryWrapper<>();
        powerReradyQuery.eq("member_id",memberId);
        powerReradyQuery.eq("state",YdOrderEntity.ORDER_STATE_READY);
        List<YdOrderEntity> PowerReradyQuery = ydOrderDao.selectList(powerNowQuery);
        List<YdOrderEntity> PowerReradyQuery = ydOrderDao.selectList(powerReradyQuery);
        if(CollUtil.isNotEmpty(PowerReradyQuery)){
            for(YdOrderEntity order : PowerReradyQuery){
                int quantity = order.getQuantity();
@@ -292,6 +305,23 @@
            }
        }
        orderAllInfoVo.setPowerReady(powerReady);
        //昨日总收益
        BigDecimal lastdayProfit = BigDecimal.ZERO;
        Date date = DateUtil.date();
        Date dateTime = DateUtil.offsetDay(date, 1);
        QueryWrapper<MemberAccountMoneyChange> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("type",4);
        queryWrapper.eq("member_id",memberId);
        queryWrapper.eq("status",1);
        queryWrapper.like("create_time",DateUtil.formatDate(dateTime));
        List<MemberAccountMoneyChange> memberAccountMoneyChanges = memberAccountMoneyChangeDao.selectList(queryWrapper);
        if(CollUtil.isNotEmpty(memberAccountMoneyChanges)){
            for(MemberAccountMoneyChange memberAccountMoneyChange : memberAccountMoneyChanges){
                BigDecimal amount = memberAccountMoneyChange.getAmount();
                lastdayProfit = lastdayProfit.add(amount);
            }
        }
        orderAllInfoVo.setLastdayProfit(decimalFormat.format(lastdayProfit));
        return Result.ok(orderAllInfoVo);
    }
@@ -310,6 +340,7 @@
        log.info("转换成USDT");
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        Long memberId = memberEntity.getId();
//        Long memberId = 442L;
        ChangeVo changeVo = new ChangeVo();
        BigDecimal currentPrice = BigDecimal.ZERO;
        Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>();
@@ -340,23 +371,36 @@
    @Override
    @Transactional
    public Result insureChangeUsdt(InsureChangeUsdtDto insureChangeUsdtdto) {
        log.info("转换成USDT");
        log.info("确认转换成USDT");
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        Long memberId = memberEntity.getId();
//        Long memberId = 442L;
//        MemberEntity memberEntity = memberDao.selectById(memberId);
        /**
         * 验证入参
         *
         *     USDT账户增加
         *     XCH账户减少
         */
        String tradePassword = insureChangeUsdtdto.getTradePassword();
        if(StrUtil.isEmpty(tradePassword)){
            return Result.fail("请输入交易密码");
        }
        String tradePasswordOwn = memberEntity.getTradePassword();
        if(StrUtil.isEmpty(tradePasswordOwn)){
            return Result.fail("请设置交易密码");
        }
        String tradePasswords = SecureUtil.md5(tradePassword);
        if(!StrUtil.equals(tradePasswordOwn,tradePasswords)){
            return Result.fail("请输入正确的交易密码");
        }
        BigDecimal xchNum = insureChangeUsdtdto.getXchNum();
        if(BigDecimal.ZERO.compareTo(xchNum) >= 0){
            return Result.fail("请输入正确的数量");
        }
        BigDecimal currentPrice = insureChangeUsdtdto.getCurrentPrice();
        if(BigDecimal.ZERO.compareTo(currentPrice) >= 0){
            return Result.fail("XCH价格异常,请重试");
        }
        MemberWalletCoinEntity xch = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "XCH");
        BigDecimal totalBalance = xch.getTotalBalance();
        BigDecimal subtractTotalBalance = totalBalance.subtract(xchNum);
@@ -374,15 +418,112 @@
        xch.setAvailableBalance(subtractAvailableBalance);
        memberWalletCoinDao.updateById(xch);
        BigDecimal currentPrice = BigDecimal.ZERO;
        //获取当前价
        Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>();
        List<YdBasicSettingEntity> ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper);
        if(CollUtil.isNotEmpty(ydBasicSettingEntities)){
            YdBasicSettingEntity ydBasicSettingEntity = ydBasicSettingEntities.get(0);
            currentPrice = ydBasicSettingEntity.getCurrentPrice();
        }
        //USDT账户增加
        BigDecimal multiply = xchNum.multiply(currentPrice);
        MemberWalletCoinEntity usdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT");
        usdt.setTotalBalance(usdt.getTotalBalance().add(multiply));
        usdt.setAvailableBalance(usdt.getAvailableBalance().add(multiply));
        memberWalletCoinDao.updateById(usdt);
        //生成流水记录
        LogRecordUtils.insertMemberAccountMoneyChangeWithId(memberId, "XCH兑换"+multiply+"USDT", xchNum,
                "USDT", 1, 7, memberId);
        return Result.ok("操作成功");
    }
    @Override
    public Result getAgentList(YdAgentDto ydAgentDto) {
        log.info("获取代理级别列表");
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        Long memberId = memberEntity.getId();
//        Long memberId = 442L;
        Page<AgentVo> page = new Page<>(ydAgentDto.getPageNum(), ydAgentDto.getPageSize());
        YdBasicLevelSettingEntity ydBasicLevelSettingEntity = new YdBasicLevelSettingEntity();
        IPage<AgentVo> list = ydOrderDao.getAgentList(page, ydBasicLevelSettingEntity);
        return Result.ok(list);
    }
    @Override
    @Transactional
    public Result bugAgentLevel(BugAgentLeveldto bugAgentLeveldto) {
        log.info("购买代理级别");
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        Long memberId = memberEntity.getId();
//        Long memberId = 442L;
//        MemberEntity memberEntity = memberDao.selectById(memberId);
        /**
         * 获取代理级别(Level字段越小,级别越高)
         *      不能向下购买代理级别
         *      不能购买同级别
         * 获取用户当前USDT余额
         *      减少用户的USDT余额
         *      更新用户的代理级别
         */
        String tradePassword = bugAgentLeveldto.getTradePassword();
        if(StrUtil.isEmpty(tradePassword)){
            return Result.fail("请输入交易密码");
        }
        String tradePasswordOwn = memberEntity.getTradePassword();
        if(StrUtil.isEmpty(tradePasswordOwn)){
            return Result.fail("请设置交易密码");
        }
        String tradePasswords = SecureUtil.md5(tradePassword);
        if(!StrUtil.equals(tradePasswordOwn,tradePasswords)){
            return Result.fail("请输入正确的交易密码");
        }
        Long id = bugAgentLeveldto.getId();
        YdBasicLevelSettingEntity ydBasicLevelSettingEntityTo = ydBasicLevelSettingDao.selectById(id);
        if(ObjectUtil.isEmpty(ydBasicLevelSettingEntityTo)){
            return Result.fail("稍候再试");
        }
        Integer levelTo = ydBasicLevelSettingEntityTo.getLevel();
        //获取当前代理级别
        Integer agentLevel = memberEntity.getAgentLevel();
        long agentId = Long.parseLong(agentLevel.toString());
        Integer levelNow = 0;
        YdBasicLevelSettingEntity ydBasicLevelSettingEntityNow = ydBasicLevelSettingDao.selectById(agentId);
        if(ObjectUtil.isNotEmpty(ydBasicLevelSettingEntityNow)){
            levelNow = ydBasicLevelSettingEntityNow.getLevel();
            if(levelTo >= levelNow){
                return Result.fail("无法购买");
            }
        }
        BigDecimal salePrice = ydBasicLevelSettingEntityTo.getSalePrice();
        //用户如果已经有等级则减少差价
        if(levelNow != 0){
            salePrice = salePrice.subtract(ydBasicLevelSettingEntityNow.getSalePrice());
        }
        //获取用户当前USDT余额
        MemberWalletCoinEntity usdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT");
        BigDecimal availableBalance = usdt.getAvailableBalance();
        if(salePrice.compareTo(availableBalance) > 0){
            return Result.fail("USDT数量不足");
        }
        BigDecimal totalBalance = usdt.getTotalBalance();
        usdt.setAvailableBalance(availableBalance.subtract(salePrice));
        usdt.setTotalBalance(totalBalance.subtract(salePrice));
        memberWalletCoinDao.updateById(usdt);
        //更新用户的代理级别
        ydOrderDao.updateAgentLevel(memberId,Integer.parseInt(id.toString()));
        LogRecordUtils.insertMemberAccountMoneyChangeWithId(memberId, "购买代理", salePrice,
                "USDT", 1, 8, memberId);
        return Result.ok("购买成功");
    }
    /**
     * 去加减币币账户余额,减少产品的剩余数目
     * @param memberId
src/main/java/com/xcong/excoin/modules/yunding/service/YunDingService.java
@@ -2,10 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.yunding.dto.InsureChangeUsdtDto;
import com.xcong.excoin.modules.yunding.dto.PayProductDto;
import com.xcong.excoin.modules.yunding.dto.YdOrderListDto;
import com.xcong.excoin.modules.yunding.dto.YdProductListDto;
import com.xcong.excoin.modules.yunding.dto.*;
import com.xcong.excoin.modules.yunding.entity.YdOrderEntity;
public interface YunDingService extends IService<YdOrderEntity> {
@@ -29,4 +26,8 @@
    Result changeUsdt();
    Result insureChangeUsdt(InsureChangeUsdtDto insureChangeUsdtdto);
    Result getAgentList(YdAgentDto ydAgentDto);
    Result bugAgentLevel(BugAgentLeveldto bugAgentLeveldto);
}
src/main/java/com/xcong/excoin/modules/yunding/vo/AgentVo.java
New file
@@ -0,0 +1,39 @@
package com.xcong.excoin.modules.yunding.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(value = "AgentVo", description = "详情")
public class AgentVo {
    @ApiModelProperty("ID")
    private Long id;
    @ApiModelProperty("等级名称")
    private String name;
    @ApiModelProperty("等级编码")
    private String code;
    @ApiModelProperty("XCH返佣比例")
    private BigDecimal xchRatio;
    @ApiModelProperty("USDT返佣比例")
    private BigDecimal usdtRatio;
    @ApiModelProperty("成为代理条件(充值USDT的数量)")
    private BigDecimal chargeUsdt;
    @ApiModelProperty("成为代理条件(购买算力的数量)")
    private BigDecimal calculationPower;
    @ApiModelProperty("购买价格")
    private BigDecimal salePrice;
    @ApiModelProperty("层级")
    private Integer level;
}
src/main/resources/mapper/member/MemberAccountMoneyChangeDao.xml
@@ -62,8 +62,7 @@
        select * from member_account_money_change 
        <if test="record != null">
            <where>
                type = 3
                and (content like '%佣金到账%' or content like '%活动%' or content like '%带单%')
                type > 2
                <if test="record.memberId != null" >
                    and member_id=#{record.memberId}
                </if>
src/main/resources/mapper/yunding/YdBasicLevelSettingDao.xml
New file
@@ -0,0 +1,7 @@
<?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.yunding.dao.YdBasicLevelSettingDao">
</mapper>
src/main/resources/mapper/yunding/YdOrderDao.xml
@@ -72,4 +72,19 @@
        and a.id = #{id}
    </select>
    <select id="getAgentList" resultType="com.xcong.excoin.modules.yunding.vo.AgentVo">
        SELECT
        *
        FROM
        yd_basic_level_setting a
        ORDER BY a.id ASC
    </select>
    <update id="updateAgentLevel">
        UPDATE member s
        SET s.agent_level = #{levelId}
        WHERE
            s.id = #{id}
    </update>
</mapper>