|
@@ -7,18 +7,17 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.jzg.commons.core.base.BaseController;
|
|
import com.jzg.commons.core.base.BaseController;
|
|
|
import com.jzg.commons.core.base.StateResult;
|
|
import com.jzg.commons.core.base.StateResult;
|
|
|
import com.jzg.commons.core.page.HttpResult;
|
|
import com.jzg.commons.core.page.HttpResult;
|
|
|
-import com.jzg.commons.entity.dto.AmountAuditEditParam;
|
|
|
|
|
-import com.jzg.commons.entity.dto.AmountAuditParam;
|
|
|
|
|
-import com.jzg.commons.entity.dto.AmountAuditRejectParam;
|
|
|
|
|
-import com.jzg.commons.entity.po.InsFeeOrders;
|
|
|
|
|
-import com.jzg.commons.entity.po.SysAmountAuditing;
|
|
|
|
|
-import com.jzg.commons.entity.po.SysUserAccount;
|
|
|
|
|
|
|
+import com.jzg.commons.entity.dto.*;
|
|
|
|
|
+import com.jzg.commons.entity.po.*;
|
|
|
import com.jzg.commons.entity.vo.AmountAuditVo;
|
|
import com.jzg.commons.entity.vo.AmountAuditVo;
|
|
|
|
|
+import com.jzg.commons.exception.SystemException;
|
|
|
import com.jzg.commons.util.AssertionUtils;
|
|
import com.jzg.commons.util.AssertionUtils;
|
|
|
import com.jzg.commons.util.StringUtils;
|
|
import com.jzg.commons.util.StringUtils;
|
|
|
import com.jzg.organization.mapper.SysAmountAuditingMapper;
|
|
import com.jzg.organization.mapper.SysAmountAuditingMapper;
|
|
|
import com.jzg.organization.service.SysAmountAuditingService;
|
|
import com.jzg.organization.service.SysAmountAuditingService;
|
|
|
import com.jzg.organization.service.SysUserAccountService;
|
|
import com.jzg.organization.service.SysUserAccountService;
|
|
|
|
|
+import com.jzg.organization.service.SysUserJzgInfoBankCardService;
|
|
|
|
|
+import com.jzg.organization.service.SysUserJzgInfoService;
|
|
|
import com.jzg.organization.state.AuditState;
|
|
import com.jzg.organization.state.AuditState;
|
|
|
import com.jzg.organization.state.listener.AuditStateListener;
|
|
import com.jzg.organization.state.listener.AuditStateListener;
|
|
|
import org.redisson.api.RBucket;
|
|
import org.redisson.api.RBucket;
|
|
@@ -27,7 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.List;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
@@ -52,6 +53,12 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
|
|
|
@Autowired
|
|
@Autowired
|
|
|
SysUserAccountService userAccountService;
|
|
SysUserAccountService userAccountService;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private SysUserJzgInfoBankCardService sysUserJzgInfoBankCardService;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private SysUserJzgInfoService sysUserJzgInfoService;
|
|
|
|
|
+
|
|
|
private static final String AMOUNT_LOCK_PREFIX = "amountLock:";
|
|
private static final String AMOUNT_LOCK_PREFIX = "amountLock:";
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -155,8 +162,14 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
|
|
|
SysUserAccount userAccount = userAccountService.queryByUserId(audit.getUserId());
|
|
SysUserAccount userAccount = userAccountService.queryByUserId(audit.getUserId());
|
|
|
AssertionUtils.isFail(Objects.isNull(userAccount), "用户账户数据异常!");
|
|
AssertionUtils.isFail(Objects.isNull(userAccount), "用户账户数据异常!");
|
|
|
AssertionUtils.isFail(audit.getAmount().compareTo(audit.getBalanceAmount()) > 0, "提现金额大于账户余额!");
|
|
AssertionUtils.isFail(audit.getAmount().compareTo(audit.getBalanceAmount()) > 0, "提现金额大于账户余额!");
|
|
|
|
|
+
|
|
|
|
|
+ if(userAccount.getSumAmount().compareTo(audit.getAmount()) < 0){
|
|
|
|
|
+ throw new SystemException("账户金额少于提现金额,请审核账户");
|
|
|
|
|
+ }
|
|
|
|
|
+ userAccount.setSumAmount(userAccount.getSumAmount().subtract(audit.getAmount()));
|
|
|
userAccount.setSumAmountPaid(userAccount.getSumAmountPaid().add(audit.getAmount()));
|
|
userAccount.setSumAmountPaid(userAccount.getSumAmountPaid().add(audit.getAmount()));
|
|
|
userAccount.setSumAmountUnpaid(userAccount.getSumAmountUnpaid().subtract(audit.getAmount()));
|
|
userAccount.setSumAmountUnpaid(userAccount.getSumAmountUnpaid().subtract(audit.getAmount()));
|
|
|
|
|
+
|
|
|
userAccountService.saveOrUpdate(userAccount);
|
|
userAccountService.saveOrUpdate(userAccount);
|
|
|
}else{
|
|
}else{
|
|
|
AssertionUtils.isFail(true, "提现申请已被" + audit.getReceiveUser() + "领取!");
|
|
AssertionUtils.isFail(true, "提现申请已被" + audit.getReceiveUser() + "领取!");
|
|
@@ -195,6 +208,44 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
|
|
|
RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
|
|
RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
|
|
|
return bucket.isExists();
|
|
return bucket.isExists();
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Page<AmountAuditVo> myPayment(AmountAuditParam param) {
|
|
|
|
|
+ Page<AmountAuditVo> amountAuditVoPage = baseMapper.queryPaymentPage(param.getPage(), param, baseController.getUserName());
|
|
|
|
|
+ return amountAuditVoPage;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean applyWithdraw(ApplyWithdrawParam applyWithdrawParam) {
|
|
|
|
|
+
|
|
|
|
|
+ if(applyWithdrawParam.getWithdrawAmount().compareTo(BigDecimal.ZERO) <= 0){
|
|
|
|
|
+ throw new SystemException("提现金额错误,请重新输入");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ SysUserAccount sysUserAccount = userAccountService.queryByUserId(baseController.getUserId());
|
|
|
|
|
+ AssertionUtils.isFail(Objects.isNull(sysUserAccount),"找不到用户");
|
|
|
|
|
+
|
|
|
|
|
+ // 当前用户的余额
|
|
|
|
|
+ BigDecimal sumAmount = sysUserAccount.getSumAmount();
|
|
|
|
|
+
|
|
|
|
|
+ if(sumAmount.compareTo(applyWithdrawParam.getWithdrawAmount()) < 0){
|
|
|
|
|
+ throw new SystemException("无法提现,请检查当前账户余额");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 获取用户的银行卡信息
|
|
|
|
|
+ SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoService.getUserByUserId(baseController.getUserId());
|
|
|
|
|
+ List<SysUserJzgInfoBankCardDto> bankCardByUserId = sysUserJzgInfoBankCardService.getBankCardByUserId(sysUserJzgInfo.getId(),baseController.getSystemCode());
|
|
|
|
|
+ // 查找ID相同 并且是已审核的
|
|
|
|
|
+ if(!bankCardByUserId.stream().anyMatch(x -> x.getId().equals(applyWithdrawParam.getBankCardId()) && x.getAuditStatus().equals("1"))){
|
|
|
|
|
+ throw new SystemException("提供的银行卡信息错误");
|
|
|
|
|
+ }
|
|
|
|
|
+ SysUserJzgInfoBankCardDto sysUserJzgInfoBankCardDto = bankCardByUserId.stream().filter(x -> x.getId().equals(applyWithdrawParam.getBankCardId())).findFirst().get();
|
|
|
|
|
+
|
|
|
|
|
+ // 构造提现对象
|
|
|
|
|
+ SysAmountAuditing sysAmountAuditing = new SysAmountAuditing(applyWithdrawParam,sysUserAccount,sysUserJzgInfoBankCardDto,baseController.getUserId());
|
|
|
|
|
+ baseMapper.insert(sysAmountAuditing);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|