From 6f353ae65e9c9f117a9c1177aa5766fd6a3a161e Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sun, 02 Jun 2024 16:57:26 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java | 465 +--------------------------------------------------------
1 files changed, 10 insertions(+), 455 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java
index 0978f3b..1001fdf 100644
--- a/src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java
@@ -9,7 +9,7 @@
import com.google.common.collect.Lists;
import com.nq.common.ServerResponse;
import com.nq.utils.CurrencyUtils;
-import com.nq.utils.DateTimeUtil;
+import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.utils.KeyUtils;
import com.nq.utils.redis.JsonUtil;
import com.nq.utils.stock.BuyAndSellUtils;
@@ -25,6 +25,7 @@
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
@@ -38,7 +39,7 @@
public class UserIndexPositionServiceImpl implements IUserIndexPositionService {
private static final Logger log = LoggerFactory.getLogger(UserIndexPositionServiceImpl.class);
- @Autowired
+ @Resource
UserIndexPositionMapper userIndexPositionMapper;
@Autowired
@@ -50,199 +51,26 @@
@Autowired
ISiteIndexSettingService iSiteIndexSettingService;
- @Autowired
+ @Resource
UserMapper userMapper;
- @Autowired
+ @Resource
UserCashDetailMapper userCashDetailMapper;
@Autowired
IAgentUserService iAgentUserService;
- @Autowired
+ @Resource
AgentUserMapper agentUserMapper;
@Autowired
ISiteProductService iSiteProductService;
@Autowired
IUserIndexPositionService iUserIndexPositionService;
- @Autowired
+ @Resource
SiteTaskLogMapper siteTaskLogMapper;
@Autowired
CurrencyUtils currencyUtils;
@Transactional
public ServerResponse buyIndex(Integer indexId, Integer buyNum, Integer buyType, Integer lever,BigDecimal profitTarget,BigDecimal stopTarget, HttpServletRequest request) throws Exception {
- if (indexId == null || buyNum == null || buyType == null) {
- return ServerResponse.createByErrorMsg("参数不能为空");
- }
- User user = this.iUserService.getCurrentRefreshUser(request);
- /*实名认证开关开启*/
- SiteProduct siteProduct = iSiteProductService.getProductSetting();
- if (siteProduct.getRealNameDisplay() && (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCard()))) {
- return ServerResponse.createByErrorMsg("下单失败,请先实名认证");
- }
-
- if(siteProduct.getHolidayDisplay()){
- return ServerResponse.createByErrorMsg("周末或节假日不能交易!");
- }
-
- log.info("用户 {} 下单, 指数id = {} ,数量 = {} 手 , 方向 = {} , 杠杆 = {}", new Object[]{user
- .getId(), indexId, buyNum, buyType, lever});
-
- if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
- return ServerResponse.createByErrorMsg("下单失败,账户已被锁定");
- }
-
-
- SiteIndexSetting siteIndexSetting = this.iSiteIndexSettingService.getSiteIndexSetting();
- if (siteIndexSetting == null) {
- log.error("下单出错,指数设置表不存在");
- return ServerResponse.createByErrorMsg("下单失败,系统设置错误");
- }
- StockIndex stockIndex = this.iStockIndexService.selectIndexById(indexId);
-
- if (stockIndex.getIndexGid().contains("us")){
- String am_begin = siteIndexSetting.getTransAmBeginUs();
- String am_end = siteIndexSetting.getTransAmEndUs();
- String pm_begin = siteIndexSetting.getTransPmBeginUs();
- String pm_end = siteIndexSetting.getTransPmEndUs();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易时间 = {} 是否在下午交易时间 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
-
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("下单失败,不在交易时段内");
- }
- }else if(stockIndex.getIndexGid().contains("hk")){
- String am_begin = siteIndexSetting.getTransAmBeginhk();
- String am_end = siteIndexSetting.getTransAmEndhk();
- String pm_begin = siteIndexSetting.getTransPmBeginhk();
- String pm_end = siteIndexSetting.getTransPmEndhk();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易时间 = {} 是否在下午交易时间 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
-
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("下单失败,不在交易时段内");
- }
- }else {
- String am_begin = siteIndexSetting.getTransAmBegin();
- String am_end = siteIndexSetting.getTransAmEnd();
- String pm_begin = siteIndexSetting.getTransPmBegin();
- String pm_end = siteIndexSetting.getTransPmEnd();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易时间 = {} 是否在下午交易时间 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("下单失败,不在交易时段内");
- }
- }
-
- if (stockIndex == null) {
- return ServerResponse.createByErrorMsg("指数不存在");
- }
- if (1 != stockIndex.getTransState().intValue()) {
- return ServerResponse.createByErrorMsg("该指数不能交易");
- }
-
- //保证金= 指数保证金*数量/杠杆倍数
- BigDecimal all_deposit_amt = (new BigDecimal(stockIndex.getDepositAmt().intValue())).multiply(new BigDecimal(buyNum.intValue())).divide(new BigDecimal(lever)).setScale(4,2);
-
- if (user.getEnableIndexAmt().compareTo(all_deposit_amt) == -1) {
- return ServerResponse.createByErrorMsg("指数账户资金不足");
- }
-
- BigDecimal max_buy_amt = user.getEnableIndexAmt().multiply(siteIndexSetting.getBuyMaxPercent());
- if (max_buy_amt.compareTo(all_deposit_amt) == -1) {
- return ServerResponse.createByErrorMsg("不能超过最大购买比例");
- }
- if (user.getUserAmt().compareTo(new BigDecimal("0")) == -1) {
- return ServerResponse.createByErrorMsg("失败,融资总资金小于0");
- }
- if (user.getUserFutAmt().compareTo(new BigDecimal("0")) == -1) {
- return ServerResponse.createByErrorMsg("失败,期货总资金小于0");
- }
-
-
- MarketVO marketVO = this.iStockIndexService.querySingleIndex(stockIndex.getIndexGid());
- log.info("当前指数行情 = {}", JsonUtil.obj2StringPretty(marketVO));
-
- BigDecimal increaseRate = new BigDecimal(marketVO.getIncreaseRate());
- if (increaseRate.compareTo(new BigDecimal("0")) == 1) {
-
- if (siteIndexSetting.getRiseLimit().multiply(new BigDecimal("100"))
- .compareTo(increaseRate) == -1 && buyType
- .intValue() == 0) {
- return ServerResponse.createByErrorMsg("当前指数涨幅:" + increaseRate + ",不能买涨");
- }
- } else {
-
- increaseRate = increaseRate.negate();
- if (siteIndexSetting.getRiseLimit().multiply(new BigDecimal("100"))
- .compareTo(increaseRate) == -1 && buyType
- .intValue() == 1) {
- return ServerResponse.createByErrorMsg("当前指数跌幅:" + increaseRate + ",不能买跌");
- }
- }
-
-
- BigDecimal reckon_enable = user.getEnableIndexAmt().subtract(all_deposit_amt);
- user.setEnableIndexAmt(reckon_enable);
- int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
- if (updateUserCount > 0) {
- log.info("【用户交易指数下单】修改用户金额成功");
- } else {
- log.error("用户交易指数下单】修改用户金额出错");
- throw new Exception("用户交易指数下单】修改用户金额出错");
- }
-
-
- UserIndexPosition userIndexPosition = new UserIndexPosition();
- if (profitTarget != null && profitTarget.compareTo(new BigDecimal("0")) > 0) {
- userIndexPosition.setProfitTargetPrice(profitTarget);
- }
- if (stopTarget != null && stopTarget.compareTo(new BigDecimal("0")) > 0) {
- userIndexPosition.setStopTargetPrice(stopTarget);
- }
- BigDecimal buyPrice = new BigDecimal("0");
- if (stockIndex.getIndexGid().contains("hk")){
- buyPrice = currencyUtils.getNowIndexPrice(stockIndex.getIndexGid(),"HKD");
- }else if (stockIndex.getIndexGid().contains("us")){
- buyPrice = currencyUtils.getNowIndexPrice(stockIndex.getIndexGid(),"USD");
- }else {
- buyPrice = new BigDecimal(marketVO.getNowPrice());
- }
- userIndexPosition.setPositionType(user.getAccountType());
- userIndexPosition.setPositionSn(KeyUtils.getUniqueKey());
- userIndexPosition.setUserId(user.getId());
- userIndexPosition.setRealName(user.getRealName());
- userIndexPosition.setAgentId(user.getAgentId());
- userIndexPosition.setIndexName(stockIndex.getIndexName());
- userIndexPosition.setIndexCode(stockIndex.getIndexCode());
- userIndexPosition.setIndexGid(stockIndex.getIndexGid());
- userIndexPosition.setBuyOrderTime(new Date());
- userIndexPosition.setBuyOrderPrice(buyPrice);
- userIndexPosition.setOrderDirection((buyType.intValue() == 0) ? "买涨" : "买跌");
-
- userIndexPosition.setOrderNum(buyNum);
-
-
- userIndexPosition.setIsLock(Integer.valueOf(0));
-
- userIndexPosition.setAllDepositAmt(all_deposit_amt);
- userIndexPosition.setOrderFee((new BigDecimal(stockIndex.getTransFee().intValue()))
- .multiply(new BigDecimal(buyNum.intValue())));
- userIndexPosition.setOrderStayDays(Integer.valueOf(0));
- userIndexPosition.setEachPoint(new BigDecimal(stockIndex.getEachPoint().intValue()));
- userIndexPosition.setProfitAndLose(new BigDecimal("0"));
- userIndexPosition.setAllProfitAndLose(new BigDecimal("0"));
- userIndexPosition.setOrderLever(lever);
-
- int insertPositionCount = this.userIndexPositionMapper.insert(userIndexPosition);
- if (insertPositionCount > 0) {
- log.info("【用户交易指数下单】保存持仓记录成功");
- } else {
- log.error("用户交易指数下单】保存持仓记录出错");
- throw new Exception("用户交易指数下单】保存持仓记录出错");
- }
return ServerResponse.createBySuccess("Order successful");
}
@@ -263,7 +91,7 @@
return ServerResponse.createByErrorMsg("参数不能为空");
}
- User user = this.userMapper.selectByPrimaryKey(userId);
+ User user = this.userMapper.selectById(userId);
/*实名认证开关开启*/
SiteProduct siteProduct = iSiteProductService.getProductSetting();
if (siteProduct.getRealNameDisplay() && (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCard()))) {
@@ -327,107 +155,6 @@
//保证金= 指数保证金*数量/杠杆倍数
BigDecimal all_deposit_amt = (new BigDecimal(stockIndex.getDepositAmt().intValue())).multiply(new BigDecimal(buyNum.intValue())).divide(new BigDecimal(lever)).setScale(4,2);
- if (user.getEnableIndexAmt().compareTo(all_deposit_amt) == -1) {
- log.error("用户 {} 余额不足", user.getId());
- return ServerResponse.createByErrorMsg("指数账户资金不足");
- }
-
- BigDecimal max_buy_amt = user.getEnableIndexAmt().multiply(siteIndexSetting.getBuyMaxPercent());
- if (max_buy_amt.compareTo(all_deposit_amt) == -1) {
- log.error("不能超过最大购买比例");
- return ServerResponse.createByErrorMsg("不能超过最大购买比例");
- }
- if (user.getUserAmt().compareTo(new BigDecimal("0")) == -1) {
- log.error("用户 {} 余额不足", user.getId());
- return ServerResponse.createByErrorMsg("失败,融资总资金小于0");
- }
-// if (user.getUserFutAmt().compareTo(new BigDecimal("0")) == -1) {
-// return ServerResponse.createByErrorMsg("失败,期货总资金小于0");
-// }
-
-
- MarketVO marketVO = this.iStockIndexService.querySingleIndex(stockIndex.getIndexGid());
- log.info("当前指数行情 = {}", JsonUtil.obj2StringPretty(marketVO));
-
-
- BigDecimal increaseRate = new BigDecimal(marketVO.getIncreaseRate());
- if (increaseRate.compareTo(new BigDecimal("0")) == 1) {
-
- if (siteIndexSetting.getRiseLimit().multiply(new BigDecimal("100"))
- .compareTo(increaseRate) == -1 && buyType
- .intValue() == 0) {
- return ServerResponse.createByErrorMsg("当前指数涨幅:" + increaseRate + ",不能买涨");
- }
- } else {
-
- increaseRate = increaseRate.negate();
- if (siteIndexSetting.getRiseLimit().multiply(new BigDecimal("100"))
- .compareTo(increaseRate) == -1 && buyType
- .intValue() == 1) {
- return ServerResponse.createByErrorMsg("当前指数跌幅:" + increaseRate + ",不能买跌");
- }
- }
-
-
- BigDecimal reckon_enable = user.getEnableIndexAmt().subtract(all_deposit_amt);
- user.setEnableIndexAmt(reckon_enable);
- int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
- if (updateUserCount > 0) {
- log.info("【用户交易指数下单】修改用户金额成功");
- } else {
- log.error("用户交易指数下单】修改用户金额出错");
- throw new Exception("用户交易指数下单】修改用户金额出错");
- }
-
-
- UserIndexPosition userIndexPosition = new UserIndexPosition();
- if (profitTarget != null && profitTarget.compareTo(new BigDecimal("0")) > 0) {
- userIndexPosition.setProfitTargetPrice(profitTarget);
- }
- if (stopTarget != null && stopTarget.compareTo(new BigDecimal("0")) > 0) {
- userIndexPosition.setStopTargetPrice(stopTarget);
- }
- BigDecimal buyPrice = new BigDecimal("0");
- if (stockIndex.getIndexGid().contains("hk")){
- buyPrice = currencyUtils.getNowIndexPrice(stockIndex.getIndexGid(),"HKD");
- }else if (stockIndex.getIndexGid().contains("us")){
- buyPrice = currencyUtils.getNowIndexPrice(stockIndex.getIndexGid(),"USD");
- }else {
- buyPrice = new BigDecimal(marketVO.getNowPrice());
- }
- userIndexPosition.setPositionType(user.getAccountType());
- userIndexPosition.setPositionSn(KeyUtils.getUniqueKey());
- userIndexPosition.setUserId(user.getId());
- userIndexPosition.setRealName(user.getRealName());
- userIndexPosition.setAgentId(user.getAgentId());
- userIndexPosition.setIndexName(stockIndex.getIndexName());
- userIndexPosition.setIndexCode(stockIndex.getIndexCode());
- userIndexPosition.setIndexGid(stockIndex.getIndexGid());
- userIndexPosition.setBuyOrderTime(new Date());
- userIndexPosition.setBuyOrderPrice(buyPrice);
- userIndexPosition.setOrderDirection((buyType.intValue() == 0) ? "买涨" : "买跌");
-
- userIndexPosition.setOrderNum(buyNum);
-
-
- userIndexPosition.setIsLock(Integer.valueOf(0));
-
- userIndexPosition.setAllDepositAmt(all_deposit_amt);
- userIndexPosition.setOrderFee((new BigDecimal(stockIndex.getTransFee().intValue()))
- .multiply(new BigDecimal(buyNum.intValue())));
- userIndexPosition.setOrderStayDays(Integer.valueOf(0));
- userIndexPosition.setEachPoint(new BigDecimal(stockIndex.getEachPoint().intValue()));
- userIndexPosition.setProfitAndLose(new BigDecimal("0"));
- userIndexPosition.setAllProfitAndLose(new BigDecimal("0"));
- userIndexPosition.setOrderLever(lever);
-
- int insertPositionCount = this.userIndexPositionMapper.insert(userIndexPosition);
- if (insertPositionCount > 0) {
- log.info("【用户交易指数下单】保存持仓记录成功");
- } else {
- log.error("用户交易指数下单】保存持仓记录出错");
- throw new Exception("用户交易指数下单】保存持仓记录出错");
- }
return ServerResponse.createBySuccess("Order successful");
}
@@ -448,14 +175,13 @@
for (int i = 0; i < userIdList.size(); i++) {
log.info("=====================");
Integer userId = (Integer)userIdList.get(i);
- User user = this.userMapper.selectByPrimaryKey(userId);
+ User user = this.userMapper.selectById(userId);
if(user == null){
continue;
}
List<UserIndexPosition> userindexPositions = this.iUserIndexPositionService.findIndexPositionByUserIdAndSellPriceIsNull(userId);
log.info("用户id = {} 姓名 = {} 指数持仓中订单数: {}", new Object[] { userId, user.getRealName(), Integer.valueOf(userindexPositions.size()) });
- BigDecimal enable_user_amt = user.getEnableAmt();
BigDecimal all_freez_amt = new BigDecimal("0");
for (UserIndexPosition userIndexPosition : userindexPositions) {
@@ -470,13 +196,10 @@
try {
this.iUserIndexPositionService.sellIndex(userIndexPosition.getPositionSn(), 0);
- User user1 = this.userMapper.selectByPrimaryKey(userId);
- BigDecimal enable_user_amt1 = user1.getEnableAmt();
+ User user1 = this.userMapper.selectById(userId);
SiteTaskLog siteTaskLog = new SiteTaskLog();
siteTaskLog.setTaskType("指数止盈止损强平任务-指数持仓");
String accountType = (user.getAccountType().intValue() == 0) ? "正式用户" : "模拟用户";
- String taskcnt = accountType + "-" + user.getRealName() + "被强平[达到目标盈亏] 用户id = " + user.getId() + ", 扣款可用资金 = " + enable_user_amt + "扣款后可用资金 = " + enable_user_amt1 + ",现价"+nowPrice+ ", 目标止盈价格:" + userIndexPosition.getProfitTargetPrice()+ ", 目标止损价格:" + userIndexPosition.getStopTargetPrice();
- siteTaskLog.setTaskCnt(taskcnt);
String tasktarget = "此次强平订单号为:" + userIndexPosition.getPositionSn();
siteTaskLog.setTaskTarget(tasktarget);
siteTaskLog.setAddTime(new Date());
@@ -524,174 +247,6 @@
@Transactional
public ServerResponse sellIndex(String positionSn, int doType) throws Exception {
log.info("【用户交易平仓指数】 positionSn = {} , dotype = {}", positionSn, Integer.valueOf(doType));
-
-
- SiteIndexSetting siteIndexSetting = this.iSiteIndexSettingService.getSiteIndexSetting();
- if (siteIndexSetting == null) {
- log.error("平仓出错,网站指数设置表不存在");
- return ServerResponse.createByErrorMsg("下单失败,系统设置错误");
- }
- UserIndexPosition userIndexPosition = this.userIndexPositionMapper.selectIndexPositionBySn(positionSn);
-
- if (doType != 0) {
- if (userIndexPosition.getIndexGid().contains("us")){
- String am_begin = siteIndexSetting.getTransAmBeginUs();
- String am_end = siteIndexSetting.getTransAmEndUs();
- String pm_begin = siteIndexSetting.getTransPmBeginUs();
- String pm_end = siteIndexSetting.getTransPmEndUs();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易时间 = {} 是否在下午交易时间 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("平仓失败,不在交易时段内");
- }
- }else if(userIndexPosition.getIndexGid().contains("hk")){
- String am_begin = siteIndexSetting.getTransAmBeginhk();
- String am_end = siteIndexSetting.getTransAmEndhk();
- String pm_begin = siteIndexSetting.getTransPmBeginhk();
- String pm_end = siteIndexSetting.getTransPmEndhk();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易时间 = {} 是否在下午交易时间 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("下单失败,不在交易时段内");
- }
- }else {
- String am_begin = siteIndexSetting.getTransAmBegin();
- String am_end = siteIndexSetting.getTransAmEnd();
- String pm_begin = siteIndexSetting.getTransPmBegin();
- String pm_end = siteIndexSetting.getTransPmEnd();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("【指数】是否在上午交易时间 = {} 是否在下午交易时间 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("平仓失败,不在交易时段内");
- }
- }
- }
-
-
-
- if (userIndexPosition == null) {
- return ServerResponse.createByErrorMsg("平仓失败,指数持仓不存在");
- }
-
-
- User user = this.userMapper.selectByPrimaryKey(userIndexPosition.getUserId());
- /*实名认证开关开启*/
- SiteProduct siteProduct = iSiteProductService.getProductSetting();
- if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
- return ServerResponse.createByErrorMsg("平仓失败,用户已被锁定");
- }
- if(siteProduct.getHolidayDisplay()){
- return ServerResponse.createByErrorMsg("周末或节假日不能交易!");
- }
- if (userIndexPosition.getSellOrderPrice() != null) {
- return ServerResponse.createByErrorMsg("平仓失败,此订单已平仓");
- }
-
- if (1 == userIndexPosition.getIsLock().intValue()) {
- return ServerResponse.createByErrorMsg("平仓失败 " + userIndexPosition.getLockMsg());
- }
-
-
- MarketVO marketVO = this.iStockIndexService.querySingleIndex(userIndexPosition.getIndexGid());
- log.info("当前指数行情 = {}", JsonUtil.obj2StringPretty(marketVO));
-
- BigDecimal increaseRate = new BigDecimal(marketVO.getIncreaseRate());
- if (increaseRate.compareTo(new BigDecimal("0")) == 1) {
-
- if (siteIndexSetting.getRiseLimit().multiply(new BigDecimal("100"))
- .compareTo(increaseRate) != 1 && "买跌"
- .equals(userIndexPosition.getOrderDirection())) {
- return ServerResponse.createByErrorMsg("当前指数涨幅:" + increaseRate + ",不能卖出");
- }
- } else {
-
- increaseRate = increaseRate.negate();
- if (siteIndexSetting.getRiseLimit().multiply(new BigDecimal("100"))
- .compareTo(increaseRate) == -1 && "买涨"
- .equals(userIndexPosition.getOrderDirection())) {
- return ServerResponse.createByErrorMsg("当前指数跌幅:" + increaseRate + ",不能卖出");
- }
- }
- BigDecimal buyPrice = new BigDecimal("0");
- if (userIndexPosition.getIndexGid().contains("hk")){
- buyPrice = currencyUtils.getNowIndexPrice(userIndexPosition.getIndexGid(),"HKD");
- }else if (userIndexPosition.getIndexGid().contains("us")){
- buyPrice = currencyUtils.getNowIndexPrice(userIndexPosition.getIndexGid(),"USD");
- }else {
- buyPrice = new BigDecimal(marketVO.getNowPrice());
- }
-
- userIndexPosition.setSellOrderPrice((buyPrice));
- userIndexPosition.setSellOrderTime(new Date());
-
- BigDecimal point_sub = userIndexPosition.getSellOrderPrice().subtract(userIndexPosition.getBuyOrderPrice());
-
- BigDecimal profit_and_lose = point_sub.multiply(userIndexPosition.getEachPoint()).multiply(new BigDecimal(userIndexPosition.getOrderNum().intValue()));
- if ("买跌".equals(userIndexPosition.getOrderDirection())) {
- profit_and_lose = profit_and_lose.negate();
- }
-
- userIndexPosition.setProfitAndLose(profit_and_lose);
-
- BigDecimal all_profit = profit_and_lose.subtract(userIndexPosition.getOrderFee());
- userIndexPosition.setAllProfitAndLose(all_profit);
-
-
- int updateIndexPositionCount = this.userIndexPositionMapper.updateByPrimaryKeySelective(userIndexPosition);
- if (updateIndexPositionCount > 0) {
- log.info("【用户平仓指数】修改浮动盈亏记录成功");
- } else {
- log.error("【用户平仓指数】修改浮动盈亏记录出错");
- throw new Exception("用户平仓指数】修改浮动盈亏记录出错");
- }
-
-
- BigDecimal before_user_amt = user.getUserIndexAmt();
- BigDecimal before_enable_amt = user.getEnableIndexAmt();
- log.info("用户平仓之前 的 总资金 = {} , 可用资金 = {}", before_user_amt, before_enable_amt);
-
- BigDecimal user_index_amt = before_user_amt.add(all_profit);
-
- BigDecimal enable_index_amt = before_enable_amt.add(all_profit).add(userIndexPosition.getAllDepositAmt());
-
- log.info("用户平仓后的总资金 = {} , 可用资金 = {}", user_index_amt, enable_index_amt);
- user.setUserIndexAmt(user_index_amt);
- user.setEnableIndexAmt(enable_index_amt);
-
- int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
- if (updateUserCount > 0) {
- log.info("【用户平仓指数】修改用户金额成功");
- } else {
- log.error("【用户平仓指数】修改用户金额出错");
- throw new Exception("【用户平仓指数】修改用户金额出错");
- }
-
- UserCashDetail ucd = new UserCashDetail();
- ucd.setPositionId(userIndexPosition.getId());
- ucd.setAgentId(user.getAgentId());
- ucd.setAgentName(user.getAgentName());
- ucd.setUserId(user.getId());
- ucd.setUserName(user.getRealName());
- ucd.setDeType("指数盈亏");
- ucd.setDeAmt(all_profit);
- ucd.setDeSummary("卖出指数," + userIndexPosition.getIndexName() + "/" + userIndexPosition
- .getIndexCode() + ",总盈亏:" + all_profit);
-
-
- ucd.setAddTime(new Date());
- ucd.setIsRead(Integer.valueOf(0));
-
- int insertSxfCount = this.userCashDetailMapper.insert(ucd);
- if (insertSxfCount > 0) {
- log.info("【用户平仓指数】保存明细记录成功");
- } else {
- log.error("【用户平仓指数】保存明细记录出错");
- throw new Exception("【用户平仓指数】保存明细记录出错");
- }
-
return ServerResponse.createBySuccessMsg("Closed position successfully!");
}
--
Gitblit v1.9.3