From f25b39e0d5fcae415a8824fc03d42fe681e96bf8 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Mon, 21 Jul 2025 17:17:48 +0800
Subject: [PATCH] 移除多余引用

---
 src/main/java/com/nq/service/impl/DkServices.java |  235 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 198 insertions(+), 37 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/DkServices.java b/src/main/java/com/nq/service/impl/DkServices.java
index 409a09b..c3f38d9 100644
--- a/src/main/java/com/nq/service/impl/DkServices.java
+++ b/src/main/java/com/nq/service/impl/DkServices.java
@@ -1,70 +1,209 @@
 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.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.DateTimeUtil;
+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.util.ArrayList;
+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
@@ -72,10 +211,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