From c8b031a405ebd2b450f5098bb37e5e63390f364c Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Fri, 18 Jul 2025 09:57:31 +0800
Subject: [PATCH] 新增贷款,优化
---
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java | 78 +-
src/main/java/com/nq/controller/backend/AdminStockAiController.java | 15
src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java | 2
src/main/java/com/nq/vo/stock/StockVOQuery.java | 19
src/main/resources/mapper/DkMapper.xml | 56 -
src/main/java/com/nq/pojo/StockAIOrderPosition.java | 8
src/main/java/com/nq/service/impl/DkServices.java | 234 ++++++-
src/main/java/com/nq/controller/echo/EChoController.java | 3
src/main/java/com/nq/pojo/User.java | 6
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java | 607 ++++++++++--------
src/main/java/com/nq/service/IDkServices.java | 12
src/main/java/com/nq/service/IUserPositionService.java | 3
src/main/java/com/nq/controller/StockInkApiController.java | 6
src/main/java/com/nq/pojo/StockAI.java | 3
src/main/java/com/nq/service/impl/UserServiceImpl.java | 127 +--
src/main/resources/mapper/UserMapper.xml | 2
src/main/java/com/nq/common/ServerResponse.java | 5
src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java | 58 +
src/main/java/com/nq/vo/user/UserInfoVO.java | 6
src/main/java/com/nq/service/IUserAssetsServices.java | 4
src/main/java/com/nq/dao/DkMapper.java | 5
src/main/java/com/nq/enums/EUserAssets.java | 6
src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java | 4
src/main/java/com/nq/service/impl/StockAiServiceImpl.java | 73 -
src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java | 6
src/main/java/com/nq/utils/timeutil/DateTimeUtil.java | 53 +
src/main/java/com/nq/pojo/DkModel.java | 87 --
src/main/java/com/nq/controller/UserPositionCheckDzController.java | 66 -
src/main/java/com/nq/service/impl/PayServiceImpl.java | 2
src/main/java/com/nq/controller/dk/DkController.java | 43
src/main/java/com/nq/service/impl/FundsApplyServiceImpl.java | 4
src/main/resources/mapper/StockMapper.xml | 5
src/main/java/com/nq/service/impl/UserAssetsServices.java | 28
src/main/java/com/nq/service/impl/StockServiceImpl.java | 27
src/main/java/com/nq/pojo/UserPosition.java | 1
src/main/java/com/nq/service/impl/AgentUserServiceImpl.java | 2
src/main/java/com/nq/dao/StockMapper.java | 2
src/main/java/com/nq/service/impl/MandatoryLiquidationService.java | 2
src/main/java/com/nq/service/impl/FundsAppendServiceImpl.java | 2
src/main/java/com/nq/vo/dk/DkModelVo.java | 84 --
src/main/java/com/nq/controller/backend/AdminController.java | 42
src/main/java/com/nq/service/impl/UserFuturesPositionServiceImpl.java | 2
src/main/java/com/nq/pojo/StockAIOrder.java | 5
src/main/java/com/nq/service/IStockService.java | 2
src/main/java/com/nq/service/impl/UserFundsPositionServiceImpl.java | 4
45 files changed, 1,006 insertions(+), 805 deletions(-)
diff --git a/src/main/java/com/nq/common/ServerResponse.java b/src/main/java/com/nq/common/ServerResponse.java
index 670fcd7..a187b0a 100644
--- a/src/main/java/com/nq/common/ServerResponse.java
+++ b/src/main/java/com/nq/common/ServerResponse.java
@@ -111,4 +111,9 @@
public static <T> ServerResponse<T> createByErrorCodeMsg(int errorcode, String errormsg) {
return new ServerResponse(errorcode, errormsg);
}
+
+ public static <T> ServerResponse<T> createByErrorCodeMsg(int errorcode, String errormsg, HttpServletRequest request) {
+ return new ServerResponse(errorcode, new GoogleTranslateUtil().translate(errormsg,request.getHeader(LANG)));
+ //return new ServerResponse(errorcode, errormsg, request);
+ }
}
diff --git a/src/main/java/com/nq/controller/StockInkApiController.java b/src/main/java/com/nq/controller/StockInkApiController.java
index d972f3d..d35db52 100644
--- a/src/main/java/com/nq/controller/StockInkApiController.java
+++ b/src/main/java/com/nq/controller/StockInkApiController.java
@@ -48,18 +48,18 @@
public ServerResponse buyStockAi(@RequestParam(value = "id") Long id,
@RequestParam(value = "buyNum") BigDecimal buyNum, HttpServletRequest request) {
if (buyNum.compareTo(BigDecimal.ZERO) <= 0) {
- return ServerResponse.createByErrorMsg("购买金额不能小于0");
+ return ServerResponse.createByErrorMsg("购买金额不能小于0", request);
}
buyLock.lock();
try {
if (buyOrderCreated.get()) {
- return ServerResponse.createByErrorMsg("当前下单人数过多,请稍后重试");
+ return ServerResponse.createByErrorMsg("当前下单人数过多,请稍后重试", request);
}
buyOrderCreated.set(true);
return stockAiService.buyStockAi(id, buyNum, request);
} catch (Exception e) {
e.printStackTrace();
- return ServerResponse.createByErrorMsg("订单异常,请稍后重试");
+ return ServerResponse.createByErrorMsg("订单异常,请稍后重试", request);
} finally{
buyLock.unlock();
buyOrderCreated.set(false);
diff --git a/src/main/java/com/nq/controller/UserPositionCheckDzController.java b/src/main/java/com/nq/controller/UserPositionCheckDzController.java
index f097341..7f99f3f 100644
--- a/src/main/java/com/nq/controller/UserPositionCheckDzController.java
+++ b/src/main/java/com/nq/controller/UserPositionCheckDzController.java
@@ -10,6 +10,7 @@
import com.nq.enums.EUserAssets;
import com.nq.pojo.*;
import com.nq.service.IPriceServices;
+import com.nq.service.IUserPositionService;
import com.nq.service.IUserService;
import com.nq.service.UserPositionCheckDzService;
import com.nq.service.impl.UserAssetsServices;
@@ -36,22 +37,7 @@
UserPositionCheckDzService service;
@Autowired
- UserPositionCheckDzMapper mapper;
-
- @Autowired
- UserPositionMapper userPositionMapper;
-
- @Autowired
- UserAssetsServices userAssetsServices;
-
- @Autowired
- UserMapper userMapper;
-
- @Autowired
- IPriceServices priceServices;
-
- @Autowired
- StockDzMapper stockDzMapper;
+ IUserPositionService userPositionService;
//大宗交易审核列表
@RequestMapping({"getList.do"})
@@ -87,52 +73,10 @@
@ResponseBody
public ServerResponse check(@RequestParam(value = "id") Integer id,
@RequestParam(value = "checkType") Integer checkType,
- @RequestParam(value = "orderNum") Integer orderNum) {
+ @RequestParam(value = "orderNum") Integer orderNum, HttpServletRequest request) {
if(checkType != 2 && (id == null || checkType == null || orderNum == null)){
- return ServerResponse.createByErrorMsg("参数不能为空");
+ return ServerResponse.createByErrorMsg("参数不能为空", request);
}
- UserPositionCheckDz userPositionCheckDz = service.getById(id);
- if(userPositionCheckDz == null){
- return ServerResponse.createByErrorMsg("订单不存在");
- }
- if(userPositionCheckDz.getCheckType() != 0){
- return ServerResponse.createByErrorMsg("订单已审核");
- }
- if(checkType == 2){
- userPositionCheckDz.setCheckType(checkType);
- service.updateById(userPositionCheckDz);
- return ServerResponse.createBySuccess("审核成功");
- }
- User user = userMapper.selectById(userPositionCheckDz.getUserId());
-
- StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("id", userPositionCheckDz.getDzId()));
-
- UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId(stockDz.getStockType(), user.getId());
- if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
- return ServerResponse.createByErrorMsg("用户账户有待补资金未补齐,审核失败");
- }
-
- BigDecimal nowPrice = stockDz.getNowPrice();
-
- if (nowPrice.compareTo(new BigDecimal("0")) == 0) {
- return ServerResponse.createByErrorMsg("股票价格0,请重试");
- }
- userPositionCheckDz.setOrderNum(orderNum);
- userPositionCheckDz.setOrderTotalPrice(nowPrice.multiply(new BigDecimal(orderNum.intValue())));
- BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(userPositionCheckDz.getOrderNum()));
- BigDecimal fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100));
- BigDecimal availableBalance = fundratio.multiply(userAssets.getAvailableBalance());
- if (buyAmt.compareTo(availableBalance) > 0) {
- return ServerResponse.createByErrorMsg("订单失败,配资不足");
- }
- userPositionCheckDz.setCheckType(checkType);
- service.updateById(userPositionCheckDz);
- UserPosition userPosition = Convert.convert(UserPosition.class, userPositionCheckDz);
- userPosition.setBuyOrderPrice(nowPrice);
- userPosition.setId(null);
- userPosition.setDzId(stockDz.getId());
- userPositionMapper.insert(userPosition);
- userAssetsServices.availablebalanceChange(userAssets.getAccectType(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
- return ServerResponse.createBySuccessMsg("审核成功,订单已转客户持仓");
+ return userPositionService.checkDz(id, checkType, orderNum ,request);
}
}
diff --git a/src/main/java/com/nq/controller/backend/AdminController.java b/src/main/java/com/nq/controller/backend/AdminController.java
index aecd92a..7384599 100644
--- a/src/main/java/com/nq/controller/backend/AdminController.java
+++ b/src/main/java/com/nq/controller/backend/AdminController.java
@@ -13,6 +13,7 @@
import com.nq.utils.PropertiesUtil;
+import java.math.BigDecimal;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -177,31 +178,40 @@
}
-
-
-
-
-
+ /**
+ * 后台贷款列表
+ * @param pageNum
+ * @param pageSize
+ * @return
+ */
@RequestMapping("queryDk.do")
@ResponseBody
- public ServerResponse queryDk() {
- return ServerResponse.createBySuccess(this.iDkServices.queryDk());
+ public ServerResponse queryDk(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+ @RequestParam(value = "pageSize", defaultValue = "5") int pageSize) {
+ return iDkServices.queryDk(pageNum, pageSize);
}
-
-
+ /**
+ * 审核
+ * @param dkId id
+ * @param spMoney 审核金额
+ * @param state 状态
+ * @param message 提示
+ * @return
+ */
@RequestMapping("dksp.do")
@ResponseBody
- public ServerResponse dksp(@RequestParam("dkId") Integer dkid,
- @RequestParam("spMoney") Integer spMoney,
+ public ServerResponse dksp(@RequestParam("dkId") Integer dkId,
+ @RequestParam(value = "spMoney", required = false) BigDecimal spMoney,
@RequestParam("state") Integer state,
- @RequestParam("dkMessage") String message) {
- if (iDkServices.dksp(spMoney, message,state, dkid)) {
- return ServerResponse.createByErrorMsg("Successed");
- } else {
- return ServerResponse.createByErrorMsg("Fail");
+ @RequestParam(value = "message", required = false) String message) {
+ if (state == 1) { //通过
+ if (spMoney == null) {
+ return ServerResponse.createByErrorMsg("输入审核金额");
+ }
}
+ return iDkServices.dkSp(spMoney, message,state, dkId);
}
@RequestMapping("addDkjg.do")
@ResponseBody
diff --git a/src/main/java/com/nq/controller/backend/AdminStockAiController.java b/src/main/java/com/nq/controller/backend/AdminStockAiController.java
index c1cb5bc..cfcbb6a 100644
--- a/src/main/java/com/nq/controller/backend/AdminStockAiController.java
+++ b/src/main/java/com/nq/controller/backend/AdminStockAiController.java
@@ -4,6 +4,7 @@
import com.nq.pojo.StockAI;
import com.nq.pojo.StockAIOrderPosition;
import com.nq.service.IStockAiService;
+ import com.nq.service.IStockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -17,6 +18,8 @@
@Autowired
IStockAiService stockAiService;
+ @Autowired
+ IStockService stockService;
/**
* 获取ai交易产品列表
* @return
@@ -96,4 +99,16 @@
return stockAiService.orderOperation(id, status);
}
+
+ /**
+ * 根据条件查询股票code 名称 或 spell
+ * @return
+ */
+ @PostMapping({"getStocksByKeyWords.do"})
+ @ResponseBody
+ public ServerResponse getStocksByKeyWords(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+ @RequestParam(value = "pageSize", defaultValue = "5") int pageSize,
+ @RequestParam(value = "keyWords") String keyWords) {
+ return stockService.getStocksByKeyWords(pageNum, pageSize, keyWords);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/nq/controller/dk/DkController.java b/src/main/java/com/nq/controller/dk/DkController.java
index f39c46a..be598a3 100644
--- a/src/main/java/com/nq/controller/dk/DkController.java
+++ b/src/main/java/com/nq/controller/dk/DkController.java
@@ -5,12 +5,12 @@
import com.nq.service.IDkServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
@Controller
@RequestMapping("/api/dk")
@@ -27,27 +27,44 @@
return ServerResponse.createBySuccess(iDkServices.queryAll());
}
-
+ /**
+ * 申请贷款
+ * @param dkMoney 贷款金额 必填
+ * @param dkPhone
+ * @param dkJgId
+ * @param httpServletRequest
+ * @return
+ */
@RequestMapping("/dk.do")
@ResponseBody
- public ServerResponse addDk(@RequestParam("dkMoney") String dkMoney,
- @RequestParam("dkPhone") String dkPhone,
- @RequestParam("dkJgId") String dkJgId,
+ public ServerResponse addDk(@RequestParam("dkMoney") BigDecimal dkMoney,
+ @RequestParam(value = "dkPhone", required = false) String dkPhone,
+ @RequestParam(value = "dkJgId", required = false) String dkJgId,
HttpServletRequest httpServletRequest) {
- if (iDkServices.addDk(dkMoney, dkPhone,dkJgId, httpServletRequest)) {
- return ServerResponse.createBySuccessMsg("Successed");
- } else {
- return ServerResponse.createByErrorMsg("Fail");
- }
+ return iDkServices.addDk(dkMoney, dkPhone,dkJgId, httpServletRequest);
}
@RequestMapping("/queryByShUserId.do")
@ResponseBody
- public ServerResponse queryByShUserId(HttpServletRequest httpServletRequest){
- return ServerResponse.createBySuccess(iDkServices.queryByShUserId(httpServletRequest));
+ public ServerResponse queryByShUserId(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+ @RequestParam(value = "pageSize", defaultValue = "5") int pageSize,
+ @RequestParam(value = "state") Integer state,
+ HttpServletRequest httpServletRequest){
+ return iDkServices.queryByShUserId(pageNum, pageSize, state, httpServletRequest);
}
-
+ /**
+ * 还款
+ * @param id 订单id
+ * @param request
+ * @return
+ */
+ @RequestMapping("/rtDk.do")
+ @ResponseBody
+ public ServerResponse rtDk(@RequestParam("id") Integer id,
+ HttpServletRequest request) {
+ return iDkServices.rtDk(id, request);
+ }
}
diff --git a/src/main/java/com/nq/controller/echo/EChoController.java b/src/main/java/com/nq/controller/echo/EChoController.java
index c28cc43..4129003 100644
--- a/src/main/java/com/nq/controller/echo/EChoController.java
+++ b/src/main/java/com/nq/controller/echo/EChoController.java
@@ -3,6 +3,7 @@
import com.nq.common.ServerResponse;
import com.nq.dao.EChoMapper;
import com.nq.dao.UserAssetsMapper;
+import com.nq.enums.EStockType;
import com.nq.pojo.EChoBean;
import com.nq.pojo.User;
import com.nq.pojo.UserAssets;
@@ -62,7 +63,7 @@
}
}
User user = this.iUserService.getCurrentRefreshUser(request);
- UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("MEX", user.getId());
+ UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), user.getId());
if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
}
diff --git a/src/main/java/com/nq/dao/DkMapper.java b/src/main/java/com/nq/dao/DkMapper.java
index 60964fb..90fd337 100644
--- a/src/main/java/com/nq/dao/DkMapper.java
+++ b/src/main/java/com/nq/dao/DkMapper.java
@@ -4,8 +4,10 @@
import com.nq.pojo.DkModel;
import com.nq.vo.dk.DkModelVo;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
+import java.math.BigDecimal;
import java.util.List;
@Mapper
@@ -14,6 +16,7 @@
List<DkModelVo> queryDk();
+ int countByUserIdAndRStatus(@Param("userId") String userId, @Param("rStatus") Integer rStatus);
- List<DkModelVo> queryByShUserId(String id);
+ BigDecimal sumSpMoneyByUserIdAndRStatus(@Param("userId") String userId);
}
diff --git a/src/main/java/com/nq/dao/StockMapper.java b/src/main/java/com/nq/dao/StockMapper.java
index f9df28f..540c260 100644
--- a/src/main/java/com/nq/dao/StockMapper.java
+++ b/src/main/java/com/nq/dao/StockMapper.java
@@ -7,6 +7,7 @@
import com.nq.pojo.StockDz;
import com.nq.pojo.StockSetting;
+import com.nq.vo.stock.StockVOQuery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
@@ -61,4 +62,5 @@
List<StockDz> findStockTypeDz(@Param("orderBy") String orderBy, @Param("keyWords") String keyWords , @Param("formatDate") String formatDate);
+ List<StockVOQuery> findStocksQuery(@Param("keyWords") String keyWords);
}
\ No newline at end of file
diff --git a/src/main/java/com/nq/enums/EUserAssets.java b/src/main/java/com/nq/enums/EUserAssets.java
index 817d212..9a00de7 100644
--- a/src/main/java/com/nq/enums/EUserAssets.java
+++ b/src/main/java/com/nq/enums/EUserAssets.java
@@ -20,7 +20,11 @@
TOP_UP("TOP_UP","充值"),
BUY_AI("BUY_AI","购买AI产品"),
BUY_AI_REJECT("BUY_AI_REJECT","拒绝买入AI产品申请"),
- AI_SETTLEMENT("AI_SETTLEMENT","结算AI产品订单"),
+ AI_SETTLEMENT("AI_SETTLEMENT","结算AI产品订单本金"),
+ AI_SETTLEMENT_INT("AI_SETTLEMENT_INT","结算AI产品订单利息"),
+ DK("DK","发放贷款"),
+ RT_DK("RT_DK","归还贷款"),
+ RT_DK_INT("RT_DK_INT","归还贷款利息"),
;
private String code;
diff --git a/src/main/java/com/nq/pojo/DkModel.java b/src/main/java/com/nq/pojo/DkModel.java
index ceca8b5..faa86dc 100644
--- a/src/main/java/com/nq/pojo/DkModel.java
+++ b/src/main/java/com/nq/pojo/DkModel.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.springframework.data.annotation.Transient;
import org.springframework.format.annotation.DateTimeFormat;
@@ -11,102 +12,36 @@
import java.util.Date;
@TableName("dk")
+@Data
public class DkModel {
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
-
+ //贷款金额
private String dkMoney;
-
+ //审核金额
private String spMoney;
private String dkUserId;
+ //贷款状态:0 申请中 1 审批通过 2审核拒绝 3贷款发放成功
private String dkState;
+ //提示
private String dkMessage;
private String dkPhone;
-
private String dkJgId;
-
-
- public String getDkJgId() {
- return dkJgId;
- }
-
- public void setDkJgId(String dkJgId) {
- this.dkJgId = dkJgId;
- }
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
- public Integer getId() {
- return id;
- }
+ //放款时间
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date loanTime;
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getDkMoney() {
- return dkMoney;
- }
-
- public void setDkMoney(String dkMoney) {
- this.dkMoney = dkMoney;
- }
-
- public String getSpMoney() {
- return spMoney;
- }
-
- public void setSpMoney(String spMoney) {
- this.spMoney = spMoney;
- }
-
- public String getDkUserId() {
- return dkUserId;
- }
-
- public void setDkUserId(String dkUserId) {
- this.dkUserId = dkUserId;
- }
-
- public String getDkState() {
- return dkState;
- }
-
- public void setDkState(String dkState) {
- this.dkState = dkState;
- }
-
- public String getDkMessage() {
- return dkMessage;
- }
-
- public void setDkMessage(String dkMessage) {
- this.dkMessage = dkMessage;
- }
-
- public Date getCreateTime() {
- return createTime;
- }
-
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
-
- public String getDkPhone() {
- return dkPhone;
- }
-
- public void setDkPhone(String dkPhone) {
- this.dkPhone = dkPhone;
- }
-
-
+ //还款状态:0未还款 1已还款
+ private Integer dkRefundState;
}
diff --git a/src/main/java/com/nq/pojo/StockAI.java b/src/main/java/com/nq/pojo/StockAI.java
index b31536e..4391379 100644
--- a/src/main/java/com/nq/pojo/StockAI.java
+++ b/src/main/java/com/nq/pojo/StockAI.java
@@ -20,7 +20,8 @@
public class StockAI {
@Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
+ //@GeneratedValue(strategy = GenerationType.IDENTITY)
+ @TableId(type = IdType.AUTO,value = "id")
private Integer id;
//股票类型
diff --git a/src/main/java/com/nq/pojo/StockAIOrder.java b/src/main/java/com/nq/pojo/StockAIOrder.java
index b0f43b8..040e459 100644
--- a/src/main/java/com/nq/pojo/StockAIOrder.java
+++ b/src/main/java/com/nq/pojo/StockAIOrder.java
@@ -1,5 +1,7 @@
package com.nq.pojo;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -19,7 +21,8 @@
public class StockAIOrder {
@Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
+ //@GeneratedValue(strategy = GenerationType.IDENTITY)
+ @TableId(type = IdType.AUTO,value = "id")
private Integer id;
//用户id
diff --git a/src/main/java/com/nq/pojo/StockAIOrderPosition.java b/src/main/java/com/nq/pojo/StockAIOrderPosition.java
index 65a700e..9400fed 100644
--- a/src/main/java/com/nq/pojo/StockAIOrderPosition.java
+++ b/src/main/java/com/nq/pojo/StockAIOrderPosition.java
@@ -1,5 +1,7 @@
package com.nq.pojo;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -20,11 +22,12 @@
public class StockAIOrderPosition {
@Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
+ //@GeneratedValue(strategy = GenerationType.IDENTITY)
+ @TableId(type = IdType.AUTO,value = "id")
private Integer id;
//ai交易产品订单id
- private Long stockAiOrderId;
+ private Integer stockAiOrderId;
//建仓股票id
private Integer stockId;
@@ -42,6 +45,7 @@
/**
* 建仓时间
*/
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date creatDate;
/**
diff --git a/src/main/java/com/nq/pojo/User.java b/src/main/java/com/nq/pojo/User.java
index 3de352d..00dc1ab 100644
--- a/src/main/java/com/nq/pojo/User.java
+++ b/src/main/java/com/nq/pojo/User.java
@@ -38,4 +38,10 @@
private String lever;
private String fundRatio;
+
+ //信用分
+ private Integer creditScore;
+ //贷款额度
+ private BigDecimal loanLimit;
+
}
diff --git a/src/main/java/com/nq/pojo/UserPosition.java b/src/main/java/com/nq/pojo/UserPosition.java
index 8c94065..64504ed 100644
--- a/src/main/java/com/nq/pojo/UserPosition.java
+++ b/src/main/java/com/nq/pojo/UserPosition.java
@@ -19,6 +19,7 @@
public class UserPosition implements Serializable {
@TableId(type = IdType.AUTO,value = "id")
private Integer id;
+ //0正常股票 1新股 3大宗
private Integer positionType;
private String positionSn;
private Integer userId;
diff --git a/src/main/java/com/nq/service/IDkServices.java b/src/main/java/com/nq/service/IDkServices.java
index df8af49..2a172c9 100644
--- a/src/main/java/com/nq/service/IDkServices.java
+++ b/src/main/java/com/nq/service/IDkServices.java
@@ -1,27 +1,31 @@
package com.nq.service;
+import com.nq.common.ServerResponse;
import com.nq.pojo.DkJgBean;
import com.nq.pojo.DkModel;
import com.nq.vo.dk.DkModelVo;
+import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
import java.util.List;
public interface IDkServices {
- boolean addDk(String dkMoney, String phone,String dkjgId ,HttpServletRequest request);
+ ServerResponse addDk(BigDecimal dkMoney, String phone, String dkjgId , HttpServletRequest request);
- List<DkModelVo> queryDk();
+ ServerResponse queryDk(int pageNum, int pageSize);
- boolean dksp(Integer shMoney,String message,Integer state,Integer dkId);
+ ServerResponse dkSp(BigDecimal spMoney,String message,Integer state,Integer dkId);
+ ServerResponse rtDk(Integer id, HttpServletRequest request);
List<DkJgBean> queryAll();
- List<DkModelVo> queryByShUserId(HttpServletRequest httpServletRequest);
+ ServerResponse queryByShUserId(int pageNum, int pageSize, Integer state, HttpServletRequest httpServletRequest);
int inserDkJG(String dkjgName);
diff --git a/src/main/java/com/nq/service/IStockService.java b/src/main/java/com/nq/service/IStockService.java
index d47a861..23ebff4 100644
--- a/src/main/java/com/nq/service/IStockService.java
+++ b/src/main/java/com/nq/service/IStockService.java
@@ -124,4 +124,6 @@
* @return
*/
ServerResponse getIndicesAndKData(String pid, String stockType);
+
+ ServerResponse getStocksByKeyWords(int pageNum, int pageSize, String keyWords);
}
diff --git a/src/main/java/com/nq/service/IUserAssetsServices.java b/src/main/java/com/nq/service/IUserAssetsServices.java
index 3ac85dc..9399f91 100644
--- a/src/main/java/com/nq/service/IUserAssetsServices.java
+++ b/src/main/java/com/nq/service/IUserAssetsServices.java
@@ -45,7 +45,7 @@
* @param desc 描述
* @param descType 购买类型 充值 持仓 平仓 提现
* */
- Boolean availablebalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, String desc, String descType);
+ Boolean availablebalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, String desc, String descType) throws Exception;
/**
* ai交易
@@ -56,7 +56,7 @@
* @param buyAmount
* @return
*/
- Boolean aiAvailableBalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, BigDecimal buyAmount);
+ Boolean aiAvailableBalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount) throws Exception;
/**
* 根据汇率转换金额
diff --git a/src/main/java/com/nq/service/IUserPositionService.java b/src/main/java/com/nq/service/IUserPositionService.java
index a8fea25..b9f0478 100644
--- a/src/main/java/com/nq/service/IUserPositionService.java
+++ b/src/main/java/com/nq/service/IUserPositionService.java
@@ -6,6 +6,7 @@
import com.nq.vo.position.PositionProfitVO;
import com.nq.vo.position.PositionVO;
import com.nq.vo.position.UserPositionVO;
+import org.springframework.web.bind.annotation.RequestParam;
import java.math.BigDecimal;
import java.util.List;
@@ -89,4 +90,6 @@
ServerResponse getDzOrderList(int pageNum, int pageSize, Integer status, HttpServletRequest request);
ServerResponse getMyPositionProfitAndLose(HttpServletRequest request);
+
+ ServerResponse checkDz(Integer id, Integer checkType, Integer orderNum, HttpServletRequest request);
}
diff --git a/src/main/java/com/nq/service/impl/AgentUserServiceImpl.java b/src/main/java/com/nq/service/impl/AgentUserServiceImpl.java
index b7a481a..aef70c8 100644
--- a/src/main/java/com/nq/service/impl/AgentUserServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/AgentUserServiceImpl.java
@@ -462,7 +462,7 @@
}
/*代理账户扣款*/
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse updateAgentAmt(Integer agentId, Integer amt, Integer direction) {
if (agentId == null || amt == null || direction == null) {
return ServerResponse.createByErrorMsg("参数不能为空");
diff --git a/src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java b/src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java
index b95d131..f341b0c 100644
--- a/src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java
+++ b/src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java
@@ -50,7 +50,7 @@
}
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
public ServerResponse examineApplyLever(String id,String states, HttpServletRequest request) {
ApplyLever applyLever = applyLeverMapper.selectById(id);
diff --git a/src/main/java/com/nq/service/impl/DkServices.java b/src/main/java/com/nq/service/impl/DkServices.java
index 3e1f2cf..1cbef2a 100644
--- a/src/main/java/com/nq/service/impl/DkServices.java
+++ b/src/main/java/com/nq/service/impl/DkServices.java
@@ -1,68 +1,210 @@
package com.nq.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.nq.common.ResponseCode;
+import com.nq.common.ServerResponse;
import com.nq.dao.DkJGMapper;
import com.nq.dao.DkMapper;
-import com.nq.pojo.DkJgBean;
-import com.nq.pojo.DkModel;
-import com.nq.pojo.User;
+import com.nq.dao.StockConfigMapper;
+import com.nq.dao.UserMapper;
+import com.nq.enums.EStockType;
+import com.nq.enums.EUserAssets;
+import com.nq.pojo.*;
import com.nq.service.IDkServices;
+import com.nq.service.IUserAssetsServices;
import com.nq.service.IUserService;
import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.vo.dk.DkModelVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
@Service
public class DkServices implements IDkServices {
- @Autowired
- DkMapper dkMapper;
+ private static final Logger log = LoggerFactory.getLogger(DkServices.class);
+ private final ConcurrentHashMap<Long, Object> locks = new ConcurrentHashMap<>();
@Autowired
+ DkMapper dkMapper;
+ @Autowired
DkJGMapper mapper;
+ @Autowired
+ UserMapper userMapper;
+ @Autowired
+ StockConfigMapper stockConfigMapper;
@Autowired
IUserService iUserService;
+ @Autowired
+ IUserAssetsServices iUserAssetsServices;
+
+ /**
+ * 申请贷款
+ * @param dkMoney
+ * @param phone
+ * @param dkjgId
+ * @param request
+ * @return
+ */
@Override
- public boolean addDk(String dkMoney, String phone, String dkjgId, HttpServletRequest request) {
- User user = this.iUserService.getCurrentRefreshUser(request);
- if (user == null) {
- return false;
+ public ServerResponse addDk(BigDecimal dkMoney, String phone, String dkjgId, HttpServletRequest request) {
+ try {
+ User user = this.iUserService.getCurrentRefreshUser(request);
+ if (user == null) {
+ return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录", request);
+ }
+ if (user.getLoanLimit() == null || user.getLoanLimit().compareTo(BigDecimal.ZERO) <= 0) {
+ System.out.println(user.getLoanLimit());
+ return ServerResponse.createByErrorMsg("无贷款额度",request);
+ }
+ if (user.getLoanLimit().compareTo(dkMoney) < 0) {
+ return ServerResponse.createByErrorMsg("最大贷款额度为:" + user.getLoanLimit() ,request);
+ }
+ String userId = String.valueOf(user.getId());
+ //查询是否有未还款记录
+ if (dkMapper.countByUserIdAndRStatus(userId, 0) > 0 ) {
+ return ServerResponse.createByErrorMsg("已申请贷款,请勿重复申请!", request);
+ }
+ DkModel dkModel = new DkModel();
+ dkModel.setDkUserId(userId);
+ dkModel.setCreateTime(new Date());
+ dkModel.setDkMoney(String.valueOf(dkMoney));
+ dkModel.setDkState("0");
+ dkModel.setDkRefundState(0);
+ dkModel.setDkJgId(dkjgId);
+ dkModel.setDkPhone(phone);
+ dkMapper.insert(dkModel);
+ return ServerResponse.createBySuccess("贷款申请成功", request);
+ } catch (Exception e) {
+ log.error("IDkServices addDk error", e);
}
- DkModel dkModel = new DkModel();
- dkModel.setDkUserId(user.getId() + "");
- dkModel.setCreateTime(DateTimeUtil.strToDate(DateTimeUtil.dateToStr(new Date())));
- dkModel.setDkMoney(dkMoney);
- dkModel.setDkState("0");
- dkModel.setDkJgId(dkjgId);
- dkModel.setDkPhone(phone);
- dkMapper.insert(dkModel);
- return true;
+ return ServerResponse.createByError();
}
@Override
- public List<DkModelVo> queryDk() {
- return dkMapper.queryDk();
+ public ServerResponse queryDk(int pageNum, int pageSize) {
+ try {
+ PageHelper.startPage(pageNum,pageSize);
+ List<DkModelVo> dkModelVoList = dkMapper.queryDk();
+ PageInfo<DkModelVo> pageInfo = new PageInfo<>(dkModelVoList);
+ return ServerResponse.createBySuccess(pageInfo);
+ } catch (Exception e) {
+ log.error("IDkServices queryDk error", e);
+ }
+ return ServerResponse.createByError();
}
+ /**
+ * 贷款审核
+ * @param spMoney
+ * @param message
+ * @param state
+ * @param dkId
+ * @return
+ */
@Override
- public boolean dksp(Integer shMoney, String message, Integer state, Integer dkId) {
-
-
- DkModel dkModel = dkMapper.selectById(dkId);
- if (dkModel == null) {
- return false;
+ @Transactional(rollbackFor = Exception.class)
+ public ServerResponse dkSp(BigDecimal spMoney, String message, Integer state, Integer dkId) {
+ try {
+ DkModel dkModel = dkMapper.selectById(dkId);
+ if (dkModel == null) {
+ return ServerResponse.createByErrorMsg("无贷款记录");
+ }
+ String userId = String.valueOf(dkModel.getDkUserId());
+ Object lock = locks.computeIfAbsent(Long.valueOf(userId), k -> new Object());
+ synchronized (lock){
+ User user = userMapper.selectById(Integer.valueOf(userId));
+ if (user == null) {
+ return ServerResponse.createByErrorMsg("无用户信息");
+ }
+ if (state == 1) { //通过
+ if (user.getLoanLimit() == null || user.getLoanLimit().compareTo(BigDecimal.ZERO) <= 0) {
+ return ServerResponse.createByErrorMsg("无贷款额度");
+ }
+ if (user.getLoanLimit().compareTo(spMoney) < 0) {
+ return ServerResponse.createByErrorMsg("审核金额超出贷款额度:" + user.getLoanLimit());
+ }
+ dkModel.setSpMoney(String.valueOf(spMoney));
+ dkModel.setLoanTime(new Date());
+ //扣除用户贷款
+ user.setLoanLimit(user.getLoanLimit().subtract(spMoney));
+ //发放贷款金额 墨西哥账户
+ iUserAssetsServices.aiAvailableBalanceChange(EStockType.MX.getCode(), user.getId(), EUserAssets.DK, spMoney);
+ userMapper.updateById(user);
+ } else if (state == 2) { //拒绝
+ dkModel.setDkMessage(message);
+ }
+ dkModel.setDkState(String.valueOf(state));
+ dkMapper.updateById(dkModel);
+ return ServerResponse.createBySuccess("贷款审核成功");
+ }
+ } catch (Exception e) {
+ log.error("IDkServices dksp error", e);
}
- dkModel.setDkMessage(message);
- dkModel.setDkState(state + "");
- dkModel.setSpMoney(shMoney + "");
- dkMapper.updateById(dkModel);
- return true;
+ return ServerResponse.createByError();
+ }
+
+ /**
+ * 还款
+ * @param id
+ * @param request
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public ServerResponse rtDk(Integer id, HttpServletRequest request) {
+ try {
+ DkModel dkModel = dkMapper.selectById(id);
+ if (dkModel == null) {
+ return ServerResponse.createByErrorMsg("无贷款记录", request);
+ }
+ if (!dkModel.getDkState().equals("1")) {
+ return ServerResponse.createByErrorMsg("未审核通过记录不能还款", request);
+ }
+ String userId = String.valueOf(dkModel.getDkUserId());
+ Object lock = locks.computeIfAbsent(Long.valueOf(userId), k -> new Object());
+ synchronized (lock){
+ User user = userMapper.selectById(Integer.valueOf(userId));
+ if (user == null) {
+ return ServerResponse.createByErrorMsg("无用户信息", request);
+ }
+ UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), user.getId());
+ //应该还款金额
+ BigDecimal amount = new BigDecimal(dkModel.getSpMoney());
+ if(userAssets.getAvailableBalance().compareTo(amount) < 0){
+ return ServerResponse.createByErrorMsg("可用余额不足:" + userAssets.getAvailableBalance(), request);
+ }
+ dkModel.setDkRefundState(1);
+ //查看贷款利息
+ StockConfig stockConfig = stockConfigMapper.selectOne(new QueryWrapper<StockConfig>().eq("c_key", "loan_interest"));
+ if (stockConfig != null) {
+ long day = DateTimeUtil.getDaysRoundedUp(dkModel.getLoanTime());
+ //利息 利率*贷款金额*借款天数
+ BigDecimal intAmount = new BigDecimal(stockConfig.getCValue()).multiply(amount).multiply(BigDecimal.valueOf(day));
+ iUserAssetsServices.aiAvailableBalanceChange(EStockType.MX.getCode(), user.getId(), EUserAssets.RT_DK_INT, intAmount);
+ }
+ //还款
+ iUserAssetsServices.aiAvailableBalanceChange(EStockType.MX.getCode(), user.getId(), EUserAssets.RT_DK, amount);
+ dkMapper.updateById(dkModel);
+ return ServerResponse.createBySuccess("贷款审核成功", request);
+ }
+ } catch (Exception e) {
+ log.error("IDkServices rtDk error", e);
+ }
+ return ServerResponse.createByError();
}
@Override
@@ -70,10 +212,32 @@
return mapper.queryAll();
}
-
- public List<DkModelVo> queryByShUserId(HttpServletRequest httpServletRequest) {
- User user = this.iUserService.getCurrentRefreshUser(httpServletRequest);
- return dkMapper.queryByShUserId(user.getId()+"");
+ /**
+ * 贷款记录
+ * @param pageNum
+ * @param pageSize
+ * @param httpServletRequest
+ * @return
+ */
+ @Override
+ public ServerResponse queryByShUserId(int pageNum, int pageSize, Integer state, HttpServletRequest httpServletRequest) {
+ try {
+ User user = this.iUserService.getCurrentRefreshUser(httpServletRequest);
+ if (user == null) {
+ return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录", httpServletRequest);
+ }
+ PageHelper.startPage(pageNum,pageSize);
+ List<DkModel> dkModelList = dkMapper.selectList(new QueryWrapper<DkModel>()
+ .eq("dk_user_id", String.valueOf(user.getId()))
+ .eq(state != null,"dk_state", state)
+ .orderByDesc("create_time")
+ );
+ PageInfo<DkModel> pageInfo = new PageInfo<>(dkModelList);
+ return ServerResponse.createBySuccess(pageInfo);
+ } catch (Exception e) {
+ log.error("IDkServices queryByShUserId error", e);
+ }
+ return ServerResponse.createByError();
}
@Override
diff --git a/src/main/java/com/nq/service/impl/FundsAppendServiceImpl.java b/src/main/java/com/nq/service/impl/FundsAppendServiceImpl.java
index 3e5123e..7170ac5 100644
--- a/src/main/java/com/nq/service/impl/FundsAppendServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/FundsAppendServiceImpl.java
@@ -65,7 +65,7 @@
/**
* 配资追加申请-保存
*/
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse save(FundsAppend model, HttpServletRequest request) {
int ret = 0;
if(model.getApplyId() == null || model.getApplyId() == 0){
diff --git a/src/main/java/com/nq/service/impl/FundsApplyServiceImpl.java b/src/main/java/com/nq/service/impl/FundsApplyServiceImpl.java
index 42333ad..5c8a692 100644
--- a/src/main/java/com/nq/service/impl/FundsApplyServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/FundsApplyServiceImpl.java
@@ -47,7 +47,7 @@
IFundsSettingService iFundsSettingService;
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse insert(FundsApply model, HttpServletRequest request) throws Exception {
int ret = 0;
if (model == null) {
@@ -121,7 +121,7 @@
/**
* 配资申请-审核
*/
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse audit(FundsApply model, HttpServletRequest request) throws Exception {
return ServerResponse.createByErrorMsg("操作失败");
}
diff --git a/src/main/java/com/nq/service/impl/MandatoryLiquidationService.java b/src/main/java/com/nq/service/impl/MandatoryLiquidationService.java
index c2b0ae0..ae1da48 100644
--- a/src/main/java/com/nq/service/impl/MandatoryLiquidationService.java
+++ b/src/main/java/com/nq/service/impl/MandatoryLiquidationService.java
@@ -21,7 +21,7 @@
@Resource
UserPositionMapper userPositionMapper;
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
public void RealTimeDataProcess(EStockType eStockType, StockRealTimeBean timeBean) {
QueryWrapper<UserPosition> upQuery = new QueryWrapper<>();
diff --git a/src/main/java/com/nq/service/impl/PayServiceImpl.java b/src/main/java/com/nq/service/impl/PayServiceImpl.java
index 28101bf..4a0063a 100644
--- a/src/main/java/com/nq/service/impl/PayServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/PayServiceImpl.java
@@ -391,7 +391,7 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse flyPay(Integer payType, String payAmt, String currency, HttpServletRequest request) {
User user = iUserService.getCurrentUser(request);
SitePay sitePay = sitePayMapper.selectById(payType);
diff --git a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java b/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
index b8d869b..f184062 100644
--- a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
@@ -25,7 +25,6 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
-import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
@Service("iStockAiService")
@@ -74,33 +73,33 @@
* @return
*/
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse buyStockAi(Long id, BigDecimal buyNum, HttpServletRequest request) {
try {
User user = iUserService.getCurrentUser(request);
if (user == null ){
- return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录");
+ return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录", request);
}
Object lock = locks.computeIfAbsent(Long.valueOf(user.getId()), k -> new Object());
synchronized (lock){
SiteProduct siteProduct = iSiteProductService.getProductSetting();
if (siteProduct.getRealNameDisplay() && user.getIsActive() != 2) {
- return ServerResponse.createByErrorMsg("订单失败,请先实名认证");
+ return ServerResponse.createByErrorMsg("订单失败,请先实名认证", request);
}
if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
- return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定");
+ return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定", request);
}
StockAI stockAI = stockAiMapper.selectById(id);
if (stockAI == null) {
- return ServerResponse.createByErrorMsg("订单失败,AI股票不存在");
+ return ServerResponse.createByErrorMsg("订单失败,AI股票不存在", request);
}
if (!stockAI.getStatus().equals(EStockAIStatus.online.getValue())) {
- return ServerResponse.createByErrorMsg("订单失败,AI股票已下架");
+ return ServerResponse.createByErrorMsg("订单失败,AI股票已下架", request);
}
if(buyNum.compareTo(stockAI.getMinPrice()) < 0){
- return ServerResponse.createByErrorMsg("最低购买数量" + stockAI.getMinPrice());
+ return ServerResponse.createByErrorMsg("最低购买数量" + stockAI.getMinPrice(), request);
}
//获取用户账户
UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), user.getId());
@@ -118,17 +117,13 @@
buyNum = iUserAssetsServices.exchangeAmountByRate(buyNum, exchangeRate.getRata());
}*/
if(buyNum.compareTo(userAssets.getAvailableBalance()) > 0){
- return ServerResponse.createByErrorMsg("可用余额不足" + userAssets.getAvailableBalance());
+ return ServerResponse.createByErrorMsg("可用余额不足" + userAssets.getAvailableBalance(), request);
}
if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
- return ServerResponse.createByErrorMsg("请先缴清待补资金");
+ return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
}
-
- Boolean flag = iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), user.getId(), EUserAssets.BUY_AI, buyNum, null);
- if (!flag) {
- return ServerResponse.createByErrorMsg("扣款失败,无法转换货币");
- }
+ iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), user.getId(), EUserAssets.BUY_AI, buyNum);
StockAIOrder stockAIOrder = new StockAIOrder();
stockAIOrder.setUserId(user.getId());
stockAIOrder.setStockAiId(id);
@@ -138,7 +133,7 @@
stockAIOrder.setRealEarning(BigDecimal.valueOf(0));
stockAIOrder.setStatus(EStockAIOrderStatus.wait.getStatus()); //等待审核
stockAiOrderMapper.insert(stockAIOrder);
- return ServerResponse.createBySuccessMsg("下单成功");
+ return ServerResponse.createBySuccessMsg("下单成功", request);
}
} catch (Exception e) {
log.error("StockAiService buyStockAiList {}", e.getMessage());
@@ -159,7 +154,7 @@
try {
User user = iUserService.getCurrentUser(request);
if (user == null ){
- return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录");
+ return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录", request);
}
PageHelper.startPage(pageNum, pageSize);
List<StockAiOrderTypeVO> stockAIOrders = stockAiOrderMapper.getStockAiOrderList(user.getId(), status);
@@ -228,6 +223,7 @@
}
return ServerResponse.createBySuccess("操作成功");
} catch (Exception e) {
+ e.printStackTrace();
log.error(e.getMessage(), e);
}
return ServerResponse.createByError();
@@ -275,7 +271,7 @@
@Override
public ServerResponse openPosition(StockAIOrderPosition model) {
try {
- Object lock = locks.computeIfAbsent(model.getStockAiOrderId(), k -> new Object());
+ Object lock = locks.computeIfAbsent(Long.valueOf(model.getStockAiOrderId()), k -> new Object());
synchronized (lock) {
StockAIOrder stockAIOrder = stockAiOrderMapper.selectById(model.getStockAiOrderId());
if (stockAIOrder == null) {
@@ -310,6 +306,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse orderOperation(Long id, String status) {
try {
Object lock = locks.computeIfAbsent(id, k -> new Object());
@@ -331,21 +328,7 @@
StockAI stockAI = stockAiMapper.selectById(stockAIOrder.getStockAiId());
//买入金额
BigDecimal buyNum = stockAIOrder.getBuyAmount();
- /*//如果不是墨西哥币需要转换金额
- if (!stockAI.getStockType().equals(EStockType.MX.getCode())) {
- EStockType stockType = EStockType.getEStockTypeByCode(stockAI.getStockType());
- ExchangeRate exchangeRate = exchangeRateRepository.findExchangeRateByCurrencyAndConversionCurrency(stockType.getSymbol(), EStockType.MX.getSymbol())
- .orElse(null);
- if (exchangeRate == null) {
- return ServerResponse.createByErrorMsg("请先设置当前货币汇率");
- }
- //转换为墨西哥币
- buyNum = iUserAssetsServices.exchangeAmountByRate(buyNum, exchangeRate.getRata());
- }*/
- Boolean flag = iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), stockAIOrder.getUserId(), EUserAssets.BUY_AI_REJECT, buyNum, null);
- if (!flag) {
- return ServerResponse.createByErrorMsg("扣款失败,无法转换货币");
- }
+ iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), stockAIOrder.getUserId(), EUserAssets.BUY_AI_REJECT, buyNum);
} else if (status.equals(EStockAIOrderStatus.finished.getStatus())) {
if (!stockAIOrder.getStatus().equals(EStockAIOrderStatus.passed.getStatus())) {
return ServerResponse.createByErrorMsg("只能结算申请通过订单");
@@ -366,26 +349,10 @@
amount = amount.add(earningsSUM);
}*/
StockAI stockAI = stockAiMapper.selectById(stockAIOrder.getStockAiId());
- //收益+本金
- BigDecimal amount = stockAIOrder.getBuyAmount().add(stockAIOrder.getRealEarning());
- //需要解冻金额
- BigDecimal buyAmount = stockAIOrder.getBuyAmount();
- /*//如果不是墨西哥币需要转换金额
- if (!stockAI.getStockType().equals(EStockType.MX.getCode())) {
- EStockType stockType = EStockType.getEStockTypeByCode(stockAI.getStockType());
- ExchangeRate exchangeRate = exchangeRateRepository.findExchangeRateByCurrencyAndConversionCurrency(stockType.getSymbol(), EStockType.MX.getSymbol())
- .orElse(null);
- if (exchangeRate == null) {
- return ServerResponse.createByErrorMsg("请先设置当前货币汇率");
- }
- //转换为墨西哥币
- amount = iUserAssetsServices.exchangeAmountByRate(amount, exchangeRate.getRata());
- buyAmount = iUserAssetsServices.exchangeAmountByRate(buyAmount, exchangeRate.getRata());
- }*/
- Boolean flag = iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), stockAIOrder.getUserId(), EUserAssets.AI_SETTLEMENT, amount, buyAmount);
- if (!flag) {
- return ServerResponse.createByErrorMsg("扣款失败,无法转换货币");
- }
+ //归还本金
+ iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), stockAIOrder.getUserId(), EUserAssets.AI_SETTLEMENT, stockAIOrder.getBuyAmount());
+ //收益
+ iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), stockAIOrder.getUserId(), EUserAssets.AI_SETTLEMENT_INT, stockAIOrder.getRealEarning());
}
stockAIOrder.setStatus(status);
stockAIOrder.setAuditDate(new Date());
diff --git a/src/main/java/com/nq/service/impl/StockServiceImpl.java b/src/main/java/com/nq/service/impl/StockServiceImpl.java
index e8e7785..c9d16a6 100644
--- a/src/main/java/com/nq/service/impl/StockServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockServiceImpl.java
@@ -23,6 +23,7 @@
import com.nq.utils.stock.qq.QqStockApi;
import com.nq.utils.stock.sina.StockApi;
import com.nq.vo.stock.*;
+import com.nq.vo.stock.ai.StockAiOrderVO;
import com.nq.vo.stock.k.MinDataVO;
import com.nq.vo.stock.k.echarts.EchartsDataVO;
@@ -817,4 +818,30 @@
}
return ServerResponse.createByError();
}
+
+ /**
+ * 搜索
+ * @param pageNum
+ * @param pageSize
+ * @param keyWords
+ * @return
+ */
+ @Override
+ public ServerResponse getStocksByKeyWords(int pageNum, int pageSize, String keyWords) {
+
+ try {
+ PageHelper.startPage(pageNum, pageSize);
+ List<StockVOQuery> stocks = stockMapper.findStocksQuery(keyWords);
+ // 获取分页信息
+ PageInfo<StockVOQuery> pageInfo = new PageInfo<>(stocks);
+
+ /*if (!pageInfo.getList().isEmpty()) {
+
+ }*/
+ return ServerResponse.createBySuccess(pageInfo);
+ } catch (Exception e) {
+ log.error("StockAiService getStocksByKeyWords error", e);
+ }
+ return ServerResponse.createByError();
+ }
}
diff --git a/src/main/java/com/nq/service/impl/UserAssetsServices.java b/src/main/java/com/nq/service/impl/UserAssetsServices.java
index 9f3b275..45143b5 100644
--- a/src/main/java/com/nq/service/impl/UserAssetsServices.java
+++ b/src/main/java/com/nq/service/impl/UserAssetsServices.java
@@ -176,7 +176,7 @@
@Override
- public Boolean availablebalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, String desc, String descType) {
+ public Boolean availablebalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, String desc, String descType) throws Exception {
//UserAssets userAssets = assetsByTypeAndUserId(accetType,userId);
//查询墨西哥账户
UserAssets userAssets = assetsByTypeAndUserId(EStockType.MX.getCode(), userId);
@@ -188,6 +188,9 @@
if (exchangeRate != null) {
//转换为墨西哥币
amount = exchangeAmountByRate(amount, exchangeRate.getRata());
+ } else {
+ log.error("availablebalanceChange ExchangeRate is null:{}>>{}", stockType.getSymbol(), EStockType.MX.getSymbol());
+ throw new Exception("货币转换汇率未设置");
}
}
UserPosition userPosition = userPositionMapper.selectOne(new LambdaQueryWrapper<UserPosition>().gt(UserPosition::getAmountToBeCovered, BigDecimal.ZERO).eq(UserPosition::getUserId,userAssets.getUserId()));
@@ -310,7 +313,7 @@
}
- public Boolean aiAvailableBalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, BigDecimal buyAmount) {
+ public Boolean aiAvailableBalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount) throws Exception {
//查询墨西哥账户
UserAssets userAssets = assetsByTypeAndUserId(EStockType.MX.getCode(), userId);
//如果不是墨西哥币需要转换金额
@@ -321,9 +324,9 @@
if (exchangeRate != null) {
//转换为墨西哥币
amount = exchangeAmountByRate(amount, exchangeRate.getRata());
- buyAmount = exchangeAmountByRate(buyAmount, exchangeRate.getRata());
} else {
- return false;
+ log.error("ExchangeRate is null:{}>>{}", stockType.getSymbol(), EStockType.MX.getSymbol());
+ throw new Exception("货币转换汇率未设置");
}
}
String before = userAssets.getAvailableBalance().toString();
@@ -339,10 +342,23 @@
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
} else if (eUserAssets.getCode().equals(EUserAssets.AI_SETTLEMENT.getCode())) {
//解除购买冻结金额
- userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(buyAmount.negate()));
- //归还可用金额(购买金额+收益)
+ userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(amount.negate()));
+ //归还购买金额
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
+ } else if (eUserAssets.getCode().equals(EUserAssets.AI_SETTLEMENT_INT.getCode())) {
+ //收益
+ userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
+ } else if(eUserAssets.getCode().equals(EUserAssets.DK.getCode())) {
+ //发放贷款金额
+ userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
+ } else if(eUserAssets.getCode().equals(EUserAssets.RT_DK.getCode())) {
+ //归还贷款
+ userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount.negate()));
+ } else if(eUserAssets.getCode().equals(EUserAssets.RT_DK_INT.getCode())) {
+ //贷款利息
+ userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount.negate()));
}
+
String after = userAssets.getAvailableBalance().toString();
MoneyLog moneyLog = new MoneyLog();
moneyLog.setDescs(eUserAssets.getDesc());
diff --git a/src/main/java/com/nq/service/impl/UserFundsPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserFundsPositionServiceImpl.java
index 601ff43..9c21ce1 100644
--- a/src/main/java/com/nq/service/impl/UserFundsPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserFundsPositionServiceImpl.java
@@ -121,7 +121,7 @@
/**
* 分仓交易-入仓
*/
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse buyFunds(Integer stockId, Integer buyNum, Integer buyType, Integer lever, Integer subaccountNumber, HttpServletRequest request) throws Exception {
return ServerResponse.createBySuccess("Order successful");
}
@@ -129,7 +129,7 @@
/*
* 分仓交易-用户平仓操作
* */
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse sellFunds(String positionSn, int doType) throws Exception {
log.info("【用户交易平仓】 positionSn = {} , dotype = {}", positionSn, Integer.valueOf(doType));
diff --git a/src/main/java/com/nq/service/impl/UserFuturesPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserFuturesPositionServiceImpl.java
index c284ae1..37aef16 100644
--- a/src/main/java/com/nq/service/impl/UserFuturesPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserFuturesPositionServiceImpl.java
@@ -65,7 +65,7 @@
@Autowired
ISiteProductService iSiteProductService;
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse buyFutures(Integer futuresId, Integer buyNum, Integer buyType, Integer lever, HttpServletRequest request) throws Exception {
diff --git a/src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java
index 1001fdf..b3bd5d6 100644
--- a/src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserIndexPositionServiceImpl.java
@@ -68,7 +68,7 @@
@Autowired
CurrencyUtils currencyUtils;
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse buyIndex(Integer indexId, Integer buyNum, Integer buyType, Integer lever,BigDecimal profitTarget,BigDecimal stopTarget, HttpServletRequest request) throws Exception {
@@ -85,7 +85,7 @@
* @return
* @throws Exception
*/
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse buyIndexOrder(Integer indexId, Integer buyNum, Integer buyType, Integer lever,BigDecimal profitTarget,BigDecimal stopTarget,Integer userId) throws Exception {
if (indexId == null || buyNum == null || buyType == null) {
return ServerResponse.createByErrorMsg("参数不能为空");
@@ -244,7 +244,7 @@
return ServerResponse.createByErrorMsg("删除失败");
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse sellIndex(String positionSn, int doType) throws Exception {
log.info("【用户交易平仓指数】 positionSn = {} , dotype = {}", positionSn, Integer.valueOf(doType));
return ServerResponse.createBySuccessMsg("Closed position successfully!");
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index 1505101..1be8727 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -16,11 +16,9 @@
import com.google.common.collect.Lists;
import com.nq.common.ServerResponse;
import com.nq.utils.*;
-import com.nq.utils.redis.RedisKeyUtil;
import com.nq.utils.stock.BuyAndSellUtils;
import com.nq.utils.stock.GeneratePosition;
import com.nq.utils.stock.GetStayDays;
-import com.nq.utils.stock.pinyin.GetPyByChinese;
import com.nq.utils.stock.sina.StockApi;
import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.vo.agent.AgentIncomeVO;
@@ -30,7 +28,6 @@
import com.nq.vo.position.PositionVO;
import com.nq.vo.position.UserPositionVO;
import com.nq.vo.stock.StockListVO;
-import com.nq.vo.stock.ai.StockAiOrderTypeVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@@ -43,9 +40,6 @@
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -135,112 +129,116 @@
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse buy(Integer stockId, Integer buyNum, Integer buyType, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, HttpServletRequest request) {
SiteProduct siteProduct = iSiteProductService.getProductSetting();
User user = this.iUserService.getCurrentRefreshUser(request);
- synchronized (user.getId()){
- if (siteProduct.getRealNameDisplay() && user.getIsActive() != 2) {
- return ServerResponse.createByErrorMsg("订单失败,请先实名认证", request);
- }
- // 手续费率
- BigDecimal siteSettingBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.BUY_HANDLING_CHARGE.getCode()).getCValue()) ;
+ try {
+ synchronized (user.getId()){
+ if (siteProduct.getRealNameDisplay() && user.getIsActive() != 2) {
+ return ServerResponse.createByErrorMsg("订单失败,请先实名认证", request);
+ }
+ // 手续费率
+ BigDecimal siteSettingBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.BUY_HANDLING_CHARGE.getCode()).getCValue()) ;
- if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
- return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定", request);
- }
+ if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
+ return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定", request);
+ }
- Stock stock = stockMapper.selectByPrimaryKey(stockId);
- if (stock == null) {
- return ServerResponse.createByErrorMsg("订单失败,股票代码不存在", request);
- }
- //判断股票是否在可交易时间段
- Boolean b = tradingHourService.timeCheck(stock.getStockCode(), stock.getStockType());
- if (!b) {
- return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内", request);
- }
+ Stock stock = stockMapper.selectByPrimaryKey(stockId);
+ if (stock == null) {
+ return ServerResponse.createByErrorMsg("订单失败,股票代码不存在", request);
+ }
+ //判断股票是否在可交易时间段
+ Boolean b = tradingHourService.timeCheck(stock.getStockCode(), stock.getStockType());
+ if (!b) {
+ return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内", request);
+ }
- StockConfig mainBuyConfig = iStockConfigServices.queryByKey(EConfigKey.MIN_BUY.getCode());
+ StockConfig mainBuyConfig = iStockConfigServices.queryByKey(EConfigKey.MIN_BUY.getCode());
- if(buyNum<Integer.parseInt(mainBuyConfig.getCValue())){
- return ServerResponse.createByErrorMsg("最低购买数量"+mainBuyConfig.getCValue(), request);
- }
+ if(buyNum<Integer.parseInt(mainBuyConfig.getCValue())){
+ return ServerResponse.createByErrorMsg("最低购买数量"+mainBuyConfig.getCValue(), request);
+ }
- UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(stock.getStockType(), user.getId());
- StockConfig maxBuyConfig = iStockConfigServices.queryByKey(EConfigKey.MAX_BUY.getCode());
- if(buyNum<Integer.parseInt(mainBuyConfig.getCValue())){
- return ServerResponse.createByErrorMsg("最高购买数量"+maxBuyConfig.getCValue(), request);
- }
- if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
- return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
- }
- if (stock.getIsLock() != 0) {
- return ServerResponse.createByErrorMsg("订单失败,股票被锁定", request);
- }
+ UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(stock.getStockType(), user.getId());
+ StockConfig maxBuyConfig = iStockConfigServices.queryByKey(EConfigKey.MAX_BUY.getCode());
+ if(buyNum<Integer.parseInt(mainBuyConfig.getCValue())){
+ return ServerResponse.createByErrorMsg("最高购买数量"+maxBuyConfig.getCValue(), request);
+ }
+ if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
+ return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
+ }
+ if (stock.getIsLock() != 0) {
+ return ServerResponse.createByErrorMsg("订单失败,股票被锁定", request);
+ }
- if (!priceServices.isLimitUpBuy(stock.getStockCode())) {
- return ServerResponse.createByErrorMsg("暂无配额", request);
- }
+ if (!priceServices.isLimitUpBuy(stock.getStockCode())) {
+ return ServerResponse.createByErrorMsg("暂无配额", request);
+ }
- //股票类型 现价 数据源的处理
- BigDecimal nowPrice = priceServices.getNowPrice(stock.getStockCode());
+ //股票类型 现价 数据源的处理
+ BigDecimal nowPrice = priceServices.getNowPrice(stock.getStockCode());
- if (nowPrice.compareTo(new BigDecimal("0")) == 0) {
- return ServerResponse.createByErrorMsg("报价0,请稍后再试", request);
- }
+ if (nowPrice.compareTo(new BigDecimal("0")) == 0) {
+ return ServerResponse.createByErrorMsg("报价0,请稍后再试", request);
+ }
- BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever));
- BigDecimal orderFree = siteSettingBuyFee.multiply(buyAmt);
+ BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever));
+ BigDecimal orderFree = siteSettingBuyFee.multiply(buyAmt);
- BigDecimal fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100));
- BigDecimal availableBalance = fundratio.multiply(userAssets.getAvailableBalance());
- if (availableBalance.compareTo(buyAmt.add(orderFree)) < 0) {
- return ServerResponse.createByErrorMsg("订单失败,配资不足", request);
- }
- UserPosition userPosition = new UserPosition();
- if (profitTarget != null && profitTarget.compareTo(new BigDecimal("0")) > 0) {
- userPosition.setProfitTargetPrice(profitTarget);
- }
- if (stopTarget != null && stopTarget.compareTo(new BigDecimal("0")) > 0) {
- userPosition.setStopTargetPrice(stopTarget);
- }
- userPosition.setPositionType(user.getAccountType());
- userPosition.setPositionSn(KeyUtils.getUniqueKey());
- userPosition.setUserId(user.getId());
- userPosition.setNickName(user.getRealName());
- userPosition.setAgentId(user.getAgentId());
- userPosition.setStockCode(stock.getStockCode());
- userPosition.setStockName(stock.getStockName());
- userPosition.setStockGid(stock.getStockType());
- userPosition.setStockSpell(stock.getStockSpell());
- userPosition.setBuyOrderId(GeneratePosition.getPositionId());
- userPosition.setBuyOrderTime(new Date());
- userPosition.setBuyOrderPrice(nowPrice);
- userPosition.setOrderDirection((buyType.intValue() == 0) ? "买涨" : "买跌");
- userPosition.setOrderNum(buyNum);
- if (stock.getStockPlate() != null) {
- userPosition.setStockPlate(stock.getStockPlate());
- }
- userPosition.setIsLock(Integer.valueOf(0));
- userPosition.setOrderLever(lever);
- userPosition.setOrderTotalPrice(buyAmt);
- // 手续费
+ BigDecimal fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100));
+ BigDecimal availableBalance = fundratio.multiply(userAssets.getAvailableBalance());
+ if (availableBalance.compareTo(buyAmt.add(orderFree)) < 0) {
+ return ServerResponse.createByErrorMsg("订单失败,配资不足", request);
+ }
+ UserPosition userPosition = new UserPosition();
+ if (profitTarget != null && profitTarget.compareTo(new BigDecimal("0")) > 0) {
+ userPosition.setProfitTargetPrice(profitTarget);
+ }
+ if (stopTarget != null && stopTarget.compareTo(new BigDecimal("0")) > 0) {
+ userPosition.setStopTargetPrice(stopTarget);
+ }
+ userPosition.setPositionType(user.getAccountType());
+ userPosition.setPositionSn(KeyUtils.getUniqueKey());
+ userPosition.setUserId(user.getId());
+ userPosition.setNickName(user.getRealName());
+ userPosition.setAgentId(user.getAgentId());
+ userPosition.setStockCode(stock.getStockCode());
+ userPosition.setStockName(stock.getStockName());
+ userPosition.setStockGid(stock.getStockType());
+ userPosition.setStockSpell(stock.getStockSpell());
+ userPosition.setBuyOrderId(GeneratePosition.getPositionId());
+ userPosition.setBuyOrderTime(new Date());
+ userPosition.setBuyOrderPrice(nowPrice);
+ userPosition.setOrderDirection((buyType.intValue() == 0) ? "买涨" : "买跌");
+ userPosition.setOrderNum(buyNum);
+ if (stock.getStockPlate() != null) {
+ userPosition.setStockPlate(stock.getStockPlate());
+ }
+ userPosition.setIsLock(Integer.valueOf(0));
+ userPosition.setOrderLever(lever);
+ userPosition.setOrderTotalPrice(buyAmt);
+ // 手续费
- userPosition.setOrderFee(orderFree);
- userPosition.setOrderSpread(BigDecimal.ZERO);
- userPosition.setSpreadRatePrice(BigDecimal.ZERO);
- BigDecimal profit_and_lose = new BigDecimal("0");
- userPosition.setProfitAndLose(profit_and_lose);
- userPosition.setAllProfitAndLose(profit_and_lose.add(orderFree));
- userPosition.setOrderStayDays(Integer.valueOf(0));
- userPosition.setOrderStayFee(BigDecimal.ZERO);
- userPositionMapper.insert(userPosition);
- iUserAssetsServices.availablebalanceChange(stock.getStockType(), user.getId(), EUserAssets.BUY, buyAmt.negate(), "", "");
- iUserAssetsServices.availablebalanceChange(stock.getStockType(), user.getId(), EUserAssets.HANDLING_CHARGE, orderFree, "", "");
- return ServerResponse.createBySuccessMsg("下单成功", request);
+ userPosition.setOrderFee(orderFree);
+ userPosition.setOrderSpread(BigDecimal.ZERO);
+ userPosition.setSpreadRatePrice(BigDecimal.ZERO);
+ BigDecimal profit_and_lose = new BigDecimal("0");
+ userPosition.setProfitAndLose(profit_and_lose);
+ userPosition.setAllProfitAndLose(profit_and_lose.add(orderFree));
+ userPosition.setOrderStayDays(Integer.valueOf(0));
+ userPosition.setOrderStayFee(BigDecimal.ZERO);
+ userPositionMapper.insert(userPosition);
+ iUserAssetsServices.availablebalanceChange(stock.getStockType(), user.getId(), EUserAssets.BUY, buyAmt.negate(), "", "");
+ iUserAssetsServices.availablebalanceChange(stock.getStockType(), user.getId(), EUserAssets.HANDLING_CHARGE, orderFree, "", "");
+ return ServerResponse.createBySuccessMsg("下单成功", request);
+ }
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
}
}
@@ -287,61 +285,65 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse sell(String positionSn, int doType) {
- UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
- if (userPosition == null) {
- return ServerResponse.createByErrorMsg("平仓失败,订单不存在");
- }
- BigDecimal siitteBuyFee = iSiteSettingService.getSiteSetting().getBuyFee();
- Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
- if(null == stock){
- return ServerResponse.createByErrorMsg("股票不存在,平仓失败");
- }
- Boolean b = tradingHourService.timeCheck(userPosition.getStockCode(), stock.getStockType());
- if (!b) {
- return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内");
- }
- User user = this.userMapper.selectById(userPosition.getUserId());
- if (user == null) {
- return ServerResponse.createByErrorMsg("平仓失败,用户不存在");
- }
- if (user.getIsLock() == 1) {
- return ServerResponse.createByErrorMsg("账户已被限制交易");
- }
- if (userPosition.getSellOrderId() != null) {
- return ServerResponse.createByErrorMsg("平仓失败, 订单已平仓");
- }
- if (1 == userPosition.getIsLock().intValue()) {
- return ServerResponse.createByErrorMsg("this order is closed " + userPosition.getLockMsg());
- }
- //Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
- BigDecimal nowPrice = priceServices.getNowPrice(userPosition.getStockCode());
- if (nowPrice.compareTo(new BigDecimal("0")) != 1) {
- return ServerResponse.createByErrorMsg("报价0,平仓失败,请稍后再试");
- }
- userPosition.setSellOrderId(GeneratePosition.getPositionId());
- userPosition.setSellOrderPrice(nowPrice);
- userPosition.setSellOrderTime(new Date());
+ try {
+ UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
+ if (userPosition == null) {
+ return ServerResponse.createByErrorMsg("平仓失败,订单不存在");
+ }
+ BigDecimal siitteBuyFee = iSiteSettingService.getSiteSetting().getBuyFee();
+ Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
+ if(null == stock){
+ return ServerResponse.createByErrorMsg("股票不存在,平仓失败");
+ }
+ Boolean b = tradingHourService.timeCheck(userPosition.getStockCode(), stock.getStockType());
+ if (!b) {
+ return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内");
+ }
+ User user = this.userMapper.selectById(userPosition.getUserId());
+ if (user == null) {
+ return ServerResponse.createByErrorMsg("平仓失败,用户不存在");
+ }
+ if (user.getIsLock() == 1) {
+ return ServerResponse.createByErrorMsg("账户已被限制交易");
+ }
+ if (userPosition.getSellOrderId() != null) {
+ return ServerResponse.createByErrorMsg("平仓失败, 订单已平仓");
+ }
+ if (1 == userPosition.getIsLock().intValue()) {
+ return ServerResponse.createByErrorMsg("this order is closed " + userPosition.getLockMsg());
+ }
+ //Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
+ BigDecimal nowPrice = priceServices.getNowPrice(userPosition.getStockCode());
+ if (nowPrice.compareTo(new BigDecimal("0")) != 1) {
+ return ServerResponse.createByErrorMsg("报价0,平仓失败,请稍后再试");
+ }
+ userPosition.setSellOrderId(GeneratePosition.getPositionId());
+ userPosition.setSellOrderPrice(nowPrice);
+ userPosition.setSellOrderTime(new Date());
- BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(userPosition.getOrderNum()));
- BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);
- userPositionMapper.updateById(userPosition);
- userAssetsServices.availablebalanceChange(stock.getStockType(),
- userPosition.getUserId(), EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT,
- userPosition.getOrderTotalPrice(), "", "");
- userAssetsServices.availablebalanceChange(stock.getStockType(),
- userPosition.getUserId(), EUserAssets.HANDLING_CHARGE,
- xsPrice, "", "");
+ BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(userPosition.getOrderNum()));
+ BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);
+ userPositionMapper.updateById(userPosition);
+ userAssetsServices.availablebalanceChange(stock.getStockType(),
+ userPosition.getUserId(), EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT,
+ userPosition.getOrderTotalPrice(), "", "");
+ userAssetsServices.availablebalanceChange(stock.getStockType(),
+ userPosition.getUserId(), EUserAssets.HANDLING_CHARGE,
+ xsPrice, "", "");
- PositionProfitVO profitVO = UserPointUtil.getPositionProfitVO(userPosition, priceServices.getNowPrice(userPosition.getStockCode()));
- userAssetsServices.availablebalanceChange(stock.getStockType(), userPosition.getUserId(), EUserAssets.CLOSE_POSITION,
- profitVO.getAllProfitAndLose(), "", "");
- return ServerResponse.createBySuccessMsg("平仓成功!");
+ PositionProfitVO profitVO = UserPointUtil.getPositionProfitVO(userPosition, priceServices.getNowPrice(userPosition.getStockCode()));
+ userAssetsServices.availablebalanceChange(stock.getStockType(), userPosition.getUserId(), EUserAssets.CLOSE_POSITION,
+ profitVO.getAllProfitAndLose(), "", "");
+ return ServerResponse.createBySuccessMsg("平仓成功!");
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
+ }
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse sell(String positionSn, int doType, Integer number,HttpServletRequest request) {
UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
if (userPosition == null) {
@@ -434,32 +436,36 @@
}
private ServerResponse<Object> getObjectServerResponse(HttpServletRequest request, UserPosition userPosition, BigDecimal nowPrice, BigDecimal siitteBuyFee, Stock stock) {
- userPosition.setSellOrderId(GeneratePosition.getPositionId());
- userPosition.setSellOrderPrice(nowPrice);
- userPosition.setSellOrderTime(new Date());
+ try {
+ userPosition.setSellOrderId(GeneratePosition.getPositionId());
+ userPosition.setSellOrderPrice(nowPrice);
+ userPosition.setSellOrderTime(new Date());
- BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(userPosition.getOrderNum()));
- BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);
- userPosition.setOrderFee(userPosition.getOrderFee().add(xsPrice));
- userPositionMapper.updateById(userPosition);
- userAssetsServices.availablebalanceChange(stock.getStockType(),
- userPosition.getUserId(),
- EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT,
- userPosition.getOrderTotalPrice(), "", "");
- userAssetsServices.availablebalanceChange(stock.getStockType(),
- userPosition.getUserId(), EUserAssets.HANDLING_CHARGE,
- xsPrice, "", "");
+ BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(userPosition.getOrderNum()));
+ BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);
+ userPosition.setOrderFee(userPosition.getOrderFee().add(xsPrice));
+ userPositionMapper.updateById(userPosition);
+ userAssetsServices.availablebalanceChange(stock.getStockType(),
+ userPosition.getUserId(),
+ EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT,
+ userPosition.getOrderTotalPrice(), "", "");
+ userAssetsServices.availablebalanceChange(stock.getStockType(),
+ userPosition.getUserId(), EUserAssets.HANDLING_CHARGE,
+ xsPrice, "", "");
- PositionProfitVO profitVO = UserPointUtil.getPositionProfitVO(userPosition,
- priceServices.getNowPrice(userPosition.getStockCode()));
+ PositionProfitVO profitVO = UserPointUtil.getPositionProfitVO(userPosition,
+ priceServices.getNowPrice(userPosition.getStockCode()));
- userAssetsServices.availablebalanceChange(stock.getStockType(),
- userPosition.getUserId(), EUserAssets.CLOSE_POSITION,
- profitVO.getAllProfitAndLose(), "", "");
- return ServerResponse.createBySuccessMsg("平仓成功!", request);
+ userAssetsServices.availablebalanceChange(stock.getStockType(),
+ userPosition.getUserId(), EUserAssets.CLOSE_POSITION,
+ profitVO.getAllProfitAndLose(), "", "");
+ return ServerResponse.createBySuccessMsg("平仓成功!", request);
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
+ }
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
public ServerResponse allSell(HttpServletRequest request, String stockType) throws Exception {
//判断股票是否在可交易时间段
@@ -1132,7 +1138,7 @@
}
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse closingStayTask(UserPosition position, Integer stayDays) throws Exception {
log.info("=================closingStayTask====================");
log.info("修改留仓费,持仓id={},持仓天数={}", position.getId(), stayDays);
@@ -1309,114 +1315,119 @@
* @Date: 2022/10/26
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse newStockToPosition(Integer id,BigDecimal amountToBeCovered) {
- UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
- if (userStockSubscribe == null) {
- return ServerResponse.createByErrorMsg("无该申购记录");
- }
- StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>().eq("newlist_id", userStockSubscribe.getNewStockId()));
- if (stockSubscribe == null) {
- return ServerResponse.createByErrorMsg("该新股不存在");
- }
+ try {
+ UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
+ if (userStockSubscribe == null) {
+ return ServerResponse.createByErrorMsg("无该申购记录");
+ }
+ StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>().eq("newlist_id", userStockSubscribe.getNewStockId()));
+ if (stockSubscribe == null) {
+ return ServerResponse.createByErrorMsg("该新股不存在");
+ }
- Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, userStockSubscribe.getNewCode()));
- String stockType;
- UserPosition userPosition = new UserPosition();
+ Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, userStockSubscribe.getNewCode()));
+ String stockType;
+ UserPosition userPosition = new UserPosition();
- if(null == stock){
- userPosition.setStockCode(stockSubscribe.getCode());
- userPosition.setStockSpell(stockSubscribe.getName());
- stockType = stockSubscribe.getStockType();
- }else{
- userPosition.setStockCode(stock.getStockCode());
- userPosition.setStockSpell(stock.getStockSpell());
- stockType = stock.getStockType();
- }
+ if(null == stock){
+ userPosition.setStockCode(stockSubscribe.getCode());
+ userPosition.setStockSpell(stockSubscribe.getName());
+ stockType = stockSubscribe.getStockType();
+ }else{
+ userPosition.setStockCode(stock.getStockCode());
+ userPosition.setStockSpell(stock.getStockSpell());
+ stockType = stock.getStockType();
+ }
- userPosition.setPositionType(1);
- userPosition.setPositionSn(KeyUtils.getUniqueKey());
- userPosition.setUserId(userStockSubscribe.getUserId());
- userPosition.setNickName(userStockSubscribe.getRealName());
- userPosition.setAgentId(userStockSubscribe.getAgentId());
+ userPosition.setPositionType(1);
+ userPosition.setPositionSn(KeyUtils.getUniqueKey());
+ userPosition.setUserId(userStockSubscribe.getUserId());
+ userPosition.setNickName(userStockSubscribe.getRealName());
+ userPosition.setAgentId(userStockSubscribe.getAgentId());
- userPosition.setStockName(userStockSubscribe.getNewName());
+ userPosition.setStockName(userStockSubscribe.getNewName());
// StringBuffer gid = new StringBuffer();
// gid.append(stockSubscribe.getStockType()!=null?stockSubscribe.getStockType():"");
// gid.append(userStockSubscribe.getNewCode()!=null?userStockSubscribe.getNewCode():"stock code invaild");
- userPosition.setStockGid(stockType);
- userPosition.setBuyOrderId(GeneratePosition.getPositionId());
- userPosition.setBuyOrderTime(new Date());
- userPosition.setBuyOrderPrice(userStockSubscribe.getBuyPrice());
- userPosition.setOrderDirection("买涨");
+ userPosition.setStockGid(stockType);
+ userPosition.setBuyOrderId(GeneratePosition.getPositionId());
+ userPosition.setBuyOrderTime(new Date());
+ userPosition.setBuyOrderPrice(userStockSubscribe.getBuyPrice());
+ userPosition.setOrderDirection("买涨");
- userPosition.setOrderNum(userStockSubscribe.getApplyNumber());
+ userPosition.setOrderNum(userStockSubscribe.getApplyNumber());
- userPosition.setIsLock(Integer.valueOf(0));
+ userPosition.setIsLock(Integer.valueOf(0));
- userPosition.setOrderLever(1);
+ userPosition.setOrderLever(1);
- //递延费特殊处理
- // BigDecimal stayFee = userPosition.getOrderTotalPrice().multiply(siteSetting.getStayFee());
- BigDecimal stayFee = new BigDecimal(0);
- BigDecimal allStayFee = stayFee.multiply(new BigDecimal(1));
- userPosition.setOrderStayFee(allStayFee);
- userPosition.setOrderStayDays(1);
- userPosition.setOrderTotalPrice(userStockSubscribe.getBond());
+ //递延费特殊处理
+ // BigDecimal stayFee = userPosition.getOrderTotalPrice().multiply(siteSetting.getStayFee());
+ BigDecimal stayFee = new BigDecimal(0);
+ BigDecimal allStayFee = stayFee.multiply(new BigDecimal(1));
+ userPosition.setOrderStayFee(allStayFee);
+ userPosition.setOrderStayDays(1);
+ userPosition.setOrderTotalPrice(userStockSubscribe.getBond());
- // BigDecimal buy_fee_amt = buy_amt.multiply(siteSetting.getBuyFee()).setScale(2, 4);
- // 手续费率
- BigDecimal siteSettingBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.BUY_HANDLING_CHARGE.getCode()).getCValue()) ;
- BigDecimal buy_fee_amt = siteSettingBuyFee.multiply(userStockSubscribe.getBond());
- log.info("用户购买手续费(配资后总资金 * 百分比) = {}", buy_fee_amt);
- userPosition.setOrderFee(buy_fee_amt);
+ // BigDecimal buy_fee_amt = buy_amt.multiply(siteSetting.getBuyFee()).setScale(2, 4);
+ // 手续费率
+ BigDecimal siteSettingBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.BUY_HANDLING_CHARGE.getCode()).getCValue()) ;
+ BigDecimal buy_fee_amt = siteSettingBuyFee.multiply(userStockSubscribe.getBond());
+ log.info("用户购买手续费(配资后总资金 * 百分比) = {}", buy_fee_amt);
+ userPosition.setOrderFee(buy_fee_amt);
- // BigDecimal buy_yhs_amt = buy_amt.multiply(siteSetting.getDutyFee()).setScale(2, 4);
- BigDecimal buy_yhs_amt = new BigDecimal(0);
- log.info("用户购买印花税(配资后总资金 * 百分比) = {}", buy_yhs_amt);
- userPosition.setOrderSpread(buy_yhs_amt);
+ // BigDecimal buy_yhs_amt = buy_amt.multiply(siteSetting.getDutyFee()).setScale(2, 4);
+ BigDecimal buy_yhs_amt = new BigDecimal(0);
+ log.info("用户购买印花税(配资后总资金 * 百分比) = {}", buy_yhs_amt);
+ userPosition.setOrderSpread(buy_yhs_amt);
- BigDecimal spread_rate_amt = new BigDecimal(0);
- userPosition.setSpreadRatePrice(spread_rate_amt);
+ BigDecimal spread_rate_amt = new BigDecimal(0);
+ userPosition.setSpreadRatePrice(spread_rate_amt);
- BigDecimal profit_and_lose = new BigDecimal("0");
- userPosition.setProfitAndLose(profit_and_lose);
+ BigDecimal profit_and_lose = new BigDecimal("0");
+ userPosition.setProfitAndLose(profit_and_lose);
- BigDecimal all_profit_and_lose = profit_and_lose.subtract(buy_fee_amt).subtract(buy_yhs_amt).subtract(spread_rate_amt);
- userPosition.setAllProfitAndLose(all_profit_and_lose);
+ BigDecimal all_profit_and_lose = profit_and_lose.subtract(buy_fee_amt).subtract(buy_yhs_amt).subtract(spread_rate_amt);
+ userPosition.setAllProfitAndLose(all_profit_and_lose);
- userPosition.setOrderStayDays(Integer.valueOf(0));
- userPosition.setOrderStayFee(new BigDecimal("0"));
- userPosition.setAmountToBeCovered(amountToBeCovered);
- userPosition.setNewId(stockSubscribe.getNewlistId());
- int ret = 0;
- ret = this.userPositionMapper.insert(userPosition);
- UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(stockType, userPosition.getUserId());
- if(null == userAssets){
- return ServerResponse.createByErrorMsg("新股转持仓失败");
- }
- userAssetsMapper.updateById(userAssets);
- iUserAssetsServices.availablebalanceChange(stockType, userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", "");
- if (ret > 0) {
- userStockSubscribe.setStatus(5);
- userStockSubscribeMapper.update1(userStockSubscribe);
- if (userStockSubscribe.getType() == 1 || userStockSubscribe.getType() == 2) {
- User user = userMapper.selectById(userStockSubscribe.getUserId());
- ret = userMapper.updateById(user);
+ userPosition.setOrderStayDays(Integer.valueOf(0));
+ userPosition.setOrderStayFee(new BigDecimal("0"));
+ userPosition.setAmountToBeCovered(amountToBeCovered);
+ userPosition.setNewId(stockSubscribe.getNewlistId());
+ int ret = 0;
+ ret = this.userPositionMapper.insert(userPosition);
+ UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(stockType, userPosition.getUserId());
+ if(null == userAssets){
+ return ServerResponse.createByErrorMsg("新股转持仓失败");
}
+ userAssetsMapper.updateById(userAssets);
+ iUserAssetsServices.availablebalanceChange(stockType, userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", "");
if (ret > 0) {
- return ServerResponse.createBySuccessMsg("新股转持仓成功");
+ userStockSubscribe.setStatus(5);
+ userStockSubscribeMapper.update1(userStockSubscribe);
+ if (userStockSubscribe.getType() == 1 || userStockSubscribe.getType() == 2) {
+ User user = userMapper.selectById(userStockSubscribe.getUserId());
+ ret = userMapper.updateById(user);
+ }
+ if (ret > 0) {
+ return ServerResponse.createBySuccessMsg("新股转持仓成功");
+ } else {
+ return ServerResponse.createByErrorMsg("新股转持仓失败");
+ }
} else {
return ServerResponse.createByErrorMsg("新股转持仓失败");
}
- } else {
- return ServerResponse.createByErrorMsg("新股转持仓失败");
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
}
}
@@ -1431,7 +1442,7 @@
* @param request
* @return
*/
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse buyVipQc(String stockCode, Integer buyNum, Integer buyType, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, HttpServletRequest request) throws Exception {
/*实名认证开关开启*/
@@ -1684,7 +1695,7 @@
* @param request
* @return
*/
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse buyDz(Integer dzId, String password, Integer num, HttpServletRequest request) throws Exception {
/*实名认证开关开启*/
SiteProduct siteProduct = iSiteProductService.getProductSetting();
@@ -1798,7 +1809,7 @@
}
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public void stockConstraint(List<UserPosition> list) {
try {
//SiteSetting siteSetting = iSiteSettingService.getSiteSetting();
@@ -1977,32 +1988,34 @@
//平仓
private void extracted(UserPosition position, BigDecimal nowPrice, Stock stock,Integer liquidation) {
- //-1强平 0未触发 1止损强平 2止盈强平
- BigDecimal siitteBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.SELL_HANDLING_CHARGE.getCode()).getCValue()) ;
- BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(position.getOrderNum()));
- BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);//手续费
- // 更新订单信息
- position.setSellOrderId(GeneratePosition.getPositionId());
- position.setSellOrderPrice(nowPrice);
- position.setSellOrderTime(new Date());
- userPositionMapper.updateById(position);
- if(liquidation == -1){
- userAssetsServices.availablebalanceChange(stock.getStockType(),
- position.getUserId(),
- EUserAssets.CONSTRAINT_CLOSE_POSITION,
- position.getOrderTotalPrice(), "", "");
- }else if(liquidation == 1 || liquidation == 2){
- userAssetsServices.availablebalanceChange(stock.getStockType(),
- position.getUserId(), EUserAssets.HANDLING_CHARGE,
- xsPrice, "", "");
- PositionProfitVO profitVO = UserPointUtil.getPositionProfitVO(position, priceServices.getNowPrice(position.getStockCode()));
- userAssetsServices.availablebalanceChange(stock.getStockType(), position.getUserId(), EUserAssets.CLOSE_POSITION,
- profitVO.getAllProfitAndLose(), "", "");
+ try {
+ //-1强平 0未触发 1止损强平 2止盈强平
+ BigDecimal siitteBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.SELL_HANDLING_CHARGE.getCode()).getCValue()) ;
+ BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(position.getOrderNum()));
+ BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);//手续费
+ // 更新订单信息
+ position.setSellOrderId(GeneratePosition.getPositionId());
+ position.setSellOrderPrice(nowPrice);
+ position.setSellOrderTime(new Date());
+ userPositionMapper.updateById(position);
+ if(liquidation == -1){
+ userAssetsServices.availablebalanceChange(stock.getStockType(),
+ position.getUserId(),
+ EUserAssets.CONSTRAINT_CLOSE_POSITION,
+ position.getOrderTotalPrice(), "", "");
+ }else if(liquidation == 1 || liquidation == 2){
+ userAssetsServices.availablebalanceChange(stock.getStockType(),
+ position.getUserId(), EUserAssets.HANDLING_CHARGE,
+ xsPrice, "", "");
+ PositionProfitVO profitVO = UserPointUtil.getPositionProfitVO(position, priceServices.getNowPrice(position.getStockCode()));
+ userAssetsServices.availablebalanceChange(stock.getStockType(), position.getUserId(), EUserAssets.CLOSE_POSITION,
+ profitVO.getAllProfitAndLose(), "", "");
+ }
+ log.info("强制平仓成功,订单id: {}", position.getId());
+ } catch (Exception e) {
+ log.info("extracted Exception {}", e.getMessage());
}
-
-
- log.info("强制平仓成功,订单id: {}", position.getId());
}
@@ -2046,6 +2059,7 @@
if (null != stockSubscribe && DateUtil.date().before(stockSubscribe.getListDate())) {
userPositionVO.setProfitAndLose(BigDecimal.ZERO);
userPositionVO.setProfitAndLoseParent("0%");
+ userPositionVO.setProfitAndLoseParent2(BigDecimal.ZERO);
userPositionVO.setIsListed(false);
}else{
userPositionVO.setIsListed(true);
@@ -2083,6 +2097,57 @@
return ServerResponse.createByError();
}
+ @Override
+ public ServerResponse checkDz(Integer id, Integer checkType, Integer orderNum, HttpServletRequest request) {
+ try {
+ UserPositionCheckDz userPositionCheckDz = userPositionCheckDzService.getById(id);
+ if (userPositionCheckDz == null) {
+ return ServerResponse.createByErrorMsg("订单不存在", request);
+ }
+ if (userPositionCheckDz.getCheckType() != 0) {
+ return ServerResponse.createByErrorMsg("订单已审核", request);
+ }
+ if (checkType == 2) {
+ userPositionCheckDz.setCheckType(checkType);
+ userPositionCheckDzService.updateById(userPositionCheckDz);
+ return ServerResponse.createBySuccess("审核成功", request);
+ }
+ User user = userMapper.selectById(userPositionCheckDz.getUserId());
+
+ StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("id", userPositionCheckDz.getDzId()));
+
+ UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId(stockDz.getStockType(), user.getId());
+ if (userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0) {
+ return ServerResponse.createByErrorMsg("用户账户有待补资金未补齐,审核失败", request);
+ }
+
+ BigDecimal nowPrice = stockDz.getNowPrice();
+
+ if (nowPrice.compareTo(new BigDecimal("0")) == 0) {
+ return ServerResponse.createByErrorMsg("股票价格0,请重试", request);
+ }
+ userPositionCheckDz.setOrderNum(orderNum);
+ userPositionCheckDz.setOrderTotalPrice(nowPrice.multiply(new BigDecimal(orderNum.intValue())));
+ BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(userPositionCheckDz.getOrderNum()));
+ BigDecimal fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100));
+ BigDecimal availableBalance = fundratio.multiply(userAssets.getAvailableBalance());
+ if (buyAmt.compareTo(availableBalance) > 0) {
+ return ServerResponse.createByErrorMsg("订单失败,配资不足", request);
+ }
+ userPositionCheckDz.setCheckType(checkType);
+ userPositionCheckDzService.updateById(userPositionCheckDz);
+ UserPosition userPosition = Convert.convert(UserPosition.class, userPositionCheckDz);
+ userPosition.setBuyOrderPrice(nowPrice);
+ userPosition.setId(null);
+ userPosition.setDzId(stockDz.getId());
+ userPositionMapper.insert(userPosition);
+ userAssetsServices.availablebalanceChange(userAssets.getAccectType(), user.getId(), EUserAssets.BUY, buyAmt.negate(), "", "");
+ return ServerResponse.createBySuccessMsg("审核成功,订单已转客户持仓", request);
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
+ }
+ }
+
}
diff --git a/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java b/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
index ac0d600..26c3b6c 100644
--- a/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
@@ -151,7 +151,7 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse chargeSuccess(UserRecharge userRecharge) throws Exception {
log.info("充值订单 确认成功操作 id = {}", userRecharge.getId());
@@ -290,7 +290,7 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse updateState(Integer chargeId, Integer state) throws Exception {
UserRecharge userRecharge = this.userRechargeMapper.selectById(chargeId);
@@ -325,32 +325,36 @@
return ServerResponse.createByErrorMsg("参数不能为空");
}
- User user = this.userMapper.selectById(userId);
- if (user == null) {
- return ServerResponse.createByErrorMsg("找不到用户");
+ try {
+ User user = this.userMapper.selectById(userId);
+ if (user == null) {
+ return ServerResponse.createByErrorMsg("找不到用户");
+ }
+
+ UserRecharge userRecharge = new UserRecharge();
+ userRecharge.setUserId(user.getId());
+ userRecharge.setNickName(user.getRealName());
+ userRecharge.setAgentId(user.getAgentId());
+
+ String ordersn = KeyUtils.getRechargeOrderSn();
+ userRecharge.setOrderSn(ordersn);
+
+ userRecharge.setPayChannel(payChannel);
+ userRecharge.setPayAmt(new BigDecimal(amt.intValue()));
+ userRecharge.setAddTime(new Date());
+ userRecharge.setPayTime(new Date());
+ userRecharge.setOrderStatus(Integer.valueOf(1));
+ userRecharge.setPayId(1);
+ userAssetsServices.availablebalanceChange(EStockType.MX.getCode(),
+ userId,EUserAssets.TOP_UP,new BigDecimal(amt),"","");
+ int insertCount = this.userRechargeMapper.insert(userRecharge);
+ if (insertCount > 0) {
+ return ServerResponse.createBySuccessMsg("生成订单成功!");
+ }
+ return ServerResponse.createByErrorMsg("生成订单失败,请重试");
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
}
-
- UserRecharge userRecharge = new UserRecharge();
- userRecharge.setUserId(user.getId());
- userRecharge.setNickName(user.getRealName());
- userRecharge.setAgentId(user.getAgentId());
-
- String ordersn = KeyUtils.getRechargeOrderSn();
- userRecharge.setOrderSn(ordersn);
-
- userRecharge.setPayChannel(payChannel);
- userRecharge.setPayAmt(new BigDecimal(amt.intValue()));
- userRecharge.setAddTime(new Date());
- userRecharge.setPayTime(new Date());
- userRecharge.setOrderStatus(Integer.valueOf(1));
- userRecharge.setPayId(1);
- userAssetsServices.availablebalanceChange(EStockType.MX.getCode(),
- userId,EUserAssets.TOP_UP,new BigDecimal(amt),"","");
- int insertCount = this.userRechargeMapper.insert(userRecharge);
- if (insertCount > 0) {
- return ServerResponse.createBySuccessMsg("生成订单成功!");
- }
- return ServerResponse.createByErrorMsg("生成订单失败,请重试");
}
diff --git a/src/main/java/com/nq/service/impl/UserServiceImpl.java b/src/main/java/com/nq/service/impl/UserServiceImpl.java
index b3d7e2d..7357ab5 100644
--- a/src/main/java/com/nq/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -8,7 +8,6 @@
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.nq.common.ServerResponse;
-import com.nq.config.StockPoll;
import com.nq.dao.*;
import com.nq.enums.EStockType;
import com.nq.enums.EUserAssets;
@@ -16,8 +15,6 @@
import com.nq.pojo.reponse.RUserAssets;
import com.nq.service.*;
import com.nq.utils.UserPointUtil;
-import com.nq.utils.redis.RedisKeyUtil;
-import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.SymmetricCryptoUtil;
import com.nq.utils.ip.IpUtils;
@@ -25,15 +22,11 @@
import com.nq.utils.redis.CookieUtils;
import com.nq.utils.redis.JsonUtil;
import com.nq.utils.redis.RedisShardedPoolUtils;
-import com.nq.utils.stock.sina.StockApi;
import com.nq.vo.agent.AgentUserListVO;
import com.nq.vo.futuresposition.FuturesPositionVO;
import com.nq.vo.indexposition.IndexPositionVO;
-import com.nq.vo.position.PositionProfitVO;
import com.nq.vo.position.PositionVO;
import com.nq.vo.position.UserPositionVO;
-import com.nq.vo.stock.StockAdminListVO;
-import com.nq.vo.stock.StockListVO;
import com.nq.vo.user.UserInfoVO;
import java.math.BigDecimal;
@@ -41,12 +34,10 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
-import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.nq.vo.user.UserOut;
-import org.apache.commons.lang3.Conversion;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -70,6 +61,9 @@
@Resource
StockOptionMapper stockOptionMapper;
+ @Autowired
+ DkMapper dkMapper;
+
@Autowired
IUserService userService;
@@ -84,8 +78,6 @@
StockMapper stockMapper;
@Autowired
IUserPositionService iUserPositionService;
- @Autowired
- IUserBankService iUserBankService;
@Resource
AgentUserMapper agentUserMapper;
@Resource
@@ -104,8 +96,6 @@
IUserIndexPositionService iUserIndexPositionService;
@Autowired
ISiteIndexSettingService iSiteIndexSettingService;
- @Autowired
- StockPoll stockPoll;
@Autowired
StockSubscribeMapper stockSubscribeMapper;
@@ -114,18 +104,11 @@
MoneyLogMapper mapper;
@Resource
- IUserPositionService userPositionService;
- @Resource
SiteAmtTransLogMapper siteAmtTransLogMapper;
@Autowired
IUserFuturesPositionService iUserFuturesPositionService;
@Autowired
ISiteFuturesSettingService iSiteFuturesSettingService;
- @Autowired
- IStockFuturesService iStockFuturesService;
-
- @Autowired
- ISiteMessageService iSiteMessageService;
@Autowired
private ApplyLeverMapper applyLeverMapper;
@@ -645,16 +628,20 @@
@Override
public ServerResponse transfer(String fromType, String toType, String amt,HttpServletRequest request) {
- User user = userService.getCurrentUser(request);
- UserAssets formAssets = userAssetsServices.assetsByTypeAndUserId(fromType,user.getId());
- BigDecimal amtBig = new BigDecimal(amt);
- if(formAssets.getAvailableBalance().compareTo(amtBig)<0){
- return ServerResponse.createByErrorMsg("余额不足",request);
+ try {
+ User user = userService.getCurrentUser(request);
+ UserAssets formAssets = userAssetsServices.assetsByTypeAndUserId(fromType,user.getId());
+ BigDecimal amtBig = new BigDecimal(amt);
+ if(formAssets.getAvailableBalance().compareTo(amtBig)<0){
+ return ServerResponse.createByErrorMsg("余额不足",request);
+ }
+ userAssetsServices.availablebalanceChange(fromType,user.getId(), EUserAssets.TRANSFER,amtBig.negate(),fromType+"/"+toType,"");
+ amtBig = rateServices.currencyRate(EStockType.getEStockTypeByCode(fromType),EStockType.getEStockTypeByCode(toType)).multiply(amtBig);
+ userAssetsServices.availablebalanceChange(toType,user.getId(),EUserAssets.TRANSFER,amtBig.setScale(5,RoundingMode.HALF_DOWN),fromType+"/"+toType,"");
+ return ServerResponse.createBySuccess();
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
}
- userAssetsServices.availablebalanceChange(fromType,user.getId(), EUserAssets.TRANSFER,amtBig.negate(),fromType+"/"+toType,"");
- amtBig = rateServices.currencyRate(EStockType.getEStockTypeByCode(fromType),EStockType.getEStockTypeByCode(toType)).multiply(amtBig);
- userAssetsServices.availablebalanceChange(toType,user.getId(),EUserAssets.TRANSFER,amtBig.setScale(5,RoundingMode.HALF_DOWN),fromType+"/"+toType,"");
- return ServerResponse.createBySuccess();
}
@@ -792,48 +779,50 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse addSimulatedAccount(Integer agentId, String phone, String pwd, String amt, Integer accountType, HttpServletRequest request) {
if (StringUtils.isBlank(phone) || StringUtils.isBlank(pwd)) {
return ServerResponse.createByErrorMsg("The parameter cannot be null");
}
+ try {
+ QueryWrapper queryWrapper = new QueryWrapper();
+ queryWrapper.eq("phone",phone);
+ User dbUser = userMapper.selectOne(queryWrapper);
+ if (dbUser != null) {
+ return ServerResponse.createByErrorMsg("The phone number is registered");
+ }
- QueryWrapper queryWrapper = new QueryWrapper();
- queryWrapper.eq("phone",phone);
- User dbUser = userMapper.selectOne(queryWrapper);
- if (dbUser != null) {
- return ServerResponse.createByErrorMsg("The phone number is registered");
+ User user = new User();
+ user.setAccountType(accountType);
+ user.setPhone(phone);
+ user.setIsLock(Integer.valueOf(0));
+ user.setIsLogin(Integer.valueOf(0));
+ user.setIsActive(Integer.valueOf(0));
+ user.setRegTime(new Date());
+
+
+ if (accountType.intValue() == 1) {
+ user.setNickName("模拟用户");
+ }
+
+
+ if (agentId != null) {
+ AgentUser agentUser = this.agentUserMapper.selectByPrimaryKey(agentId);
+ user.setAgentName(agentUser.getAgentName());
+ user.setAgentId(agentUser.getId());
+ }
+
+ int insertCount = this.userMapper.insert(user);
+ dbUser = userMapper.selectOne(queryWrapper);
+ userAssetsServices.getAvailableBalance(EStockType.MX.getCode(),dbUser.getId() );
+ userAssetsServices.availablebalanceChange(EStockType.MX.getCode(),dbUser.getId(),EUserAssets.TOP_UP,new BigDecimal(amt),"","");
+ if (insertCount > 0) {
+ return ServerResponse.createBySuccessMsg("Success");
+ }
+ return ServerResponse.createByErrorMsg("User addition failure");
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
}
-
-
- User user = new User();
- user.setAccountType(accountType);
- user.setPhone(phone);
- user.setIsLock(Integer.valueOf(0));
- user.setIsLogin(Integer.valueOf(0));
- user.setIsActive(Integer.valueOf(0));
- user.setRegTime(new Date());
-
-
- if (accountType.intValue() == 1) {
- user.setNickName("模拟用户");
- }
-
-
- if (agentId != null) {
- AgentUser agentUser = this.agentUserMapper.selectByPrimaryKey(agentId);
- user.setAgentName(agentUser.getAgentName());
- user.setAgentId(agentUser.getId());
- }
-
- int insertCount = this.userMapper.insert(user);
- dbUser = userMapper.selectOne(queryWrapper);
- userAssetsServices.getAvailableBalance(EStockType.MX.getCode(),dbUser.getId() );
- userAssetsServices.availablebalanceChange(EStockType.MX.getCode(),dbUser.getId(),EUserAssets.TOP_UP,new BigDecimal(amt),"","");
- if (insertCount > 0) {
- return ServerResponse.createBySuccessMsg("Success");
- }
- return ServerResponse.createByErrorMsg("User addition failure");
}
@@ -903,7 +892,7 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse updateAmt(Integer userId, String amt, Integer direction) {
if (userId == null || amt == null || direction == null) {
return ServerResponse.createByErrorMsg("The parameter cannot be null");
@@ -1145,6 +1134,12 @@
userInfoVO.setIsActive(user.getIsActive());
userInfoVO.setAuthMsg(user.getAuthMsg());
userInfoVO.setVaildNumber(user.getVaildNumber());
+
+ userInfoVO.setLoanLimit(user.getLoanLimit());
+ userInfoVO.setCreditScore(user.getCreditScore());
+ //查询代还款金额
+ BigDecimal spMoney = dkMapper.sumSpMoneyByUserIdAndRStatus(String.valueOf(user.getId()));
+ userInfoVO.setRefundAmount(spMoney);
return userInfoVO;
}
diff --git a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
index 2535854..3faf5d6 100644
--- a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -76,7 +76,7 @@
* @return
*/
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse insert(UserStockSubscribeAddIn model, HttpServletRequest request) throws Exception {
int ret = 0;
if (model == null) {
@@ -230,7 +230,7 @@
* admin 新股申购-添加和修改
*/
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse save(UserStockSubscribe model, HttpServletRequest request) throws Exception {
int ret = 0;
if( model.getId() != null ){
@@ -479,50 +479,54 @@
* 新股申购-用户提交金额
*/
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse userSubmit(Integer id,HttpServletRequest request) {
- int ret = 0;
- String property = PropertiesUtil.getProperty("user.cookie.name");
- String header = request.getHeader(property);
- if (header != null) {
- User user = iUserService.getCurrentRefreshUser(request);
- if(id == null){
- return ServerResponse.createByErrorMsg("参数错误",request);
- }
- UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
- if (userStockSubscribe != null && userStockSubscribe.getUserId().equals(user.getId())) {
- if(userStockSubscribe.getType()== 2 ){
- return ServerResponse.createByErrorMsg("未中签,无需支付",request);
+ try {
+ int ret = 0;
+ String property = PropertiesUtil.getProperty("user.cookie.name");
+ String header = request.getHeader(property);
+ if (header != null) {
+ User user = iUserService.getCurrentRefreshUser(request);
+ if(id == null){
+ return ServerResponse.createByErrorMsg("参数错误",request);
}
- if (userStockSubscribe.getStatus() == 3) {
- StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe())
- .eq("newlist_id", userStockSubscribe.getNewStockId()));
- if (stockSubscribe == null) {
- return ServerResponse.createByErrorMsg("新股不存在",request);
+ UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
+ if (userStockSubscribe != null && userStockSubscribe.getUserId().equals(user.getId())) {
+ if(userStockSubscribe.getType()== 2 ){
+ return ServerResponse.createByErrorMsg("未中签,无需支付",request);
}
- userStockSubscribe.setSubmitTime(DateTimeUtil.getCurrentDate());
- userStockSubscribe.setStatus(4);
- BigDecimal bigDecimal = iUserAssetsServices.
- getAvailableBalance(EStockType.US.getCode(),
- userStockSubscribe.getUserId());
+ if (userStockSubscribe.getStatus() == 3) {
+ StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe())
+ .eq("newlist_id", userStockSubscribe.getNewStockId()));
+ if (stockSubscribe == null) {
+ return ServerResponse.createByErrorMsg("新股不存在",request);
+ }
+ userStockSubscribe.setSubmitTime(DateTimeUtil.getCurrentDate());
+ userStockSubscribe.setStatus(4);
+ BigDecimal bigDecimal = iUserAssetsServices.
+ getAvailableBalance(EStockType.US.getCode(),
+ userStockSubscribe.getUserId());
- BigDecimal multiply = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(userStockSubscribe.getApplyNumber()));
- if(bigDecimal.compareTo(multiply) <= 0){
- return ServerResponse.createByErrorMsg("余额不足",request);
+ BigDecimal multiply = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(userStockSubscribe.getApplyNumber()));
+ if(bigDecimal.compareTo(multiply) <= 0){
+ return ServerResponse.createByErrorMsg("余额不足",request);
+ }
+ iUserAssetsServices.availablebalanceChange(stockSubscribe.getStockType(), userStockSubscribe.getUserId(),
+ EUserAssets.BUY,multiply.negate(),"","");
+ userStockSubscribe.setDbMoney(BigDecimal.ZERO);
+ userStockSubscribeMapper.update1(userStockSubscribe);
+ return ServerResponse.createBySuccess();
+ } else {
+ return ServerResponse.createByErrorMsg("不成功的申请者不收取任何费用",request);
}
- iUserAssetsServices.availablebalanceChange(stockSubscribe.getStockType(), userStockSubscribe.getUserId(),
- EUserAssets.BUY,multiply.negate(),"","");
- userStockSubscribe.setDbMoney(BigDecimal.ZERO);
- userStockSubscribeMapper.update1(userStockSubscribe);
- return ServerResponse.createBySuccess();
} else {
- return ServerResponse.createByErrorMsg("不成功的申请者不收取任何费用",request);
+ return ServerResponse.createByErrorMsg("新股认购订单不存在!",request);
}
- } else {
- return ServerResponse.createByErrorMsg("新股认购订单不存在!",request);
}
+ return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录");
+ } catch (Exception e) {
+ return ServerResponse.createByErrorMsg(e.getMessage());
}
- return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录");
}
/**
* 新股申购-删除
diff --git a/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java b/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
index a52ce0d..7f192cd 100644
--- a/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
@@ -102,7 +102,7 @@
@Autowired
TransferResponseService transferResponseService;
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse outMoney(String amt, String with_Pwd,String accsetType,String bankId,HttpServletRequest request) throws Exception {
if (StringUtils.isBlank(amt)) {
return ServerResponse.createByErrorMsg("The parameter cannot be null");
@@ -335,7 +335,7 @@
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public ServerResponse updateState(Integer withId, Integer state, String authMsg, HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
UserWithdraw userWithdraw = this.userWithdrawMapper.selectByPrimaryKey(withId);
diff --git a/src/main/java/com/nq/utils/timeutil/DateTimeUtil.java b/src/main/java/com/nq/utils/timeutil/DateTimeUtil.java
index 7f9f337..953b55e 100644
--- a/src/main/java/com/nq/utils/timeutil/DateTimeUtil.java
+++ b/src/main/java/com/nq/utils/timeutil/DateTimeUtil.java
@@ -10,7 +10,9 @@
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.sql.Timestamp;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.time.Instant;
import java.util.Calendar;
import java.util.Date;
@@ -242,10 +244,57 @@
}
+ /**
+ * 计算 Date 到今天的天数(不足一天按一天算)
+ * @param date 要比较的日期(可为 null)
+ * @return 天数(至少为 1 天)
+ */
+ public static long getDaysRoundedUp(Date date) {
+ if (date == null) {
+ return 0; // 处理 null,返回 -1 或根据业务调整
+ }
+ // 获取当前时间(含时分秒)
+ Instant now = Instant.now();
+ Instant dateInstant = date.toInstant();
+
+ // 计算毫秒差
+ long millisDiff = now.toEpochMilli() - dateInstant.toEpochMilli();
+ // 如果日期在未来,直接返回 1 天
+ if (millisDiff <= 0) {
+ millisDiff = Math.abs(millisDiff);
+ //return 1;
+ }
+
+ // 一天的毫秒数
+ long millisPerDay = 24 * 60 * 60 * 1000;
+
+ // 向上取整:不足一天按一天算
+ return (long) Math.ceil((double) millisDiff / millisPerDay);
+ }
- public static void main(String[] args) {
- System.out.println(dateToStr1(new Date()));
+ public static void main(String[] args) throws ParseException {
+
+
+ /*SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 指定格式
+
+ // 测试:今天(不足一天按一天算)
+ Date today = new Date();
+ System.out.println("今天:" + getDaysRoundedUp(today)); // 输出:1
+
+ // 测试:昨天(23小时前)
+ String str = "2025-07-15 14:10:45";
+ Date date = sdf.parse(str);
+ System.out.println("昨天(23小时前):" + getDaysRoundedUp(date)); // 输出:1
+
+ // 测试:3天前(72小时)
+ String str2 = "2025-07-18 16:10:45";
+ Date date2 = sdf.parse(str2);
+ System.out.println("3天前:" + getDaysRoundedUp(date2)); // 输出:3
+
+ String str3 = "2025-07-19 16:10:45";
+ Date date3 = sdf.parse(str3);
+ System.out.println("未来(1天后):" + getDaysRoundedUp(date3)); // 输出:1*/
}
}
diff --git a/src/main/java/com/nq/vo/dk/DkModelVo.java b/src/main/java/com/nq/vo/dk/DkModelVo.java
index 5092425..8c2ba02 100644
--- a/src/main/java/com/nq/vo/dk/DkModelVo.java
+++ b/src/main/java/com/nq/vo/dk/DkModelVo.java
@@ -2,10 +2,12 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
+@Data
public class DkModelVo {
private Integer id;
@@ -29,87 +31,13 @@
private String dkJgName;
-
- public String getDkJgName() {
- return dkJgName;
- }
-
- public void setDkJgName(String dkJgName) {
- this.dkJgName = dkJgName;
- }
-
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
- public Integer getId() {
- return id;
- }
+ //还款状态:0未还款 1已还款
+ private Integer dkRefundState;
- public void setId(Integer id) {
- this.id = id;
- }
+ //放款时间
+ private Date loanTime;
- public String getDkMoney() {
- return dkMoney;
- }
-
- public void setDkMoney(String dkMoney) {
- this.dkMoney = dkMoney;
- }
-
- public String getSpMoney() {
- return spMoney;
- }
-
- public void setSpMoney(String spMoney) {
- this.spMoney = spMoney;
- }
-
- public String getDkUserId() {
- return dkUserId;
- }
-
- public void setDkUserId(String dkUserId) {
- this.dkUserId = dkUserId;
- }
-
- public String getDkState() {
- return dkState;
- }
-
- public void setDkState(String dkState) {
- this.dkState = dkState;
- }
-
- public String getDkMessage() {
- return dkMessage;
- }
-
- public void setDkMessage(String dkMessage) {
- this.dkMessage = dkMessage;
- }
-
- public String getDkPhone() {
- return dkPhone;
- }
-
- public void setDkPhone(String dkPhone) {
- this.dkPhone = dkPhone;
- }
-
- public String getDkUserName() {
- return dkUserName;
- }
-
- public void setDkUserName(String dkUserName) {
- this.dkUserName = dkUserName;
- }
-
- public Date getCreateTime() {
- return createTime;
- }
-
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
}
diff --git a/src/main/java/com/nq/vo/stock/StockVOQuery.java b/src/main/java/com/nq/vo/stock/StockVOQuery.java
new file mode 100644
index 0000000..91a627d
--- /dev/null
+++ b/src/main/java/com/nq/vo/stock/StockVOQuery.java
@@ -0,0 +1,19 @@
+
+package com.nq.vo.stock;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class StockVOQuery {
+
+ private int id;
+ private String StockName;
+ private String stockCode;
+ private String stockSpell;
+ private String stockType;
+ private BigDecimal nowPrice;
+
+}
+
diff --git a/src/main/java/com/nq/vo/user/UserInfoVO.java b/src/main/java/com/nq/vo/user/UserInfoVO.java
index c03493f..9de9dea 100644
--- a/src/main/java/com/nq/vo/user/UserInfoVO.java
+++ b/src/main/java/com/nq/vo/user/UserInfoVO.java
@@ -69,6 +69,12 @@
private String usTotalAssets;
+ //信用分
+ private Integer creditScore;
+ //剩余贷款额度
+ private BigDecimal loanLimit;
+ //待还款金额
+ private BigDecimal refundAmount;
}
diff --git a/src/main/resources/mapper/DkMapper.xml b/src/main/resources/mapper/DkMapper.xml
index 3ea4bab..11e57de 100644
--- a/src/main/resources/mapper/DkMapper.xml
+++ b/src/main/resources/mapper/DkMapper.xml
@@ -22,9 +22,11 @@
<result column="dk_user_id" property="dkUserId"/>
<result column="dk_state" property="dkState"/>
<result column="dk_message" property="dkMessage"/>
- <result column="agent_name" property="dkUserName"/>
- <result column="dk_phone" property="dkPhone"/>
+ <result column="real_name" property="dkUserName"/>
+ <result column="phone" property="dkPhone"/>
<result column="dk_jg" property="dkJgName"/>
+ <result column="dk_refund_state" property="dkRefundState"/>
+ <result column="loan_time" property="loanTime"/>
</resultMap>
<sql id="Base_Column_List">
id
@@ -39,40 +41,30 @@
<select id="queryDk" resultMap="BaseResultMap1">
select d.id,
- d.dk_money,
- d.sp_money,
- d.create_time,
- d.dk_user_id,
- d.dk_state,
- d.dk_phone,
- d.dk_message,
- u.agent_name
+ d.dk_money,
+ d.sp_money,
+ d.create_time,
+ d.dk_user_id,
+ d.dk_state,
+ d.dk_phone,
+ d.dk_message,
+ u.real_name,
+ u.phone,
+ d.dk_refund_state,
+ d.loan_time
from dk d
- join user u
- on d.dk_user_id = u.id
+ left join user u on d.dk_user_id = u.id
+ ORDER BY d.create_time desc
</select>
+ <select id="countByUserIdAndRStatus" resultType="java.lang.Integer">
+ select count(1) from dk
+ where dk_user_id = #{userId} and dk_state = #{rStatus}
+ </select>
-
-
-
- <select id="queryByShUserId" resultMap="BaseResultMap1" parameterType="String">
- select d.id,
- d.dk_money,
- d.sp_money,
- d.create_time,
- d.dk_user_id,
- d.dk_state,
- d.dk_message,
- d.dk_phone,
- u.agent_name,
- d.dk_jg_id,
- jg.dk_jg
- from dk d
- join user u
- on d.dk_user_id = u.id
- join dk_jg jg on jg.id = d.dk_jg_id
- where d.dk_user_id = #{id}
+ <select id="sumSpMoneyByUserIdAndRStatus" resultType="java.math.BigDecimal">
+ SELECT IFNULL(sum(sp_money),0) FROM `dk`
+ where dk_user_id = #{userId} and dk_state='1' and dk_refund_state = 0
</select>
</mapper>
diff --git a/src/main/resources/mapper/StockMapper.xml b/src/main/resources/mapper/StockMapper.xml
index 3532e13..d0c99be 100644
--- a/src/main/resources/mapper/StockMapper.xml
+++ b/src/main/resources/mapper/StockMapper.xml
@@ -357,6 +357,11 @@
</if>
</select>
+ <select id="findStocksQuery" resultType="com.nq.vo.stock.StockVOQuery">
+ SELECT id,stock_name,stock_code,stock_spell,stock_type FROM stock
+ WHERE stock_spell like concat('%',#{keyWords},'%') or stock_name like concat('%',#{keyWords},'%')
+ or stock_code like concat('%',#{keyWords},'%')
+ </select>
</mapper>
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index 0211f5b..f2788d3 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -32,7 +32,7 @@
id, agent_id, agent_name, phone, user_pwd, with_pwd, nick_name, real_name, id_card,
account_type, is_lock, is_login,
reg_time, reg_ip, reg_address, img1_key, img2_key, img3_key, is_active, auth_msg,
- withdrawal_Pwd,vaild_number,lever,fund_ratio
+ withdrawal_Pwd,vaild_number,lever,fund_ratio,credit_score,loan_limit
</sql>
--
Gitblit v1.9.3