xiaoyong931011
2022-02-23 a8ed6c8a55a3c594716a6ff02d5997c4bbbad09a
20222223
4 files added
3 files modified
203 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java 15 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/dao/ZhiYaRecordDao.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/entity/ZhiYaRecordEntity.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/parameter/dto/ZhiYaGusdDto.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/service/CoinService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java 95 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/walletCoinOrder/ZhiYaRecordDao.xml 14 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java
@@ -5,7 +5,7 @@
import javax.annotation.Resource;
import javax.validation.Valid;
import com.xcong.excoin.modules.coin.parameter.dto.UsdtToGusdDto;
import com.xcong.excoin.modules.coin.parameter.dto.*;
import com.xcong.excoin.modules.coin.parameter.vo.AllWalletCoinVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberAccountMoneyChangeInfoVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberAgentIntoInfoVo;
@@ -22,9 +22,6 @@
import org.springframework.web.bind.annotation.RestController;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
import com.xcong.excoin.modules.coin.parameter.dto.TransferOfBalanceDto;
import com.xcong.excoin.modules.coin.parameter.dto.TransferOfBalanceFromAgentDto;
import com.xcong.excoin.modules.coin.service.CoinService;
import lombok.extern.slf4j.Slf4j;
@@ -211,5 +208,15 @@
        return coinService.usdtToGusd(balance,transfertype);
    }
    
    /**
     * 质押GUSD
     */
    @ApiOperation(value="质押GUSD", notes="质押GUSD")
    @PostMapping(value="/zhiYaGusd")
    public Result  zhiYaGusd(@RequestBody @Valid ZhiYaGusdDto zhiYaGusdDto) {
        BigDecimal balance = zhiYaGusdDto.getBalance();
        return coinService.zhiYaGusd(balance);
    }
}
src/main/java/com/xcong/excoin/modules/coin/dao/ZhiYaRecordDao.java
New file
@@ -0,0 +1,13 @@
package com.xcong.excoin.modules.coin.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity;
import com.xcong.excoin.modules.coin.entity.ZhiYaRecordEntity;
import org.apache.ibatis.annotations.Param;
public interface ZhiYaRecordDao extends BaseMapper<ZhiYaRecordEntity> {
    long getOrderCountByToday(@Param("now")String now, @Param("tomorrow") String tomorrow);
    ZhiYaRecordEntity selectByMemberIdAndOrderStatus(@Param("memberId")Long memberId,@Param("orderStatus") Integer orderStatus);
}
src/main/java/com/xcong/excoin/modules/coin/entity/ZhiYaRecordEntity.java
New file
@@ -0,0 +1,47 @@
package com.xcong.excoin.modules.coin.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xcong.excoin.common.system.base.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * 质押记录表
 */
@Data
@TableName("zhiya_record")
public class ZhiYaRecordEntity extends BaseEntity {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    /**
     * 会员ID
     */
    private Long memberId;
    /**
     * 编号
     */
    private String orderNo;
    /**
     * 币种
     */
    private String symbol;
    /**
     * 委托量
     */
    private BigDecimal zhiyaCnt;
    /**
     * 状态 1:生效中 2:已赎回
     */
    private Integer orderStatus;
    /**
     * 生效日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date effectDate;
}
src/main/java/com/xcong/excoin/modules/coin/parameter/dto/ZhiYaGusdDto.java
New file
@@ -0,0 +1,17 @@
package com.xcong.excoin.modules.coin.parameter.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 = "ZhiYaGusdDto", description = "参数接收类")
public class ZhiYaGusdDto {
    @NotNull(message = "划转金额不能为空")
    @ApiModelProperty(value = "划转金额", example = "100")
    private BigDecimal balance;
}
src/main/java/com/xcong/excoin/modules/coin/service/CoinService.java
@@ -43,4 +43,6 @@
    void updateWalletBalance(@Param("id") Long id, @Param("availableBalance")BigDecimal availableBalance,@Param("totalBalance")BigDecimal totalBalance, @Param("frozenBalance")BigDecimal frozenBalance);
    Result usdtToGusd(BigDecimal balance, Integer transfertype);
    Result zhiYaGusd(BigDecimal balance);
}
src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
@@ -1,11 +1,14 @@
package com.xcong.excoin.modules.coin.service.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.date.DateUtil;
import com.xcong.excoin.modules.coin.dao.ZhiYaRecordDao;
import com.xcong.excoin.modules.coin.entity.ZhiYaRecordEntity;
import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -60,6 +63,8 @@
    MemberAccountMoneyChangeDao memberAccountMoneyChangeDao;
    @Resource
    MemberWalletAgentDao memberWalletAgentDao;
    @Resource
    ZhiYaRecordDao zhiYaRecordDao;
    @Resource
    RedisUtils redisUtils;
@@ -612,11 +617,11 @@
        BigDecimal available = availableBalance.subtract(balance);
        if (available.compareTo(BigDecimal.ZERO) < 0) {
            return Result.fail(MessageSourceUtils.getString("member_service_0008"));
            return Result.fail(MessageSourceUtils.getString("member_service_0005"));
        }
        BigDecimal total = totalBalance.subtract(balance);
        if (total.compareTo(BigDecimal.ZERO) < 0) {
            return Result.fail(MessageSourceUtils.getString("member_service_0008"));
            return Result.fail(MessageSourceUtils.getString("member_service_0005"));
        }
        memberWalletCoinEntity.setAvailableBalance(available);
@@ -649,7 +654,85 @@
        memberAccountRecord.setAmount(balance);
        memberAccountMoneyChangeDao.insert(memberAccountRecord);
        return Result.ok(MessageSourceUtils.getString("member_service_0006"));
        return Result.ok(MessageSourceUtils.getString("member_service_0024"));
    }
    @Override
    public Result zhiYaGusd(BigDecimal balance) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        if (balance.compareTo(new BigDecimal(100)) < 0) {
            return Result.fail(MessageSourceUtils.getString("member_service_0005"));
        }
        //质押Gusd,质押数量进入冻结余额,
        String gusdName = CoinTypeEnum.GUSD.name();
        MemberWalletCoinEntity gusdMemberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, gusdName);
        BigDecimal gusdAvailableBalance = gusdMemberWalletCoinEntity.getAvailableBalance();
        BigDecimal gusdTotalBalance = gusdMemberWalletCoinEntity.getTotalBalance();
        BigDecimal gusdfrozenBalance = gusdMemberWalletCoinEntity.getFrozenBalance();
        BigDecimal available = gusdAvailableBalance.subtract(balance);
        if (available.compareTo(BigDecimal.ZERO) < 0) {
            return Result.fail(MessageSourceUtils.getString("member_service_0005"));
        }
        BigDecimal total = gusdTotalBalance.subtract(balance);
        if (total.compareTo(BigDecimal.ZERO) < 0) {
            return Result.fail(MessageSourceUtils.getString("member_service_0005"));
        }
        gusdMemberWalletCoinEntity.setFrozenBalance(gusdfrozenBalance.add(gusdfrozenBalance));
        gusdMemberWalletCoinEntity.setAvailableBalance(gusdAvailableBalance.subtract(balance));
        int updateById = memberWalletCoinDao.updateById(gusdMemberWalletCoinEntity);
        if (updateById < 1) {
            return Result.fail(MessageSourceUtils.getString("member_service_0095"));
        }
        //产生质押单,当前有的话,累加质押数量
        ZhiYaRecordEntity zhiYaRecord = zhiYaRecordDao.selectByMemberIdAndOrderStatus(memberId,1);
        if(ObjectUtil.isEmpty(zhiYaRecord)){
            //产生一条质押记录
            ZhiYaRecordEntity zhiYaRecordEntity = new ZhiYaRecordEntity();
            zhiYaRecordEntity.setMemberId(memberId);
            zhiYaRecordEntity.setOrderNo(generateSimpleSerialno(memberId.toString()));
            zhiYaRecordEntity.setSymbol(gusdName);
            zhiYaRecordEntity.setZhiyaCnt(balance);
            zhiYaRecordEntity.setOrderStatus(1);
            Date date = new Date();
            Date newDate = DateUtil.offsetDay(date, 1);
            zhiYaRecordEntity.setEffectDate(newDate);
            zhiYaRecordDao.insert(zhiYaRecordEntity);
        }else{
            zhiYaRecord.setZhiyaCnt(zhiYaRecord.getZhiyaCnt().add(balance));
            Date date = new Date();
            Date newDate = DateUtil.offsetDay(date, 1);
            zhiYaRecord.setEffectDate(newDate);
            zhiYaRecordDao.updateById(zhiYaRecord);
        }
        return Result.ok(MessageSourceUtils.getString("member_service_0024"));
    }
    public String generateSimpleSerialno(String userId) {
        StringBuilder sb = new StringBuilder();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
        Date now = new Date();
        sb.append(sd.format(now));
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(now);
        calendar.add(calendar.DATE, 1);
        Date nextDate = calendar.getTime();
        if (StrUtil.isNotEmpty(userId)) {
            sb.append(userId);
        }
        sb.append(RandomUtil.randomInt(2));
        long count = zhiYaRecordDao.getOrderCountByToday(sdf.format(now), sdf.format(nextDate));
        count++;
        int size = 4;
        for (int i = 0; i < size - String.valueOf(count).length(); i++) {
            sb.append("0");
        }
        sb.append(count);
        return sb.toString();
    }
}
src/main/resources/mapper/walletCoinOrder/ZhiYaRecordDao.xml
New file
@@ -0,0 +1,14 @@
<?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.coin.dao.ZhiYaRecordDao">
    <select id="getOrderCountByToday" resultType="long">
        <![CDATA[  SELECT COUNT(*) from zhiya_record  WHERE DATE_FORMAT(create_time, '%Y-%m-%d') >= DATE_FORMAT(#{now}, '%Y-%m-%d')
        and  DATE_FORMAT(create_time, '%Y-%m-%d') <  DATE_FORMAT(#{tomorrow}, '%Y-%m-%d') ]]>
    </select>
    <select id="selectByMemberIdAndOrderStatus" resultType="com.xcong.excoin.modules.coin.entity.ZhiYaRecordEntity">
        SELECT *  FROM zhiya_record a where a.member_id= #{memberId} and a.order_status = #{orderStatus}
    </select>
</mapper>