|
@@ -1,34 +1,38 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
-import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
-import com.ym.mec.auth.api.entity.SysUser;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentWithdrawDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
|
|
|
import com.ym.mec.biz.dal.dto.CashAccountDetail;
|
|
|
import com.ym.mec.biz.dal.dto.WithdrawDto;
|
|
|
import com.ym.mec.biz.dal.dto.WithdrawInfoDto;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentWithdraw;
|
|
|
import com.ym.mec.biz.dal.entity.SysUserCashAccount;
|
|
|
import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
|
|
|
import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.PlatformCashAccountStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.TransTypeEnum;
|
|
|
+import com.ym.mec.biz.service.StudentWithdrawService;
|
|
|
import com.ym.mec.biz.service.SysUserCashAccountDetailService;
|
|
|
import com.ym.mec.biz.service.SysUserCashAccountService;
|
|
|
-import com.ym.mec.biz.dal.enums.TransTypeEnum;
|
|
|
+import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.page.PageInfo;
|
|
|
+import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
import com.ym.mec.util.string.IdWorker;
|
|
|
+import org.apache.commons.lang3.RandomStringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import com.ym.mec.biz.dal.dao.StudentWithdrawDao;
|
|
|
-import com.ym.mec.biz.dal.entity.StudentWithdraw;
|
|
|
-import com.ym.mec.biz.service.StudentWithdrawService;
|
|
|
-import com.ym.mec.common.dal.BaseDAO;
|
|
|
-import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.*;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.concurrent.locks.Lock;
|
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
|
@@ -37,6 +41,8 @@ public class StudentWithdrawServiceImpl extends BaseServiceImpl<String, StudentW
|
|
|
|
|
|
@Autowired
|
|
|
private StudentWithdrawDao studentWithdrawDao;
|
|
|
+ @Autowired
|
|
|
+ private SysUserCashAccountDao sysUserCashAccountDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<String, StudentWithdraw> getDAO() {
|
|
@@ -97,7 +103,7 @@ public class StudentWithdrawServiceImpl extends BaseServiceImpl<String, StudentW
|
|
|
accountDetailPageInfo.getRows().forEach(data ->{
|
|
|
WithdrawInfoDto withdrawInfoDto = new WithdrawInfoDto();
|
|
|
StudentWithdraw studentWithdraw = studentWithdrawDao.getByUserId(data.getUserId().longValue());
|
|
|
- withdrawInfoDto.setWithdrawId(studentWithdraw.getId());
|
|
|
+ withdrawInfoDto.setWithdrawId(studentWithdraw.getWithdrawNo());
|
|
|
withdrawInfoDto.setDateTime(DateUtil.date2ChineseDate(studentWithdraw.getCreateTime()));
|
|
|
withdrawInfoDto.setAmount(data.getAmount());
|
|
|
withdrawInfoDto.setBalance(data.getBalance());
|
|
@@ -112,6 +118,38 @@ public class StudentWithdrawServiceImpl extends BaseServiceImpl<String, StudentW
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void add(StudentWithdraw withdraw) throws Exception {
|
|
|
+ SysUserCashAccount account = sysUserCashAccountDao.get(withdraw.getUserId());
|
|
|
+ //账户状态正常
|
|
|
+ if(account != null && account.getStatus() == PlatformCashAccountStatusEnum.NORMAL){
|
|
|
+ //提现金额不大于账户可用余额
|
|
|
+ if(withdraw.getAmount().compareTo(account.getBalance()) < 1){
|
|
|
+ //修改账户余额
|
|
|
+ BigDecimal subtract = account.getBalance().subtract(withdraw.getAmount());
|
|
|
+ account.setBalance(subtract);
|
|
|
+ account.setFrozenAmount(account.getFrozenAmount().add(withdraw.getAmount()));
|
|
|
+ Date date = new Date();
|
|
|
+ account.setUpdateTime(date);
|
|
|
+ sysUserCashAccountDao.update(account);
|
|
|
+ SysUserCashAccountDetail cashAccountDetail = new SysUserCashAccountDetail();
|
|
|
+ cashAccountDetail.setUserId(account.getUserId());
|
|
|
+ cashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WITHDRAW);
|
|
|
+ cashAccountDetail.setAmount(withdraw.getAmount());
|
|
|
+ cashAccountDetail.setBalance(subtract);
|
|
|
+ cashAccountDetail.setCreateTime(date);
|
|
|
+ cashAccountDetailService.insert(cashAccountDetail);
|
|
|
+ withdraw.setWithdrawNo(RandomStringUtils.random(8));
|
|
|
+ studentWithdrawDao.insert(withdraw);
|
|
|
+ }else {
|
|
|
+ throw new Exception("账户余额不足");
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ throw new Exception("账户状态异常");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 修改用户账户余额,保存账户明细
|
|
|
*
|
|
@@ -141,8 +179,8 @@ public class StudentWithdrawServiceImpl extends BaseServiceImpl<String, StudentW
|
|
|
private void saveStudentWithdraw(WithdrawDto withdrawDto) {
|
|
|
IdWorker idWorker = new IdWorker(0, 0);
|
|
|
StudentWithdraw studentWithdraw = new StudentWithdraw();
|
|
|
- studentWithdraw.setId(idWorker.nextId());
|
|
|
- studentWithdraw.setUserId(withdrawDto.getUserId().longValue());
|
|
|
+ studentWithdraw.setWithdrawNo(idWorker.nextId());
|
|
|
+ studentWithdraw.setUserId(withdrawDto.getUserId());
|
|
|
studentWithdraw.setBankCardNo(withdrawDto.getBankCardNo());
|
|
|
studentWithdraw.setAmount(withdrawDto.getAmount());
|
|
|
studentWithdraw.setCreateTime(new Date());
|