提交 5605d728 作者: xiaowang

提现

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