1
zj
3 days ago cd969de1f50903ca87deda67bff2d6fcc35b4107
1
28 files modified
1 files added
432 ■■■■ changed files
src/main/java/com/nq/dao/UserWithdrawMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/FundsApplyServiceImpl.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/PayServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java 69 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserServiceImpl.java 93 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java 37 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/UserFundUtil.java 107 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/task/user/UserAssetAuditTask.java 36 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/agent/AgentUserListVO.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/user/UserInfoVO.java 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/UserPositionMapper.xml 12 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/UserWithdrawMapper.xml 6 ●●●●● patch | view | raw | blame | history
target/classes/com/nq/dao/UserWithdrawMapper.class patch | view | raw | blame | history
target/classes/com/nq/service/impl/FundsApplyServiceImpl.class patch | view | raw | blame | history
target/classes/com/nq/service/impl/PayServiceImpl.class patch | view | raw | blame | history
target/classes/com/nq/service/impl/UserPositionServiceImpl.class patch | view | raw | blame | history
target/classes/com/nq/service/impl/UserRechargeServiceImpl.class patch | view | raw | blame | history
target/classes/com/nq/service/impl/UserServiceImpl.class patch | view | raw | blame | history
target/classes/com/nq/service/impl/UserStockSubscribeServiceImpl.class patch | view | raw | blame | history
target/classes/com/nq/utils/task/user/UserAssetAuditTask.class patch | view | raw | blame | history
target/classes/com/nq/vo/agent/AgentUserListVO.class patch | view | raw | blame | history
target/classes/com/nq/vo/user/UserInfoVO.class patch | view | raw | blame | history
target/classes/mapper/UserPositionMapper.xml 12 ●●●●● patch | view | raw | blame | history
target/classes/mapper/UserWithdrawMapper.xml 6 ●●●●● patch | view | raw | blame | history
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst 1 ●●●● patch | view | raw | blame | history
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst 1 ●●●● patch | view | raw | blame | history
target/stock-0.0.1-SNAPSHOT.jar patch | view | raw | blame | history
target/stock-0.0.1-SNAPSHOT.jar.original patch | view | raw | blame | history
src/main/java/com/nq/dao/UserWithdrawMapper.java
@@ -29,4 +29,6 @@
  BigDecimal CountSpWithSumAmTodaytByState(Integer paramInteger);
  
  int deleteByUserId(@Param("userId") Integer paramInteger);
  BigDecimal sumPendingAmtByUserId(@Param("userId") Integer userId);
}
src/main/java/com/nq/service/impl/FundsApplyServiceImpl.java
@@ -10,6 +10,7 @@
import com.nq.service.IUserService;
import com.nq.utils.DateTimeUtil;
import com.nq.utils.KeyUtils;
import com.nq.utils.UserFundUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -72,8 +73,7 @@
        ret = fundsApplyMapper.insert(model);
        if(ret>0){
            //修改用户可用余额= 当前余额-支付金额
            BigDecimal reckon_enable = user_enable_amt.subtract(pay_amount);
            user.setEnableAmt(reckon_enable);
            UserFundUtil.deductEnableAndWithdraw(user, pay_amount);
            int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
            if (updateUserCount > 0) {
                log.info("【用户交易下单】修改用户金额成功");
@@ -201,9 +201,8 @@
                    /*     */
                    /*     */         } else {
                    /*     */
                    /* 205 */           BigDecimal reckon_enable = user_enable_amt.add(fundsApply.getPayAmount());
                    /* 206 */           user.setEnableAmt(reckon_enable);
                    /* 207 */           int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
                    /* 205 */           UserFundUtil.refundEnableAndWithdraw(user, fundsApply.getPayAmount());
                    /* 206 */           int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
                    /* 208 */           if (updateUserCount > 0) {
                        /* 209 */             log.info("【配资审核未通过】修改用户金额成功");
                        /* 210 */             UserCashDetail ucd = new UserCashDetail();
src/main/java/com/nq/service/impl/PayServiceImpl.java
@@ -10,6 +10,7 @@
import com.nq.service.IUserService;
import com.nq.utils.KeyUtils;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.UserFundUtil;
import com.nq.utils.pay.CmcPayOuterRequestUtil;
import com.nq.utils.pay.CmcPayTool;
import com.nq.utils.pay.OcocnPayUtil;
@@ -291,10 +292,7 @@
        if (updateCount > 0) {
            log.info("后台通知,修改订单状态成功");
            BigDecimal total_amt = user.getUserAmt().add(userRecharge.getPayAmt());
            user.setUserAmt(total_amt);
            BigDecimal total_enable = user.getEnableAmt().add(userRecharge.getPayAmt());
            user.setEnableAmt(total_enable);
            UserFundUtil.creditUserBalance(user, userRecharge.getPayAmt());
            int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
            if (updateUserCount > 0) {
                return ServerResponse.createBySuccessMsg("后台通知 处理成功");
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -504,6 +504,11 @@
        return ServerResponse.createBySuccess(buy_fee_amt);
    }
    /** T+0:可用资金变动时同步调整可取资金 */
    private void applyEnableAndWithdrawChange(User user, BigDecimal enableBefore, BigDecimal enableAfter) {
        UserFundUtil.applyEnableDelta(user, enableBefore, enableAfter);
    }
    /** 下单从两融可用资金扣除:保证金 + 买入手续费 */
    private void deductUserEnableOnBuy(User user, BigDecimal buyDebit, BigDecimal margin, BigDecimal fee,
                                       UserPosition position) throws Exception {
@@ -1194,7 +1199,7 @@
        log.info("用戶平倉後的總資金  = {} , 可用資金 = {}", reckon_all, reckon_enable);
        user.setUserAmt(reckon_all);
        user.setEnableAmt(reckon_enable);
        applyEnableAndWithdrawChange(user, user_enable_amt, reckon_enable);
        int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
        if (updateUserCount > 0) {
            log.info("【用戶平倉】修改用戶金額成功");
@@ -1211,7 +1216,7 @@
        ucd.setUserName(user.getRealName());
        ucd.setDeType("总盈亏");
        ucd.setDeAmt(all_profit);
        ucd.setDeSummary("卖出股票," + userPosition.getStockCode() + "/" + userPosition.getStockName() + ",占用本金:" + freez_amt + ",总手续费:" + all_fee_amt + ",盈亏:" + profitLoss + ",总盈亏:" + all_profit);
        ucd.setDeSummary("卖出股票," + userPosition.getStockCode() + "/" + userPosition.getStockName() + ",占用本金:" + freez_amt + ",总手续费:" + order_fee_all + ",盈亏:" + profitLoss + ",总盈亏:" + all_profit);
        ucd.setAddTime(new Date());
        ucd.setIsRead(Integer.valueOf(0));
@@ -1430,7 +1435,7 @@
        log.info("用戶平倉後的總資金  = {} , 可用資金 = {}", reckon_all, reckon_enable);
        user.setUserAmt(reckon_all);
        user.setEnableAmt(reckon_enable);
        applyEnableAndWithdrawChange(user, user_enable_amt, reckon_enable);
        int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
        if (updateUserCount > 0) {
            log.info("【用戶平倉】修改用戶金額成功");
@@ -1447,7 +1452,7 @@
        ucd.setUserName(user.getRealName());
        ucd.setDeType("总盈亏");
        ucd.setDeAmt(all_profit);
        ucd.setDeSummary("卖出股票," + userPositionNew.getStockCode() + "/" + userPositionNew.getStockName() + ",占用本金:" + freez_amt + ",总手续费:" + all_fee_amt + ",递延费:" + 0 + ",印花稅:" + orderSpread + ",盈亏:" + profitLoss + ",总盈亏:" + all_profit);
        ucd.setDeSummary("卖出股票," + userPositionNew.getStockCode() + "/" + userPositionNew.getStockName() + ",占用本金:" + freez_amt + ",总手续费:" + order_fee_all + ",递延费:" + 0 + ",印花稅:" + orderSpread + ",盈亏:" + profitLoss + ",总盈亏:" + all_profit);
        ucd.setAddTime(new Date());
        ucd.setIsRead(Integer.valueOf(0));
@@ -1540,7 +1545,7 @@
        BigDecimal reckon_enable = user_enable_amt.subtract(marginAdd);
        log.info("用户追加保证金后的总资金  = {} , 可用资金 = {}", user_all_amt, reckon_enable);
        user.setEnableAmt(reckon_enable);
        applyEnableAndWithdrawChange(user, user_enable_amt, reckon_enable);
        int updateUserCount = this.userMapper.updateByPrimaryKeySelective(user);
        if (updateUserCount > 0) {
            log.info("【用户平仓】修改用户金额成功");
@@ -2217,10 +2222,18 @@
        adminPositionVO.setStockPlate(position.getStockPlate());
        PositionProfitVO positionProfitVO = getPositionProfitVO(position);
        adminPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
        adminPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
        adminPositionVO.setNow_price(positionProfitVO.getNowPrice());
        if (position.getStatus() != null && position.getStatus().intValue() == 2) {
            adminPositionVO.setProfitAndLose(position.getProfitAndLose());
            adminPositionVO.setAllProfitAndLose(position.getAllProfitAndLose());
            if (position.getSellOrderPrice() != null) {
                adminPositionVO.setNow_price(position.getSellOrderPrice().toPlainString());
            }
        } else {
            PositionProfitVO positionProfitVO = getPositionProfitVO(position);
            adminPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
            adminPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
            adminPositionVO.setNow_price(positionProfitVO.getNowPrice());
        }
        return adminPositionVO;
@@ -2259,10 +2272,18 @@
        agentPositionVO.setStockPlate(position.getStockPlate());
        PositionProfitVO positionProfitVO = getPositionProfitVO(position);
        agentPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
        agentPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
        agentPositionVO.setNow_price(positionProfitVO.getNowPrice());
        if (position.getStatus() != null && position.getStatus().intValue() == 2) {
            agentPositionVO.setProfitAndLose(position.getProfitAndLose());
            agentPositionVO.setAllProfitAndLose(position.getAllProfitAndLose());
            if (position.getSellOrderPrice() != null) {
                agentPositionVO.setNow_price(position.getSellOrderPrice().toPlainString());
            }
        } else {
            PositionProfitVO positionProfitVO = getPositionProfitVO(position);
            agentPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
            agentPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
            agentPositionVO.setNow_price(positionProfitVO.getNowPrice());
        }
        return agentPositionVO;
@@ -2329,16 +2350,20 @@
        BigDecimal orderTotalPrice = position.getOrderTotalPrice();
        if (position.getSellOrderId() != null) {
            BigDecimal subPrice = position.getSellOrderPrice().subtract(position.getBuyOrderPrice());
//            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue())).multiply(new BigDecimal(position.getOrderLever())).setScale(2,4);
            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue())).setScale(2,4);
            if ("买跌".equals(position.getOrderDirection())) {
                profitAndLose = profitAndLose.negate();
            if (Integer.valueOf(2).equals(position.getStatus())
                    && position.getProfitAndLose() != null
                    && position.getAllProfitAndLose() != null) {
                profitAndLose = position.getProfitAndLose();
                allProfitAndLose = position.getAllProfitAndLose();
            } else {
                BigDecimal subPrice = position.getSellOrderPrice().subtract(position.getBuyOrderPrice());
                profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue())).setScale(2, 4);
                if ("买跌".equals(position.getOrderDirection())) {
                    profitAndLose = profitAndLose.negate();
                }
                allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread())
                        .subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
            }
            allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
        } else {
            StockListVO stockListVO = new StockListVO();
            StockCoin stockCoin = new StockCoin();
src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
@@ -18,6 +18,7 @@
import com.nq.pojo.UserRecharge;
import com.nq.utils.DateTimeUtil;
import com.nq.utils.KeyUtils;
import com.nq.utils.UserFundUtil;
import com.nq.utils.redis.RedisShardedPoolUtils;
import java.math.BigDecimal;
@@ -205,10 +206,8 @@
        if (user == null) {
            return ServerResponse.createByErrorMsg("用户不存在");
        }
        BigDecimal userAmt_before = user.getUserAmt();
        BigDecimal enableAmt_before = user.getEnableAmt();
        user.setUserAmt(userAmt_before.add(userRecharge.getPayAmt()));
        user.setEnableAmt(enableAmt_before.add(userRecharge.getPayAmt()));
        BigDecimal payAmt = userRecharge.getPayAmt();
        UserFundUtil.creditUserBalance(user, payAmt);
        int updateCount = this.userMapper.updateByPrimaryKeySelective(user);
        if (updateCount > 0) {
            log.info("1.修改用户资金成功");
@@ -234,8 +233,8 @@
        ucd.setUserName(user.getRealName());
        ucd.setDeType("用户充值");
        ucd.setDeAmt(userRecharge.getPayAmt());
        ucd.setDeSummary("用户充值成功,充值前总金额:" + userAmt_before + ",充值后总金额:" + user.getUserAmt() + ",充值前可用:" + enableAmt_before + ",充值后可用:" + user
                .getEnableAmt());
        ucd.setDeSummary("用户充值成功,充值前总金额:" + user.getUserAmt().subtract(payAmt) + ",充值后总金额:" + user.getUserAmt() + ",充值前可用:" + user.getEnableAmt().subtract(payAmt) + ",充值后可用:" + user
                .getEnableAmt() + ",充值后可取:" + user.getEnaleWithdrawAmt());
        ucd.setAddTime(new Date());
        ucd.setIsRead(Integer.valueOf(0));
@@ -361,12 +360,9 @@
            if (user == null) {
                return ServerResponse.createByErrorMsg("用户不存在");
            }
            BigDecimal user_amt = user.getUserAmt().add(userRecharge.getPayAmt());
            log.info("管理员确认订单成功,增加用户 {} 总资金,原金额 = {} , 增加后 = {}", new Object[]{user.getId(), user.getUserAmt(), user_amt});
            user.setUserAmt(user_amt);
            BigDecimal user_enable_amt = user.getEnableAmt().add(userRecharge.getPayAmt());
            log.info("管理员确认订单成功,增加用户 {} 可用资金,原金额 = {} , 增加后 = {}", new Object[]{user.getId(), user.getEnableAmt(), user_enable_amt});
            user.setEnableAmt(user_enable_amt);
            UserFundUtil.creditUserBalance(user, userRecharge.getPayAmt());
            log.info("管理员确认订单成功,用户 {} 总资金={} 可用={} 可取={}",
                    user.getId(), user.getUserAmt(), user.getEnableAmt(), user.getEnaleWithdrawAmt());
            int updateCount = this.userMapper.updateByPrimaryKeySelective(user);
            if (updateCount > 0) {
@@ -420,9 +416,7 @@
            userRecharge.setPayChannel("2");
            userRecharge.setOrderStatus(Integer.valueOf(1));
            user.setUserAmt(user.getUserAmt().add(new BigDecimal(amt.intValue())));
            user.setEnableAmt(user.getEnableAmt().add(new BigDecimal(amt.intValue())));
            user.setEnaleWithdrawAmt(user.getEnaleWithdrawAmt().add(new BigDecimal(amt.intValue())));
            UserFundUtil.creditUserBalance(user, new BigDecimal(amt.intValue()));
            this.userMapper.updateByPrimaryKeySelective(user);
        } else if (state.intValue() == 2) {
            userRecharge.setOrderStatus(Integer.valueOf(2));
src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -14,6 +14,7 @@
import com.nq.utils.KeyUtils;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.SymmetricCryptoUtil;
import com.nq.utils.UserFundUtil;
import com.nq.utils.ip.IpUtils;
import com.nq.utils.ip.JuheIpApi;
import com.nq.utils.redis.CookieUtils;
@@ -106,6 +107,8 @@
    IUserService iUserService;
    @Autowired
    UserPositionMapper userPositionMapper;
    @Autowired
    UserWithdrawMapper userWithdrawMapper;
    @Autowired
    IUserRechargeService userRechargeService;
@@ -388,7 +391,7 @@
        User user = (User)JsonUtil.string2Obj(userJson, User.class);
        User dbuser = this.userMapper.selectByPrimaryKey(user.getId());
        RedisShardedPoolUtils.setEx(loginToken, JsonUtil.obj2String(dbuser), 9999);
        UserInfoVO userInfoVO = assembleUserInfoVO(dbuser);
        UserInfoVO userInfoVO = assembleUserInfoVO(dbuser, true);
        return ServerResponse.createBySuccess(userInfoVO);
    }
@@ -674,7 +677,7 @@
            BigDecimal enableIndexAmt = user.getEnableIndexAmt().add(new BigDecimal(amt.intValue()));
            user.setUserAmt(userAmt);
            user.setEnableAmt(enableAmt);
            UserFundUtil.debitEnableAndWithdraw(user, new BigDecimal(amt.intValue()));
            user.setUserIndexAmt(userIndexAmt);
            user.setEnableIndexAmt(enableIndexAmt);
            int updateCount = this.userMapper.updateByPrimaryKeySelective(user);
@@ -693,12 +696,11 @@
            }
            BigDecimal userAmt = user.getUserAmt().add(new BigDecimal(amt.intValue()));
            BigDecimal enableAmt = user.getEnableAmt().add(new BigDecimal(amt.intValue()));
            BigDecimal userIndexAmt = user.getUserIndexAmt().subtract(new BigDecimal(amt.intValue()));
            BigDecimal enableIndexAmt = user.getEnableIndexAmt().subtract(new BigDecimal(amt.intValue()));
            user.setUserAmt(userAmt);
            user.setEnableAmt(enableAmt);
            UserFundUtil.creditEnableAndWithdraw(user, new BigDecimal(amt.intValue()));
            user.setUserIndexAmt(userIndexAmt);
            user.setEnableIndexAmt(enableIndexAmt);
            int updateCount = this.userMapper.updateByPrimaryKeySelective(user);
@@ -717,12 +719,11 @@
            }
            BigDecimal userAmt = user.getUserAmt().subtract(new BigDecimal(amt.intValue()));
            BigDecimal enableAmt = user.getEnableAmt().subtract(new BigDecimal(amt.intValue()));
            BigDecimal userFutAmt = user.getUserFutAmt().add(new BigDecimal(amt.intValue()));
            BigDecimal enableFutAmt = user.getEnableFutAmt().add(new BigDecimal(amt.intValue()));
            user.setUserAmt(userAmt);
            user.setEnableAmt(enableAmt);
            UserFundUtil.debitEnableAndWithdraw(user, new BigDecimal(amt.intValue()));
            user.setUserFutAmt(userFutAmt);
            user.setEnableFutAmt(enableFutAmt);
            int updateCount = this.userMapper.updateByPrimaryKeySelective(user);
@@ -741,12 +742,11 @@
            }
            BigDecimal userAmt = user.getUserAmt().add(new BigDecimal(amt.intValue()));
            BigDecimal enableAmt = user.getEnableAmt().add(new BigDecimal(amt.intValue()));
            BigDecimal userFutAmt = user.getUserFutAmt().subtract(new BigDecimal(amt.intValue()));
            BigDecimal enableFutAmt = user.getEnableFutAmt().subtract(new BigDecimal(amt.intValue()));
            user.setUserAmt(userAmt);
            user.setEnableAmt(enableAmt);
            UserFundUtil.creditEnableAndWithdraw(user, new BigDecimal(amt.intValue()));
            user.setUserFutAmt(userFutAmt);
            user.setEnableFutAmt(enableFutAmt);
@@ -1569,18 +1569,30 @@
        List<User> users = this.userMapper.listByAdmin(realName, phone, agentId, accountType);
        for(User user:users){
        List<UserInfoVO> voList = Lists.newArrayListWithCapacity(users.size());
        for (User user : users) {
            user.setUserPwd("");
            voList.add(assembleUserInfoVO(user, false));
        }
        PageInfo pageInfo = new PageInfo(users);
        pageInfo.setList(voList);
        return ServerResponse.createBySuccess(pageInfo);
    }
    public ServerResponse findByUserId(Integer userId) { return ServerResponse.createBySuccess(this.userMapper.selectByPrimaryKey(userId)); }
    public ServerResponse findByUserId(Integer userId) {
        if (userId == null) {
            return ServerResponse.createByErrorMsg("用户ID不能为空");
        }
        User user = this.userMapper.selectByPrimaryKey(userId);
        if (user == null) {
            return ServerResponse.createByErrorMsg("用户不存在");
        }
        return ServerResponse.createBySuccess(assembleUserInfoVO(user, false));
    }
@@ -1631,7 +1643,17 @@
        } else {
            return ServerResponse.createByErrorMsg("不存在此操作");
        }
        user.setEnableAmt(sh_amt_back);
        BigDecimal amtDecimal = new BigDecimal(amt);
        if (direction.intValue() == 0) {
            UserFundUtil.creditUserBalance(user, amtDecimal);
        } else if (direction.intValue() == 1) {
            user.setEnableAmt(sh_amt_back);
            BigDecimal withdrawAmt = user.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : user.getEnaleWithdrawAmt();
            BigDecimal newWithdraw = withdrawAmt.subtract(amtDecimal);
            user.setEnaleWithdrawAmt(newWithdraw.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newWithdraw);
        } else {
            user.setEnableAmt(sh_amt_back);
        }
//        BigDecimal hk_amt = user.getHkAmt();
//
@@ -1839,6 +1861,11 @@
        agentUserListVO.setUserAmt(user.getUserAmt());
        agentUserListVO.setEnableAmt(user.getEnableAmt());
        BigDecimal pendingWithdrawAmt = userWithdrawMapper.sumPendingAmtByUserId(user.getId());
        BigDecimal resolvedWithdrawAmt = UserFundUtil.resolveWithdrawAmt(
                user.getEnableAmt(), user.getEnaleWithdrawAmt(), pendingWithdrawAmt);
        agentUserListVO.setEnaleWithdrawAmt(resolvedWithdrawAmt);
        agentUserListVO.setUserIndexAmt(user.getUserIndexAmt());
        agentUserListVO.setEnableIndexAmt(user.getEnableIndexAmt());
@@ -1852,6 +1879,21 @@
        BigDecimal allFreezAmt = positionVO.getAllFreezAmt();
        agentUserListVO.setAllProfitAndLose(allProfitAndLose);
        agentUserListVO.setAllFreezAmt(allFreezAmt);
        BigDecimal openBuyFees = BigDecimal.ZERO;
        List<UserPosition> openPositions = this.iUserPositionService.findPositionByUserIdAndSellIdIsNull(user.getId());
        if (openPositions != null) {
            for (UserPosition position : openPositions) {
                if (position.getOrderFee() != null) {
                    openBuyFees = openBuyFees.add(position.getOrderFee());
                }
            }
        }
        BigDecimal enableAmt = user.getEnableAmt() == null ? BigDecimal.ZERO : user.getEnableAmt();
        BigDecimal freezAmt = allFreezAmt == null ? BigDecimal.ZERO : allFreezAmt;
        BigDecimal profitAndLose = allProfitAndLose == null ? BigDecimal.ZERO : allProfitAndLose;
        BigDecimal userAllAmt = enableAmt.add(freezAmt).add(profitAndLose).add(openBuyFees);
        agentUserListVO.setUserAmt(userAllAmt.setScale(2, RoundingMode.HALF_UP));
        BigDecimal forceLine = forcePercent.multiply(allFreezAmt);
        forceLine = forceLine.add(user.getEnableAmt());
@@ -1890,6 +1932,11 @@
    }
    private UserInfoVO assembleUserInfoVO(User user) {
        return assembleUserInfoVO(user, true);
    }
    /** 与用户端 getUserInfo 一致的账户资产展示 */
    private UserInfoVO assembleUserInfoVO(User user, boolean persistWithdrawHeal) {
        UserInfoVO userInfoVO = new UserInfoVO();
        userInfoVO.setId(user.getId());
@@ -1902,6 +1949,7 @@
        userInfoVO.setAccountType(user.getAccountType());
        userInfoVO.setRecomPhone(user.getRecomPhone());
        userInfoVO.setIsLock(user.getIsLock());
        userInfoVO.setIsLogin(user.getIsLogin());
        userInfoVO.setRegTime(user.getRegTime());
        userInfoVO.setRegIp(user.getRegIp());
        userInfoVO.setRegAddress(user.getRegAddress());
@@ -1914,6 +1962,15 @@
        userInfoVO.setEnableAmt(user.getEnableAmt());
        userInfoVO.setTradingAmount(user.getTradingAmount());
        BigDecimal pendingWithdrawAmt = userWithdrawMapper.sumPendingAmtByUserId(user.getId());
        BigDecimal resolvedWithdrawAmt = UserFundUtil.resolveWithdrawAmt(
                user.getEnableAmt(), user.getEnaleWithdrawAmt(), pendingWithdrawAmt);
        if (persistWithdrawHeal
                && (user.getEnaleWithdrawAmt() == null || resolvedWithdrawAmt.compareTo(user.getEnaleWithdrawAmt()) != 0)) {
            user.setEnaleWithdrawAmt(resolvedWithdrawAmt);
            this.userMapper.updateByPrimaryKeySelective(user);
        }
        userInfoVO.setEnaleWithdrawAmt(resolvedWithdrawAmt);
        PositionVO positionVO = this.iUserPositionService.findUserPositionAllProfitAndLose(user.getId());
        userInfoVO.setAllFreezAmt(positionVO.getAllFreezAmt());
@@ -1936,7 +1993,6 @@
        BigDecimal userAllAmt = enableAmt.add(allFreezAmt).add(allProfitAndLose).add(openBuyFees);
        userInfoVO.setEnableIndexAmt(user.getEnableIndexAmt());
        userInfoVO.setEnaleWithdrawAmt(user.getEnaleWithdrawAmt());
        userInfoVO.setIsSignedContract(user.getIsSignedContract());
        userInfoVO.setIsSignedAgreement(user.getIsSignedAgreement());
        userInfoVO.setHkAmt(user.getHkAmt());
@@ -2113,7 +2169,18 @@
    @Override
    public void updateUserAmt(Double amt, Integer user_id) {
        userMapper.updateUserAmt(amt, user_id);
        if (amt == null || user_id == null || amt <= 0) {
            return;
        }
        User user = this.userMapper.selectByPrimaryKey(user_id);
        if (user == null) {
            log.error("updateUserAmt 用户不存在 userId={}", user_id);
            return;
        }
        UserFundUtil.creditUserBalance(user, BigDecimal.valueOf(amt));
        this.userMapper.updateByPrimaryKeySelective(user);
        log.info("updateUserAmt 充值入账 userId={} amt={} enable={} withdraw={}",
                user_id, amt, user.getEnableAmt(), user.getEnaleWithdrawAmt());
    }
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -13,6 +13,7 @@
import com.nq.service.*;
import com.nq.utils.DateTimeUtil;
import com.nq.utils.KeyUtils;
import com.nq.utils.UserFundUtil;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.redis.CookieUtils;
import com.nq.utils.redis.JsonUtil;
@@ -146,7 +147,8 @@
                    if (user.getEnableAmt().compareTo(new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice())) < 0) {
                        return ServerResponse.createByErrorMsg("用户可用余额不足,申购条件不满足");
                    }
                    user.setEnableAmt(user.getEnableAmt().subtract(new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice())));
                    BigDecimal applyAmt = new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice());
                    UserFundUtil.deductEnableAndWithdraw(user, applyAmt);
                    if (user.getDjzj() != null) {
                        user.setDjzj(user.getDjzj().add(new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice())));
                    } else {
@@ -250,7 +252,7 @@
                    Integer refund = refundenum * userStockSubscribe.getBuyPrice().intValue();
//                        log.info("退还金额"+refund);
                    user.setEnableAmt(user.getEnableAmt().add(BigDecimal.valueOf(refund)));
                    user.setEnaleWithdrawAmt(user.getEnaleWithdrawAmt().add(BigDecimal.valueOf(refund)));
                    user.setEnaleWithdrawAmt((user.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : user.getEnaleWithdrawAmt()).add(BigDecimal.valueOf(refund)));
                    user.setDjzj(user.getDjzj().subtract(BigDecimal.valueOf(refund)));
                    int ret1 = userMapper.updateByPrimaryKey(user);
                    if (ret1 <= 0) {
@@ -275,7 +277,7 @@
                    iSiteMessageService.insert(siteMessage);
                } else {
                    User user = userMapper.selectByPrimaryKey(userStockSubscribe.getUserId());
                    user.setEnableAmt(user.getEnableAmt().add(userStockSubscribe.getBond()));
                    UserFundUtil.refundEnableAndWithdraw(user, userStockSubscribe.getBond());
                    user.setDjzj(user.getDjzj().subtract(userStockSubscribe.getBond()));
                    userMapper.updateByPrimaryKey(user);
                    SiteMessage siteMessage = new SiteMessage();
@@ -526,14 +528,13 @@
                    }
//                    log.info("原可用資金"+user1.getEnableAmt());
                    BigDecimal enableAmt = user1.getEnableAmt().subtract(userStockSubscribe.getBond());
                    BigDecimal enaleWithdrawAmt = user1.getEnaleWithdrawAmt().subtract(userStockSubscribe.getBond());
                    if (enaleWithdrawAmt.compareTo(userStockSubscribe.getBond()) < 0) {
                        //若可取資金小於保證金,但是可用資金充足,則令當前可取資金為0
                    BigDecimal withdrawAmt = user1.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : user1.getEnaleWithdrawAmt();
                    BigDecimal bond = userStockSubscribe.getBond();
                    if (withdrawAmt.compareTo(bond) < 0) {
                        user1.setEnaleWithdrawAmt(BigDecimal.ZERO);
                    } else {
                        user1.setEnaleWithdrawAmt(enaleWithdrawAmt);
                        user1.setEnaleWithdrawAmt(withdrawAmt.subtract(bond));
                    }
//                    log.info("enableAmt" + enableAmt);
                    user1.setEnableAmt(enableAmt);
//                    log.info("可用資金" + user1.getEnableAmt()+"保證金"+userStockSubscribe.getBond()+"原djzj"+user1.getDjzj());
                    if (user1.getDjzj() != null) {
@@ -647,19 +648,7 @@
            }
            BigDecimal totalNewStockPrice = new BigDecimal(num).multiply(stockSubscribe.getPrice());
            user.setEnableAmt(user.getEnableAmt().subtract(totalNewStockPrice));
            BigDecimal user_enable_withdraw_amt = user.getEnaleWithdrawAmt();
            //修改用戶可取余額=當前可取余額-下單總金額
            int compareUserWithdrawAmtInt = user_enable_withdraw_amt.compareTo(totalNewStockPrice);
            if (compareUserWithdrawAmtInt == -1) {
                //若可取余額小於下單總額,但是可用余額充足,令可取余額為0
                user.setEnaleWithdrawAmt(BigDecimal.ZERO);
            } else {
                user_enable_withdraw_amt = user_enable_withdraw_amt.subtract(totalNewStockPrice);
                user.setEnaleWithdrawAmt(user_enable_withdraw_amt);
            }
            //                if (user.getDjzj()!=null) {
            UserFundUtil.deductEnableAndWithdraw(user, totalNewStockPrice);
//                        user.setDjzj(user.getDjzj().add(new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice())));
//                }else
//                {
@@ -755,8 +744,7 @@
        if (userStockSubscribe.getStatus() == 1) {
            //审核失败退款
            if ("2".equals(status)) {
                user.setEnableAmt(user.getEnableAmt().add(userStockSubscribe.getBond()));
                user.setEnaleWithdrawAmt(user.getEnaleWithdrawAmt().add(userStockSubscribe.getBond()));
                UserFundUtil.refundEnableAndWithdraw(user, userStockSubscribe.getBond());
                int ret = userMapper.updateById(user);
                if (ret <= 0) {
                    return ServerResponse.createByErrorMsg("未知原因,审核失败");
@@ -872,8 +860,7 @@
                userStockSubscribe.setApplyNumber(Integer.valueOf(num));
                this.userStockSubscribeMapper.updateById(userStockSubscribe);
                BigDecimal reimburse = new BigDecimal(userStockSubscribe.getApplyNums() - Integer.parseInt(num)).multiply(userStockSubscribe.getBuyPrice());
                user.setEnableAmt(user.getEnableAmt().add(reimburse));
                user.setEnaleWithdrawAmt(user.getEnaleWithdrawAmt().add(reimburse));
                UserFundUtil.refundEnableAndWithdraw(user, reimburse);
                int ret = userMapper.updateById(user);
                if (ret <= 0) {
                    return ServerResponse.createByErrorMsg("未知原因,审核失败");
src/main/java/com/nq/utils/UserFundUtil.java
New file
@@ -0,0 +1,107 @@
package com.nq.utils;
import com.nq.pojo.User;
import java.math.BigDecimal;
public final class UserFundUtil {
    private UserFundUtil() {
    }
    /** T+0:充值/入款时同步增加总资金、可用、可取 */
    public static void creditUserBalance(User user, BigDecimal amt) {
        if (user == null || amt == null || amt.compareTo(BigDecimal.ZERO) <= 0) {
            return;
        }
        BigDecimal userAmt = user.getUserAmt() == null ? BigDecimal.ZERO : user.getUserAmt();
        BigDecimal enableAmt = user.getEnableAmt() == null ? BigDecimal.ZERO : user.getEnableAmt();
        BigDecimal withdrawAmt = user.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : user.getEnaleWithdrawAmt();
        user.setUserAmt(userAmt.add(amt));
        user.setEnableAmt(enableAmt.add(amt));
        user.setEnaleWithdrawAmt(withdrawAmt.add(amt));
    }
    /** T+0:扣款时同步减少可用与可取(可取不低于 0) */
    public static void debitUserBalance(User user, BigDecimal amt) {
        if (user == null || amt == null || amt.compareTo(BigDecimal.ZERO) <= 0) {
            return;
        }
        BigDecimal enableAmt = user.getEnableAmt() == null ? BigDecimal.ZERO : user.getEnableAmt();
        BigDecimal withdrawAmt = user.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : user.getEnaleWithdrawAmt();
        user.setEnableAmt(enableAmt.subtract(amt));
        BigDecimal newWithdraw = withdrawAmt.subtract(amt);
        user.setEnaleWithdrawAmt(newWithdraw.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newWithdraw);
    }
    /** T+0:仅同步可用与可取(不动总资金),用于账户间划转等 */
    public static void creditEnableAndWithdraw(User user, BigDecimal amt) {
        if (user == null || amt == null || amt.compareTo(BigDecimal.ZERO) <= 0) {
            return;
        }
        BigDecimal enableAmt = user.getEnableAmt() == null ? BigDecimal.ZERO : user.getEnableAmt();
        BigDecimal withdrawAmt = user.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : user.getEnaleWithdrawAmt();
        user.setEnableAmt(enableAmt.add(amt));
        user.setEnaleWithdrawAmt(withdrawAmt.add(amt));
    }
    /** T+0:仅扣减可用与可取(不动总资金) */
    public static void debitEnableAndWithdraw(User user, BigDecimal amt) {
        debitUserBalance(user, amt);
    }
    /** T+0:可用变动时同步调整可取(平仓/追加保证金等) */
    public static void applyEnableDelta(User user, BigDecimal enableBefore, BigDecimal enableAfter) {
        if (user == null || enableBefore == null || enableAfter == null) {
            return;
        }
        user.setEnableAmt(enableAfter);
        BigDecimal delta = enableAfter.subtract(enableBefore);
        BigDecimal withdrawAmt = user.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : user.getEnaleWithdrawAmt();
        BigDecimal newWithdraw = withdrawAmt.add(delta);
        if (newWithdraw.compareTo(BigDecimal.ZERO) < 0) {
            newWithdraw = BigDecimal.ZERO;
        }
        user.setEnaleWithdrawAmt(newWithdraw);
    }
    /** T+0:扣款时同步扣减可用与可取,可取不足时归零 */
    public static void deductEnableAndWithdraw(User user, BigDecimal amt) {
        if (user == null || amt == null || amt.compareTo(BigDecimal.ZERO) <= 0) {
            return;
        }
        BigDecimal enableAmt = user.getEnableAmt() == null ? BigDecimal.ZERO : user.getEnableAmt();
        user.setEnableAmt(enableAmt.subtract(amt));
        BigDecimal withdrawAmt = user.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : user.getEnaleWithdrawAmt();
        if (withdrawAmt.compareTo(amt) < 0) {
            user.setEnaleWithdrawAmt(BigDecimal.ZERO);
        } else {
            user.setEnaleWithdrawAmt(withdrawAmt.subtract(amt));
        }
    }
    /** T+0:退款时同步增加可用与可取 */
    public static void refundEnableAndWithdraw(User user, BigDecimal amt) {
        creditEnableAndWithdraw(user, amt);
    }
    /**
     * T+0 可取资金解析:可用减去待审核提现冻结为下限,避免 T+1 遗留数据导致可取为 0。
     */
    public static BigDecimal resolveWithdrawAmt(BigDecimal enableAmt, BigDecimal withdrawAmt, BigDecimal pendingWithdrawAmt) {
        BigDecimal enable = enableAmt == null ? BigDecimal.ZERO : enableAmt;
        BigDecimal withdraw = withdrawAmt == null ? BigDecimal.ZERO : withdrawAmt;
        BigDecimal pending = pendingWithdrawAmt == null ? BigDecimal.ZERO : pendingWithdrawAmt;
        BigDecimal floor = enable.subtract(pending);
        if (floor.compareTo(BigDecimal.ZERO) < 0) {
            floor = BigDecimal.ZERO;
        }
        if (withdraw.compareTo(floor) < 0) {
            withdraw = floor;
        }
        if (withdraw.compareTo(enable) > 0) {
            withdraw = enable;
        }
        return withdraw;
    }
}
src/main/java/com/nq/utils/task/user/UserAssetAuditTask.java
@@ -1,26 +1,23 @@
package com.nq.utils.task.user;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.nq.common.ServerResponse;
import com.nq.dao.UserMapper;
import com.nq.pojo.User;
import com.nq.service.IUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.List;
/**
 * 用户资产清算模块,每天非节假日晚上8点固定的清算可用和可取资金
 * 用户资产清算:T+0 下仅修正可取资金超过可用的情况,不再将可用全量同步为可取
 */
@Component
public class UserAssetAuditTask {
    @Autowired
    private IUserService iUserService;
    @Autowired
    private UserMapper userMapper;
@@ -32,19 +29,22 @@
     */
    @Scheduled(cron = "0 0 20 * * MON-FRI")
    public void doAuditTask(){
        int pageNo=1;
        boolean hasNextPage=true;
        while (hasNextPage&&pageNo<=300){
            ServerResponse serverResponse = iUserService.listByAdmin(null, null, null, null, pageNo, 30,null);
            PageInfo pageInfo = (PageInfo) serverResponse.getData();
            hasNextPage=pageInfo.isHasNextPage();
        int pageNo = 1;
        boolean hasNextPage = true;
        while (hasNextPage && pageNo <= 300) {
            PageHelper.startPage(pageNo, 30);
            List<User> list = userMapper.listByAdmin(null, null, null, null);
            PageInfo<User> pageInfo = new PageInfo<>(list);
            hasNextPage = pageInfo.isHasNextPage();
            pageNo++;
            List<User> list = pageInfo.getList();
            for(User u:list){
                //可用资金复制到可取资金操作
                u.setEnaleWithdrawAmt(u.getEnableAmt());
                userMapper.updateByPrimaryKeySelective(u);
                log.info("[清算]id:{},withdraw:{}",u.getId(),u.getEnaleWithdrawAmt());
            for (User u : list) {
                BigDecimal enable = u.getEnableAmt() == null ? BigDecimal.ZERO : u.getEnableAmt();
                BigDecimal withdraw = u.getEnaleWithdrawAmt() == null ? BigDecimal.ZERO : u.getEnaleWithdrawAmt();
                if (withdraw.compareTo(enable) > 0) {
                    u.setEnaleWithdrawAmt(enable);
                    userMapper.updateByPrimaryKeySelective(u);
                    log.info("[清算]id:{},withdraw capped to:{}", u.getId(), enable);
                }
            }
        }
    }
src/main/java/com/nq/vo/agent/AgentUserListVO.java
@@ -41,6 +41,7 @@
    private BigDecimal userAmt;
    private BigDecimal enableAmt;
    private BigDecimal enaleWithdrawAmt;
    private BigDecimal forceLine;
    private BigDecimal allProfitAndLose;
    private BigDecimal allFreezAmt;
@@ -113,6 +114,10 @@
    public void setEnableAmt(BigDecimal enableAmt) {
        this.enableAmt = enableAmt;
    }
    public void setEnaleWithdrawAmt(BigDecimal enaleWithdrawAmt) {
        this.enaleWithdrawAmt = enaleWithdrawAmt;
    }
    public void setForceLine(BigDecimal forceLine) {
@@ -410,6 +415,10 @@
        return this.enableAmt;
    }
    public BigDecimal getEnaleWithdrawAmt() {
        return this.enaleWithdrawAmt;
    }
    public BigDecimal getForceLine() {
        return this.forceLine;
    }
src/main/java/com/nq/vo/user/UserInfoVO.java
@@ -78,8 +78,8 @@
    private BigDecimal historyProfitLoss;
    private String isSignedContract;
    private String isSignedAgreement;
    private Integer isLogin;
    public void setAgentId(Integer agentId) {
        this.agentId = agentId;
src/main/resources/mapper/UserPositionMapper.xml
@@ -519,7 +519,17 @@
        and agent_id = #{searchId}
      </if>
      <if test="state != null">
        and status = #{state, jdbcType=INTEGER}
        <choose>
          <when test="state == 0">
            and status = 1
          </when>
          <when test="state == 1">
            and status = 2
          </when>
          <otherwise>
            and status = #{state, jdbcType=INTEGER}
          </otherwise>
        </choose>
      </if>
      <if test="userId != null and userId != '' ">
        and user_id = #{userId}
src/main/resources/mapper/UserWithdrawMapper.xml
@@ -281,5 +281,11 @@
    DELETE FROM user_withdraw WHERE user_id = #{userId}
  </delete>
  <select id="sumPendingAmtByUserId" resultType="java.math.BigDecimal">
    select ifnull(sum(with_amt), 0)
    from user_withdraw
    where user_id = #{userId}
      and with_status = 0
  </select>
</mapper>
target/classes/com/nq/dao/UserWithdrawMapper.class
Binary files differ
target/classes/com/nq/service/impl/FundsApplyServiceImpl.class
Binary files differ
target/classes/com/nq/service/impl/PayServiceImpl.class
Binary files differ
target/classes/com/nq/service/impl/UserPositionServiceImpl.class
Binary files differ
target/classes/com/nq/service/impl/UserRechargeServiceImpl.class
Binary files differ
target/classes/com/nq/service/impl/UserServiceImpl.class
Binary files differ
target/classes/com/nq/service/impl/UserStockSubscribeServiceImpl.class
Binary files differ
target/classes/com/nq/utils/task/user/UserAssetAuditTask.class
Binary files differ
target/classes/com/nq/vo/agent/AgentUserListVO.class
Binary files differ
target/classes/com/nq/vo/user/UserInfoVO.class
Binary files differ
target/classes/mapper/UserPositionMapper.xml
@@ -519,7 +519,17 @@
        and agent_id = #{searchId}
      </if>
      <if test="state != null">
        and status = #{state, jdbcType=INTEGER}
        <choose>
          <when test="state == 0">
            and status = 1
          </when>
          <when test="state == 1">
            and status = 2
          </when>
          <otherwise>
            and status = #{state, jdbcType=INTEGER}
          </otherwise>
        </choose>
      </if>
      <if test="userId != null and userId != '' ">
        and user_id = #{userId}
target/classes/mapper/UserWithdrawMapper.xml
@@ -281,5 +281,11 @@
    DELETE FROM user_withdraw WHERE user_id = #{userId}
  </delete>
  <select id="sumPendingAmtByUserId" resultType="java.math.BigDecimal">
    select ifnull(sum(with_amt), 0)
    from user_withdraw
    where user_id = #{userId}
      and with_status = 0
  </select>
</mapper>
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -422,6 +422,7 @@
com\nq\service\impl\UserServiceImpl.class
com\nq\utils\task\stock\SaveDayMarketsTask.class
com\nq\pojo\SiteAdmin.class
com\nq\utils\UserFundUtil.class
com\nq\utils\email\MailSender$1.class
com\nq\controller\agent\AgentUserController.class
com\nq\service\ISitePayService.class
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -292,6 +292,7 @@
D:\ZyaProject\A前端\A-stock\src\main\java\com\nq\service\impl\SiteNewsServiceImpl.java
D:\ZyaProject\A前端\A-stock\src\main\java\com\nq\controller\backend\AdminFundsSettingController.java
D:\ZyaProject\A前端\A-stock\src\main\java\com\nq\service\impl\SiteSettingServiceImpl.java
D:\ZyaProject\A前端\A-stock\src\main\java\com\nq\utils\UserFundUtil.java
D:\ZyaProject\A前端\A-stock\src\main\java\com\nq\service\IUserBankService.java
D:\ZyaProject\A前端\A-stock\src\main\java\com\nq\service\IAgentAgencyFeeService.java
D:\ZyaProject\A前端\A-stock\src\main\java\com\nq\utils\pay\CmcPayTool.java
target/stock-0.0.1-SNAPSHOT.jar
Binary files differ
target/stock-0.0.1-SNAPSHOT.jar.original
Binary files differ