提交 0dd3db40 作者: xiaowang

修改bug

上级 b4c3c65a
package com.mmc.iuav.user.enums;
/**
* @author 作者 LW
* @version 创建时间:2023.8.26 10:56
* @explain 类说明
*/
public enum XzEnums {
submit_result("submitResult", "上报结果通知"), trade_result("tradeResult", "交易结果通知"),
await("await", "待发放(交易排队中-过渡状态)"), handle("handle", "交易中"), success("success", "交易成功"),
failure("failure", "交易失败"), is_success("isSuccess", "交易是否成功"), T("T", "回调code");
private String code;
private String name;
XzEnums(String code, String name) {
this.code = code;
this.name = name;
}
public void setCode(String code) {
this.code = code;
}
public String getCode() {
return this.code;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
...@@ -3,6 +3,8 @@ package com.mmc.iuav.user.service.xzsz.impl; ...@@ -3,6 +3,8 @@ package com.mmc.iuav.user.service.xzsz.impl;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import cn.hutool.core.net.URLDecoder; import cn.hutool.core.net.URLDecoder;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.mmc.iuav.general.CodeUtil;
import com.mmc.iuav.http.HttpsRequestUtil; import com.mmc.iuav.http.HttpsRequestUtil;
import com.mmc.iuav.response.ResultBody; import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.constant.UserSystemConstant; import com.mmc.iuav.user.constant.UserSystemConstant;
...@@ -10,11 +12,16 @@ import com.mmc.iuav.user.dao.wallet.PayWalletDao; ...@@ -10,11 +12,16 @@ import com.mmc.iuav.user.dao.wallet.PayWalletDao;
import com.mmc.iuav.user.dao.xzsz.XzDao; import com.mmc.iuav.user.dao.xzsz.XzDao;
import com.mmc.iuav.user.entity.XzAuthDO; import com.mmc.iuav.user.entity.XzAuthDO;
import com.mmc.iuav.user.entity.XzWithdrawalApplyDO; import com.mmc.iuav.user.entity.XzWithdrawalApplyDO;
import com.mmc.iuav.user.entity.wallet.PayWalletDO;
import com.mmc.iuav.user.entity.wallet.WithdrawalLogDO;
import com.mmc.iuav.user.enums.WithdrawalMethod;
import com.mmc.iuav.user.enums.XzEnums;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO; import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.dto.xzsz.UsableCashPoolingDTO; import com.mmc.iuav.user.model.dto.xzsz.UsableCashPoolingDTO;
import com.mmc.iuav.user.model.vo.XzAuthVO; import com.mmc.iuav.user.model.vo.XzAuthVO;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO; import com.mmc.iuav.user.model.vo.XzWithdrawalVO;
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.xzsz.SingleSubmitResp; import com.mmc.iuav.user.xzsz.SingleSubmitResp;
import com.mmc.iuav.user.xzsz.WithdrawalResp; import com.mmc.iuav.user.xzsz.WithdrawalResp;
import com.piggy.settlement.sdk.client.sign.PiggySignApiClient; import com.piggy.settlement.sdk.client.sign.PiggySignApiClient;
...@@ -37,7 +44,9 @@ import javax.annotation.Resource; ...@@ -37,7 +44,9 @@ import javax.annotation.Resource;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import java.math.BigDecimal;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -266,26 +275,64 @@ public class XzServiceImpl implements XzService { ...@@ -266,26 +275,64 @@ public class XzServiceImpl implements XzService {
@Override @Override
public String xzWithdrawNotify(JSONObject notify) { public String xzWithdrawNotify(JSONObject notify) {
log.info("xzWithdrawNotify获取到的推送结果:{}", notify.toString()); log.info("xzWithdrawNotify获取到的推送结果:{}", notify.toString());
if ("T".equals(notify.get("isSuccess").toString())) { if (XzEnums.T.getCode().equals(notify.get(XzEnums.is_success.getCode()).toString())) {
String s = decrypt(com.alibaba.fastjson2.JSONObject.parseObject(notify.get("data").toString()).get("bizAESContent").toString()); String s = decrypt(com.alibaba.fastjson2.JSONObject.parseObject(notify.get("data").toString()).get("bizAESContent").toString());
WithdrawalResp.Data data = com.alibaba.fastjson2.JSONObject.parseObject(s, WithdrawalResp.Data.class); WithdrawalResp.Data data = com.alibaba.fastjson2.JSONObject.parseObject(s, WithdrawalResp.Data.class);
log.info("提现回调解密数据内容:{}", com.alibaba.fastjson2.JSONObject.toJSONString(data)); log.info("提现回调解密数据内容:{}", com.alibaba.fastjson2.JSONObject.toJSONString(data));
// 获取用户提现申请信息 // 获取用户提现申请信息
XzWithdrawalApplyDO withdrawCashApplyDetails = payWalletDao.getWithdrawalApplyByIdOrOuterTradeNo(null, data.getOuterTradeNo()); XzWithdrawalApplyDO withdrawCashApplyDetails = payWalletDao.getWithdrawalApplyByIdOrOuterTradeNo(null, data.getOuterTradeNo());
if ("submitResult".equals(data.getNotifyType())) { // 获取用户钱包信息
PayWalletDO wallet = payWalletDao.getPayWalletByUser(withdrawCashApplyDetails.getUserAccountId());
if (XzEnums.submit_result.getCode().equals(data.getNotifyType())) {
// 对上报的数据进行业务校验,例如:是否超限、是否有余额、是否有电签、参数是否准确等等前置校验。如果校验成功,订单进入待发队列等待发放 // 对上报的数据进行业务校验,例如:是否超限、是否有余额、是否有电签、参数是否准确等等前置校验。如果校验成功,订单进入待发队列等待发放
log.info("deal submitResult"); log.info("deal submitResult");
// 根据订单编号修改信息 // 判断返回的状态时否是成功
XzWithdrawalApplyDO xzWithdrawalApplyDO = new XzWithdrawalApplyDO(); if (XzEnums.success.getCode().equals(data.getTradeStatus())) {
xzWithdrawalApplyDO.setOuterTradeNo(data.getOuterTradeNo()); // 更新提现申请记录
xzWithdrawalApplyDO.setSubmitStatus(data.getTradeStatus()); XzWithdrawalApplyDO xzWithdrawalApplyDO = new XzWithdrawalApplyDO();
xzWithdrawalApplyDO.setTradeResult(data.getTradeResult()); xzWithdrawalApplyDO.setOuterTradeNo(data.getOuterTradeNo());
xzWithdrawalApplyDO.setTaxFundId(userSystemConstant.getTaxFundId()); xzWithdrawalApplyDO.setSubmitStatus(data.getTradeStatus());
payWalletDao.updateWithdrawalApply(xzWithdrawalApplyDO); xzWithdrawalApplyDO.setTradeResult(data.getTradeResult());
} else if ("tradeResult".equals(data.getNotifyType())) { xzWithdrawalApplyDO.setTaxFundId(userSystemConstant.getTaxFundId());
// 根据银行\微信\支付宝的反馈,推送订单的发放结果,发放成功\发放失败 payWalletDao.updateWithdrawalApply(xzWithdrawalApplyDO);
// todo 待处理 } else {
log.info("deal tradeResult"); // 更新提现申请记录
XzWithdrawalApplyDO xzWithdrawalApplyDO = new XzWithdrawalApplyDO();
xzWithdrawalApplyDO.setOuterTradeNo(data.getOuterTradeNo());
xzWithdrawalApplyDO.setSubmitStatus(data.getTradeStatus());
xzWithdrawalApplyDO.setTradeResult(data.getTradeResult());
xzWithdrawalApplyDO.setTradeStatus(data.getTradeStatus());
payWalletDao.updateWithdrawalApply(xzWithdrawalApplyDO);
// 并且回滚用户钱包信息
// 生成提现流水编号
String payNo = "T" + TDateUtil.getDateStr(new Date(), TDateUtil.TYPE) + withdrawCashApplyDetails.getUserAccountId() + CodeUtil.getRandomNum(4);
// 记录流水记录
WithdrawalLogDO withdrawalLogDO = new WithdrawalLogDO();
withdrawalLogDO.setPayNo(payNo);
withdrawalLogDO.setXzWithdrawalApplyId(withdrawCashApplyDetails.getId());
withdrawalLogDO.setPayTime(new Date());
withdrawalLogDO.setUserAccountId(withdrawCashApplyDetails.getUserAccountId());
withdrawalLogDO.setSalaryPaid(data.getPayAmount());
withdrawalLogDO.setPayMethod(WithdrawalMethod.TXSB.getCode());
withdrawalLogDO.setSalaryFreeze(new BigDecimal(0));
payWalletDao.insertWithdrawalLog(withdrawalLogDO);
// 修改钱包信息,钱包冻结金额
PayWalletDO payWalletDO = new PayWalletDO();
payWalletDO.setPid(wallet.getPid());
payWalletDO.setUserAccountId(withdrawCashApplyDetails.getUserAccountId());
payWalletDO.setSalaryAmt(wallet.getSalaryAmt().add(data.getPayAmount()));
payWalletDO.setSalaryFreeze(wallet.getSalaryFreeze().subtract(data.getPayAmount()));
int updateCount = payWalletDao.updatePayWallet(payWalletDO);
if (updateCount != 1) {
log.error("回调返回提现失败时,修改钱包信息失败,信息是:{}", JSON.toJSONString(payWalletDO));
}
}
} else if (XzEnums.trade_result.getCode().equals(data.getNotifyType())) {
// 根据回调信息返回数据更新提现申请
if (withdrawCashApplyDetails.getTradeStatus() != null && withdrawCashApplyDetails.getTradeStatus().equals(XzEnums.success.getCode())) {
return "success";
}
} }
} else { } else {
......
...@@ -219,6 +219,7 @@ ...@@ -219,6 +219,7 @@
</select> </select>
<select id="getWithdrawalApplyByIdOrOuterTradeNo" resultType="com.mmc.iuav.user.entity.XzWithdrawalApplyDO"> <select id="getWithdrawalApplyByIdOrOuterTradeNo" resultType="com.mmc.iuav.user.entity.XzWithdrawalApplyDO">
select id, select id,
apply_status,
user_account_id, user_account_id,
bank_name, bank_name,
bank_remo, bank_remo,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论