| | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.yami.trading.admin.dto.PurchaseRecordDto; |
| | | import com.yami.trading.bean.data.domain.Realtime; |
| | | import com.yami.trading.bean.exchange.ExchangeApplyOrder; |
| | | import com.yami.trading.bean.exchange.dto.ExchangeSymbolDto; |
| | | import com.yami.trading.bean.exchange.dto.SumEtfDto; |
| | | import com.yami.trading.bean.ico.domain.Ico; |
| | | import com.yami.trading.bean.item.domain.Item; |
| | | import com.yami.trading.bean.model.*; |
| | | import com.yami.trading.bean.purchasing.dto.ExchangeLock; |
| | |
| | | import com.yami.trading.common.domain.Result; |
| | | import com.yami.trading.common.domain.UUIDEntity; |
| | | import com.yami.trading.common.exception.YamiShopBindException; |
| | | import com.yami.trading.common.util.Arith; |
| | | import com.yami.trading.common.util.DateUtils; |
| | | import com.yami.trading.common.util.StringUtils; |
| | | import com.yami.trading.common.util.ThreadUtils; |
| | | import com.yami.trading.common.util.*; |
| | | import com.yami.trading.security.common.util.SecurityUtils; |
| | | import com.yami.trading.service.CapitaltWalletService; |
| | | import com.yami.trading.service.RealNameAuthRecordService; |
| | |
| | | import com.yami.trading.service.exchange.ExchangeApplyOrderService; |
| | | import com.yami.trading.service.item.ItemService; |
| | | import com.yami.trading.service.syspara.SysparaService; |
| | | import com.yami.trading.service.user.PurchaseRecordService; |
| | | import com.yami.trading.service.user.UserService; |
| | | import com.yami.trading.service.user.WalletExtendService; |
| | | import com.yami.trading.util.ConverterUtil; |
| | | import io.swagger.annotations.Api; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jetbrains.annotations.NotNull; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.CrossOrigin; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.DecimalFormat; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | | |
| | | /** |
| | |
| | | CapitaltWalletService capitaltWalletService; |
| | | @Autowired |
| | | WalletExtendService walletExtendService; |
| | | @Autowired |
| | | PurchaseRecordService purchaseRecordService; |
| | | |
| | | |
| | | /** |
| | | * 12.29定制ico购买 |
| | | */ |
| | | @RequestMapping(action + "ico_buy.action") |
| | | public Object ico_buy(HttpServletRequest request) { |
| | | |
| | | // 委托数量 |
| | | String volume = request.getParameter("volume"); |
| | | String session_token = request.getParameter("session_token"); |
| | | String symbol = request.getParameter("symbol"); |
| | | // limit order的交易价格 |
| | | String price = request.getParameter("price"); |
| | | // 计划委托 是之前火币那边拷贝学过来的一个功能 只是只有一个盘在用,暂时注释不用 |
| | | // 是否计划委托 |
| | | String is_trigger_order = request.getParameter("is_trigger_order"); |
| | | // 计划委托的触发价 |
| | | String trigger_price = request.getParameter("trigger_price"); |
| | | // 订单报价类型。 "limit":限价 "opponent":对手价(市价) |
| | | String order_price_type = request.getParameter("order_price_type"); |
| | | |
| | | Result<Object> result = getObjectResult(volume, session_token, symbol, price, is_trigger_order, trigger_price, order_price_type); |
| | | if(!result.isSucceed()){ |
| | | return result; |
| | | } |
| | | |
| | | String partyId = SecurityUtils.getUser().getUserId(); |
| | | User user = userService.getById(partyId); |
| | | |
| | | PurchaseRecord purchaseRecord = purchaseRecordService.getOne(new LambdaQueryWrapper<>(PurchaseRecord.class) |
| | | .eq(PurchaseRecord::getUserId, user.getUserId())); |
| | | |
| | | BigDecimal amount = new BigDecimal(volume).divide(new BigDecimal(price)).setScale(4,RoundingMode.HALF_UP); |
| | | if(ObjectUtil.isEmpty(purchaseRecord)){ |
| | | PurchaseRecord record = new PurchaseRecord(); |
| | | record.setUserId(user.getUserId()); |
| | | record.setPurchaseQuantity(amount); |
| | | record.setPurchasePrice(new BigDecimal(price)); |
| | | record.setTotalAmount(new BigDecimal(volume)); |
| | | purchaseRecordService.save(record); |
| | | return Result.succeed(); |
| | | } |
| | | purchaseRecord.setPurchaseQuantity(purchaseRecord.getPurchaseQuantity().add(amount)); |
| | | purchaseRecord.setTotalAmount(purchaseRecord.getTotalAmount().add(new BigDecimal(volume))); |
| | | purchaseRecord.setPurchasePrice(purchaseRecord.getTotalAmount().divide(purchaseRecord.getPurchaseQuantity(), 4,RoundingMode.HALF_UP)); |
| | | purchaseRecordService.updateById(purchaseRecord); |
| | | return Result.succeed(); |
| | | } |
| | | |
| | | /** |
| | | * 12.29定制ico购买 |
| | | */ |
| | | @RequestMapping(action + "get_ico_position.action") |
| | | public Object get_ico_position(HttpServletRequest request) { |
| | | String partyId = SecurityUtils.getUser().getUserId(); |
| | | User user = userService.getById(partyId); |
| | | List<Realtime> realtime_list = this.dataService.realtime("pendleusdt"); |
| | | Realtime realtime = null; |
| | | if (realtime_list.size() > 0) { |
| | | realtime = realtime_list.get(0); |
| | | } |
| | | BigDecimal close = BigDecimal.ZERO; |
| | | if (null != realtime) { |
| | | close = realtime.getClose(); |
| | | } |
| | | |
| | | |
| | | |
| | | PurchaseRecord purchaseRecord = purchaseRecordService.getOne(new LambdaQueryWrapper<>(PurchaseRecord.class) |
| | | .eq(PurchaseRecord::getUserId, user.getUserId())); |
| | | if(ObjectUtil.isNotEmpty(purchaseRecord)){ |
| | | PurchaseRecordDto purchaseRecordDto = ConverterUtil.convert(purchaseRecord, PurchaseRecordDto.class); |
| | | purchaseRecordDto.setCurrentPrice(close); |
| | | //持仓市值 |
| | | purchaseRecordDto.setPositionvalue(close.multiply(purchaseRecordDto.getPurchaseQuantity())); |
| | | //均价总额 |
| | | BigDecimal currentTotalPrice = purchaseRecordDto.getPurchaseQuantity().multiply(purchaseRecord.getPurchasePrice()); |
| | | BigDecimal profit = purchaseRecordDto.getPositionvalue().subtract(currentTotalPrice); |
| | | purchaseRecordDto.setProfit(profit.setScale(4, RoundingMode.HALF_UP)); |
| | | BigDecimal profitPercent = (purchaseRecordDto.getPositionvalue().subtract(currentTotalPrice)).divide(currentTotalPrice,4,RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); |
| | | purchaseRecordDto.setProfitPercent(profitPercent); |
| | | purchaseRecordDto.setLockingTime(LocalDate.of(2026, 2, 9)); |
| | | return Result.succeed(purchaseRecordDto); |
| | | } |
| | | return Result.succeed(new PurchaseRecordDto()); |
| | | } |
| | | |
| | | /** |
| | | * 兑换币 如果是使用usdt兑换其他币种,则直接执行正常买币open流程 如果是其他币种--》usdt 则是直接卖币流程 |
| | | * 如果是其他币种到另一个币种,则需要先卖出,然后再买入 |
| | |
| | | String volume = request.getParameter("volume"); |
| | | String session_token = request.getParameter("session_token"); |
| | | String symbol = request.getParameter("symbol"); |
| | | // Item bySymbol = itemService.findBySymbol(symbol); |
| | | // if(bySymbol == null){ |
| | | // throw new YamiShopBindException("当前币对不存在"); |
| | | // } |
| | | // boolean isOpen = MarketOpenChecker.isMarketOpenByItemCloseType(bySymbol.getOpenCloseType()); |
| | | // if(!isOpen){ |
| | | // throw new YamiShopBindException("当前已经休市"); |
| | | // } |
| | | // limit order的交易价格 |
| | | String price = request.getParameter("price"); |
| | | // 计划委托 是之前火币那边拷贝学过来的一个功能 只是只有一个盘在用,暂时注释不用 |
| | |
| | | String trigger_price = request.getParameter("trigger_price"); |
| | | // 订单报价类型。 "limit":限价 "opponent":对手价(市价) |
| | | String order_price_type = request.getParameter("order_price_type"); |
| | | return getObjectResult(volume, session_token, symbol, price, is_trigger_order, trigger_price, order_price_type); |
| | | } |
| | | |
| | | @NotNull |
| | | private Result<Object> getObjectResult(String volume, String session_token, String symbol, String price, String is_trigger_order, String trigger_price, String order_price_type) { |
| | | String partyId = SecurityUtils.getUser().getUserId(); |
| | | if (StringUtils.isNullOrEmpty(volume) |
| | | || !StringUtils.isDouble(volume) |
| | |
| | | throw new YamiShopBindException("无网络"); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | RealNameAuthRecord party_kyc = realNameAuthRecordService.getByUserId(partyId); |
| | |
| | | return Result.succeed(); |
| | | } |
| | | |
| | | public static boolean isAfterFebruary9th2026() { |
| | | LocalDate today = LocalDate.now(); |
| | | LocalDate targetDate = LocalDate.of(2026, 2, 9); |
| | | |
| | | return today.isAfter(targetDate); |
| | | } |
| | | |
| | | /** |
| | | * 币币交易-卖出 |
| | | */ |
| | |
| | | String order_price_type = request.getParameter("order_price_type"); |
| | | String partyId = SecurityUtils.getUser().getUserId(); |
| | | boolean lock = false; |
| | | |
| | | // |
| | | // if(symbol.equals("pendleusdt") && !isAfterFebruary9th2026()){ |
| | | // throw new YamiShopBindException("此币还没有发行时间"); |
| | | // } |
| | | |
| | | |
| | | if (StringUtils.isNullOrEmpty(volume) |
| | | || !StringUtils.isDouble(volume) |
| | | || Double.valueOf(volume) <= 0) { |