diff --git a/ghy-admin/src/main/java/com/ghy/web/timer/AdapaySyncTimer.java b/ghy-admin/src/main/java/com/ghy/web/timer/AdapaySyncTimer.java index 1011deb9..91b20e1c 100644 --- a/ghy-admin/src/main/java/com/ghy/web/timer/AdapaySyncTimer.java +++ b/ghy-admin/src/main/java/com/ghy/web/timer/AdapaySyncTimer.java @@ -3,10 +3,14 @@ package com.ghy.web.timer; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ghy.common.adapay.model.AdapayStatusEnum; +import com.ghy.common.enums.AdapayOrderType; +import com.ghy.common.utils.AdapayUtils; import com.ghy.order.service.OrderDetailService; import com.ghy.payment.domain.DrawCashRecord; import com.ghy.payment.mapper.DrawCashRecordMapper; import com.ghy.payment.service.AdapayService; +import com.ghy.worker.domain.WorkerBank; +import com.ghy.worker.service.WorkerBankService; import com.huifu.adapay.core.exception.BaseAdaPayException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -17,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -32,10 +37,46 @@ public class AdapaySyncTimer { @Resource private AdapayService adapayService; @Resource + private WorkerBankService workerBankService; + @Resource private OrderDetailService orderDetailService; @Resource private DrawCashRecordMapper drawCashRecordMapper; + /** + * 补偿提现定时器 + * 某些订单分账成功,但是提现失败,需要在这里为它重新发起提现 + */ + @Scheduled(fixedRate = 5 * 60 * 1000L) + public void autoDrawCash() { + List workerBanks = workerBankService.select(new WorkerBank()); + for (WorkerBank workerBank : workerBanks) { + Long deptId = workerBank.getDeptId(); + String memberId = workerBank.getAdapayMemberId(); + String settleAccountId = workerBank.getSettleAccountId(); + if (deptId == null || StringUtils.isBlank(memberId) || StringUtils.isBlank(settleAccountId)) { + continue; + } + try { + JSONObject accountBalance = adapayService.queryAccountBalance(deptId, memberId, settleAccountId, "01"); + if (AdapayStatusEnum.succeeded.code.equals(accountBalance.getString("status"))) { + // 可提现金额 + String avlBalance = accountBalance.getString("avl_balance"); + if (BigDecimal.ZERO.compareTo(new BigDecimal(avlBalance)) > -1) { + continue; + } + // 提现 + log.info("Worker[{},{}]开始提现: avlBalance={}", workerBank.getWorkerId(), workerBank.getName(), avlBalance); + String orderNo = AdapayUtils.createOrderNo(AdapayOrderType.DRAW_CASH); + JSONObject drawCash = adapayService.drawCash(deptId, orderNo, "T1", avlBalance, memberId, "提现", null); + log.info("Worker[{},{}]提现结果: {}", workerBank.getWorkerId(), workerBank.getName(), drawCash.toJSONString()); + } + } catch (BaseAdaPayException e) { + log.error(e.getMessage(), e); + } + } + } + @Scheduled(fixedRate = 5 * 60 * 1000L) public void syncDrawCash() { List records = drawCashRecordMapper.selectByStatus("pending"); diff --git a/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerBankMapper.java b/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerBankMapper.java index 3bc8448d..55d161f1 100644 --- a/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerBankMapper.java +++ b/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerBankMapper.java @@ -32,4 +32,6 @@ public interface WorkerBankMapper { List getByWorkerIds(@Param("ids") String ids); WorkerBank getByMemberId(String memberId); + + List select(WorkerBank workerBank); } diff --git a/ghy-worker/src/main/java/com/ghy/worker/service/WorkerBankService.java b/ghy-worker/src/main/java/com/ghy/worker/service/WorkerBankService.java index d6c46c52..59cf8021 100644 --- a/ghy-worker/src/main/java/com/ghy/worker/service/WorkerBankService.java +++ b/ghy-worker/src/main/java/com/ghy/worker/service/WorkerBankService.java @@ -32,4 +32,5 @@ public interface WorkerBankService { */ List getByWorkerIds(String ids); + List select(WorkerBank workerBank); } diff --git a/ghy-worker/src/main/java/com/ghy/worker/service/impl/WorkerBankServiceImpl.java b/ghy-worker/src/main/java/com/ghy/worker/service/impl/WorkerBankServiceImpl.java index b5dd70af..6667ff16 100644 --- a/ghy-worker/src/main/java/com/ghy/worker/service/impl/WorkerBankServiceImpl.java +++ b/ghy-worker/src/main/java/com/ghy/worker/service/impl/WorkerBankServiceImpl.java @@ -40,4 +40,9 @@ public class WorkerBankServiceImpl implements WorkerBankService { public List getByWorkerIds(String ids) { return workerBankMapper.getByWorkerIds(ids); } + + @Override + public List select(WorkerBank workerBank) { + return workerBankMapper.select(workerBank); + } } diff --git a/ghy-worker/src/main/resources/mapper/worker/WorkerBankMapper.xml b/ghy-worker/src/main/resources/mapper/worker/WorkerBankMapper.xml index 35c36f0e..eb56030f 100644 --- a/ghy-worker/src/main/resources/mapper/worker/WorkerBankMapper.xml +++ b/ghy-worker/src/main/resources/mapper/worker/WorkerBankMapper.xml @@ -3,22 +3,22 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + phone = #{phone}, - bank_num = #{bankNum}, - settle_account_id = #{settleAccountId}, + bank_num = #{bankNum}, + settle_account_id = #{settleAccountId}, update_time = NOW() WHERE adapay_member_id = #{adapayMemberId} @@ -80,24 +80,14 @@ - - - - - - - - - - - - - - - +