提交 5605d728 作者: xiaowang

提现

上级 9505742b
......@@ -56,6 +56,11 @@ public class PayWalletDO implements Serializable {
private BigDecimal wxCashFreeze;
/**
* 提现冻结
*/
private BigDecimal wdlFreeze;
/**
* 提现总额
*/
private BigDecimal salaryWdl;
......
......@@ -8,7 +8,7 @@ package com.mmc.iuav.user.enums;
public enum XzEnums {
submit_result("submitResult", "上报结果通知"), trade_result("tradeResult", "交易结果通知"),
await("await", "待发放(交易排队中-过渡状态)"), handle("handle", "交易中"), success("success", "交易成功"),
failure("failure", "交易失败"), is_success("isSuccess", "交易是否成功"), T("T", "回调code");
failure("failure", "交易失败"), is_success("isSuccess", "交易是否成功"), T("T", "回调code"), F("F", "回调code");
private String code;
private String name;
......
......@@ -15,6 +15,7 @@ import com.mmc.iuav.user.entity.wallet.PayWalletDO;
import com.mmc.iuav.user.entity.wallet.WithdrawalLogDO;
import com.mmc.iuav.user.enums.WithdrawalApplyStatus;
import com.mmc.iuav.user.enums.WithdrawalMethod;
import com.mmc.iuav.user.enums.XzEnums;
import com.mmc.iuav.user.model.dto.wallet.WithdrawalApplyDTO;
import com.mmc.iuav.user.model.qo.wallet.WalletFlowQO;
import com.mmc.iuav.user.model.qo.wallet.WithdrawalApplyQO;
......@@ -23,6 +24,7 @@ import com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO;
import com.mmc.iuav.user.service.xzsz.WithdrawalService;
import com.mmc.iuav.user.service.xzsz.XzService;
import com.mmc.iuav.user.util.TDateUtil;
import com.mmc.iuav.user.xzsz.SingleSubmitResp;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -113,7 +115,7 @@ public class WithdrawalServiceImpl implements WithdrawalService {
payWalletDO.setPid(payWallet.getPid());
payWalletDO.setUserAccountId(userAccountId);
payWalletDO.setSalaryAmt(payWallet.getSalaryAmt().subtract(applyWithdrawalVO.getPayAmount()));
payWalletDO.setSalaryFreeze(payWallet.getSalaryFreeze().add(applyWithdrawalVO.getPayAmount()));
payWalletDO.setWdlFreeze(payWallet.getWdlFreeze().add(applyWithdrawalVO.getPayAmount()));
int updateCount = payWalletDao.updatePayWallet(payWalletDO);
if (updateCount != 1) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
......@@ -201,28 +203,22 @@ public class WithdrawalServiceImpl implements WithdrawalService {
xzWithdrawalVO.setBankName(applyInfo.getBankName());
xzWithdrawalVO.setPositionName(applyInfo.getPositionName());
xzWithdrawalVO.setPayAmount(applyInfo.getPayAmount());
xzService.singleSubmit(xzWithdrawalVO);
SingleSubmitResp singleSubmitResp = xzService.singleSubmit(xzWithdrawalVO);
if (XzEnums.F.getCode().equals(singleSubmitResp.getIsSuccess())) {
// 更新提现申请记录
XzWithdrawalApplyDO xzWithdrawalApplyDO = new XzWithdrawalApplyDO();
xzWithdrawalApplyDO.setOuterTradeNo(applyInfo.getOuterTradeNo());
xzWithdrawalApplyDO.setTradeResult(XzEnums.failure.getName());
xzWithdrawalApplyDO.setTradeStatus(XzEnums.failure.getCode());
xzWithdrawalApplyDO.setErrorCode(singleSubmitResp.getErrorCode());
xzWithdrawalApplyDO.setErrorMessage(singleSubmitResp.getErrorMessage());
payWalletDao.updateWithdrawalApply(xzWithdrawalApplyDO);
// 回滚用户钱包金额
rollbackPayWallet(applyInfo, wallet);
}
} else {
// 审批未通过 退回金额 解除冻结
// 生成提现流水编号
String payNo = "T" + TDateUtil.getDateStr(new Date(), TDateUtil.TYPE) + applyInfo.getUserAccountId() + CodeUtil.getRandomNum(4);
// 记录流水记录
WithdrawalLogDO withdrawalLogDO = new WithdrawalLogDO();
withdrawalLogDO.setPayNo(payNo);
withdrawalLogDO.setPayTime(new Date());
withdrawalLogDO.setSalaryPaid(BigDecimal.valueOf(applyInfo.getPayAmount()));
withdrawalLogDO.setXzWithdrawalApplyId(applyInfo.getId());
withdrawalLogDO.setUserAccountId(applyInfo.getUserAccountId());
withdrawalLogDO.setPayMethod(WithdrawalMethod.TXSB.getCode());
withdrawalLogDO.setSalaryFreeze(new BigDecimal(0));
payWalletDao.insertWithdrawalLog(withdrawalLogDO);
// 修改钱包信息,钱包冻结金额
PayWalletDO payWalletDO = new PayWalletDO();
payWalletDO.setPid(wallet.getPid());
payWalletDO.setUserAccountId(applyInfo.getUserAccountId());
payWalletDO.setSalaryAmt(wallet.getSalaryAmt().add(BigDecimal.valueOf(applyInfo.getPayAmount())));
payWalletDO.setSalaryFreeze(wallet.getSalaryFreeze().subtract(BigDecimal.valueOf(applyInfo.getPayAmount())));
int updateCount = payWalletDao.updatePayWallet(payWalletDO);
int updateCount = rollbackPayWallet(applyInfo, wallet);
if (updateCount != 1) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResultBody.error("操作失败,请稍后重试!");
......@@ -230,4 +226,27 @@ public class WithdrawalServiceImpl implements WithdrawalService {
}
return ResultBody.success();
}
@Transactional(rollbackFor = Exception.class)
public int rollbackPayWallet(XzWithdrawalApplyDO applyInfo, PayWalletDO wallet) {
// 生成提现流水编号
String payNo = "T" + TDateUtil.getDateStr(new Date(), TDateUtil.TYPE) + applyInfo.getUserAccountId() + CodeUtil.getRandomNum(4);
// 记录流水记录
WithdrawalLogDO withdrawalLogDO = new WithdrawalLogDO();
withdrawalLogDO.setPayNo(payNo);
withdrawalLogDO.setPayTime(new Date());
withdrawalLogDO.setSalaryPaid(BigDecimal.valueOf(applyInfo.getPayAmount()));
withdrawalLogDO.setXzWithdrawalApplyId(applyInfo.getId());
withdrawalLogDO.setUserAccountId(applyInfo.getUserAccountId());
withdrawalLogDO.setPayMethod(WithdrawalMethod.TXSB.getCode());
withdrawalLogDO.setSalaryFreeze(new BigDecimal(0));
payWalletDao.insertWithdrawalLog(withdrawalLogDO);
// 修改钱包信息,钱包冻结金额
PayWalletDO payWalletDO = new PayWalletDO();
payWalletDO.setPid(wallet.getPid());
payWalletDO.setUserAccountId(applyInfo.getUserAccountId());
payWalletDO.setSalaryAmt(wallet.getSalaryAmt().add(BigDecimal.valueOf(applyInfo.getPayAmount())));
payWalletDO.setSalaryWdl(wallet.getSalaryWdl().subtract(BigDecimal.valueOf(applyInfo.getPayAmount())));
return payWalletDao.updatePayWallet(payWalletDO);
}
}
......@@ -399,7 +399,6 @@ public class XzServiceImpl implements XzService {
}
} else {
log.info("xzWithdrawNotify fail:{}", notify);
}
return "success";
}
......@@ -433,8 +432,10 @@ public class XzServiceImpl implements XzService {
payWalletDO.setUserAccountId(withdrawCashApplyDetails.getUserAccountId());
if (flag == 0) {
payWalletDO.setSalaryAmt(wallet.getSalaryAmt().add(data.getPayAmount()));
} else {
payWalletDO.setSalaryWdl(wallet.getSalaryWdl().add(data.getPayAmount()));
}
payWalletDO.setSalaryFreeze(wallet.getSalaryFreeze().subtract(data.getPayAmount()));
payWalletDO.setWdlFreeze(wallet.getWdlFreeze().subtract(data.getPayAmount()));
int updatePayWalletCount = payWalletDao.updatePayWallet(payWalletDO);
if (updatePayWalletCount != 1) {
log.error("回调返回提现时,修改钱包信息失败,信息是:{}", JSON.toJSONString(payWalletDO));
......
......@@ -51,6 +51,9 @@
<if test="salaryFreeze != null">
salary_freeze = #{salaryFreeze},
</if>
<if test="wdlFreeze != null">
wdl_freeze = #{wdlFreeze}
</if>
<if test="salaryWdl != null">
salary_wdl =#{salaryWdl}
</if>
......@@ -129,6 +132,7 @@
salary_amt,
salary_paid,
salary_freeze,
wdl_freeze,
salary_wdl,
create_time
from pay_wallet
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论