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.UserAssetsMapper;
|
import com.nq.enums.EStockType;
|
import com.nq.enums.EUserAssets;
|
import com.nq.pojo.UserAssets;
|
import com.nq.service.IUserAssetsServices;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.lang.annotation.ElementType;
|
import java.math.BigDecimal;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* 用户资产
|
*/
|
@Service
|
public class UserAssetsServices implements IUserAssetsServices {
|
|
@Resource
|
UserAssetsMapper userAssetsMapper;
|
|
|
@Override
|
public UserAssets assetsByTypeAndUserId(String accetType, Integer userId) {
|
if(accetType.equals("SZHB")){
|
accetType = "US";
|
}
|
QueryWrapper<UserAssets> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("accect_type",accetType);
|
queryWrapper.eq("user_id",userId);
|
UserAssets userAssets = userAssetsMapper.selectOne(queryWrapper);
|
if(userAssets == null){
|
userAssets = new UserAssets();
|
userAssets.setAccectType(accetType);
|
userAssets.setUserId(userId);
|
userAssetsMapper.insert(userAssets);
|
}
|
userAssets = userAssetsMapper.selectOne(queryWrapper);
|
return userAssets;
|
}
|
|
@Override
|
public ServerResponse updateUserAssets(Integer id, String amt) {
|
UserAssets userAssets = userAssetsMapper.selectById(id);
|
|
BigDecimal bigAmt = new BigDecimal(amt);
|
if(amt.contains("-")){
|
if(userAssets.getAvailableBalance().compareTo(bigAmt.negate())<0){
|
return ServerResponse.createByErrorMsg("账户余额不足");
|
}
|
}
|
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(bigAmt));
|
if( userAssetsMapper.updateById(userAssets)>0){
|
return ServerResponse.createBySuccess();
|
}else{
|
return ServerResponse.createByErrorMsg("修改金额失败");
|
}
|
|
}
|
|
|
@Override
|
public List<UserAssets> assetsByUserId(Integer userId) {
|
QueryWrapper<UserAssets> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("user_id",userId);
|
return userAssetsMapper.selectList(queryWrapper);
|
}
|
|
@Override
|
public BigDecimal getAvailableBalance(String accetType, Integer userId) {
|
if(accetType.equals("SZHB")){
|
accetType = "US";
|
}
|
return assetsByTypeAndUserId(accetType,userId).getAvailableBalance();
|
}
|
|
|
|
@Override
|
public Boolean availablebalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, String desc, String descType) {
|
|
if(accetType.equals("SZHB")){
|
accetType = "US";
|
}
|
UserAssets userAssets = selectByUserId(userId, EStockType.IN.getCode());
|
if(Objects.equals(eUserAssets.getCode(), EUserAssets.BUY.getCode())){
|
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
|
userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(amount.negate()));
|
}else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CLOSE_POSITION.getCode())){
|
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
|
userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount));
|
}else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT.getCode())){
|
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
|
userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(amount));
|
}else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CALCULATE_PROFIT_AND_LOSS.getCode())){
|
userAssets.setCumulativeProfitAndLoss(userAssets.getProfitAndLoss().add(amount));
|
}else if(Objects.equals(eUserAssets.getCode(), EUserAssets.TRANSFER.getCode())){
|
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
|
}else if(Objects.equals(eUserAssets.getCode(), EUserAssets.TOP_UP.getCode())){
|
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
|
userAssets.setTotleAssets(userAssets.getTotleAssets().add(amount));
|
}else if(Objects.equals(eUserAssets.getCode(), EUserAssets.WITHDRAW.getCode())){
|
userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
|
userAssets.setTotleAssets(userAssets.getTotleAssets().add(amount));
|
}
|
return userAssetsMapper.updateById(userAssets)>1;
|
}
|
|
@Override
|
public UserAssets selectByUserId(Integer id,String type) {
|
return userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>().eq(UserAssets::getUserId,id).eq(UserAssets::getAccectType,type));
|
}
|
}
|