|
@@ -1,5 +1,7 @@
|
|
|
package org.dromara.backstage.business.payments;
|
|
package org.dromara.backstage.business.payments;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -34,6 +36,11 @@ public class ThirdPayBusiness {
|
|
|
private final IPayOrderService payOrderService;
|
|
private final IPayOrderService payOrderService;
|
|
|
private final PayOrderBusiness payOrderBusiness;
|
|
private final PayOrderBusiness payOrderBusiness;
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 生成充值收款二维码
|
|
|
|
|
+ * @param bo 充值订单
|
|
|
|
|
+ * @return 二维码信息
|
|
|
|
|
+ */
|
|
|
public R<Map<String,String>> createCollectQrCode(PayOrderBo bo){
|
|
public R<Map<String,String>> createCollectQrCode(PayOrderBo bo){
|
|
|
R<PayOrderVo> result = createThirdPayOrder(bo);
|
|
R<PayOrderVo> result = createThirdPayOrder(bo);
|
|
|
if (R.isError(result)) {
|
|
if (R.isError(result)) {
|
|
@@ -42,20 +49,48 @@ public class ThirdPayBusiness {
|
|
|
Map<String, String> mapCode = new HashMap<>();
|
|
Map<String, String> mapCode = new HashMap<>();
|
|
|
// TODO 2025-01-13 19:36:29 luoyibo 生成微信收款码
|
|
// TODO 2025-01-13 19:36:29 luoyibo 生成微信收款码
|
|
|
mapCode.put("qrCode", "");
|
|
mapCode.put("qrCode", "");
|
|
|
- mapCode.put("orderSn", "");
|
|
|
|
|
|
|
+ mapCode.put("orderSn", result.getData().getOrderId().toString());
|
|
|
return R.ok(mapCode);
|
|
return R.ok(mapCode);
|
|
|
}
|
|
}
|
|
|
- //public R<String> createWechatQrCode(PayOrderBo bo) {
|
|
|
|
|
- // R<PayOrderVo> result = createThirdPayOrder(bo);
|
|
|
|
|
- // if (R.isError(result)) {
|
|
|
|
|
- // return R.fail(result.getMsg());
|
|
|
|
|
- // }
|
|
|
|
|
- // // TODO 2025-01-13 19:36:29 luoyibo 生成微信收款码
|
|
|
|
|
- // return R.ok();
|
|
|
|
|
- //}
|
|
|
|
|
- public R<String> payCallBackHandler(PayOrderBo bo){
|
|
|
|
|
- // TODO 2025-01-13 19:38:22 luoyibo 根据支付成功与否处理
|
|
|
|
|
- R<Void> postResult = postThirdPayOrder(bo);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 第三方支付回调处理
|
|
|
|
|
+ * 1.更新订单的支付状态
|
|
|
|
|
+ * 2.订单充值入账
|
|
|
|
|
+ * 3.更新订单的入账状态
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param bo 订单信息
|
|
|
|
|
+ * @return 处理结果
|
|
|
|
|
+ */
|
|
|
|
|
+ public R<PayOrderVo> payCallBackHandler(PayOrderBo bo){
|
|
|
|
|
+ // 1.设置支付订单的支付状态
|
|
|
|
|
+ R<PayOrderVo> result = setOrderPayResult(bo);
|
|
|
|
|
+ if (R.isError(result)) {
|
|
|
|
|
+ return R.fail(result.getMsg());
|
|
|
|
|
+ }
|
|
|
|
|
+ PayOrderVo vo = result.getData();
|
|
|
|
|
+ String creditStatus = CreditStatusEnum.SUCCESS.code().toString();
|
|
|
|
|
+ if (ObjectUtil.equals(vo.getCreditStatus(), creditStatus) && ObjectUtil.isNotEmpty(vo.getOriginalId())) {
|
|
|
|
|
+ log.warn("[订单已入账]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ return R.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+ PayOrderBo postBo = BeanUtil.copyProperties(result.getData(), PayOrderBo.class);
|
|
|
|
|
+ // 2.订单入账一卡通账户
|
|
|
|
|
+ R<PurseInOutBo> postResult = postThirdPayOrder(postBo);
|
|
|
|
|
+ if (R.isError(postResult)) {
|
|
|
|
|
+ log.error("[订单入账失败]-[{}]", JSONUtil.toJsonStr(postBo));
|
|
|
|
|
+ return R.fail("订单入账失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ // 3.更新订单的入账状态
|
|
|
|
|
+ if (R.isSuccess(postResult)) {
|
|
|
|
|
+ // 更新支付订单表的入账状态
|
|
|
|
|
+ PayOrderBo updateBo = new PayOrderBo();
|
|
|
|
|
+ updateBo.setOrderId(postBo.getOrderId());
|
|
|
|
|
+ updateBo.setOriginalId(postResult.getData().getOriginalId());
|
|
|
|
|
+ updateBo.setCreditStatus(CreditStatusEnum.SUCCESS.code().toString());
|
|
|
|
|
+
|
|
|
|
|
+ return setOrderPostResult(updateBo);
|
|
|
|
|
+ }
|
|
|
return R.ok();
|
|
return R.ok();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -72,8 +107,12 @@ public class ThirdPayBusiness {
|
|
|
return R.fail(MessageFormat.format("[{0}]-[订单创建失败]", CreditTypeEnum.getMessage(bo.getCreditType())));
|
|
return R.fail(MessageFormat.format("[{0}]-[订单创建失败]", CreditTypeEnum.getMessage(bo.getCreditType())));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public R<Void> postThirdPayOrder(PayOrderBo bo) {
|
|
|
|
|
- payOrderService.updateByBo(bo);
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 第三方支付订单入账
|
|
|
|
|
+ * @param bo 订单信息
|
|
|
|
|
+ * @return 入账结果
|
|
|
|
|
+ */
|
|
|
|
|
+ public R<PurseInOutBo> postThirdPayOrder(PayOrderBo bo) {
|
|
|
// 将支付订单信息转换成一卡通充值数据进行充值
|
|
// 将支付订单信息转换成一卡通充值数据进行充值
|
|
|
PurseInOutBo purseInOutBo = new PurseInOutBo();
|
|
PurseInOutBo purseInOutBo = new PurseInOutBo();
|
|
|
purseInOutBo.setUserId(bo.getUserId());
|
|
purseInOutBo.setUserId(bo.getUserId());
|
|
@@ -81,20 +120,53 @@ public class ThirdPayBusiness {
|
|
|
purseInOutBo.setTakeCommission("0");
|
|
purseInOutBo.setTakeCommission("0");
|
|
|
purseInOutBo.setReceiptMoney(bo.getReceiptMoney());
|
|
purseInOutBo.setReceiptMoney(bo.getReceiptMoney());
|
|
|
purseInOutBo.setOperationMode(BalanceUpdateEnum.RECHARGE);
|
|
purseInOutBo.setOperationMode(BalanceUpdateEnum.RECHARGE);
|
|
|
- purseInOutBo.setCreditType(CreditTypeEnum.valueOf(CreditTypeEnum.getMessage(bo.getCreditType())));
|
|
|
|
|
|
|
+ purseInOutBo.setCreditType(CreditTypeEnum.fromCode(Integer.valueOf(bo.getCreditType())));
|
|
|
//purseInOutBo.setStationId();
|
|
//purseInOutBo.setStationId();
|
|
|
purseInOutBo.setOperatorId(bo.getUserId());
|
|
purseInOutBo.setOperatorId(bo.getUserId());
|
|
|
purseInOutBo.setOperatorName(bo.getRealName());
|
|
purseInOutBo.setOperatorName(bo.getRealName());
|
|
|
purseInOutBo.setCustomerSn(bo.getOrderId().toString());
|
|
purseInOutBo.setCustomerSn(bo.getOrderId().toString());
|
|
|
purseInOutBo.setPayeeSn(bo.getPaySn());
|
|
purseInOutBo.setPayeeSn(bo.getPaySn());
|
|
|
|
|
+ //充值默认充值至现金钱包
|
|
|
|
|
+ purseInOutBo.setBagCode("1");
|
|
|
|
|
|
|
|
- R<PurseInOutBo> rechargeResult = payOrderBusiness.recharge(purseInOutBo);
|
|
|
|
|
- if (R.isSuccess(rechargeResult)) {
|
|
|
|
|
- // 更新支付订单表的入账状态
|
|
|
|
|
- bo.setCreditStatus(CreditStatusEnum.SUCCESS.code().toString());
|
|
|
|
|
- bo.setOriginalId(purseInOutBo.getOriginalId());
|
|
|
|
|
- payOrderService.updateByBo(bo);
|
|
|
|
|
|
|
+ return payOrderBusiness.recharge(purseInOutBo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 更新订单的支付状态
|
|
|
|
|
+ * @param bo 订单信息
|
|
|
|
|
+ * @return 更新结果
|
|
|
|
|
+ */
|
|
|
|
|
+ public R<PayOrderVo> setOrderPayResult(PayOrderBo bo) {
|
|
|
|
|
+ PayOrderVo vo = payOrderService.queryById(bo.getOrderId());
|
|
|
|
|
+ if (ObjectUtil.isEmpty(vo)) {
|
|
|
|
|
+ log.error("[更新订单状状态失败]-[无此支付订单]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ return R.fail("[更新订单状状态失败]-[无此支付订单]");
|
|
|
}
|
|
}
|
|
|
- return R.ok();
|
|
|
|
|
|
|
+ String paySn = vo.getPaySn();
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(paySn) && ObjectUtil.notEqual(paySn, bo.getPaySn())) {
|
|
|
|
|
+ log.error("[更新订单状状态失败]-[收款方流水号和系统不一致]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ return R.fail("[更新订单状状态失败]-[收款方流水号和系统不一致]");
|
|
|
|
|
+ }
|
|
|
|
|
+ vo = payOrderService.updateOrderStatus(bo);
|
|
|
|
|
+ if (ObjectUtil.isEmpty(vo)) {
|
|
|
|
|
+ log.error("[更新订单支付状态失败]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ return R.fail("[更新订单支付状态失败]");
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.ok(vo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 更新订单的入账状态
|
|
|
|
|
+ * @param bo 订单信息
|
|
|
|
|
+ * @return 更新结果
|
|
|
|
|
+ */
|
|
|
|
|
+ public R<PayOrderVo> setOrderPostResult(PayOrderBo bo) {
|
|
|
|
|
+ PayOrderVo vo = payOrderService.updateOrderStatus(bo);
|
|
|
|
|
+ if (ObjectUtil.isEmpty(vo)) {
|
|
|
|
|
+ log.error("[更新订单入账状态失败]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ return R.fail("[更新订单入账状态失败]");
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.ok(vo);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|