From 91c8c8a251d9f4ed70d01bc702d542d8bfe474b7 Mon Sep 17 00:00:00 2001 From: sangelxiu1 <15781802@163.com> Date: Tue, 8 Jul 2025 10:29:07 +0800 Subject: [PATCH] =?UTF-8?q?##=20Opt=20-=20=E6=94=AF=E4=BB=98=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E5=9B=9E=E5=86=99&=E9=A1=B5=E9=9D=A2=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hzs/common/core/enums/EPayType.java | 9 +++ .../notify/JdPayNotifyController.java | 36 ++++++++++- .../dto/JdPayAggregateCreateOrderRequest.java | 5 ++ .../hzs/third/pay/service/IPayService.java | 4 ++ .../pay/service/impl/JdPayServiceImpl.java | 1 + .../pay/service/impl/PayServiceImpl.java | 59 ++++++++++++++++++ sql/2025年7月1日_京东支付_分账.sql | 60 +++++++++---------- sql/2025年7月8日_京东支付_支付类型.sql | 1 + 8 files changed, 143 insertions(+), 32 deletions(-) create mode 100644 sql/2025年7月8日_京东支付_支付类型.sql diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EPayType.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EPayType.java index d7c42298..93a78027 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EPayType.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EPayType.java @@ -33,6 +33,15 @@ public enum EPayType { */ BANK_ONLINE(4, "网上银行", 0, EnumsPrefixConstants.PAY_TYPE + "4"), +// , 5=(京东)小金库, 6=(京东)白条, 7=(京东)超级白条, 8=(京东)钱包余额), 9=(京东)云闪付 + MINI_TREASURY(5, "小金库", 0, EnumsPrefixConstants.PAY_TYPE + "5"), + CREDIT_LINE(6, "白条", 0, EnumsPrefixConstants.PAY_TYPE + "6"), + SUPER_CREDIT_LINE(7, "超级白条", 0, EnumsPrefixConstants.PAY_TYPE + "7"), + WALLET_BALANCE(8, "钱包余额", 0, EnumsPrefixConstants.PAY_TYPE + "8"), + CLOUD_PAY(9, "云闪付", 0, EnumsPrefixConstants.PAY_TYPE + "9"), + + + ; /** diff --git a/bd-third/src/main/java/com/hzs/third/pay/controller/notify/JdPayNotifyController.java b/bd-third/src/main/java/com/hzs/third/pay/controller/notify/JdPayNotifyController.java index 71834057..400cbbed 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/controller/notify/JdPayNotifyController.java +++ b/bd-third/src/main/java/com/hzs/third/pay/controller/notify/JdPayNotifyController.java @@ -2,6 +2,7 @@ package com.hzs.third.pay.controller.notify; import cn.hutool.json.JSONUtil; import com.hzs.common.core.enums.EPayChannel; +import com.hzs.common.core.enums.EPayType; import com.hzs.common.core.utils.DateUtils; import com.hzs.third.pay.config.JdPayConfig; import com.hzs.third.pay.constants.JdPayConstants; @@ -134,9 +135,9 @@ public class JdPayNotifyController extends JdBaseController { // 订单金额 int tradeAmount = Integer.parseInt(successNotify.getTradeAmount()); BigDecimal payMoney = new BigDecimal(tradeAmount).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP); - + Integer payType = convertPayType(successNotify.getPayTool()); // 支付后续业务处理 - if (iPayService.notifyHandle(type, orderCode, thirdOrderCode, payNumber, payTime, payMoney, EPayChannel.JD, channelNumber)) { + if (iPayService.notifyHandle(type, orderCode, thirdOrderCode, payNumber, payTime, payMoney, EPayChannel.JD, channelNumber, payType)) { return SUCCESS; } } else { @@ -150,6 +151,37 @@ public class JdPayNotifyController extends JdBaseController { } return ERROR; } + private Integer convertPayType(String payName){ + Integer result = EPayType.WECHAT.getValue(); + switch (payName){ + case "XJK": + result = EPayType.MINI_TREASURY.getValue(); + break; + case "JIOU": + result = EPayType.CREDIT_LINE.getValue(); + break; + case "SJIOU": + result = EPayType.SUPER_CREDIT_LINE.getValue(); + break; + case "ACCT": + result = EPayType.WALLET_BALANCE.getValue(); + break; + case "EXPR": + result = EPayType.BANK_CARD.getValue(); + break; + case "WX": + result = EPayType.WECHAT.getValue(); + break; + case "ALIPAY": + result = EPayType.ALIPAY.getValue(); + break; + case "YSF": + result = EPayType.CLOUD_PAY.getValue(); + break; + + } + return result; + } /** diff --git a/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayAggregateCreateOrderRequest.java b/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayAggregateCreateOrderRequest.java index ec2e5118..21156edc 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayAggregateCreateOrderRequest.java +++ b/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayAggregateCreateOrderRequest.java @@ -69,6 +69,11 @@ public class JdPayAggregateCreateOrderRequest implements Serializable { * 同步通知页面url */ private String pageBackUrl; + + /** + * 点击完成按钮后跳转页面 + */ + private String callbackUrl; /** * 风控信息map-- json串 */ diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/IPayService.java b/bd-third/src/main/java/com/hzs/third/pay/service/IPayService.java index 7bf20566..a266d944 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/IPayService.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/IPayService.java @@ -27,6 +27,10 @@ public interface IPayService { boolean notifyHandle(String businessType, String businessCode, String originalOrder, String payNumber, Date payTime, BigDecimal payMoney, EPayChannel ePayChannel, String channelNumber); + + boolean notifyHandle(String businessType, String businessCode, String originalOrder, + String payNumber, Date payTime, BigDecimal payMoney, + EPayChannel ePayChannel, String channelNumber, Integer payType); /** * 业务处理重试 diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java b/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java index aa79bc01..8c23db7b 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java @@ -245,6 +245,7 @@ public class JdPayServiceImpl implements IJdPayService { .userId(userId) // 同步通知URL(收银台必传,页面回调地址) .pageBackUrl(jdPayBankProperties.getPageBackUrl() + "?extParam=" + onlinePayment.getExtParam()) + .callbackUrl(jdPayBankProperties.getPageBackUrl() + "?extParam=" + onlinePayment.getExtParam()) // 支付回调地址 .notifyUrl(jdPayBankProperties.getNotifyUrl()) // 交易类型 diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/impl/PayServiceImpl.java b/bd-third/src/main/java/com/hzs/third/pay/service/impl/PayServiceImpl.java index 15e5c541..0837aac7 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/impl/PayServiceImpl.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/impl/PayServiceImpl.java @@ -118,6 +118,65 @@ public class PayServiceImpl implements IPayService { return false; } + @Override + public boolean notifyHandle(String businessType, String businessCode, String originalOrder, String payNumber, Date payTime, BigDecimal payMoney, EPayChannel ePayChannel, String channelNumber, Integer payType) { + Long pkId = null; + String redisKey = CacheConstants.ONLINE_PAY_KEY + businessCode; + + try { + // 校验支付信息状态、业务与支付金额是否一致等 + TOnlinePayment onlinePayment = itOnlinePaymentService.queryByBusiness( + ObjectUtil.isNotEmpty(businessType) ? Integer.valueOf(businessType) : null + , businessCode, null); + if (null == onlinePayment || EPayStatus.PAID.getValue() == onlinePayment.getPayStatus()) { + log.error("支付信息不存在或已支付"); + return false; + } + pkId = onlinePayment.getPkId(); + + if (!PayUtil.checkAmount(onlinePayment.getBusinessMoney(), payMoney)) { + // 业务金额 大于 实际支付金额 + log.error("业务金额大于实际支付金额,支付编号:{}, 支付金额:{}", onlinePayment.getPaymentCode(), payMoney); + } + + onlinePayment.setPayStatus(EPayStatus.PAID.getValue()); + onlinePayment.setPayNumber(payNumber); + onlinePayment.setPayTime(payTime); + onlinePayment.setPayMoney(payMoney); + onlinePayment.setOriginalOrder(originalOrder); + onlinePayment.setChannelNumber(channelNumber); + onlinePayment.setPkModified(MagicNumberConstants.PK_ADMIN); + onlinePayment.setModifiedTime(new Date()); + onlinePayment.setPayType(payType); + if (null != ePayChannel) { + onlinePayment.setPayChannel(ePayChannel.getValue()); + } + // 更新支付相关信息 + if (itOnlinePaymentService.updateById(onlinePayment)) { + // 进行支付业务处理 + this.handleBusiness(onlinePayment, true); + // 更新业务处理信息 + itOnlinePaymentService.updateById(onlinePayment); + + return true; + } + } catch (Exception e) { + log.error("在线支付信息回调处理异常", e); + + if (null != pkId) { + // 更新业务处理信息 + itOnlinePaymentService.update(Wrappers.lambdaUpdate() + .eq(TOnlinePayment::getPkId, pkId) + .set(TOnlinePayment::getCallbackStatus, ECallbackStatus.FAIL.getValue()) + .set(TOnlinePayment::getCallbackInfo, e.getMessage()) + ); + } + } finally { + redisService.unlock(redisKey); + } + return false; + } + @Override public boolean retryHandle(TOnlinePayment tOnlinePayment, boolean mqPush) { // 支付业务处理 diff --git a/sql/2025年7月1日_京东支付_分账.sql b/sql/2025年7月1日_京东支付_分账.sql index 56ccbaf0..d42c6d9b 100644 --- a/sql/2025年7月1日_京东支付_分账.sql +++ b/sql/2025年7月1日_京东支付_分账.sql @@ -1,4 +1,4 @@ -CREATE TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC" ( +CREATE TABLE "T_ONLINE_PAYMENT_SEP_ACC" ( "PK_ID" NUMBER(20,0), "PK_PAYMENT" NUMBER(20,0), "VERSION" VARCHAR2(255), @@ -15,33 +15,33 @@ CREATE TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC" ( ) ; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."PK_PAYMENT" IS '在线支付信息ID'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."PK_PAYMENT" IS '在线支付信息ID'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."VERSION" IS '版本号'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."VERSION" IS '版本号'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."REQ_CONTENT" IS '支付请求信息'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."REQ_CONTENT" IS '支付请求信息'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."REQ_CONTENT_SEP_ACC" IS '分账请求信息'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."REQ_CONTENT_SEP_ACC" IS '分账请求信息'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."RESP_CONTENT" IS '支付响应信息'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."RESP_CONTENT" IS '支付响应信息'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."DEL_FLAG" IS '逻辑删除 (0=未删除,1已删除)'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."DEL_FLAG" IS '逻辑删除 (0=未删除,1已删除)'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."CREATION_TIME" IS '创建时间'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."CREATION_TIME" IS '创建时间'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."MODIFIED_TIME" IS '修改时间'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."MODIFIED_TIME" IS '修改时间'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."PK_CREATOR" IS '创建者'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."PK_CREATOR" IS '创建者'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."PK_MODIFIED" IS '更新者'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."PK_MODIFIED" IS '更新者'; -COMMENT ON TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC" IS '支付请求主表'; +COMMENT ON TABLE "T_ONLINE_PAYMENT_SEP_ACC" IS '支付请求主表'; CREATE SEQUENCE T_ONLINE_PAYMENT_SEP_ACC_SEQ START WITH 1 INCREMENT BY 1; -CREATE TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D" ( +CREATE TABLE "T_ONLINE_PAYMENT_SEP_ACC_D" ( "PK_ID" NUMBER(20,0), "PK_SEP_ACC" NUMBER(20,0), "ACCOUNT" VARCHAR2(255), @@ -56,44 +56,44 @@ CREATE TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D" ( ) ; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."PK_SEP_ACC" IS '支付请求主表ID'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."PK_SEP_ACC" IS '支付请求主表ID'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."ACCOUNT" IS '分账账号'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."ACCOUNT" IS '分账账号'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."PROPORTION" IS '分账比例'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."PROPORTION" IS '分账比例'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."DEL_FLAG" IS '逻辑删除 (0=未删除,1已删除)'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."DEL_FLAG" IS '逻辑删除 (0=未删除,1已删除)'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."CREATION_TIME" IS '创建时间'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."CREATION_TIME" IS '创建时间'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."MODIFIED_TIME" IS '修改时间'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."MODIFIED_TIME" IS '修改时间'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."PK_CREATOR" IS '创建者'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."PK_CREATOR" IS '创建者'; -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."PK_MODIFIED" IS '更新者'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."PK_MODIFIED" IS '更新者'; -COMMENT ON TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D" IS '支付请求子表(分账)'; +COMMENT ON TABLE "T_ONLINE_PAYMENT_SEP_ACC_D" IS '支付请求子表(分账)'; CREATE SEQUENCE T_ONLINE_PAYMENT_SEP_ACC_D_SEQ START WITH 1 INCREMENT BY 1; -ALTER TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC" +ALTER TABLE "T_ONLINE_PAYMENT_SEP_ACC" ADD ("TRADE_AMOUNT" NUMBER(16,2)); -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."TRADE_AMOUNT" IS '总金额'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."TRADE_AMOUNT" IS '总金额'; -ALTER TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D" +ALTER TABLE "T_ONLINE_PAYMENT_SEP_ACC_D" ADD ("TRADE_AMOUNT" NUMBER(16,2)); -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."TRADE_AMOUNT" IS '分账金额'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."TRADE_AMOUNT" IS '分账金额'; -ALTER TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC" +ALTER TABLE "T_ONLINE_PAYMENT_SEP_ACC" ADD ("OUT_TRADE_NO" VARCHAR2(255)); -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."OUT_TRADE_NO" IS '支付流水号'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."OUT_TRADE_NO" IS '支付流水号'; -ALTER TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D" +ALTER TABLE "T_ONLINE_PAYMENT_SEP_ACC_D" ADD ("OUT_TRADE_NO" VARCHAR2(255)); -COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."OUT_TRADE_NO" IS '支付流水号'; +COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."OUT_TRADE_NO" IS '支付流水号'; diff --git a/sql/2025年7月8日_京东支付_支付类型.sql b/sql/2025年7月8日_京东支付_支付类型.sql new file mode 100644 index 00000000..1d624224 --- /dev/null +++ b/sql/2025年7月8日_京东支付_支付类型.sql @@ -0,0 +1 @@ +COMMENT ON COLUMN "RETAIL"."T_ONLINE_PAYMENT"."PAY_TYPE" IS '支付类型(1=支付宝,2=微信,3=银行卡,4=网上银行, 5=(京东)小金库, 6=(京东)白条, 7=(京东)超级白条, 8=(京东)钱包余额), 9=(京东)银行卡, 10=(京东)云闪付'