1
zj
2024-05-09 ddc52ca9c8a7597b410be4e802e598844bdc5d4a
src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -13,6 +13,7 @@
import com.nq.pojo.*;
import com.nq.pojo.reponse.RUserAssets;
import com.nq.service.*;
import com.nq.utils.UserPointUtil;
import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.SymmetricCryptoUtil;
@@ -27,6 +28,7 @@
import com.nq.vo.indexposition.IndexPositionVO;
import com.nq.vo.position.PositionProfitVO;
import com.nq.vo.position.PositionVO;
import com.nq.vo.position.UserPositionVO;
import com.nq.vo.stock.StockListVO;
import com.nq.vo.user.UserInfoVO;
@@ -117,8 +119,14 @@
    @Autowired
    ISiteMessageService iSiteMessageService;
    @Autowired
    private UserPositionMapper userPositionMapper;
    @Autowired
    IPriceServices priceServices;
    @Resource
    ApplyLeverMapper applyLeverMapper;
@@ -286,9 +294,30 @@
        String userJson = RedisShardedPoolUtils.get(loginToken);
        User user = (User) JsonUtil.string2Obj(userJson, User.class);
        User dbuser = this.userMapper.selectById(user.getId());
        SiteSetting siteSetting = iSiteSettingService.getSiteSetting();
        UserInfoVO userInfoVO = assembleUserInfoVO(dbuser, siteSetting);
        ApplyLever applyLever = applyLeverMapper.selectOne(new LambdaQueryWrapper<ApplyLever>()
                .eq(ApplyLever::getUserId, user.getId())
                .eq(ApplyLever::getState, 1)
                .orderByDesc(ApplyLever::getCreateTime)
                .last(" limit 1"));
        if(null == applyLever || applyLever.getLever().equals("1")){
            userInfoVO.setSiteLever("1");
        }else{
            userInfoVO.setSiteLever(leverSplit(applyLever.getLever()));
        }
        return ServerResponse.createBySuccess(userInfoVO);
    }
    public String leverSplit(String lever){
        String levers = "1/2/5/10";
        String[] parts = levers.split("/");
        int index = Arrays.asList(parts).indexOf(lever);
        if (index != -1) {
            return String.join("/", Arrays.copyOfRange(parts, 0, index + 1));
        }
        return null;
    }
@@ -484,19 +513,20 @@
            rUserAssets.setCumulativeProfitAndLoss(hProfitAndLose.toString());
            rUserAssets.setHandlingCharge(hMoney.toString());
            rUserAssets.setProfitAndLoss(profitAndLose.toString());
            rUserAssets.setIsZf(userAssets.getIsZf());
            rUserAssets.setAmountToBeCovered(userAssets.getAmountToBeCovered().toString());
            BigDecimal rate = rateServices.currencyRate(
                    EStockType.getEStockTypeByCode(userAssets.getAccectType()),EStockType.US);
           BigDecimal  availableBalanceUSD = amt;
           if(amt.compareTo(BigDecimal.ZERO)>0){
               availableBalanceUSD = amt.multiply(rate);
           }
            BigDecimal  availableBalanceUSD = amt;
            if(amt.compareTo(BigDecimal.ZERO)>0){
                availableBalanceUSD = amt.multiply(rate);
            }
            BigDecimal  freezeMoneyUSD = freeMoney;
           if(freeMoney.compareTo(BigDecimal.ZERO)>0){
               freezeMoneyUSD  = freeMoney.multiply(rate);
           }
            if(freeMoney.compareTo(BigDecimal.ZERO)>0){
                freezeMoneyUSD  = freeMoney.multiply(rate);
            }
            BigDecimal  totleMoneyUSD = totalAssets;
            if(totalAssets.compareTo(BigDecimal.ZERO)>0){
@@ -527,7 +557,9 @@
            rUserAssets.setCumulativeProfitAndLossUSD(cumulativeProfitAndLossUSD.setScale(s,BigDecimal.ROUND_UP).toString());
            rUserAssets.setHandlingChargeUSD(handlingChargeUSD.setScale(s,BigDecimal.ROUND_UP).toString());
            rUserAssets.setProfitAndLossUSD(profitAndLossUSD.setScale(s,BigDecimal.ROUND_UP).toString());
            rUserAssets.setProfitAndLoss(getProfitAndLose(userId,userAssets.getAccectType()).toString());
            BigDecimal decimal = new BigDecimal(rUserAssets.getTotalMoney()).add(new BigDecimal(rUserAssets.getProfitAndLoss()));
            rUserAssets.setTotalMoney(decimal.toString());
            AllProfitAndLose = AllProfitAndLose.add(profitAndLossUSD);
            allTotalAssets = allTotalAssets.add(totleMoneyUSD);
            allAmt = allAmt.add(availableBalanceUSD);
@@ -566,6 +598,28 @@
        return ServerResponse.createBySuccess(rUserAssetsList);
    }
    public BigDecimal getProfitAndLose(Integer userId,String  accectType){
        List<UserPosition> userPositions;
        userPositions = userPositionMapper.
                findMyPositionByCodeAndSpell(userId,
                        "","",
                        0, accectType);
        List<UserPositionVO> userPositionVOS = Lists.newArrayList();
        if (userPositions.size() > 0) {
            for (UserPosition position : userPositions) {
                UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position, priceServices.getNowPrice(position.getStockCode()));
                userPositionVOS.add(userPositionVO);
            }
        }
        BigDecimal profitAndLose = BigDecimal.ZERO;
        for (UserPositionVO f : userPositionVOS) {
            profitAndLose = profitAndLose.add(f.getProfitAndLose());
        }
        return profitAndLose;
    }
    @Override
    public ServerResponse transfer(String fromType, String toType, String amt,HttpServletRequest request) {
        User user =  userService.getCurrentUser(request);
@@ -575,7 +629,11 @@
            return ServerResponse.createByErrorMsg("余额不足",request);
        }
        userAssetsServices.availablebalanceChange(fromType,user.getId(), EUserAssets.TRANSFER,amtBig.negate(),fromType+"/"+toType,"");
        amtBig = rateServices.currencyRate(EStockType.getEStockTypeByCode(fromType),EStockType.getEStockTypeByCode(toType)).multiply(amtBig);
        if(fromType.equals("US")){
            amtBig = (new BigDecimal(83.5)).multiply(amtBig);
        }else{
            amtBig = rateServices.currencyRate(EStockType.getEStockTypeByCode(fromType),EStockType.getEStockTypeByCode(toType)).multiply(amtBig);
        }
        userAssetsServices.availablebalanceChange(toType,user.getId(),EUserAssets.TRANSFER,amtBig.setScale(5,RoundingMode.HALF_DOWN),fromType+"/"+toType,"");
        return ServerResponse.createBySuccess();
    }
@@ -701,7 +759,7 @@
    }
    public ServerResponse addSimulatedAccount(Integer agentId, String phone, String pwd, String amt, Integer accountType, HttpServletRequest request) {
    public ServerResponse addSimulatedAccount(Integer agentId, String phone, String pwd,Integer accountType, HttpServletRequest request) {
        if (StringUtils.isBlank(phone) || StringUtils.isBlank(pwd)) {
            return ServerResponse.createByErrorMsg("The parameter cannot be null");
        }
@@ -712,11 +770,6 @@
            return ServerResponse.createByErrorMsg("The phone number is registered");
        }
        if ((new BigDecimal(amt)).compareTo(new BigDecimal("200000")) == 1) {
            return ServerResponse.createByErrorMsg("The phone number is registered");
        }
        amt = "0";   //代理后台添加用户时金额默认为0
        User user = new User();
        user.setAccountType(accountType);
        user.setPhone(phone);
@@ -725,6 +778,7 @@
        user.setIsActive(Integer.valueOf(0));
        user.setRegTime(new Date());
        user.setUserPwd(SymmetricCryptoUtil.encryptPassword(pwd));
        user.setLever("1");
        if (accountType.intValue() == 1) {
            user.setNickName("模拟用户");
        }