From b08c3ca89f463f5a6775d77107d91cadce8bdf05 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Mon, 15 Sep 2025 18:09:40 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/service/impl/DkServices.java | 234 +++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 199 insertions(+), 35 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/DkServices.java b/src/main/java/com/nq/service/impl/DkServices.java
index 3e1f2cf..179243f 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.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.EConfigKey;
+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.getDefault().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.getDefault().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", EConfigKey.LOAN_INTEREST.getCode()));
+ if (stockConfig != null) {
+ long day = DateTimeUtil.getDaysRoundedUp(dkModel.getLoanTime());
+ //利息 利率*贷款金额*借款天数
+ BigDecimal intAmount = new BigDecimal(stockConfig.getCValue()).multiply(amount).multiply(BigDecimal.valueOf(day));
+ iUserAssetsServices.aiAvailableBalanceChange(EStockType.getDefault().getCode(), user.getId(), EUserAssets.RT_DK_INT, intAmount);
+ }
+ //还款
+ iUserAssetsServices.aiAvailableBalanceChange(EStockType.getDefault().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
--
Gitblit v1.9.3