| | |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | |
| | | @Transactional(rollbackFor = {BusinessException.class,Exception.class}) |
| | | public TransferToUser.TransferToUserResponse applyWithdrawal(WithdrawalDTO withdrawalDTO){ |
| | | if(Objects.isNull(withdrawalDTO) |
| | | || Objects.isNull(withdrawalDTO.getAmount())){ |
| | | || Objects.isNull(withdrawalDTO.getAmount()) |
| | | || org.apache.commons.lang3.StringUtils.isBlank(withdrawalDTO.getName()) |
| | | || withdrawalDTO.getAmount().compareTo(BigDecimal.ZERO)<=Constants.ZERO |
| | | ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | Member member = memberMapper.selectById(withdrawalDTO.getMember().getId()); |
| | | if(Objects.isNull(member)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户信息异常,请联系管理员"); |
| | | } |
| | | if(member.getAmount() < withdrawalDTO.getAmount()){ |
| | | if(member.getAmount() < withdrawalDTO.getAmount().multiply(new BigDecimal("100")).intValue()){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,可提现余额不足。"); |
| | | } |
| | | if(StringUtils.isEmpty(member.getName())){ |
| | |
| | | withdrawalOrders.setCreateTime(new Date()); |
| | | withdrawalOrders.setMemberId(member.getId()); |
| | | withdrawalOrders.setOutBillNo(UUID.randomUUID().toString().replace("-","")); |
| | | withdrawalOrders.setAmount(withdrawalDTO.getAmount()); |
| | | withdrawalOrders.setAmount((withdrawalDTO.getAmount().multiply(new BigDecimal("100"))).longValue()); |
| | | withdrawalOrders.setStatus(Constants.ZERO); |
| | | withdrawalOrders.setType(Constants.ZERO); |
| | | withdrawalOrders.setDeleted(Constants.ZERO); |
| | |
| | | TransferToUser.TransferToUserRequest transferToUserRequest = new TransferToUser.TransferToUserRequest(); |
| | | transferToUserRequest.openid = member.getOpenid(); |
| | | transferToUserRequest.outBillNo = withdrawalOrders.getOutBillNo(); |
| | | transferToUserRequest.transferAmount = withdrawalDTO.getAmount(); |
| | | transferToUserRequest.transferAmount = withdrawalOrders.getAmount(); |
| | | transferToUserRequest.transferRemark = "提现申请"; |
| | | try { |
| | | TransferToUser.TransferToUserResponse response = WxMiniConfig.transferToUser.run(transferToUserRequest,member.getName()); |
| | | TransferToUser.TransferToUserResponse response = WxMiniConfig.transferToUser.run(transferToUserRequest,withdrawalDTO.getName()); |
| | | withdrawalOrders.setRemark(JSONObject.toJSONString(response)); |
| | | if(response.state.name().equals("WAIT_USER_CONFIRM") || response.state.name().equals("ACCEPTED")){ |
| | | withdrawalOrders.setWxExternalNo(response.transferBillNo); |
| | | } |
| | | withdrawalOrdersMapper.insert(withdrawalOrders); |
| | | //更新用户余额 |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT - " + withdrawalDTO.getAmount() ).eq(Member::getId,member.getId())); |
| | | |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT - " + withdrawalOrders.getAmount() ).eq(Member::getId,member.getId())); |
| | | //存储流水记录 |
| | | MemberRevenue memberRevenue = new MemberRevenue(); |
| | | memberRevenue.setCreateTime(new Date()); |
| | |
| | | |
| | | |
| | | @Override |
| | | public void transferSuccess(String outBillNo,Boolean isSuccess){ |
| | | //转账成功 |
| | | if(isSuccess){ |
| | | withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>().lambda() |
| | | .set(WithdrawalOrders::getStatus,Constants.ONE) |
| | | .eq(WithdrawalOrders::getOutBillNo,outBillNo) |
| | | ); |
| | | }else { |
| | | WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectOne(new QueryWrapper<WithdrawalOrders>().lambda() |
| | | .eq(WithdrawalOrders::getOutBillNo,outBillNo).last("limit 1")); |
| | | if(Objects.isNull(withdrawalOrders)){ |
| | | return; |
| | | } |
| | | Member member = memberMapper.selectById(withdrawalOrders.getMemberId()); |
| | | if(Objects.isNull(member)){ |
| | | return; |
| | | } |
| | | //更新用户余额 |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT + " + withdrawalOrders.getAmount() ).eq(Member::getId,withdrawalOrders.getMemberId())); |
| | | |
| | | //存储流水记录 |
| | | MemberRevenue memberRevenue = new MemberRevenue(); |
| | | memberRevenue.setCreateTime(new Date()); |
| | | memberRevenue.setTransactionNo(withdrawalOrders.getOutBillNo()); |
| | | memberRevenue.setDeleted(Constants.ZERO); |
| | | memberRevenue.setMemberId(withdrawalOrders.getMemberId()); |
| | | memberRevenue.setType(Constants.FOUR); |
| | | memberRevenue.setOptType(Constants.ONE); |
| | | memberRevenue.setBeforeAmount(member.getAmount()); |
| | | memberRevenue.setAmount(withdrawalOrders.getAmount()); |
| | | memberRevenue.setAfterAmount(member.getAmount() + withdrawalOrders.getAmount()); |
| | | memberRevenue.setObjId(withdrawalOrders.getId()); |
| | | memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); |
| | | memberRevenue.setObjType(Constants.ONE); |
| | | memberRevenue.setDeleted(Constants.ZERO); |
| | | memberRevenue.setStatus(Constants.ZERO); |
| | | memberRevenueMapper.insert(memberRevenue); |
| | | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void cancelTransfer(TransferToUser.CancelTransferRequest request){ |
| | | if(Objects.isNull(request) |
| | | || StringUtils.isEmpty(request.outBillNo)){ |