peternameyakj
2024-07-14 85037c73f8b16f4258a2af354cd162247700ffde
Merge remote-tracking branch 'origin/6-29' into 6-29
43 files modified
9 files added
1396 ■■■■■ changed files
src/main/java/com/nq/controller/StockApiController.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/UserApiController.java 56 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/UserPositionCheckDzController.java 132 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/AdminPositionController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/AdminStockController.java 12 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/AdminStockDz.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java 3 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/AdminUserController.java 10 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/protol/UserController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/protol/UserWithdrawController.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/dao/StockMapper.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/dao/UserBankMapper.java 10 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/dao/UserMapper.java 3 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/dao/UserPositionCheckDzMapper.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/StockDz.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/StockSubscribe.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/UserBank.java 102 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/UserPositionCheckDz.java 68 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/UserStockSubscribe.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IPriceServices.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IStockService.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IStockSubscribeService.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IUserBankService.java 3 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IUserPositionService.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IUserService.java 4 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IUserStockSubscribeService.java 3 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IUserWithdrawService.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/StockDzService.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/UserPositionCheckDzService.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/PriceServicesImpl.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockDzServiceImpl.java 57 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockServiceImpl.java 14 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockSettingServicesImpl.java 6 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java 41 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/TradingHourServiceImpl.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserBankServiceImpl.java 86 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserPositionCheckDzServiceImpl.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java 35 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserServiceImpl.java 58 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java 79 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java 129 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/stock/sina/StockApi.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/stock/PageQuery.java 56 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/stock/StockListVO.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/stock/UserStockSubscribeAddIn.java 123 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/user/UserOut.java 29 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/user/UserQueryParams.java 27 ●●●●● patch | view | raw | blame | history
src/main/resources/application.properties 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/StockDzMapper.xml 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/StockMapper.xml 32 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/UserBankMapper.xml 5 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/UserMapper.xml 14 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/StockApiController.java
@@ -88,8 +88,12 @@
     */
    @PostMapping({"getDzList.do"})
    @ResponseBody
    public ServerResponse getDzList() {
        return this.stockDzService.getDzList();
    public ServerResponse getDzList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                    @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
                                    @RequestParam(value = "orderBy", required = false) String orderBy,
                                    @RequestParam(value = "keyWords", required = false) String keyWords,
                                    HttpServletRequest request) {
        return stockDzService.getDzList(pageNum, pageSize, orderBy,keyWords , request);
    }
src/main/java/com/nq/controller/UserApiController.java
@@ -1,10 +1,19 @@
package com.nq.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nq.common.ServerResponse;
import com.nq.dao.MoneyLogMapper;
import com.nq.dao.StockConfigMapper;
import com.nq.pojo.MoneyLog;
import com.nq.pojo.SiteSpread;
import com.nq.pojo.StockConfig;
import com.nq.service.IMoneyLogServces;
import com.nq.service.ISiteSpreadService;
import com.nq.service.IStockConfigServices;
import com.nq.service.IUserService;
import com.nq.utils.PropertiesUtil;
@@ -17,14 +26,18 @@
import com.nq.utils.redis.RedisShardedPoolUtils;
import com.nq.utils.translate.GoogleTranslateUtil;
import com.nq.vo.user.UserLoginResultVO;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.util.TextUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,6 +55,7 @@
import org.springframework.web.bind.annotation.ResponseBody;
import java.math.BigDecimal;
import java.util.List;
@Controller
@@ -54,6 +68,16 @@
    @Autowired
    ISiteSpreadService iSiteSpreadService;
    @Autowired
    StockConfigMapper stockConfigMapper;
    @Autowired
    IMoneyLogServces iMoneyLogServces;
    @Autowired
    MoneyLogMapper moneyLogMapper;
    //注册
    @RequestMapping(value = {"reg.do"}, method = {RequestMethod.POST})
    @ResponseBody
@@ -121,6 +145,38 @@
        return ServerResponse.createBySuccess("Success", siteSpread);
    }
    @RequestMapping({"queryStockConfig.do"})
    @ResponseBody
    public  ServerResponse  updateConfig(){
        StockConfig stockConfig = stockConfigMapper.selectOne(new LambdaQueryWrapper<StockConfig>().eq(StockConfig::getCKey, "buy_handling_charge"));
        return  ServerResponse.createBySuccess(stockConfig);
    }
    @RequestMapping({"moneylogAll.do"})
    @ResponseBody
    public ServerResponse taskList(@RequestParam(value = "userId") String userId,
                                   @RequestParam(value = "type", required = false) String type,
                                   @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                   @RequestParam(value = "pageSize", defaultValue = "50") int pageSize,
                                   HttpServletRequest request) {
        Page<MoneyLog> page1 = new Page<>(pageNum, pageSize);
        QueryWrapper<MoneyLog> queryWrapper = new QueryWrapper<>();
        if(!TextUtils.isEmpty(userId)){
            queryWrapper.eq("user_id",userId);
        }
        if(StringUtils.isNotEmpty(type)){
            queryWrapper.eq("type",type);
        }
        queryWrapper.orderByDesc("create_time");
        Page<MoneyLog> moneyLogPage = moneyLogMapper.selectPage(page1, queryWrapper);
        List<MoneyLog> records = moneyLogPage.getRecords();
        records.forEach(f->{
            f.setDescs( new GoogleTranslateUtil().translate(f.getDescs(),request.getHeader("lang")));
        });
        moneyLogPage.setRecords(records);
        return ServerResponse.createBySuccess(moneyLogPage);
    }
}
src/main/java/com/nq/controller/UserPositionCheckDzController.java
New file
@@ -0,0 +1,132 @@
package com.nq.controller;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nq.common.ServerResponse;
import com.nq.dao.*;
import com.nq.enums.EStockType;
import com.nq.enums.EUserAssets;
import com.nq.pojo.*;
import com.nq.service.IPriceServices;
import com.nq.service.IUserService;
import com.nq.service.UserPositionCheckDzService;
import com.nq.service.impl.UserAssetsServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
/**
 * @program: dabaogp
 * @description: 大宗交易审核
 * @create: 2024-07-02 14:33
 **/
@Controller
@RequestMapping({"/api/dzCheck/"})
public class UserPositionCheckDzController {
    @Autowired
    UserPositionCheckDzService service;
    @Autowired
    UserPositionCheckDzMapper mapper;
    @Autowired
    UserPositionMapper userPositionMapper;
    @Autowired
    UserAssetsServices userAssetsServices;
    @Autowired
    UserMapper userMapper;
    @Autowired
    IPriceServices priceServices;
    @Autowired
    StockDzMapper stockDzMapper;
    //大宗交易审核列表
    @RequestMapping({"getList.do"})
    @ResponseBody
    public ServerResponse getList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                  @RequestParam(value = "pageSize", defaultValue = "15") int pageSize,
                                  @RequestParam(value = "type", required = false) Integer type,
                                  @RequestParam(value = "stockCode", required = false) String stockCode) {
        Page<UserPositionCheckDz> page = Page.of(pageNum, pageSize);
        LambdaQueryWrapper<UserPositionCheckDz> queryWrapper = new LambdaQueryWrapper<UserPositionCheckDz>();
        // 判断type是否为空,不为空则加入查询条件
        if (type != null) {
            queryWrapper.eq(UserPositionCheckDz::getCheckType, type);
        }
        // 判断stockCode是否为空,不为空则加入查询条件
        if (stockCode != null) {
            queryWrapper.eq(UserPositionCheckDz::getStockCode, stockCode);
        }
        queryWrapper.orderByDesc(UserPositionCheckDz::getBuyOrderTime);
        Page<UserPositionCheckDz> pageList = service.page(page, queryWrapper);
        return ServerResponse.createBySuccess(pageList);
    }
    //大宗审核
    @RequestMapping({"check.do"})
    @ResponseBody
    public ServerResponse check(@RequestParam(value = "id") Integer id,
                                @RequestParam(value = "checkType") Integer checkType,
                                @RequestParam(value = "orderNum") Integer orderNum) {
        if(checkType != 2 && (id == null || checkType == null || orderNum == null)){
            return ServerResponse.createByErrorMsg("参数不能为空");
        }
        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("IN", 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);
        userPositionMapper.insert(userPosition);
        userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
        return ServerResponse.createBySuccessMsg("审核成功,订单已转客户持仓");
    }
}
src/main/java/com/nq/controller/backend/AdminPositionController.java
@@ -70,7 +70,15 @@
    //创建持仓单
    @RequestMapping({"create.do"})
    @ResponseBody
    public ServerResponse create(@RequestParam("userId") Integer userId, @RequestParam("stockCode") String stockCode, @RequestParam("buyPrice") String buyPrice, @RequestParam("buyTime") String buyTime, @RequestParam("buyNum") Integer buyNum, @RequestParam("buyType") Integer buyType, @RequestParam("lever") Integer lever, @RequestParam(value = "profitTarget",required = false) BigDecimal profitTarget, @RequestParam(value = "stopTarget",required = false) BigDecimal stopTarget) {
    public ServerResponse create(@RequestParam("userId") Integer userId,
                                 @RequestParam("stockCode") String stockCode,
                                 @RequestParam("buyPrice") String buyPrice,
                                 @RequestParam("buyTime") String buyTime,
                                 @RequestParam("buyNum") Integer buyNum,
                                 @RequestParam("buyType") Integer buyType,
                                 @RequestParam(value  =  "lever",  defaultValue  =  "1") Integer lever,
                                 @RequestParam(value = "profitTarget",required = false) BigDecimal profitTarget,
                                 @RequestParam(value = "stopTarget",required = false) BigDecimal stopTarget) {
        return this.iUserPositionService.create(userId, stockCode, buyPrice, buyTime, buyNum, buyType, lever, profitTarget, stopTarget);
    }
src/main/java/com/nq/controller/backend/AdminStockController.java
@@ -33,8 +33,16 @@
     //查询产品管理 所以股票信息及模糊查询
     @RequestMapping({"list.do"})
     @ResponseBody
     public ServerResponse list(@RequestParam(value = "showState", required = false) Integer showState, @RequestParam(value = "lockState", required = false) Integer lockState, @RequestParam(value = "code", required = false) String code, @RequestParam(value = "name", required = false) String name, @RequestParam(value = "stockPlate", required = false) String stockPlate, @RequestParam(value = "stockType", required = false) String stockType, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize, HttpServletRequest request) {
         return this.iStockService.listByAdmin(showState, lockState, code, name, stockPlate, stockType, pageNum, pageSize, request);
     public ServerResponse list(@RequestParam(value = "stockGid", required = false) String stockGid,
                                @RequestParam(value = "showState", required = false) Integer showState,
                                @RequestParam(value = "lockState", required = false) Integer lockState,
                                @RequestParam(value = "code", required = false) String code,
                                @RequestParam(value = "name", required = false) String name,
                                @RequestParam(value = "stockPlate", required = false) String stockPlate,
                                @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
                                HttpServletRequest request) {
         return this.iStockService.listByAdmin(stockGid,showState, lockState, code, name, stockPlate, null, pageNum, pageSize, request);
     }
     //修改产品管理 股票是否锁定
src/main/java/com/nq/controller/backend/AdminStockDz.java
@@ -8,6 +8,8 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
@RestController
@RequestMapping({"/admin/stockDz/"})
public class AdminStockDz {
@@ -15,7 +17,7 @@
    StockDzService stockDzService;
    /**
     * @Description:  获取大宗列表
     * @Description: 获取大宗列表
     * @Param:
     * @return:
     */
@@ -23,21 +25,25 @@
    public ServerResponse getDzListByAdmin(String keywords) {
        return stockDzService.getDzListByAdmin(keywords);
    }
    /**
     * @Description:  新增大宗
     * @Description: 新增大宗
     * @Param:
     * @return:
     */
    @RequestMapping({"addByAdmin.do"})
    public ServerResponse addByAdmin(@RequestParam(value = "stockCode")String stockCode,
                                     @RequestParam(value = "stockNum")String stockNum,
                                     @RequestParam(value = "password")String password,
                                     @RequestParam(value = "startTime")String startTime,
                                     @RequestParam(value = "endTime")String endTime,
                                     @RequestParam(value = "discount") String discount,
                                     @RequestParam(value = "period")Integer period) {
        return stockDzService.addByAdmin(stockCode,stockNum,password,startTime,endTime,discount,period);
    public ServerResponse addByAdmin(@RequestParam(value = "stockCode") String stockCode,
                                     @RequestParam(value = "stockNum") String stockNum,
                                     @RequestParam(value = "password") String password,
                                     @RequestParam(value = "startTime") String startTime,
                                     @RequestParam(value = "endTime") String endTime,
                                     @RequestParam(value = "discount", required = false) String discount,
                                     @RequestParam(value = "period") Integer period,
                                     @RequestParam(value = "nowPrice") String nowPrice,
                                     @RequestParam(value = "switchType", defaultValue = "0") Integer switchType) {
        return stockDzService.addByAdmin(stockCode, stockNum, password, startTime, endTime, discount, period,nowPrice,switchType);
    }
    /**
     * 删除大宗
     */
@@ -45,6 +51,7 @@
    public ServerResponse deleteByAdmin(@RequestParam(value = "id") String id) {
        return stockDzService.deleteByAdmin(id);
    }
    /**
     * 修改大宗
     */
src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java
@@ -42,8 +42,9 @@
                               @RequestParam(value = "zt", required = false) Integer zt,
                               @RequestParam(value = "isLock", required = false) Integer isLock,
                               @RequestParam(value = "type", required = false) Integer type,
                               @RequestParam(value = "stockType", required = false) Integer stockType,
                               HttpServletRequest request) {
        return this.iStockSubscribeService.list(name,code,zt,0,isLock,type,request);
        return this.iStockSubscribeService.list(name,code,zt,0,isLock,type,stockType,1,request);
    }
    /** 
    * @Description:  新增新股
src/main/java/com/nq/controller/backend/AdminUserController.java
@@ -8,6 +8,8 @@
import com.nq.service.IUserBankService;
import com.nq.service.IUserService;
import javax.servlet.http.HttpServletRequest;
import com.nq.vo.user.UserQueryParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +17,9 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.text.ParseException;
import java.util.Date;
@Controller
@@ -32,8 +37,9 @@
    //分页查询所有用户列表信息 及模糊查询用户信息
    @RequestMapping({"list.do"})
    @ResponseBody
    public ServerResponse list(@RequestParam(value = "realName", required = false) String realName, @RequestParam(value = "phone", required = false) String phone, @RequestParam(value = "agentId", required = false) Integer agentId, @RequestParam(value = "accountType", required = false) Integer accountType, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize, HttpServletRequest request) {
        return this.iUserService.listByAdmin(realName, phone, agentId, accountType, pageNum, pageSize, request);
    public ServerResponse list(UserQueryParams queryParams,
                               HttpServletRequest request) throws ParseException {
        return this.iUserService.listByAdmin(queryParams.getRealName(),queryParams.getPhone(),queryParams.getAgentId(),queryParams.getAccountType(),queryParams.getPageNum(),queryParams.getPageSize(),queryParams.getIsLock(),queryParams.getIsLogin(),queryParams.getRegTime(),queryParams.getIsActive(),request);
    }
    //查询用户信息是否存在
src/main/java/com/nq/controller/protol/UserController.java
@@ -17,6 +17,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.nq.vo.stock.UserStockSubscribeAddIn;
import org.apache.ibatis.annotations.Property;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -122,6 +123,7 @@
            buyOrderCreated.set(true);
            return this.iUserPositionService.buy(stockId, buyNum, buyType, lever,profitTarget,stopLoss, request);
        } catch (Exception e) {
            e.printStackTrace();
            return ServerResponse.createByErrorMsg("订单异常,请稍后重试", request);
        }  finally{
            buyLock.unlock();
@@ -300,7 +302,7 @@
                               @RequestParam(value = "type", required = false) Integer type,
                               @RequestParam(value = "getType", required = false) Integer getType,
                               HttpServletRequest request) {
        return this.iStockSubscribeService.list(name,code,zt,getType,isLock,type,request);
        return this.iStockSubscribeService.list(name,code,zt,getType,isLock,type,null,0,request);
    }
    /**
     * 新股申购 添加
@@ -309,7 +311,7 @@
     */
    @RequestMapping({"add.do"})
    @ResponseBody
    public ServerResponse add(UserStockSubscribe model,HttpServletRequest request) throws Exception {
    public ServerResponse add(UserStockSubscribeAddIn model, HttpServletRequest request) throws Exception {
        return this.iUserStockSubscribeService.insert(model,request);
    }
    /*新股申购-用户新股申购数据*/
@@ -355,14 +357,14 @@
     */
    @RequestMapping({"buyStockDz.do"})
    @ResponseBody
    public ServerResponse buyDz(@RequestParam("stockCode") String stockCode, @RequestParam("password") String password,@RequestParam("num") Integer num, HttpServletRequest request) throws Exception {
    public ServerResponse buyDz(@RequestParam("dzId") Integer dzId, @RequestParam("password") String password,@RequestParam("num") Integer num, HttpServletRequest request) throws Exception {
        lock.lock();
        try {
            if (orderCreated.get()) {
                return ServerResponse.createByErrorMsg("当前内幕交易人数过多,请稍后重试", request);
            }
            orderCreated.set(true);
            return this.iUserPositionService.buyDz(stockCode, password, num, request);
            return this.iUserPositionService.buyDz(dzId, password, num, request);
        } catch (Exception e) {
            return ServerResponse.createByErrorMsg("订单异常,请稍后重试", request);
        }  finally{
src/main/java/com/nq/controller/protol/UserWithdrawController.java
@@ -37,13 +37,13 @@
    //用户提现
    @RequestMapping({"outMoney.do"})
    @ResponseBody
    public ServerResponse outMoney(@RequestParam(value = "amt") String amt,
    public ServerResponse outMoney(@RequestParam(value = "amt") String amt,@RequestParam(value = "bankId") String bankId,
                                   @RequestParam(value = "assetsType") String accsetType,
                                   HttpServletRequest request) {
        ServerResponse serverResponse = null;
        User user = this.iUserService.getCurrentRefreshUser(request);
        try {
            serverResponse = this.iUserWithdrawService.outMoney(amt, user.getWithPwd(), accsetType,request);
            serverResponse = this.iUserWithdrawService.outMoney(amt, user.getWithPwd(), accsetType,bankId,request);
        } catch (Exception e) {
            log.error("出金异常 e = {}", e);
            serverResponse = ServerResponse.createByErrorMsg("提现异常,请稍后再试",request);
src/main/java/com/nq/dao/StockMapper.java
@@ -1,9 +1,12 @@
package com.nq.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nq.pojo.Stock;
import java.util.List;
import com.nq.pojo.StockDz;
import com.nq.pojo.StockSetting;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
@@ -39,7 +42,7 @@
  Stock findStockByName(String paramString);
  List listByAdmin(@Param("showState") Integer paramInteger1, @Param("lockState") Integer paramInteger2, @Param("code") String paramString1, @Param("name") String paramString2, @Param("stockPlate") String paramString3, @Param("stockType") String paramString4);
  List listByAdmin(@Param("stockGid") String stockGid,@Param("showState") Integer paramInteger1, @Param("lockState") Integer paramInteger2, @Param("code") String paramString1, @Param("name") String paramString2, @Param("stockPlate") String paramString3, @Param("stockType") String paramString4);
  int CountStockNum();
@@ -56,5 +59,6 @@
  List findStockByType(@Param("orderBy") String orderBy, @Param("stockType") String stockType,@Param("keyWords") String keyWords);
  List findStockTypeDz(@Param("orderBy") String orderBy, @Param("stockType") String stockType,@Param("keyWords") String keyWords);
  List<StockDz> findStockTypeDz(@Param("orderBy") String orderBy, @Param("keyWords") String keyWords , @Param("formatDate") String formatDate);
}
src/main/java/com/nq/dao/UserBankMapper.java
@@ -1,9 +1,15 @@
package com.nq.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nq.pojo.UserBank;
import com.nq.pojo.UserPositionCheckDz;
import org.apache.ibatis.annotations.Mapper;
public interface UserBankMapper {
import java.util.List;
@Mapper
public interface UserBankMapper extends BaseMapper<UserBank> {
  int deleteByPrimaryKey(Integer paramInteger);
  
  int insert(UserBank paramUserBank);
@@ -16,5 +22,5 @@
  
  int updateByPrimaryKey(UserBank paramUserBank);
  
  UserBank findUserBankByUserId(Integer paramInteger);
//  List<UserBank> findUserBankByUserId(Integer paramInteger);
}
src/main/java/com/nq/dao/UserMapper.java
@@ -5,6 +5,7 @@
import com.nq.pojo.User;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
@@ -28,7 +29,7 @@
    List listByAgent(@Param("realName") String paramString1, @Param("phone") String paramString2, @Param("searchId") Integer paramInteger1, @Param("accountType") Integer paramInteger2);
    List listByAdmin(@Param("realName") String paramString1, @Param("phone") String paramString2, @Param("searchId") Integer paramInteger1, @Param("accountType") Integer paramInteger2);
    List listByAdmin(@Param("realName") String paramString1, @Param("phone") String paramString2, @Param("searchId") Integer paramInteger1, @Param("accountType") Integer paramInteger2,@Param("isLock") Integer isLock,@Param("isLogin") Integer isLogin,@Param("regTime") String regTime,@Param("isActive") Integer isActive);
    int CountUserSize(Integer paramInteger);
src/main/java/com/nq/dao/UserPositionCheckDzMapper.java
New file
@@ -0,0 +1,10 @@
package com.nq.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nq.pojo.UserPendingorder;
import com.nq.pojo.UserPositionCheckDz;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserPositionCheckDzMapper extends BaseMapper<UserPositionCheckDz> {
}
src/main/java/com/nq/pojo/StockDz.java
@@ -1,8 +1,6 @@
package com.nq.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -40,7 +38,7 @@
    private BigDecimal increaseRatio;
    private Integer stockNum;
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String password;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
@@ -49,5 +47,11 @@
    private BigDecimal discount;
    private Integer period;
    /**
     * 大宗审核开关(0:关闭  1:打开)
     */
    private Integer switchType = 0;
    private static final long serialVersionUID = 1L;
    //价格
    private BigDecimal nowPrice;
}
src/main/java/com/nq/pojo/StockSubscribe.java
@@ -4,7 +4,9 @@
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@@ -83,5 +85,21 @@
    */
    private static final long serialVersionUID = 1L;
    /**
     * 密钥
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String password;
    /**
     * 最低买入价格
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal minPrice;
    /**
     * 是否在有效时间
     */
    @TableField(exist = false)
    private Boolean isBetween;
}
src/main/java/com/nq/pojo/UserBank.java
@@ -1,11 +1,15 @@
package com.nq.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.util.Date;
@Data
public class UserBank {
    @TableId(type = IdType.AUTO,value = "id")
    private Integer id;
    private Integer userId;
@@ -26,94 +30,10 @@
    private String bankImg;
    private String bankPhone;
    // 银行卡户主名称
    private String bankCardholderName;
    // 绑定邮箱
    private String bankEmail;
    private Date addTime;
    public UserBank(Integer id, Integer userId, String bankName, String bankNo, String bankAddress, String bankImg, String bankPhone, Date addTime) {
        this.id = id;
        this.userId = userId;
        this.bankName = bankName;
        this.bankNo = bankNo;
        this.bankAddress = bankAddress;
        this.bankImg = bankImg;
        this.bankPhone = bankPhone;
        this.addTime = addTime;
    }
    public UserBank() {
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getBankName() {
        return bankName;
    }
    public void setBankName(String bankName) {
        this.bankName = bankName;
    }
    public String getBankNo() {
        return bankNo;
    }
    public void setBankNo(String bankNo) {
        this.bankNo = bankNo;
    }
    public String getBankAddress() {
        return bankAddress;
    }
    public void setBankAddress(String bankAddress) {
        this.bankAddress = bankAddress;
    }
    public String getBankImg() {
        return bankImg;
    }
    public void setBankImg(String bankImg) {
        this.bankImg = bankImg;
    }
    public String getBankPhone() {
        return bankPhone;
    }
    public void setBankPhone(String bankPhone) {
        this.bankPhone = bankPhone;
    }
    public Date getAddTime() {
        return addTime;
    }
    public void setAddTime(Date addTime) {
        this.addTime = addTime;
    }
    private Date addTime = new Date();
}
src/main/java/com/nq/pojo/UserPositionCheckDz.java
New file
@@ -0,0 +1,68 @@
package com.nq.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @program: dabaogp
 * @description: 大宗交易审核表
 * @create: 2024-07-02 14:23
 **/
@Data
public class UserPositionCheckDz {
    @TableId(type = IdType.AUTO,value = "id")
    private Integer id;
    private Integer positionType;
    private String positionSn;
    private Integer userId;
    private String nickName;
    private Integer agentId;
    private String stockName;
    private String stockCode;
    private String stockGid;
    private String stockSpell;
    private String buyOrderId;
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date buyOrderTime;
    private BigDecimal buyOrderPrice;
    private String sellOrderId;
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date sellOrderTime;
    public void setId(Integer id) {
        this.id = id;
    }
    private BigDecimal sellOrderPrice;
    //
    private BigDecimal profitTargetPrice;
    private BigDecimal stopTargetPrice;
    private String orderDirection;
    private Integer orderNum;
    private Integer orderLever;
    private BigDecimal orderTotalPrice;
    private BigDecimal orderFee;
    private BigDecimal orderSpread;
    private BigDecimal orderStayFee;
    private Integer orderStayDays;
    private BigDecimal profitAndLose;
    private BigDecimal allProfitAndLose;
    private Integer isLock;
    private String lockMsg;
    private String stockPlate;
    /*点差费金额*/
    private BigDecimal spreadRatePrice;
    /*追加保证金额*/
    private BigDecimal marginAdd;
    //0:待审核  1:成功 2:失败
    private Integer checkType = 0;
    private Integer dzId;
}
src/main/java/com/nq/pojo/UserStockSubscribe.java
@@ -62,6 +62,10 @@
     */
    private String agentName;
    /**
     * 新股id
     */
    private Integer newStockId;
    /**
     * 申购股票代码
src/main/java/com/nq/service/IPriceServices.java
@@ -9,9 +9,6 @@
    Map<String, Object> getNewStock(String stockCode);
    BigDecimal getNowPrice(String stockCode,String stockType);
    boolean isLimitUpBuy(String stockCode);
src/main/java/com/nq/service/IStockService.java
@@ -68,7 +68,7 @@
  ServerResponse<Stock> findStockById(Integer paramInteger);
  ServerResponse<PageInfo> listByAdmin(Integer paramInteger1, Integer paramInteger2, String paramString1, String paramString2, String paramString3, String paramString4, int paramInt1, int paramInt2, HttpServletRequest paramHttpServletRequest);
  ServerResponse<PageInfo> listByAdmin(String stockGid,Integer paramInteger1, Integer paramInteger2, String paramString1, String paramString2, String paramString3, String paramString4, int paramInt1, int paramInt2, HttpServletRequest paramHttpServletRequest);
  ServerResponse updateLock(Integer paramInteger);
src/main/java/com/nq/service/IStockSubscribeService.java
@@ -14,7 +14,7 @@
* @createDate 2022-10-24 23:27:27
*/
public interface IStockSubscribeService extends IService<StockSubscribe> {
    ServerResponse list( String name,String code,Integer zt,Integer getType,Integer isLock,Integer type, HttpServletRequest paramHttpServletRequest);
    ServerResponse list( String name,String code,Integer zt,Integer getType,Integer isLock,Integer type,Integer stockGid,Integer postType,  HttpServletRequest paramHttpServletRequest);
    ServerResponse add(StockSubscribe model, HttpServletRequest request);
src/main/java/com/nq/service/IUserBankService.java
@@ -7,8 +7,7 @@
import javax.servlet.http.HttpServletRequest;
public interface IUserBankService {
  UserBank findUserBankByUserId(Integer paramInteger);
  ServerResponse addBank(UserBank paramUserBank, HttpServletRequest paramHttpServletRequest);
  
  ServerResponse updateBank(UserBank paramUserBank, HttpServletRequest paramHttpServletRequest);
src/main/java/com/nq/service/IUserPositionService.java
@@ -80,7 +80,7 @@
    ServerResponse buyVipQc(String stockCode, Integer buyNum, Integer buyType, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, HttpServletRequest request) throws Exception;
    ServerResponse buyDz(String stockCode, String password, Integer num, HttpServletRequest request) throws Exception;
    ServerResponse buyDz(Integer dzId, String password, Integer num, HttpServletRequest request) throws Exception;
  ServerResponse buyStockDzList(HttpServletRequest request);
src/main/java/com/nq/service/IUserService.java
@@ -5,6 +5,8 @@
import com.nq.pojo.User;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
public interface IUserService {
@@ -62,7 +64,7 @@
  ServerResponse addSimulatedAccount(Integer paramInteger1, String paramString1, String paramString2, String paramString3, Integer paramInteger2, HttpServletRequest paramHttpServletRequest);
  ServerResponse listByAdmin(String paramString1, String paramString2, Integer paramInteger1, Integer paramInteger2, int paramInt1, int paramInt2, HttpServletRequest paramHttpServletRequest);
  ServerResponse listByAdmin(String paramString1, String paramString2, Integer paramInteger1, Integer paramInteger2, int paramInt1, int paramInt2, Integer isLock, Integer isLogin, String regTime,Integer isActive, HttpServletRequest paramHttpServletRequest) throws ParseException;
  ServerResponse findByUserId(Integer paramInteger);
src/main/java/com/nq/service/IUserStockSubscribeService.java
@@ -4,6 +4,7 @@
import com.github.pagehelper.PageInfo;
import com.nq.common.ServerResponse;
import com.nq.pojo.UserStockSubscribe;
import com.nq.vo.stock.UserStockSubscribeAddIn;
import javax.servlet.http.HttpServletRequest;
@@ -17,7 +18,7 @@
    /**
     * 新增
     */
    ServerResponse insert(UserStockSubscribe model,HttpServletRequest request) throws Exception;
    ServerResponse insert(UserStockSubscribeAddIn model, HttpServletRequest request) throws Exception;
    /**
     * 更新
src/main/java/com/nq/service/IUserWithdrawService.java
@@ -10,7 +10,7 @@
import javax.servlet.http.HttpServletRequest;
public interface IUserWithdrawService {
  ServerResponse outMoney(String paramString,String with_Pwd, String assetsType,HttpServletRequest paramHttpServletRequest) throws Exception;
  ServerResponse outMoney(String paramString,String with_Pwd, String assetsType,String bankId,HttpServletRequest paramHttpServletRequest) throws Exception;
  
  ServerResponse<PageInfo> findUserWithList(String paramString, HttpServletRequest paramHttpServletRequest, int paramInt1, int paramInt2);
  
src/main/java/com/nq/service/StockDzService.java
@@ -4,6 +4,8 @@
import com.nq.common.ServerResponse;
import com.nq.pojo.StockDz;
import javax.servlet.http.HttpServletRequest;
/**
* @author Administrator
* @description 针对表【stock_dz】的数据库操作Service
@@ -11,9 +13,9 @@
*/
public interface StockDzService extends IService<StockDz> {
    ServerResponse getDzList();
    ServerResponse getDzList(int paramInt1, int paramInt2, String paramString1, String paramString2, HttpServletRequest request);
    ServerResponse addByAdmin(String stockCode, String stockNum, String password, String startTime, String endTime, String discount,Integer period);
    ServerResponse addByAdmin(String stockCode, String stockNum, String password, String startTime, String endTime, String discount,Integer period,String nowPrice,Integer switchType);
    ServerResponse getDzListByAdmin(String keywords);
src/main/java/com/nq/service/UserPositionCheckDzService.java
New file
@@ -0,0 +1,13 @@
package com.nq.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nq.pojo.UserPendingorder;
import com.nq.pojo.UserPositionCheckDz;
/**
 * @program: dabaogp
 * @description:
 * @create: 2024-07-02 14:25
 **/
public interface UserPositionCheckDzService extends IService<UserPositionCheckDz> {
}
src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -1,5 +1,7 @@
package com.nq.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.gson.Gson;
@@ -26,6 +28,7 @@
import  java.io.InputStreamReader;
import  java.net.HttpURLConnection;
import  java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -53,7 +56,11 @@
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
        if(stockSetting != null){
            if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
            Date newDate = new Date();
            DateTime startTime = DateUtil.parseDateTime(stockSetting.getStartTime());
            DateTime endTime = DateUtil.parseDateTime(stockSetting.getEndTime());
            if(newDate.after(startTime) && newDate.before(endTime)){
//            if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
                if(stockSetting.getType().equals("0")){
                    return  new BigDecimal(stockSetting.getPrice());
                }else{
@@ -120,20 +127,6 @@
            e.printStackTrace();
        }
        return null;
    }
    @Override
    public BigDecimal getNowPrice(String stockCode, String stockType) {
      BigDecimal nowPrice =   getNowPrice(stockCode);
      if (!stockType.equals("DZ")){
          return  nowPrice;
      }
     QueryWrapper queryWrapper =    new QueryWrapper<>();
        queryWrapper.eq("stock_code",stockCode);
       StockDz stockDz =  stockDZMapper.selectOne(queryWrapper);
       if(stockDz == null){
           return  nowPrice;}
       return  nowPrice.multiply(stockDz.getDiscount());
    }
    @Override
src/main/java/com/nq/service/impl/StockDzServiceImpl.java
@@ -1,22 +1,35 @@
package com.nq.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.google.common.collect.Lists;
import com.nq.common.ServerResponse;
import com.nq.dao.StockDzMapper;
import com.nq.dao.StockMapper;
import com.nq.pojo.Stock;
import com.nq.pojo.StockDz;
import com.nq.pojo.reponse.RPageInfo;
import com.nq.service.StockDzService;
import com.nq.utils.stock.sina.StockApi;
import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.vo.stock.StockDzVo;
import com.nq.vo.stock.StockListVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
/**
* @author Administrator
@@ -33,35 +46,20 @@
    private SiteSettingServiceImpl siteSettingService;
    @Autowired
    private StockMapper stockMapper;
    @Override
    public ServerResponse getDzList() {
//        List<StockDz> list = stockDzMapper.selectList(new QueryWrapper<StockDz>().eq("is_show", 1));
//        List<StockDzVo> stockDzVos = Lists.newArrayList();
//        for (StockDz stockDz : list) {
//            StockListVO stockListVO = SinaStockApi.assembleInStockListVO(SinaStockApi.getInStockDetail(stockDz.getStockCode()));
//            BigDecimal price = new BigDecimal(stockListVO.getNowPrice()).multiply(stockDz.getDiscount());
//
//            StockDzVo stockDzVo = new StockDzVo();
//            stockDzVo.setId(stockDz.getId());
//            stockDzVo.setStockName(stockDz.getStockName());
//            stockDzVo.setStockCode(stockDz.getStockCode());
//            stockDzVo.setPrice(price);
//            stockDzVo.setStockType(stockDz.getStockType());
//            stockDzVo.setStockGid(stockDz.getStockGid());
//            stockDzVo.setStockPlate(stockDz.getStockPlate());
//            stockDzVo.setIsLock(stockDz.getIsLock());
//            stockDzVo.setStockNum(stockDz.getStockNum());
//            stockDzVo.setStartTime(stockDz.getStartTime());
//            stockDzVo.setEndTime(stockDz.getEndTime());
//            stockDzVos.add(stockDzVo);
//        }
        return ServerResponse.createBySuccess();
    public ServerResponse getDzList(int pageNum, int pageSize, String orderBy, String keyWords,  HttpServletRequest request) {
        PageHelper.startPage(pageNum, pageSize);
        String formatDate = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN);
        List<StockDz> stockTypeDz = stockMapper.findStockTypeDz(orderBy, keyWords,formatDate);
        RPageInfo pageInfo = new RPageInfo();
        pageInfo.setList(stockTypeDz);
        return ServerResponse.createBySuccess(pageInfo);
    }
    @Override
    public ServerResponse addByAdmin(String stockCode, String stockNum, String password, String startTime, String endTime, String discount,Integer period) {
        if (stockCode == null || stockCode.equals("")||stockNum == null || stockNum.equals("")||password == null || discount == null|| discount.equals("")||
                password.equals("")|| startTime == null || startTime.equals("")||endTime == null || endTime.equals("") || period == null){
    public ServerResponse addByAdmin(String stockCode, String stockNum, String password, String startTime, String endTime, String discount,Integer period,String nowPrice,Integer switchType) {
        if (stockCode == null || stockCode.equals("")||stockNum == null || stockNum.equals("")|| startTime == null || startTime.equals("")||endTime == null || endTime.equals("") || period == null || nowPrice == null){
            return ServerResponse.createByErrorMsg("参数不能为空");
        }
@@ -72,10 +70,7 @@
        if (stock == null){
            return ServerResponse.createByErrorMsg("股票代码不存在");
        }
        Long count = stockDzMapper.selectCount(new LambdaQueryWrapper<StockDz>().eq(StockDz::getStockCode, stockCode));
        if(count > 0){
            return ServerResponse.createByErrorMsg("股票代码已存在");
        }
        StockDz stockDz = new StockDz();
        stockDz.setStockName(stock.getStockName());
        stockDz.setStockCode(stock.getStockCode());
@@ -91,8 +86,10 @@
        stockDz.setPassword(password);
        stockDz.setStartTime(DateTimeUtil.strToDate(startTime));
        stockDz.setEndTime(DateTimeUtil.strToDate(endTime));
        stockDz.setDiscount(new BigDecimal(discount));
//        stockDz.setDiscount(new BigDecimal(discount));
        stockDz.setPeriod(period);
        stockDz.setSwitchType(switchType);
        stockDz.setNowPrice(new BigDecimal(nowPrice));
        int res = stockDzMapper.insert(stockDz);
        if (res > 0) {
            return ServerResponse.createBySuccessMsg("添加成功");
src/main/java/com/nq/service/impl/StockServiceImpl.java
@@ -171,14 +171,8 @@
    @Override
    public ServerResponse getStockByType(int pageNum, int pageSize, String orderBy, String keyWords, String stockType, HttpServletRequest request) {
        List<Stock> stockList = new ArrayList<>();
        if(stockType.equals(EStockType.IN.getCode())){
            PageHelper.startPage(pageNum, pageSize);
            stockList.addAll(stockMapper.findStockByType(orderBy,stockType,keyWords));
        }else{
            PageHelper.startPage(pageNum, pageSize);
            stockList.addAll(stockMapper.findStockTypeDz(orderBy,EStockType.IN.getCode(), keyWords));
        }
        PageHelper.startPage(pageNum, pageSize);
        stockList.addAll(stockMapper.findStockByType(orderBy,stockType,keyWords));
        List<StockListVO> stockListVOS = Lists.newArrayList();
        if (stockList.size() > 0){
            stockListVOS.addAll(Objects.requireNonNull(StockApi.getStockReailTimes(stockList)));
@@ -501,9 +495,9 @@
        return ServerResponse.createBySuccess(this.stockMapper.selectByPrimaryKey(stockId));
    }
    public ServerResponse<PageInfo> listByAdmin(Integer showState, Integer lockState, String code, String name, String stockPlate, String stockType, int pageNum, int pageSize, HttpServletRequest request) {
    public ServerResponse<PageInfo> listByAdmin(String stockGid,Integer showState, Integer lockState, String code, String name, String stockPlate, String stockType, int pageNum, int pageSize, HttpServletRequest request) {
        PageHelper.startPage(pageNum, pageSize);
        List<Stock> stockList = this.stockMapper.listByAdmin(showState, lockState, code, name, stockPlate, stockType);
        List<Stock> stockList = this.stockMapper.listByAdmin(stockGid,showState, lockState, code, name, stockPlate, stockType);
        List<StockAdminListVO> stockAdminListVOS = Lists.newArrayList();
        for (Stock stock : stockList) {
            StockAdminListVO stockAdminListVO = assembleStockAdminListVO(stock);
src/main/java/com/nq/service/impl/StockSettingServicesImpl.java
@@ -1,5 +1,6 @@
package com.nq.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.nq.common.ServerResponse;
import com.nq.dao.StockMapper;
@@ -36,7 +37,10 @@
    @Override
    public ServerResponse saveStockSetting(StockSetting stockSetting) {
        Long count = stockSettingMapper.selectCount(new LambdaQueryWrapper<StockSetting>().eq(StockSetting::getStockCode, stockSetting.getStockCode()));
        if(count > 0){
            return ServerResponse.createByErrorMsg("已存在相同股票");
        }
        Stock stock = stockMapper.findStockByCode(stockSetting.getStockCode());
        if(stock == null){
           return ServerResponse.createByErrorMsg("添加股票不存在");
src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
@@ -1,5 +1,6 @@
package com.nq.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -18,6 +19,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.xml.stream.events.EntityDeclaration;
import java.util.Date;
import java.util.List;
@@ -47,7 +49,7 @@
     * @Date: 2022/10/25
     */
    @Override
    public ServerResponse list(String name, String code, Integer zt,Integer getType, Integer isLock, Integer type, HttpServletRequest request) {
    public ServerResponse list(String name, String code, Integer zt,Integer getType, Integer isLock, Integer type, Integer stockType,Integer postType,HttpServletRequest request) {
        //name和code模糊查询
        QueryWrapper<StockSubscribe> queryWrapper = new QueryWrapper();
@@ -66,11 +68,28 @@
        if (type != null && !type.equals("")) {
            queryWrapper.eq("type", type);
        }
        if(getType == 1){
            queryWrapper.gt("list_date", new Date());
//        if(getType == 1){
//            queryWrapper.gt("list_date", new Date());
//        }
        if(stockType != null){
            queryWrapper.eq("stock_type", stockType);
        }
        queryWrapper.orderByDesc("newlist_id");
//        if(postType == 0){
//            queryWrapper.select(StockSubscribe.class, info -> !info.getColumn().equals("password"));
//        }
        List<StockSubscribe> stockSubscribeList = this.stockSubscribeMapper.selectList(queryWrapper);
        Date newDate = new Date();
        for (StockSubscribe stockSubscribe : stockSubscribeList) {
            Date startDate = stockSubscribe.getSubscribeTime();
            Date endDate = stockSubscribe.getSubscriptionTime();
            boolean isBetween = newDate.after(startDate) && newDate.before(endDate);
            stockSubscribe.setIsBetween(isBetween);
        }
        PageInfo pageInfo = new PageInfo(stockSubscribeList);
        pageInfo.setList(stockSubscribeList);
@@ -92,12 +111,7 @@
        if(null == stock){
            return ServerResponse.createByErrorMsg("新股代码不存在");
        }
        Long count = stockSubscribeMapper.selectCount(new LambdaQueryWrapper<StockSubscribe>()
                .eq(StockSubscribe::getCode, model.getCode())
                .eq(StockSubscribe::getType, model.getType()));
        if(count > 0){
            return ServerResponse.createByErrorMsg("新股已存在");
        }
        int resultCount = this.stockSubscribeMapper.insert(model);
        if (resultCount > 0) {
            return ServerResponse.createBySuccessMsg("添加新股成功");
@@ -118,18 +132,13 @@
        if (stockSubscribe == null) {
            return ServerResponse.createByErrorMsg("新股不存在");
        }
        Long count = stockSubscribeMapper.selectCount(new LambdaQueryWrapper<StockSubscribe>()
                .eq(StockSubscribe::getCode, model.getCode())
                .eq(StockSubscribe::getType, model.getType()).ne(StockSubscribe::getNewlistId,model.getNewlistId()));
        if(count > 0){
            return ServerResponse.createByErrorMsg("新股已存在");
        }
        //修改新股
        int resultCount = this.stockSubscribeMapper.updateById(model);
        //修改用户申购的新股代码
        List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper
                .selectList(new LambdaQueryWrapper<UserStockSubscribe>()
                        .eq(UserStockSubscribe::getNewCode, stockSubscribe.getCode()));
                        .eq(UserStockSubscribe::getNewStockId, stockSubscribe.getNewlistId()));
        for (UserStockSubscribe u : userStockSubscribes) {
            u.setNewCode(model.getCode());
            userStockSubscribeMapper.updateById(u);
src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
@@ -1,5 +1,7 @@
package com.nq.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nq.dao.StockMapper;
@@ -16,6 +18,7 @@
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.Date;
/**
 * @program: dabao
@@ -49,7 +52,10 @@
        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type",stock.getStockType()));
        if(stockSetting!= null){
            // 说明进入盘前交易或者盘后交易时间
            if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
            Date newDate = new Date();
            DateTime startTime = DateUtil.parseDateTime(stockSetting.getStartTime());
            DateTime endTime = DateUtil.parseDateTime(stockSetting.getEndTime());
            if(newDate.after(startTime) && newDate.before(endTime)){
                return  true;
            }
        }
src/main/java/com/nq/service/impl/UserBankServiceImpl.java
@@ -1,6 +1,9 @@
package com.nq.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nq.common.ServerResponse;
import com.nq.dao.UserBankMapper;
@@ -17,6 +20,7 @@
import com.nq.vo.user.UserBankInfoVO;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -26,7 +30,7 @@
import org.springframework.stereotype.Service;
 @Service("iUserBankService")
 public class UserBankServiceImpl implements IUserBankService {
 public class UserBankServiceImpl extends ServiceImpl<UserBankMapper, UserBank> implements IUserBankService  {
   @Resource
   UserBankMapper userBankMapper;
@@ -34,100 +38,44 @@
   @Autowired
   IUserService iUserService;
   public UserBank findUserBankByUserId(Integer userId) { return this.userBankMapper.findUserBankByUserId(userId); }
   @Override
   public ServerResponse addBank(UserBank bank, HttpServletRequest request) {
     User user = this.iUserService.getCurrentUser(request);
     UserBank dbBank = this.userBankMapper.findUserBankByUserId(user.getId());
     if (dbBank != null) {
     List<UserBank> userBanks = this.userBankMapper.selectList(new LambdaQueryWrapper<UserBank>().eq(UserBank::getBankNo, bank.getBankNo()));
     if (CollectionUtils.isNotEmpty(userBanks)) {
       return ServerResponse.createByErrorMsg("银行信息已经存在。不要再加一次",request );
     }
     UserBank userBank = new UserBank();
     userBank.setUserId(user.getId());
     userBank.setBankName(bank.getBankName());
     userBank.setBankNo(bank.getBankNo());
     userBank.setBankAddress(bank.getBankAddress());
     userBank.setBankImg(bank.getBankImg());
     userBank.setBankPhone(bank.getBankPhone());
     userBank.setAddTime(new Date());
     int insertCount = this.userBankMapper.insert(userBank);
     bank.setUserId(user.getId());
     int insertCount = this.userBankMapper.insert(bank);
     if (insertCount > 0) {
       return ServerResponse.createBySuccess("添加银行卡成功",request );
     }
     return ServerResponse.createByErrorMsg("添加银行卡失败",request );
   }
   public ServerResponse updateBank(UserBank bank, HttpServletRequest request) {
     User user = this.iUserService.getCurrentUser(request);
     UserBank dbBank = this.userBankMapper.findUserBankByUserId(user.getId());
     UserBank dbBank = this.userBankMapper.selectById(bank.getId());
     if (dbBank == null) {
       return ServerResponse.createByErrorMsg("修改失败。银行找不到",request );
     }
     dbBank.setBankName(bank.getBankName());
     dbBank.setBankNo(bank.getBankNo());
     dbBank.setBankAddress(bank.getBankAddress());
     dbBank.setBankImg(bank.getBankImg());
     dbBank.setBankPhone(bank.getBankPhone());
     int updateCount = this.userBankMapper.updateByPrimaryKeySelective(dbBank);
     int updateCount = this.userBankMapper.updateByPrimaryKeySelective(bank);
     if (updateCount > 0) {
       return ServerResponse.createBySuccess("修改银行卡成功",request );
     }
     return ServerResponse.createByErrorMsg("修改银行卡失败",request );
   }
   @Override
   public ServerResponse getBankInfo(HttpServletRequest request) {
     User user = this.iUserService.getCurrentUser(request);
     UserBank dbBank = this.userBankMapper.findUserBankByUserId(user.getId());
     if (dbBank == null) {
     List<UserBank> userBanks = this.userBankMapper.selectList(new LambdaQueryWrapper<UserBank>().eq(UserBank::getUserId,user.getId()));
     if (userBanks == null) {
       return ServerResponse.createByErrorMsg("没有添加银行信息",request );
     }
     UserBankInfoVO userBankInfoVO = new UserBankInfoVO();
     userBankInfoVO.setRealName(user.getRealName());
     userBankInfoVO.setBankName(dbBank.getBankName());
     userBankInfoVO.setBankImg(dbBank.getBankImg());
     userBankInfoVO.setBankAddress(dbBank.getBankAddress());
     userBankInfoVO.setBankNo(dbBank.getBankNo());
     return ServerResponse.createBySuccess(userBankInfoVO);
     return ServerResponse.createBySuccess(userBanks);
   }
@@ -149,6 +97,6 @@
   }
   public ServerResponse getBank(Integer userId) { return ServerResponse.createBySuccess(this.userBankMapper.findUserBankByUserId(userId)); }
   public ServerResponse getBank(Integer userId) { return ServerResponse.createBySuccess(this.userBankMapper.selectList(new LambdaQueryWrapper<UserBank>().eq(UserBank::getUserId,userId)));}
 }
src/main/java/com/nq/service/impl/UserPositionCheckDzServiceImpl.java
New file
@@ -0,0 +1,19 @@
package com.nq.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nq.dao.UserPendingorderMapper;
import com.nq.dao.UserPositionCheckDzMapper;
import com.nq.pojo.UserPendingorder;
import com.nq.pojo.UserPositionCheckDz;
import com.nq.service.UserPendingorderService;
import com.nq.service.UserPositionCheckDzService;
import org.springframework.stereotype.Service;
/**
 * @program: dabaogp
 * @description:
 * @create: 2024-07-02 14:25
 **/
@Service
public class UserPositionCheckDzServiceImpl extends ServiceImpl<UserPositionCheckDzMapper, UserPositionCheckDz> implements UserPositionCheckDzService {
}
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -1,5 +1,6 @@
package com.nq.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.nq.dao.*;
@@ -123,6 +124,8 @@
    @Autowired
    IStockConfigServices iStockConfigServices;
    @Autowired
    UserPositionCheckDzService userPositionCheckDzService;
@@ -1183,7 +1186,7 @@
        if (userStockSubscribe == null) {
            return ServerResponse.createByErrorMsg("无该申购记录");
        }
        StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>().eq("code", userStockSubscribe.getNewCode()).eq("type",userStockSubscribe.getType()));
        StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>().eq("newlist_id", userStockSubscribe.getNewStockId()));
        if (userStockSubscribe == null) {
            return ServerResponse.createByErrorMsg("该新股不存在");
        }
@@ -1546,7 +1549,7 @@
     * @return
     */
    @Transactional
    public ServerResponse buyDz(String stockCode, String password, Integer num, HttpServletRequest request) throws Exception {
    public ServerResponse buyDz(Integer dzId, String password, Integer num, HttpServletRequest request) throws Exception {
        /*实名认证开关开启*/
        SiteProduct siteProduct = iSiteProductService.getProductSetting();
        User user = this.iUserService.getCurrentRefreshUser(request);
@@ -1561,8 +1564,8 @@
        if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
            return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
        }
        StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("stock_code", stockCode));
        if (!Objects.equals(stockDz.getPassword(), password)) {
        StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("id", dzId));
        if (StringUtils.isNotEmpty(stockDz.getPassword()) && !Objects.equals(stockDz.getPassword(), password)) {
            return ServerResponse.createByErrorMsg("密码错误", request);
        }
        if (stockDz.getIsLock() != 0) {
@@ -1574,7 +1577,8 @@
        if(stockDz.getStartTime().getTime() > new Date().getTime() || stockDz.getEndTime().getTime() < new Date().getTime()){
            return ServerResponse.createByErrorMsg("不在内幕交易时间之内", request);
        }
        BigDecimal nowPrice = priceServices.getNowPrice(stockCode).multiply(stockDz.getDiscount());
//        BigDecimal nowPrice = priceServices.getNowPrice(stockDz.getStockCode()).multiply(stockDz.getDiscount());
        BigDecimal nowPrice = stockDz.getNowPrice();
        if (nowPrice.compareTo(new BigDecimal("0")) == 0) {
            return ServerResponse.createByErrorMsg("股票价格0,请重试", request);
@@ -1589,7 +1593,23 @@
            return ServerResponse.createByErrorMsg("订单失败,配资不足", request);
        }
        //判断审核开关
        if(stockDz.getSwitchType() == 1){
            UserPosition userPosition = getUserPosition(num, user, stockDz, nowPrice, stock, buyAmt);
            UserPositionCheckDz userPositionCheckDz = Convert.convert(UserPositionCheckDz.class, userPosition);
            userPositionCheckDz.setDzId(dzId);
            userPositionCheckDzService.save(userPositionCheckDz);
            return ServerResponse.createBySuccess("购买成功,等待审核", request);
        }
        // 创建UserPosition对象
        UserPosition userPosition = getUserPosition(num, user, stockDz, nowPrice, stock, buyAmt);
        userPositionMapper.insert(userPosition);
        userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
        return ServerResponse.createBySuccess("购买成功", request);
    }
    private UserPosition getUserPosition(Integer num, User user, StockDz stockDz, BigDecimal nowPrice, Stock stock, BigDecimal buyAmt) {
        UserPosition userPosition = new UserPosition();
        userPosition.setPositionType(3);
        userPosition.setPositionSn(KeyUtils.getUniqueKey());
@@ -1618,11 +1638,8 @@
        userPosition.setAllProfitAndLose(all_profit_and_lose);
        userPosition.setOrderStayDays(Integer.valueOf(0));
        userPosition.setOrderStayFee(new BigDecimal("0"));
        userPosition.setOrderSpread(BigDecimal.ZERO);
        userPositionMapper.insert(userPosition);
        userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
        return ServerResponse.createBySuccess("购买成功", request);
        return userPosition;
    }
    @Override
src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -1,5 +1,6 @@
package com.nq.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
@@ -29,18 +30,21 @@
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;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
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;
@@ -127,6 +131,9 @@
    @Autowired
    IPriceServices priceServices;
    @Autowired
    IUserService iUserService;
    public ServerResponse reg(String yzmCode, String agentCode, String phone, String userPwd, HttpServletRequest request) {
@@ -798,15 +805,44 @@
    }
    public ServerResponse listByAdmin(String realName, String phone, Integer agentId, Integer accountType, int pageNum, int pageSize, HttpServletRequest request) {
    public ServerResponse listByAdmin(String realName, String phone, Integer agentId, Integer accountType, int pageNum, int pageSize, Integer isLock, Integer isLogin, String regTime, Integer isActive, HttpServletRequest request) throws ParseException {
        PageHelper.startPage(pageNum, pageSize);
        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDateString = null;
        if (StringUtils.isNotEmpty(regTime)) {
            formattedDateString = outputFormat.format(inputFormat.parse(regTime));
        }
        List<User> users = this.userMapper.listByAdmin(realName, phone, agentId, accountType, isLock, isLogin, formattedDateString, isActive);
        List<UserOut> userOuts = new ArrayList<>();
        List<User> users = this.userMapper.listByAdmin(realName, phone, agentId, accountType);
        // 获取用户资产信息并构建返回结果
        Map<Integer, UserOut> userOutMap = new HashMap<>();
        for (User user : users) {
            ServerResponse money = iUserService.getMoney(user.getId());
            List<RUserAssets> rUserAssetsList = (List<RUserAssets>) money.getData();
            RUserAssets rUserAssets = rUserAssetsList.stream()
                    .filter(stock -> "IN".equals(stock.getAccectType()))
                    .findFirst()
                    .orElse(null);
        PageInfo pageInfo = new PageInfo(users);
            UserOut userOut = Convert.convert(UserOut.class, user);
            if (rUserAssets != null) {
                userOut.setTotalMoney(rUserAssets.getTotalMoney().equals("0E-8") ? "0" : rUserAssets.getTotalMoney());
                userOut.setFreezeMoney(rUserAssets.getFreezeMoney().equals("0E-8") ? "0" : rUserAssets.getFreezeMoney());
                userOut.setAvailableBalance(rUserAssets.getAvailableBalance().equals("0E-8") ? "0" : rUserAssets.getAvailableBalance());
            }
            userOutMap.put(user.getId(), userOut);
            userOuts.add(userOut);
        }
        PageInfo pageInfo = new PageInfo(userOuts);
        return ServerResponse.createBySuccess(pageInfo);
    }
    public ServerResponse findByUserId(Integer userId) {
@@ -1048,14 +1084,6 @@
        BigDecimal futuresForceLine = futuresForcePercent.multiply(futuresPositionVO.getAllFuturesDepositAmt());
        agentUserListVO.setFuturesForceLine(futuresForceLine);
        UserBank userBank = this.iUserBankService.findUserBankByUserId(user.getId());
        if (userBank != null) {
            agentUserListVO.setBankName(userBank.getBankName());
            agentUserListVO.setBankNo(userBank.getBankNo());
            agentUserListVO.setBankAddress(userBank.getBankAddress());
        }
        return agentUserListVO;
    }
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -1,6 +1,7 @@
package com.nq.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -19,6 +20,7 @@
import com.nq.utils.redis.JsonUtil;
import com.nq.utils.redis.RedisShardedPoolUtils;
import com.nq.utils.stock.BuyAndSellUtils;
import com.nq.vo.stock.UserStockSubscribeAddIn;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -77,7 +79,7 @@
     */
    @Override
    @Transactional
    public ServerResponse insert(UserStockSubscribe model, HttpServletRequest request) throws Exception {
    public ServerResponse insert(UserStockSubscribeAddIn model, HttpServletRequest request) throws Exception {
        int ret = 0;
        if (model == null) {
            return ServerResponse.createByErrorMsg("参数错误",request);
@@ -86,7 +88,11 @@
        UserAssets userAssets =   iUserAssetsServices.assetsByTypeAndUserId("IN",user.getId());
        if (model.getNewCode() != null) {
            StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>()
                    .eq("code", model.getNewCode()).eq("type",model.getType()));
                    .eq("newlist_id", model.getNewlistId()));
            //判断购买新股需不需要密钥
            if(StringUtils.isNotEmpty(stockSubscribe.getPassword()) && !stockSubscribe.getPassword().equals(model.getPassword())){
                return ServerResponse.createByErrorMsg("密钥输入错误",request);
            }
            //实名认证开关
            SiteProduct siteProduct = iSiteProductService.getProductSetting();
            if (siteProduct.getRealNameDisplay() && user.getIsActive() != 2) {
@@ -99,42 +105,58 @@
                return ServerResponse.createByErrorMsg("不在认缴或配售时间之内",request);
            }
            //重复申购限制
            UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.selectOne(new QueryWrapper<UserStockSubscribe>().eq(
                    "new_code", model.getNewCode()).eq("user_id", user.getId()).eq("type",model.getType()));
            if (userStockSubscribe != null) {
                return ServerResponse.createByErrorMsg("请勿重复申请",request);
            }
//            //重复申购限制
//            UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.selectOne(new QueryWrapper<UserStockSubscribe>().eq(
//                    "new_code", model.getNewCode()).eq("user_id", user.getId()).eq("type",model.getType()));
//            if (userStockSubscribe != null) {
//                return ServerResponse.createByErrorMsg("请勿重复申请",request);
//            }
            if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
                return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定",request);
            }
            if (stockSubscribe == null) {
                return ServerResponse.createByErrorMsg("新的股票代码不存在",request);
            }
            if (model.getApplyNums() == null || model.getApplyNums() > stockSubscribe.getOrderNumber()|| model.getApplyNums() < 500) {
                return ServerResponse.createByErrorMsg("最小起订量是500,最大值"
                        + stockSubscribe.getOrderNumber(),request);
            if ( model.getApplyNums() == null){
                // 申请数量为空时返回错误信息
                return ServerResponse.createByErrorMsg("申请数量不能为空", request);
            }
            if (model.getApplyNums() > stockSubscribe.getOrderNumber()){
                // 申请数量大于订单数量时返回错误信息
                return ServerResponse.createByErrorMsg("最多可申购:" + stockSubscribe.getOrderNumber(), request);
            }
            if(stockSubscribe.getType() == 1){
                model.setUserId(user.getId());
                model.setNewName(stockSubscribe.getName());
                model.setAgentId(user.getAgentId());
                model.setAgentName(user.getAgentName());
                model.setPhone(user.getPhone());
                model.setBuyPrice(stockSubscribe.getPrice());
                model.setBond(new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice()));
                model.setBuyPrice(stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice());
                model.setBond(new BigDecimal(model.getApplyNums()).multiply((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice())));
                model.setRealName(Objects.equals(user.getRealName(), "")||user.getRealName()==null ?"模拟用户无实名":user.getRealName());
                model.setAddTime(new Date());
                model.setOrderNo(KeyUtils.getUniqueKey());
                model.setType(stockSubscribe.getType());
                ret = userStockSubscribeMapper.insert(model);
                UserStockSubscribe userStockSubscribe = Convert.convert(UserStockSubscribe.class, model);
                userStockSubscribe.setNewStockId(stockSubscribe.getNewlistId());
                ret = userStockSubscribeMapper.insert(userStockSubscribe);
                if (ret > 0) {
                    return ServerResponse.createBySuccessMsg("申购成功",request);
                } else {
                    return ServerResponse.createByErrorMsg("申购失败",request);
                }
            }else{
               BigDecimal bound =  new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice());
               BigDecimal bound;
               if(stockSubscribe.getMinPrice() != null || stockSubscribe.getMinPrice().compareTo(BigDecimal.ZERO)<0){
                   bound =  new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getMinPrice());
               }else{
                   bound =  new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice());
               }
               BigDecimal useEnaAmount = iUserAssetsServices.getAvailableBalance(EStockType.IN.getCode(), user.getId());
               if(useEnaAmount.compareTo(bound)<0){
                   return ServerResponse.createByErrorMsg("余额不足,配售失败",request);
@@ -144,14 +166,16 @@
                model.setAgentId(user.getAgentId());
                model.setAgentName(user.getAgentName());
                model.setPhone(user.getPhone());
                model.setBuyPrice(stockSubscribe.getPrice());
                model.setBond(new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice()));
                model.setBuyPrice(stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice());
                model.setBond(new BigDecimal(model.getApplyNums()).multiply((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice())));
                model.setRealName(Objects.equals(user.getRealName(), "")||user.getRealName()==null ?"模拟用户无实名":user.getRealName());
                model.setAddTime(new Date());
                model.setOrderNo(KeyUtils.getUniqueKey());
                model.setType(stockSubscribe.getType());
                model.setDbMoney(BigDecimal.ZERO);
                ret = userStockSubscribeMapper.insert(model);
                UserStockSubscribe userStockSubscribe = Convert.convert(UserStockSubscribe.class, model);
                userStockSubscribe.setNewStockId(stockSubscribe.getNewlistId());
                ret = userStockSubscribeMapper.insert(userStockSubscribe);
                iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(),EUserAssets.BUY,bound.negate(),"","");
                if (ret > 0) {
                    return ServerResponse.createBySuccessMsg("配售成功",request);
@@ -187,13 +211,13 @@
                return ServerResponse.createByErrorMsg("不能更改申购状态");
            }
            StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe())
                    .eq("code", userStockSubscribe.getNewCode()).eq("type",userStockSubscribe.getType()));
                    .eq("newlist_id", userStockSubscribe.getNewStockId()));
            if((model.getStatus() == 3 && model.getApplyNumber() == null) || (model.getStatus() == 3 && model.getApplyNumber() == 0) ){
                return ServerResponse.createByErrorMsg("中签数量不能小于0");
            }
            if (model.getStatus() == 3 && model.getApplyNumber() != null){
                if(stockSubscribe.getType() == 1){
                    model.setBond(stockSubscribe.getPrice().multiply(BigDecimal.valueOf(model.getApplyNumber())));
                    model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber())));
                    model.setDbMoney(model.getDbMoney());
                    //客户中签直接扣除客户账户可用资金
                    UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userStockSubscribe.getUserId());
@@ -216,10 +240,10 @@
                        return  ServerResponse.createByErrorMsg("配置中签数量不能超过申请数量",request);
                    }
                    BigDecimal cCount = new BigDecimal(model.getApplyNums()-model.getApplyNumber());
                    BigDecimal tMoney = stockSubscribe.getPrice().multiply(cCount);
                    BigDecimal tMoney = ((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice())).multiply(cCount);
                    iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(),
                            EUserAssets.TOP_UP,tMoney,"","");
                    model.setBond(stockSubscribe.getPrice().multiply(BigDecimal.valueOf(model.getApplyNumber())));
                    model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber())));
                    model.setDbMoney(BigDecimal.ZERO);
                    model.setStatus(4);
                    ret = userStockSubscribeMapper.update1(model);
@@ -286,13 +310,13 @@
                model.setAgentId(user.getAgentId());
                model.setAgentName(user.getAgentName());
                StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe())
                        .eq("code", model.getNewCode()));
                        .eq("newlist_id", model.getNewStockId()));
                if (stockSubscribe == null) {
                    return ServerResponse.createByErrorMsg("Failed. Ipo information does not exist");
                }
                model.setNewName(stockSubscribe.getName());
                model.setBuyPrice(stockSubscribe.getPrice());
                model.setBuyPrice(stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice());
                if (model.getApplyNums() > stockSubscribe.getOrderNumber() || model.getApplyNumber() > stockSubscribe.getOrderNumber()) {
                    return ServerResponse.createByErrorMsg("The number of applications or the number of wins is the maximum" + stockSubscribe.getOrderNumber());
                }
@@ -319,7 +343,7 @@
        if(model!=null){
            //所有人发站内信
            if(model.getUserId() == 0){
                List<User> users = this.userMapper.listByAdmin(null, null, null, null);
                List<User> users = this.userMapper.listByAdmin(null, null, null, null,null,null,null,null);
                for(int k=0;k<users.size();k++){
                    User user = users.get(k);
                    SiteMessage siteMessage = new SiteMessage();
@@ -384,8 +408,7 @@
            List<UserStockSubscribe> list = new ArrayList<>();
            for (UserStockSubscribe userStockSubscribe1 : userStockSubscribe) {
                StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe())
                        .eq("code", userStockSubscribe1.getNewCode())
                        .eq("type",userStockSubscribe1.getType()));
                        .eq("newlist_id", userStockSubscribe1.getNewStockId()));
                if (stockSubscribe != null) {
                    list.add(userStockSubscribe1);
                }
@@ -410,8 +433,6 @@
            }
            UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
            if (userStockSubscribe != null && userStockSubscribe.getUserId().equals(user.getId())) {
                StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe())
                        .eq("code", userStockSubscribe.getNewCode()));
                if(userStockSubscribe.getType()== 2 ){
                    return ServerResponse.createByErrorMsg("未中签,无需支付",request);
                }
src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
@@ -92,7 +92,7 @@
    UserAssetsMapper userAssetsMapper;
    @Transactional
    public ServerResponse outMoney(String amt, String with_Pwd,String accsetType,HttpServletRequest request) throws Exception {
    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");
        }
@@ -111,9 +111,9 @@
            if (user.getIsActive() != 2) {
                return ServerResponse.createByErrorMsg("未实名认证",request);
            }
            UserBank userBank = this.iUserBankService.findUserBankByUserId(user.getId());
            UserBank userBank = this.userBankMapper.selectById(bankId);
            if (userBank == null) {
                return ServerResponse.createByErrorMsg("未绑定银行卡",request);
                return ServerResponse.createByErrorMsg("银行卡不存在",request);
            }
            if (user.getAccountType().intValue() == 1) {
                return ServerResponse.createByErrorMsg("模拟用户无法提取资金",request);
@@ -347,20 +347,6 @@
                throw new Exception("修改用户资金出错,抛出异常");
            }
            userWithdraw.setWithMsg(authMsg);
        }else if(state == 1){
            // 发起第三方提现
            BigDecimal bgAmount = userWithdraw.getWithAmt();
            if(siteSetting.getWithdraw().equals("Top1")){
                withdrawMethod1(userWithdraw.getId()+"",bgAmount.toString(), userMapper.selectById(userWithdraw.getUserId()));
            } else if (siteSetting.getWithdraw().equals("Top2")) {
                withdrawMethod2(userWithdraw.getId()+"",bgAmount.toString(), userMapper.selectById(userWithdraw.getUserId()));
            }else if(siteSetting.getWithdraw().equals("Top3")){
                withdrawMethod3(userWithdraw.getId()+"",bgAmount.toString(), userMapper.selectById(userWithdraw.getUserId()));
            }else{
                withdrawMethod4(userWithdraw.getId()+"",bgAmount.toString(), userMapper.selectById(userWithdraw.getUserId()));
            }
        }
        userWithdraw.setWithStatus(state);
        userWithdraw.setTransTime(new Date());
@@ -371,115 +357,6 @@
        return ServerResponse.createByErrorMsg("操作失败!");
    }
    public int withdrawMethod1(String ordersn, String payAmt, User user ) {
        UserBank userBank =  userBankMapper.findUserBankByUserId(user.getId());
        Map<String,String> map = new HashedMap();
        map.put("mch_id",PayUtil.MCH_ID_TOP1);
        map.put("back_url","http://www.jumptalk.net:8091/api/pay/withdrawNotify.do");
        map.put("mch_transferId",ordersn);
        map.put("transfer_amount",payAmt);
        map.put("apply_date", DateTimeUtil.getCurrentDate(STANDARD_FORMAT));
        map.put("bank_code",userBank.getBankImg());
        map.put("receive_name",user.getRealName());
        map.put("receive_account",userBank.getBankNo());
        map.put("remark",userBank.getBankAddress());
        String signStr = SignUtil.sortData(map);
        map.put("sign_type","MD5");
        try {
            map.put("sign", SignAPI.sign(signStr,PayUtil.DF_TOKEN_TOP1));
            String reponse = HttpClientUtil.doPost(PayUtil.PAY_TRANSFER_ORDER_TOP1, map, "utf-8");
            com.alibaba.fastjson.JSONObject  object = com.alibaba.fastjson.JSONObject.parseObject(reponse);
        }catch (Exception e){
            e.printStackTrace();
        }
        return -1;
    }
    public int withdrawMethod2(String ordersn, String payAmt, User user ) {
        UserBank userBank =  userBankMapper.findUserBankByUserId(user.getId());
        Map<String,String> map = new HashedMap();
        map.put("mch_id",PayUtil.MCH_ID_TOP2);
        map.put("back_url","http://www.jumptalk.net:8091/api/pay/withdrawNotify2.do");
        map.put("mch_transferId",ordersn);
        map.put("transfer_amount",payAmt);
        map.put("apply_date", DateTimeUtil.getCurrentDate(STANDARD_FORMAT));
        map.put("bank_code",userBank.getBankImg());
        map.put("receive_name",user.getRealName());
        map.put("receive_account",userBank.getBankNo());
        map.put("remark",userBank.getBankAddress());
        String signStr = SignUtil.sortData(map);
        log.error("加密前排序字符 {}", signStr);
        map.put("sign_type","MD5");
        try {
            map.put("sign", SignAPI.sign(signStr,PayUtil.DF_TOKEN_TOP2));
            log.info("支付通道2 代付的参数 {}",new Gson().toJson(map));
            String reponse = HttpClientUtil.doPost(PayUtil.PAY_TRANSFER_ORDER_TOP2, map, "utf-8");
            log.info("支付通道2 审核返回的 {}",reponse);
            com.alibaba.fastjson.JSONObject  object = com.alibaba.fastjson.JSONObject.parseObject(reponse);
        }catch (Exception e){
            e.printStackTrace();
        }
        return -1;
    }
    public int withdrawMethod3(String ordersn, String payAmt, User user ) {
        UserBank userBank =  userBankMapper.findUserBankByUserId(user.getId());
        Map<String,String> map = new HashedMap();
        map.put("mch_id",PayUtil.MCH_ID_TOP3);
        map.put("back_url","http://www.jumptalk.net:8091/api/pay/withdrawNotify3.do");
        map.put("mch_transferId",ordersn);
        map.put("transfer_amount",payAmt);
        map.put("apply_date", DateTimeUtil.getCurrentDate(STANDARD_FORMAT));
        map.put("bank_code",userBank.getBankImg());
        map.put("receive_name",user.getRealName());
        map.put("receive_account",userBank.getBankNo());
        map.put("remark",userBank.getBankAddress());
        String signStr = SignUtil.sortData(map);
        log.error("加密前排序字符 {}", signStr);
        map.put("sign_type","MD5");
        try {
            map.put("sign", SignAPI.sign(signStr,PayUtil.DF_TOKEN_TOP3));
            log.info("支付通道3 代付的参数 {}",new Gson().toJson(map));
            String reponse = HttpClientUtil.doPost(PayUtil.PAY_TRANSFER_ORDER_TOP3, map, "utf-8");
            log.info("支付通道3 审核返回的 {}",reponse);
        }catch (Exception e){
            e.printStackTrace();
        }
        return -1;
    }
    public int withdrawMethod4(String ordersn, String payAmt, User user ) {
        UserBank userBank =  userBankMapper.findUserBankByUserId(user.getId());
        Map<String,String> map = new HashedMap();
        map.put("mch_id",PayUtil.MCH_ID_TOP4);
        map.put("back_url","http://www.jumptalk.net:8091/api/pay/withdrawNotify4.do");
        map.put("mch_transferId",ordersn);
        map.put("transfer_amount",payAmt);
        map.put("apply_date", DateTimeUtil.getCurrentDate(STANDARD_FORMAT));
        map.put("bank_code",userBank.getBankImg());
        map.put("receive_name",user.getRealName());
        map.put("receive_account",userBank.getBankNo());
        map.put("remark",userBank.getBankAddress());
        String signStr = SignUtil.sortData(map);
        map.put("sign_type","MD5");
        try {
            map.put("sign", SignAPI.sign(signStr,PayUtil.DF_TOKEN_TOP1));
            String reponse = HttpClientUtil.doPost(PayUtil.PAY_TRANSFER_ORDER_TOP1, map, "utf-8");
            log.info("支付通道4 审核返回的 {}",reponse);
        }catch (Exception e){
            e.printStackTrace();
        }
        return -1;
    }
    public int deleteByUserId(Integer userId) {
        return this.userWithdrawMapper.deleteByUserId(userId);
src/main/java/com/nq/utils/stock/sina/StockApi.java
@@ -56,7 +56,7 @@
                stockListVO.setName(stock.getStockName());
                stockListVO.setCode(stock.getStockCode());
                stockListVO.setSpell(stock.getStockSpell());
                stockListVO.setGid(stock.getStockGid().toUpperCase());
                stockListVO.setGid(stock.getStockGid());
                stockListVO.setStock_plate(stock.getStockPlate());
                stockListVO.setStock_type(stock.getStockType());
                stockListVOs.add(stockListVO);
src/main/java/com/nq/vo/stock/PageQuery.java
New file
@@ -0,0 +1,56 @@
package com.nq.vo.stock;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PageQuery {
    private Long pageNo;
    private Long pageSize;
    private String sortBy;
    private Boolean isAsc;
    public <T> Page<T> toMpPage(OrderItem ... items){
        // 1.分页条件
        Page<T> page = Page.of(pageNo, pageSize);
        // 2.排序条件
        if(StrUtil.isNotBlank(sortBy)){
            // 不为空
            OrderItem orderItem=new OrderItem();
            //排序方式
            orderItem.setAsc(isAsc);
            //排序字段
            orderItem.setColumn(sortBy);
            page.addOrder(orderItem);
        }else if(items != null){
            // 为空,默认排序
            page.addOrder(items);
        }
        return page;
    }
    public <T> Page<T> toMpPage(String defaultSortBy, boolean isAsc){
        OrderItem orderItem=new OrderItem();
        //排序方式
        orderItem.setAsc(isAsc);
        //排序字段
        orderItem.setColumn(defaultSortBy);
        return this.toMpPage(orderItem);
    }
    public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {
        return toMpPage("create_time", false);
    }
    public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc() {
        return toMpPage("update_time", false);
    }
}
src/main/java/com/nq/vo/stock/StockListVO.java
@@ -9,6 +9,8 @@
public class StockListVO {
    private String id;
    private String name;
    private String code;
src/main/java/com/nq/vo/stock/UserStockSubscribeAddIn.java
New file
@@ -0,0 +1,123 @@
package com.nq.vo.stock;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @program: dabaogp
 * @description:
 * @create: 2024-07-02 17:50
 **/
@Data
public class UserStockSubscribeAddIn {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    private Integer id;
    /**
     *訂單編號
     */
    private String orderNo;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 用户真实姓名
     */
    private String realName;
    /**
     * 用户手机号
     */
    private String phone;
    /**
     * 代理id
     */
    private Integer agentId;
    /**
     * 代理姓名
     */
    private String agentName;
    /**
     * 申购股票代码
     */
    private String newCode;
    /**
     * 申购股票名称
     */
    private String newName;
    /**
     * 保证金
     *
     */
    private BigDecimal bond;
    /**
     * 发行价格
     *
     */
    private BigDecimal buyPrice;
    /**
     * 申购数量
     *
     */
    private Integer applyNums;
    /**
     * 中签数量
     *
     */
    private Integer applyNumber;
    private Integer type;
    /**
     * 申购状态
     *状态:1、已申购,2、未中签,3、已中签,4、已缴纳 5.已转持仓
     */
    private Integer status;
    /**
     * 添加时间
     */
    private Date addTime;
    /**
     * 提交时间
     */
    private Date submitTime;
    /**
     * 中签审核时间
     */
    private Date endTime;
    /**
     * 双融确定时间
     */
    private Date fixTime;
    /**
     * 备注
     */
    private String remarks;
    private BigDecimal dbMoney;
    private String password;
    @TableField(exist = false)
    private String newlistId;
}
src/main/java/com/nq/vo/user/UserOut.java
New file
@@ -0,0 +1,29 @@
package com.nq.vo.user;
import com.nq.pojo.User;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @program: dabaogp
 * @description:
 * @create: 2024-07-05 14:03
 **/
@Data
public class UserOut extends User {
    /**
     *  总资产
     * */
    private String totalMoney;
    /**
     *  总可用余额
     * */
    private String availableBalance;
    /**
     *  总冻结资产
     * */
    private String freezeMoney;
}
src/main/java/com/nq/vo/user/UserQueryParams.java
New file
@@ -0,0 +1,27 @@
package com.nq.vo.user;
import lombok.Data;
import java.sql.Date;
/**
 * @program: dabaogp
 * @description:
 * @create: 2024-07-05 11:43
 **/
@Data
public class UserQueryParams {
    private String realName;
    private String phone;
    private Integer agentId;
    private Integer accountType;
    private Integer isLock;
    private Integer isLogin;
    private String regTime;
    private Integer isActive;
    private int pageNum = 1;
    private int pageSize = 10;
}
src/main/resources/application.properties
@@ -17,7 +17,7 @@
ftp.user=ftp_stock
ftp.pass=123456
ftp.address =/www/wwwroot/ftp_stock/
ftp.server.http.prefix=https://img.dfddgj346.xyz/
ftp.server.http.prefix=https://img.pentagon-member.com/
redis1.ip=localhost
redis1.port=6379
src/main/resources/mapper/StockDzMapper.xml
@@ -32,7 +32,7 @@
    </sql>
    <select id="findStockListByKeyWords" resultMap="BaseResultMap" parameterType="map">
        SELECT
        <include refid="Base_Column_List" />
        *
        from stock_dz
        <where>
            <if test="keyWords != null and keyWords != '' ">
src/main/resources/mapper/StockMapper.xml
@@ -280,6 +280,9 @@
      <if test="stockType != null and stockType != '' ">
        and stock_type = #{stockType}
      </if>
      <if test="stockGid != null and stockGid != '' ">
        and stock_gid = #{stockGid}
      </if>
    </where>
  </select>
@@ -329,27 +332,26 @@
    </if>
  </select>
  <select id="findStockTypeDz" resultMap="BaseResultMap" parameterType="map">
    select
    <include refid="Base_Column_List"/>
    FROM stock
  <select id="findStockTypeDz" resultType="com.nq.pojo.StockDz" parameterType="map">
    SELECT
    *
    FROM stock_dz
    where stock_type = #{stockType}
    WHERE start_time &lt; #{formatDate} AND end_time &gt; #{formatDate}
    <if test="keyWords != null and keyWords != '' ">
      and (stock_spell like concat('%',#{keyWords},'%')  or stock_name like concat('%',#{keyWords},'%')  )
      AND (stock_spell LIKE #{keyWords} OR stock_name LIKE #{keyWords})
    </if>
    and  stock_code in(select stock_code from stock_dz)
    <if test="orderBy != null and orderBy == 'desc'" >
      order by  increase_ratio desc
    <if test="orderBy != null">
      ORDER BY  increase_ratio
      <if test="orderBy == 'desc'">
        DESC
      </if>
      <if test="orderBy == 'asc'">
        ASC
      </if>
    </if>
    <if test="orderBy != null and orderBy == 'asc'" >
      order by  increase_ratio asc
    </if>
  </select>
src/main/resources/mapper/UserBankMapper.xml
@@ -131,12 +131,11 @@
  <select id="findUserBankByUserId" parameterType="integer" resultMap="BaseResultMap">
  <select id="findUserBankByUserId" parameterType="integer" resultType="com.nq.pojo.UserBank">
    SELECT
    <include refid="Base_Column_List"/>
    *
    FROM user_bank
    WHERE user_id = #{userId}
    limit 1
  </select>
src/main/resources/mapper/UserMapper.xml
@@ -84,7 +84,7 @@
    <select id="listByAdmin" resultMap="BaseResultMap" parameterType="map">
        SELECT
        <include refid="Base_Column_List"/>
        *
        FROM user
        <where>
            <if test="searchId != null ">
@@ -99,6 +99,18 @@
            <if test="accountType != null ">
                and account_type = #{accountType}
            </if>
            <if test="isLock != null ">
                and is_lock = #{isLock}
            </if>
            <if test="isLogin != null ">
                and is_login = #{isLogin}
            </if>
            <if test="regTime != null and regTime != ''">
                and  DATE_FORMAT(reg_time, '%Y-%m-%d') = #{regTime}
            </if>
            <if test="isActive != null ">
                and is_active = #{isActive}
            </if>
        </where>
        ORDER BY id DESC
    </select>