diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/model/PayCallback.java b/ghy-common/src/main/java/com/ghy/common/adapay/model/PayCallback.java index 803c4949..73ddded8 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/model/PayCallback.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/model/PayCallback.java @@ -21,10 +21,6 @@ public class PayCallback { */ @JSONField(name = "created_time") private Long createdTime; - /** - * 支付时间 - */ - private long payTime; /** * 必填,订单号 */ diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/model/PaymentDTO.java b/ghy-common/src/main/java/com/ghy/common/adapay/model/PaymentDTO.java index 4982fb70..7ea5882a 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/model/PaymentDTO.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/model/PaymentDTO.java @@ -20,6 +20,12 @@ public class PaymentDTO extends Payment { */ private String status; + /** + * 手续费 + */ + @JSONField(name = "fee_amt") + private String feeAmt; + /** * 支付时间 */ diff --git a/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java b/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java index 9d8d4e5a..531311e4 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java +++ b/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java @@ -47,18 +47,18 @@ public interface FinancialMasterMapper { /** * 支付成功 * - * @param orderNo 订单号 - * @param payType 支付渠道 + * @param paymentId 支付ID + * @param payType 支付渠道 */ - void paySucceeded(@Param(value = "orderNo") String orderNo, @Param(value = "payType") int payType); + void paySucceeded(@Param(value = "paymentId") String paymentId, @Param(value = "payType") int payType); /** * 支付成功 * - * @param orderNo 订单号 - * @param payStatus 支付渠道 + * @param orderMasterCode 主订单号 + * @param payStatus 支付渠道 */ - void updateOrderStatus(@Param(value = "orderNo") String orderNo, @Param(value = "payStatus") int payStatus); + void updateOrderStatus(@Param(value = "orderMasterCode") String orderMasterCode, @Param(value = "payStatus") int payStatus); /** diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java b/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java index 24b273f2..976a1b1d 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java @@ -46,10 +46,10 @@ public interface FinancialMasterService { /** * 支付成功 * - * @param orderMasterCode 主订单号 - * @param payChannel 支付渠道 + * @param paymentId 支付ID + * @param payChannel 支付渠道 */ - void paySucceeded(String orderMasterCode, String payChannel); + void paySucceeded(String paymentId, String payChannel); /** * 创建主财务单CODE diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java index 47af1757..34498b7b 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java @@ -8,8 +8,6 @@ import com.ghy.payment.domain.FinancialMaster; import com.ghy.payment.mapper.FinancialMasterMapper; import com.ghy.payment.mapper.PaymentMapper; import com.ghy.payment.service.FinancialMasterService; -import com.huifu.adapay.model.Payment; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -21,8 +19,6 @@ import java.time.format.DateTimeFormatterBuilder; import java.util.List; import java.util.concurrent.atomic.AtomicLong; -import static com.ghy.common.adapay.PayChannel.ALIPAY; -import static com.ghy.common.adapay.PayChannel.WX; import static java.time.temporal.ChronoField.*; /** @@ -74,14 +70,17 @@ public class FinancialMasterServiceImpl implements FinancialMasterService { } @Override - public void paySucceeded(String orderMasterCode, String payChannel) { + public void paySucceeded(String paymentId, String payChannel) { + int payType; try { - - financialMasterMapper.paySucceeded(orderMasterCode, PayTypeEnum.valueOf(payChannel.toUpperCase()).getCode()); - financialMasterMapper.updateOrderStatus(orderMasterCode, PayStatus.PAID.getCode()); + payType = PayTypeEnum.valueOf(payChannel.toUpperCase()).getCode(); } catch (IllegalArgumentException e) { - logger.warn("OrderNo[{}] Unknown payChannel [{}]!", orderMasterCode, payChannel); + payType = -1; + logger.error("paymentId[{}] Unknown payChannel [{}]!", paymentId, payChannel); } + FinancialMaster financialMaster = financialMasterMapper.selectByPaymentId(paymentId); + financialMasterMapper.updateOrderStatus(financialMaster.getOrderMasterCode(), PayStatus.PAID.getCode()); + financialMasterMapper.paySucceeded(paymentId, payType); } @Override diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java index 0480be8a..a70735f6 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java @@ -12,10 +12,8 @@ import com.ghy.payment.service.FinancialMasterService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.springframework.util.Assert; import javax.annotation.Resource; -import java.util.HashSet; /** * 支付回调 @@ -27,36 +25,28 @@ public class PayCallbackService implements CallBackService { private static final Logger logger = LoggerFactory.getLogger(PayCallbackService.class); - // 用HashSet检索效率高 - private final static HashSet orderNoSet = new HashSet<>(1024); - @Resource FinancialMasterService financialMasterService; @Override public void onCallback(Event event) { - logger.info("pay callback is {}", event); + logger.info("支付回调: {}", event); String data = event.getData(); PayCallback payment = JSON.parseObject(data, PayCallback.class); - Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!"); - // 校验是否是本系统发出去的回调请求 - boolean ours = orderNoSet.remove(payment.getOrderNo()); - if (!ours) { - //如果内存里没有 就从数据库里找这条记录 - PaymentDTO dto = financialMasterService.selectPaymentById(payment.getId()); - ours = dto != null; - } - if (ours) { + PaymentDTO dto = financialMasterService.selectPaymentById(payment.getId()); + // 校验是否是本系统发出去的支付请求 + if (dto != null) { // 更新交易记录 PaymentDTO param = new PaymentDTO(); param.setId(payment.getId()); + param.setFeeAmt(payment.getFeeAmt()); param.setStatus(payment.getStatus()); param.setPayTime(System.currentTimeMillis()); financialMasterService.updatePayment(param); if (AdapayStatusEnum.succeeded.code.equals(payment.getStatus())) { - // 修改主财务单状态 - financialMasterService.paySucceeded(payment.getOrderNo().split("_")[0], payment.getPayChannel()); + // 更新主财务单状态 + financialMasterService.paySucceeded(payment.getId(), payment.getPayChannel()); } else { logger.warn("支付失败 : {}", payment); } @@ -67,7 +57,7 @@ public class PayCallbackService implements CallBackService { @Override public void onResponse(JSONObject response) { - logger.info("支付结果: {}", response.toJSONString()); + logger.info("发起支付 Response: {}", response.toJSONString()); // 保存一条支付记录 PaymentDTO payment = response.toJavaObject(PaymentDTO.class); String status = payment.getStatus(); @@ -79,10 +69,8 @@ public class PayCallbackService implements CallBackService { update.setPaymentId(payment.getId()); financialMasterService.updateFinancialMaster(update); } else { - logger.warn("请求支付失败 : {}", response.toJSONString()); + logger.warn("发起支付失败 : {}", response.toJSONString()); } - // 将记录保存到临时会话中 - orderNoSet.add(response.getString("order_no")); } } diff --git a/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml b/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml index 70fe0eb3..17a2715c 100644 --- a/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml +++ b/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml @@ -101,12 +101,12 @@ pay_type = #{payType}, pay_time = SYSDATE(), update_time = SYSDATE() - WHERE order_master_code = #{orderNo} + WHERE payment_id = #{paymentId} UPDATE order_master SET pay_status = #{payStatus} , pay_time = SYSDATE(), update_time = SYSDATE() - WHERE code = #{orderNo} + WHERE code = #{orderMasterCode}