package com.yami.trading.api.controller.ipo; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yami.trading.api.controller.ipo.model.UserPromiseListModel; import com.yami.trading.bean.ipo.dto.PromiseTopDto; import com.yami.trading.api.controller.ipo.model.ApplyPromiseModel; import com.yami.trading.bean.ipo.ApplyNewSharesOrder; import com.yami.trading.bean.ipo.NewSharesConfig; import com.yami.trading.bean.ipo.UserPromiseRecord; import com.yami.trading.bean.ipo.dto.UserPromiseListDto; import com.yami.trading.bean.item.domain.Item; import com.yami.trading.bean.syspara.domain.Syspara; import com.yami.trading.common.domain.PageRequest; import com.yami.trading.common.domain.Result; import com.yami.trading.common.exception.BusinessException; import com.yami.trading.security.common.util.SecurityUtils; import com.yami.trading.service.ipo.ApplyNewSharesOrderService; import com.yami.trading.service.ipo.NewSharesConfigService; import com.yami.trading.service.ipo.UserPromiseRecordService; import com.yami.trading.service.item.ItemService; import com.yami.trading.service.syspara.SysparaService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.stream.Collectors; @RestController @CrossOrigin @RequestMapping("api/userPromise") @Api(tags = "用户认购") @Slf4j public class ApiUserPromiseRecordController { @Autowired UserPromiseRecordService userPromiseRecordService; @Autowired NewSharesConfigService newSharesConfigService; @Autowired ApplyNewSharesOrderService applyNewSharesOrderService; @Autowired SysparaService sysparaService; @Autowired ItemService itemService; @ApiOperation("列表") @PostMapping("list") public Result> list(UserPromiseListModel pageRequest, HttpServletRequest request) { List symbols=new ArrayList<>(); if (StrUtil.isNotEmpty(pageRequest.getSymbolType())){ symbols = itemService.findDBByType(pageRequest.getSymbolType()).stream().map(Item::getSymbol).collect(Collectors.toList()); symbols.add("-1"); } Page page = new Page(pageRequest.getCurrent(), pageRequest.getSize()); userPromiseRecordService.pageUserPromiseData(page, SecurityUtils.getCurrentUserId(),symbols); for (UserPromiseListDto dto: page.getRecords()){ Item item = itemService.findBySymbol(dto.getProductCode()); if (item != null) { dto.setName(item.getName()); } } Result result= Result.succeed(page.getRecords()); result.setTotal(page.getTotal()); return result; } @ApiOperation("top 数据") @PostMapping("getTop") public Result getTop() { PromiseTopDto promiseTopDto = userPromiseRecordService.topData(SecurityUtils.getCurrentUserId()); if (promiseTopDto==null){ promiseTopDto=new PromiseTopDto(); } promiseTopDto.setAvailableLimit(promiseTopDto.getWinningQuota()-promiseTopDto.getSubscriptionLimit()); return Result.succeed(promiseTopDto); } @ApiOperation("认缴") @PostMapping("applyPromise") public Result applyPromise(ApplyPromiseModel model) { if (StrUtil.isEmpty(model.getOrderNo())) { throw new BusinessException("申购订单号不能为空"); } if (model.getDeductNumber() == null) { throw new BusinessException("认缴金额(股)不能为空"); } if (model.getDeductNumber().doubleValue() <= 0) { throw new BusinessException("认缴金额(股)必须大于0"); } ApplyNewSharesOrder order = applyNewSharesOrderService.findByOrderNo(model.getOrderNo()); if (order==null){ throw new BusinessException("申购订单号不存在"); } NewSharesConfig newSharesConfig = newSharesConfigService.getByProductCode(order.getSymbolCode()); if (newSharesConfig == null) { throw new BusinessException("新股不存在!"); } List userPromiseRecords= userPromiseRecordService.findByProductCodeAndUserId(order.getSymbolCode(),SecurityUtils.getCurrentUserId()); int count=0; if (CollectionUtil.isNotEmpty(userPromiseRecords)){ count=userPromiseRecords.size(); } count++; if (CollectionUtil.isNotEmpty(userPromiseRecords)){ if (count>order.getUserPromiseCount()){ throw new BusinessException("超过认购次数"); } } UserPromiseRecord userPromiseRecord = new UserPromiseRecord(); userPromiseRecord.setUserId(SecurityUtils.getUser().getUserId()); userPromiseRecord.setDeductNumber(model.getDeductNumber()); userPromiseRecord.setDeductUsdt(order.getSubPrice().multiply(userPromiseRecord.getDeductNumber())); userPromiseRecord.setStatus(1); Calendar calendar=Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR,newSharesConfig.getLockDay()); userPromiseRecord.setLockEndTime(calendar.getTime()); userPromiseRecord.setNewSharesConfigId(newSharesConfig.getUuid()); userPromiseRecordService.applyPromise(newSharesConfig, userPromiseRecord, order); return Result.succeed(); } }