| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.yami.trading.bean.dz.ExchangeApplyOrderDz; |
| | | import com.yami.trading.bean.dz.StockDz; |
| | | import com.yami.trading.bean.item.domain.Item; |
| | | import com.yami.trading.bean.model.MoneyLog; |
| | | import com.yami.trading.bean.model.User; |
| | | import com.yami.trading.bean.model.Wallet; |
| | | import com.yami.trading.bean.syspara.domain.Syspara; |
| | | import com.yami.trading.common.constants.Constants; |
| | | import com.yami.trading.common.domain.Result; |
| | | import com.yami.trading.common.exception.YamiShopBindException; |
| | | import com.yami.trading.common.util.Arith; |
| | | import com.yami.trading.common.util.RandomUtil; |
| | | import com.yami.trading.dao.dz.ExchangeApplyOrderDzMapper; |
| | | import com.yami.trading.dao.dz.StockDzMapper; |
| | | import com.yami.trading.service.MoneyLogService; |
| | | import com.yami.trading.service.WalletService; |
| | | import com.yami.trading.service.dz.StockDzService; |
| | | import com.yami.trading.service.item.ItemService; |
| | | import com.yami.trading.service.syspara.SysparaService; |
| | | import com.yami.trading.service.user.UserService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.math.BigDecimal; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | @Service |
| | | @Slf4j |
| | |
| | | @Resource |
| | | private StockDzMapper stockDzMapper; |
| | | |
| | | @Resource |
| | | private UserService userService; |
| | | |
| | | @Resource |
| | | private SysparaService sysparaService; |
| | | |
| | | @Resource |
| | | private WalletService walletService; |
| | | |
| | | @Resource |
| | | private ExchangeApplyOrderDzMapper exchangeApplyOrderDzMapper; |
| | | |
| | | @Resource |
| | | private MoneyLogService moneyLogService; |
| | | |
| | | @Resource |
| | | private ItemService itemService; |
| | | |
| | | @Override |
| | | public Result getDzList(int pageNum, int pageSize, String orderBy, String keyWords, HttpServletRequest request) { |
| | | public Result getDzList(int pageNum, int pageSize, String orderBy, String keyWords, String stockType) { |
| | | try { |
| | | String formatDate = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN); |
| | | Page page = new Page(pageNum, pageSize); |
| | | stockDzMapper.findStockTypeDz(page,orderBy,keyWords,formatDate); |
| | | stockDzMapper.findStockTypeDz(page,orderBy,keyWords,formatDate, stockType); |
| | | return Result.succeed(page); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage()); |
| | |
| | | return Result.failed("股票代码已存在"); |
| | | } |
| | | |
| | | |
| | | Item item = itemService.findBySymbol(stockCode); |
| | | if(item == null){ |
| | | return Result.failed("不存在该股票"); |
| | | } |
| | | |
| | | StockDz stockDz = new StockDz(); |
| | | /*stockDz.setStockName(stock.getStockName()); |
| | | stockDz.setStockCode(stock.getStockCode()); |
| | | stockDz.setStockType(stock.getStockType()); |
| | | stockDz.setStockGid(stock.getStockGid()); |
| | | stockDz.setStockSpell(stock.getStockSpell()); |
| | | stockDz.setIsLock(stock.getIsLock()); |
| | | stockDz.setSpreadRate(stock.getSpreadRate());*/ |
| | | |
| | | stockDz.setStockCode(stockCode); |
| | | stockDz.setStockName(item.getSymbolFullName()); |
| | | stockDz.setStockCode(item.getSymbol()); |
| | | stockDz.setStockType(item.getType()); |
| | | stockDz.setStockSpell(item.getSymbolData()); |
| | | stockDz.setIsLock(1); |
| | | stockDz.setIsShow(1); |
| | | stockDz.setAddTime(new Date()); |
| | | stockDz.setIncreaseRatio(BigDecimal.ZERO); |
| | | stockDz.setStockNum(Integer.valueOf(stockNum)); |
| | | stockDz.setPassword(password); |
| | | stockDz.setStartTime(DateUtil.parseDateTime(startTime)); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Result getDzListByAdmin(int pageNum, int pageSize, String Keywords) { |
| | | public Result getDzListByAdmin(int pageNum, int pageSize, String Keywords, String stockType) { |
| | | try { |
| | | Page page = new Page(pageNum, pageSize); |
| | | stockDzMapper.getDzListByAdmin(page, Keywords); |
| | | stockDzMapper.getDzListByAdmin(page, Keywords, stockType); |
| | | return Result.succeed(page); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage()); |
| | |
| | | if(count > 0){ |
| | | return Result.failed("股票代码已存在"); |
| | | } |
| | | |
| | | Item item = itemService.findBySymbol(model.getStockCode()); |
| | | if(item == null){ |
| | | return Result.failed("不存在该股票"); |
| | | } |
| | | |
| | | StockDz stockDz = stockDzMapper.selectById(model.getUuid()); |
| | | if(stockDz == null){ |
| | | return Result.failed("不存在该大宗信息"); |
| | | } |
| | | model.setStockName(item.getSymbolFullName()); |
| | | model.setStockCode(item.getSymbol()); |
| | | model.setStockType(item.getType()); |
| | | model.setStockSpell(item.getSymbolData()); |
| | | return stockDzMapper.updateById(model) > 0 ? Result.succeed("修改成功") : Result.failed("修改失败"); |
| | | } |
| | | |
| | |
| | | return Result.failed("删除失败"); |
| | | } |
| | | |
| | | @Override |
| | | public Result getDzOrderList(int pageNum, int pageSize, String state, String userId, String stockType) { |
| | | try { |
| | | Page page = new Page(pageNum, pageSize); |
| | | stockDzMapper.getDzOrderList(page ,state, userId, stockType); |
| | | return Result.succeed(page); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage()); |
| | | } |
| | | return Result.failed("获取失败"); |
| | | } |
| | | |
| | | @Override |
| | | public Result getDzCheckList(int pageNum, int pageSize, String state, String stockCode, String stockType) { |
| | | try { |
| | | Page page = new Page(pageNum, pageSize); |
| | | stockDzMapper.getDzCheckList(page ,state, stockCode, stockType); |
| | | return Result.succeed(page); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage()); |
| | | } |
| | | return Result.failed("获取失败"); |
| | | } |
| | | |
| | | @Transactional |
| | | @Override |
| | | public Result buyDz(String dzId, String password, double num, String partyId) { |
| | | try { |
| | | if (num <= 0) { |
| | | throw new YamiShopBindException("请输入正确的货币数量"); |
| | | } |
| | | User party = userService.getById(partyId); |
| | | if (!party.isEnabled()) { |
| | | throw new YamiShopBindException("用户已禁用"); |
| | | } |
| | | Syspara syspara = sysparaService.find("stop_user_internet"); |
| | | String stopUserInternet = syspara.getSvalue(); |
| | | if (org.apache.commons.lang3.StringUtils.isNotEmpty(stopUserInternet)) { |
| | | String[] stopUsers = stopUserInternet.split(","); |
| | | if (Arrays.asList(stopUsers).contains(party.getUserName())) { |
| | | throw new YamiShopBindException("无网络"); |
| | | } |
| | | } |
| | | |
| | | |
| | | StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("uuid", dzId)); |
| | | if (stockDz == null) { |
| | | throw new YamiShopBindException("大宗不存在"); |
| | | } |
| | | if (StringUtils.isNotEmpty(stockDz.getPassword()) && !Objects.equals(stockDz.getPassword(), password)) { |
| | | throw new YamiShopBindException("密码错误"); |
| | | } |
| | | if (stockDz.getIsLock() != null && stockDz.getIsLock() != 0) { |
| | | throw new YamiShopBindException("股票被锁定,不能购买"); |
| | | } |
| | | |
| | | if(stockDz.getStartTime().getTime() > new Date().getTime() || stockDz.getEndTime().getTime() < new Date().getTime()){ |
| | | throw new YamiShopBindException("不在内幕交易时间之内"); |
| | | } |
| | | BigDecimal nowPrice = stockDz.getNowPrice(); |
| | | |
| | | if (nowPrice.compareTo(new BigDecimal("0")) == 0) { |
| | | throw new YamiShopBindException("股票价格0,请重试"); |
| | | } |
| | | if (stockDz.getStockNum() > num) { |
| | | throw new YamiShopBindException("最小购买数据" + stockDz.getStockNum()); |
| | | } |
| | | |
| | | Wallet wallet = this.walletService.saveWalletByPartyId(partyId); |
| | | BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(num)); |
| | | //手续费比率 |
| | | Double feeRate = sysparaService.find("exchange_apply_order_dz_buy_fee").getDouble(); |
| | | BigDecimal orderFree = buyAmt.multiply(BigDecimal.valueOf(feeRate)); |
| | | BigDecimal orderAmt = buyAmt.add(orderFree); |
| | | if (wallet.getMoney().compareTo(orderAmt) < 0) { |
| | | throw new YamiShopBindException("订单失败,资金不足"); |
| | | } |
| | | |
| | | BigDecimal amountBefore = wallet.getMoney(); |
| | | |
| | | ExchangeApplyOrderDz order = new ExchangeApplyOrderDz(); |
| | | order.setPartyId(partyId); |
| | | order.setSymbol(stockDz.getStockCode()); |
| | | order.setSymbolValue(num); |
| | | order.setVolume(buyAmt.doubleValue()); |
| | | order.setPrice(nowPrice.doubleValue()); |
| | | order.setOrderNo(com.yami.trading.common.util.DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8)); |
| | | order.setFee(orderFree.doubleValue()); |
| | | order.setCreateTime(new Date()); |
| | | |
| | | |
| | | //判断审核开关 |
| | | if(stockDz.getSwitchType() == 1) { |
| | | order.setState(ExchangeApplyOrderDz.STATE_SUBMITTED); |
| | | exchangeApplyOrderDzMapper.insert(order); |
| | | return Result.succeed("购买成功,等待审核"); |
| | | } |
| | | |
| | | order.setState(ExchangeApplyOrderDz.STATE_SUCCEED); |
| | | exchangeApplyOrderDzMapper.insert(order); |
| | | walletService.update(wallet.getUserId(), Arith.sub(0, orderAmt.doubleValue())); |
| | | |
| | | //TODO 转持仓 |
| | | |
| | | MoneyLog log = new MoneyLog(); |
| | | log.setCategory(Constants.MONEYLOG_CATEGORY_EXCHANGE); |
| | | String name = Constants.MONEYLOG_MAP.get(Constants.US_STOCKS); |
| | | String type2 = Constants.MONEYLOG_MAP_TYPE.get(Constants.US_STOCKS); |
| | | log.setAmountBefore(amountBefore); |
| | | log.setAmount(orderAmt.negate()); |
| | | log.setAmountAfter(amountBefore.subtract(orderAmt)); |
| | | log.setLog(name + type2 + "大宗交易买入" + ",订单号[" + order.getOrderNo() + "]"); |
| | | log.setUserId(order.getPartyId()); |
| | | log.setWalletType(Constants.WALLET); |
| | | log.setSymbol(stockDz.getStockCode()); |
| | | log.setContentType(type2 + Constants.MONEYLOG_CONTENT_OPEN); |
| | | log.setCreateTime(new Date()); |
| | | log.setUpdateTime(new Date()); |
| | | moneyLogService.save(log); |
| | | return Result.succeed("购买成功"); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage()); |
| | | } |
| | | return Result.failed("操作失败"); |
| | | } |
| | | |
| | | @Transactional |
| | | @Override |
| | | public Result dzCheck(String id, Integer checkType, double orderNum) { |
| | | try { |
| | | ExchangeApplyOrderDz order = exchangeApplyOrderDzMapper.selectById(id); |
| | | if (order == null) { |
| | | throw new YamiShopBindException("订单不存在"); |
| | | } |
| | | if (!order.getState().equals(ExchangeApplyOrderDz.STATE_SUBMITTED)) { |
| | | throw new YamiShopBindException("订单已审核"); |
| | | } |
| | | //1.通过 2.拒绝 |
| | | if (checkType == 2) { |
| | | order.setState(ExchangeApplyOrderDz.STATE_FAILED); |
| | | exchangeApplyOrderDzMapper.updateById(order); |
| | | throw new YamiShopBindException("审核成功"); |
| | | } |
| | | if (orderNum > order.getSymbolValue()) { |
| | | throw new YamiShopBindException("输入数量大于用户买入数量"); |
| | | } |
| | | |
| | | StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("id", order.getDzId())); |
| | | if (stockDz == null) { |
| | | throw new YamiShopBindException("大宗不存在"); |
| | | } |
| | | |
| | | BigDecimal nowPrice = stockDz.getNowPrice(); |
| | | if (nowPrice.compareTo(new BigDecimal("0")) == 0) { |
| | | throw new YamiShopBindException("股票价格0,请重试"); |
| | | } |
| | | |
| | | Wallet wallet = this.walletService.saveWalletByPartyId(order.getPartyId()); |
| | | BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(orderNum)); |
| | | //手续费比率 |
| | | Double feeRate = sysparaService.find("exchange_apply_order_dz_buy_fee").getDouble(); |
| | | BigDecimal orderFree = buyAmt.multiply(BigDecimal.valueOf(feeRate)); |
| | | BigDecimal orderAmt = buyAmt.add(orderFree); |
| | | if (wallet.getMoney().compareTo(orderAmt) < 0) { |
| | | throw new YamiShopBindException("订单失败,资金不足"); |
| | | } |
| | | |
| | | BigDecimal amountBefore = wallet.getMoney(); |
| | | |
| | | order.setSymbolValue(orderNum); |
| | | order.setVolume(buyAmt.doubleValue()); |
| | | order.setFee(orderFree.doubleValue()); |
| | | order.setState(ExchangeApplyOrderDz.STATE_SUCCEED); |
| | | exchangeApplyOrderDzMapper.updateById(order); |
| | | walletService.update(wallet.getUserId(), Arith.sub(0, orderAmt.doubleValue())); |
| | | |
| | | //TODO 转持仓 |
| | | |
| | | |
| | | MoneyLog log = new MoneyLog(); |
| | | log.setCategory(Constants.MONEYLOG_CATEGORY_EXCHANGE); |
| | | String name = Constants.MONEYLOG_MAP.get(Constants.US_STOCKS); |
| | | String type2 = Constants.MONEYLOG_MAP_TYPE.get(Constants.US_STOCKS); |
| | | log.setAmountBefore(amountBefore); |
| | | log.setAmount(orderAmt.negate()); |
| | | log.setAmountAfter(amountBefore.subtract(orderAmt)); |
| | | log.setLog(name + type2 + "大宗交易买入" + ",订单号[" + order.getOrderNo() + "]"); |
| | | log.setUserId(order.getPartyId()); |
| | | log.setWalletType(Constants.WALLET); |
| | | log.setSymbol(stockDz.getStockCode()); |
| | | log.setContentType(type2 + Constants.MONEYLOG_CONTENT_OPEN); |
| | | log.setCreateTime(new Date()); |
| | | log.setUpdateTime(new Date()); |
| | | moneyLogService.save(log); |
| | | return Result.succeed("审核成功,订单已转客户持仓"); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage()); |
| | | } |
| | | return Result.failed("操作失败"); |
| | | } |
| | | |
| | | |
| | | } |