| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.yami.trading.bean.data.domain.Realtime; |
| | | import com.yami.trading.bean.ico.domain.Ico; |
| | | import com.yami.trading.bean.ico.domain.UserSubscription; |
| | | import com.yami.trading.bean.ico.dto.UserSubscriptionDTO; |
| | | import com.yami.trading.bean.ico.query.IcoQuery; |
| | | import com.yami.trading.bean.item.query.ItemQuery; |
| | | import com.yami.trading.common.domain.Result; |
| | | import com.yami.trading.common.exception.BusinessException; |
| | | import com.yami.trading.common.exception.YamiShopBindException; |
| | | import com.yami.trading.common.query.QueryWrapperGenerator; |
| | | import com.yami.trading.security.common.util.SecurityUtils; |
| | | import com.yami.trading.service.data.DataService; |
| | | import com.yami.trading.service.ico.IcoService; |
| | | import com.yami.trading.service.ico.UserSubscriptionService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.validation.Valid; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | @RestController |
| | |
| | | IcoService icoService; |
| | | |
| | | @Autowired |
| | | UserSubscriptionService userSubscriptionService; |
| | | |
| | | @Autowired |
| | | private RedissonClient redissonClient; |
| | | |
| | | @ApiOperation(value = "新币列表,配置列表") |
| | | @Autowired |
| | | private DataService dataService; |
| | | |
| | | @ApiOperation(value = "新币列表") |
| | | @GetMapping("list") |
| | | public Result<Page<Ico>> list(ItemQuery itemQuery, Page<Ico> page) throws Exception { |
| | | QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (itemQuery, ItemQuery.class); |
| | | public Result<Page<Ico>> list(ItemQuery icoQuery, Page<Ico> page) throws Exception { |
| | | QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (icoQuery, ItemQuery.class); |
| | | queryWrapper.orderByDesc("market_date"); |
| | | Page<Ico> result = icoService.page(page, queryWrapper); |
| | | return Result.ok(result); |
| | | } |
| | |
| | | throw new YamiShopBindException("请稍后再试"); |
| | | } |
| | | model.setUserId(partyId); |
| | | icoService.subscribe(model); |
| | | return icoService.subscribe(model); |
| | | } catch (YamiShopBindException e) { |
| | | log.error("错误信息: {}", e.getMessage(), e); |
| | | throw e; // 重新抛出自定义异常 |
| | |
| | | rLock.unlock(); |
| | | } |
| | | } |
| | | return Result.succeed(null, "ok"); |
| | | } |
| | | |
| | | @ApiOperation(value = "新币申购记录列表") |
| | | @GetMapping("recordList") |
| | | public Result<Page<UserSubscriptionDTO>> recordList(IcoQuery icoQuery, Page<UserSubscriptionDTO> page) throws Exception { |
| | | QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (icoQuery, IcoQuery.class); |
| | | String partyId = SecurityUtils.getUser().getUserId(); |
| | | if (StringUtils.isEmpty(partyId)) { |
| | | throw new YamiShopBindException("请重新登录"); |
| | | } |
| | | queryWrapper.eq("u.user_id", partyId); |
| | | queryWrapper.orderByDesc("created_at"); |
| | | Page<UserSubscriptionDTO> result = userSubscriptionService.findPage(page, queryWrapper); |
| | | List<UserSubscriptionDTO> userSubscriptionDTOS = result.getRecords(); |
| | | userSubscriptionDTOS.forEach(f->{ |
| | | List<Realtime> realtime_list = this.dataService.realtime(f.getSymbol()); |
| | | Realtime realtime = null; |
| | | if (realtime_list.size() > 0) { |
| | | realtime = realtime_list.get(0); |
| | | } |
| | | Ico ico = icoService.getById(f.getIcoProjectId()); |
| | | f.setIssuePrice(ico.getUnitAmount()); |
| | | if (null != realtime) { |
| | | f.setCurrentPrice(realtime.getClose()); |
| | | f.setCurrentTotalPrice(realtime.getClose().multiply(new BigDecimal(f.getBallotNumber()))); |
| | | BigDecimal profitPercent = (realtime.getClose().subtract(f.getIssuePrice())).divide(f.getIssuePrice()).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); |
| | | f.setProfitPercent(profitPercent); |
| | | } |
| | | f.setSubscriptionTotalAmount(ico.getUnitAmount().multiply(new BigDecimal(f.getBallotNumber()))); |
| | | f.setProfit(f.getCurrentTotalPrice().subtract(f.getSubscriptionTotalAmount())); |
| | | }); |
| | | return Result.ok(result); |
| | | } |
| | | |
| | | } |