DadaDspWithdrawalServiceImpl.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package com.ydd.module.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.ydd.common.core.domain.entity.SysUser;
  6. import com.ydd.common.enums.DadaDspWithdrawalStatusEnum;
  7. import com.ydd.common.exception.CustomException;
  8. import com.ydd.common.utils.DateUtils;
  9. import com.ydd.module.domain.DadaDsp;
  10. import com.ydd.module.domain.DadaDspBankCard;
  11. import com.ydd.module.domain.DadaDspWithdrawal;
  12. import com.ydd.module.dto.DadaDspAccountDto;
  13. import com.ydd.module.dto.DadaDspAccountListDto;
  14. import com.ydd.module.dto.DadaDspWithdrawalDto;
  15. import com.ydd.module.expection.CustomWebException;
  16. import com.ydd.module.mapper.DadaDspWithdrawalMapper;
  17. import com.ydd.module.service.IDadaDspBankCardService;
  18. import com.ydd.module.service.IDadaDspService;
  19. import com.ydd.module.service.IDadaDspWithdrawalService;
  20. import com.ydd.third.common.utils.StringUtils;
  21. import lombok.RequiredArgsConstructor;
  22. import org.apache.commons.compress.utils.Lists;
  23. import org.springframework.beans.BeanUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import java.math.BigDecimal;
  28. import java.util.List;
  29. /**
  30. * 达达配送商-提现管理serviceImpl
  31. *
  32. * @author 叶君翔
  33. * @date 2021-12-29
  34. */
  35. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  36. @Service
  37. public class DadaDspWithdrawalServiceImpl extends ServiceImpl<DadaDspWithdrawalMapper, DadaDspWithdrawal> implements IDadaDspWithdrawalService {
  38. private final IDadaDspService iDadaDspService;
  39. private final IDadaDspBankCardService iDadaDspBankCardService;
  40. @Override
  41. public List<DadaDspWithdrawalDto> queryList(DadaDspAccountListDto accountDto, Long dadaDspId) {
  42. if (!StringUtils.isEmpty(accountDto.getStartDate())) {
  43. accountDto.setStartDate(DateUtils.parseToBeginTime(accountDto.getStartDate()));
  44. }
  45. if (!StringUtils.isEmpty(accountDto.getEndDate())) {
  46. accountDto.setEndDate(DateUtils.parseToTomorrowBeginTime(accountDto.getEndDate()));
  47. }
  48. List<DadaDspWithdrawalDto> list = baseMapper.queryList(accountDto, dadaDspId);
  49. list.forEach(dto-> {
  50. DadaDspBankCard bankCard = iDadaDspBankCardService.getOne(new QueryWrapper<DadaDspBankCard>().eq("dada_dsp_id", dto.getDadaDspId())
  51. .eq("card_no", dto.getAccount()));
  52. if (bankCard != null && StringUtils.isNotBlank(bankCard.getBankName())) {
  53. dto.setBankName(bankCard.getBankName());
  54. }
  55. });
  56. return CollectionUtils.isNotEmpty(list) ? list : Lists.newArrayList();
  57. }
  58. @Override
  59. public DadaDspAccountDto getInfo(Long id) {
  60. DadaDspAccountDto accountDto = new DadaDspAccountDto();
  61. DadaDsp dadaDsp = iDadaDspService.getById(id);
  62. accountDto.setCanWithdrawalAmount(dadaDsp != null ? dadaDsp.getAmount() : BigDecimal.ZERO);
  63. BigDecimal inWithdrawalAmount = baseMapper.selectTotalAmountByDadaDspId(id);
  64. accountDto.setInWithdrawalAmount(inWithdrawalAmount != null ? inWithdrawalAmount : BigDecimal.ZERO);
  65. return accountDto;
  66. }
  67. @Override
  68. public boolean deleteBankCard(Long id) {
  69. return false;
  70. }
  71. @Override
  72. @Transactional(rollbackFor = Exception.class)
  73. public boolean addWithdrawal(DadaDspWithdrawal withdrawal, SysUser user) {
  74. if (StringUtils.isBlank(withdrawal.getAccount())) {
  75. throw new CustomWebException("提现账号不可为空!");
  76. }
  77. if (StringUtils.isEmpty(withdrawal.getType())) {
  78. throw new CustomWebException("提现类型不可为空!");
  79. }
  80. if (!StringUtils.isBlank(withdrawal.getAccount()) && withdrawal.getType() == 0 && StringUtils.isBlank(withdrawal.getZfbName())) {
  81. throw new CustomWebException("支付宝提现姓名不可为空!");
  82. }
  83. if (StringUtils.isEmpty(withdrawal.getAmount()) || withdrawal.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
  84. throw new CustomWebException("提现金额必须大于0");
  85. }
  86. DadaDsp dadaDsp = iDadaDspService.getById(user.getDadaDspId());
  87. if (dadaDsp == null){
  88. throw new CustomWebException("风险操作,已被系统拦截!");
  89. }
  90. // 校验余额是否充足
  91. if (withdrawal.getAmount().compareTo(dadaDsp.getAmount()) > 0){
  92. throw new CustomWebException("余额不足, 发起提现失败!");
  93. }
  94. withdrawal.setDadaDspId(dadaDsp.getId());
  95. withdrawal.setStatus(DadaDspWithdrawalStatusEnum.WAIT.getType());
  96. int result1 = baseMapper.insert(withdrawal);
  97. if (result1 != 1) {
  98. throw new CustomWebException("发起提现失败!");
  99. }
  100. dadaDsp.setAmount(dadaDsp.getAmount().subtract(withdrawal.getAmount()));
  101. boolean result2 = iDadaDspService.updateById(dadaDsp);
  102. if (!result2) {
  103. throw new CustomWebException("发起提现失败!");
  104. }
  105. return true;
  106. }
  107. @Override
  108. public List<DadaDspWithdrawalDto> withdrawalList(DadaDspAccountListDto accountDto) {
  109. if (!StringUtils.isEmpty(accountDto.getStartDate())) {
  110. accountDto.setStartDate(DateUtils.parseToBeginTime(accountDto.getStartDate()));
  111. }
  112. if (!StringUtils.isEmpty(accountDto.getEndDate())) {
  113. accountDto.setEndDate(DateUtils.parseToTomorrowBeginTime(accountDto.getEndDate()));
  114. }
  115. List<DadaDspWithdrawalDto> list = baseMapper.withdrawalList(accountDto);
  116. list.forEach(dto-> {
  117. DadaDspBankCard bankCard = iDadaDspBankCardService.getOne(new QueryWrapper<DadaDspBankCard>().eq("dada_dsp_id", dto.getDadaDspId())
  118. .eq("card_no", dto.getAccount()));
  119. if (bankCard != null && StringUtils.isNotBlank(bankCard.getBankName())) {
  120. dto.setBankName(bankCard.getBankName());
  121. }
  122. });
  123. return CollectionUtils.isNotEmpty(list) ? list : Lists.newArrayList();
  124. }
  125. @Override
  126. public DadaDspWithdrawalDto getDadaWithdrawal(Long id) {
  127. DadaDspWithdrawalDto withdrawalDto = new DadaDspWithdrawalDto();
  128. DadaDspWithdrawal withdrawal = baseMapper.selectById(id);
  129. BeanUtils.copyProperties(withdrawal, withdrawalDto);
  130. DadaDspBankCard bankCard = iDadaDspBankCardService.getOne(new QueryWrapper<DadaDspBankCard>().eq("deleted", 0)
  131. .eq("dada_dsp_id", withdrawalDto.getDadaDspId())
  132. .eq("card_no", withdrawalDto.getAccount()));
  133. if (bankCard != null && StringUtils.isNotBlank(bankCard.getBankName())) {
  134. withdrawalDto.setBankName(bankCard.getBankName());
  135. }
  136. return withdrawalDto;
  137. }
  138. @Override
  139. @Transactional(rollbackFor = Exception.class)
  140. public boolean verify(DadaDspWithdrawal withdrawal, SysUser user) {
  141. DadaDspWithdrawal dadaDspWithdrawal = this.getById(withdrawal.getId());
  142. if (dadaDspWithdrawal == null) {
  143. throw new CustomWebException("提现申请记录不存在");
  144. }
  145. if (DadaDspWithdrawalStatusEnum.REFUSE.getType().equals(withdrawal.getStatus()) && StringUtils.isBlank(withdrawal.getRemark())) {
  146. throw new CustomWebException("拒绝提现备注必须填写!");
  147. }
  148. DadaDsp dadaDsp = iDadaDspService.getById(dadaDspWithdrawal.getDadaDspId());
  149. if (dadaDsp == null){
  150. throw new CustomException("配送商信息不存在");
  151. }
  152. dadaDspWithdrawal.setStatus(withdrawal.getStatus());
  153. dadaDspWithdrawal.setRemark(withdrawal.getRemark());
  154. // 拒绝提现
  155. if (DadaDspWithdrawalStatusEnum.REFUSE.getType().equals(withdrawal.getStatus())) {
  156. // 还原配送商商账户可提现余额
  157. dadaDsp.setAmount(dadaDsp.getAmount().add(dadaDspWithdrawal.getAmount()));
  158. iDadaDspService.updateById(dadaDsp);
  159. }
  160. this.updateById(dadaDspWithdrawal);
  161. return true;
  162. }
  163. }