From 98bef1400a04683c1b2d4cade4cd2c5b7fddbff8 Mon Sep 17 00:00:00 2001 From: HH Date: Tue, 31 May 2022 20:55:09 +0800 Subject: [PATCH 1/5] =?UTF-8?q?1.=E6=92=A4=E9=94=80=E6=94=AF=E4=BB=982.?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E6=95=B4=E7=90=86=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/AdapayCallbackController.java | 16 ++--- .../ghy/web/core/adapay/DrawCashCallback.java | 23 ------- .../com/ghy/web/core/adapay/PayCallback.java | 62 ------------------- .../ghy/web/core/adapay/RefundCallback.java | 23 ------- .../adapay/callback/IDrawCashCallback.java | 14 ----- .../common/adapay/callback/IPayCallback.java | 16 ----- .../adapay/callback/IRefundCallback.java | 13 ---- .../mapping/DrawCashReplyMapping.java | 40 ------------ .../callback/mapping/PayReplyMapping.java | 47 -------------- .../callback/mapping/RefundReplyMapping.java | 40 ------------ .../adapay/{callback => model}/Event.java | 2 +- .../com/ghy/payment/mapper/PaymentMapper.java | 3 + .../ghy/payment/service/AdapayService.java | 55 +++++++++++----- .../ghy/payment/service/CallBackService.java | 8 +-- .../service/FinancialMasterService.java | 7 +++ .../impl/DrawCashCallBackServiceImpl.java | 37 ----------- .../service/impl/DrawCashCallbackService.java | 30 +++++++++ .../impl/FinancialMasterServiceImpl.java | 7 ++- ...rviceImpl.java => PayCallbackService.java} | 37 +++++++---- .../impl/PayReverseCallbackService.java | 29 +++++++++ .../impl/RefundCallBackServiceImpl.java | 25 -------- .../service/impl/RefundCallbackService.java | 30 +++++++++ .../mapper/payment/PaymentMapper.xml | 8 ++- 23 files changed, 186 insertions(+), 386 deletions(-) delete mode 100644 ghy-admin/src/main/java/com/ghy/web/core/adapay/DrawCashCallback.java delete mode 100644 ghy-admin/src/main/java/com/ghy/web/core/adapay/PayCallback.java delete mode 100644 ghy-admin/src/main/java/com/ghy/web/core/adapay/RefundCallback.java delete mode 100644 ghy-common/src/main/java/com/ghy/common/adapay/callback/IDrawCashCallback.java delete mode 100644 ghy-common/src/main/java/com/ghy/common/adapay/callback/IPayCallback.java delete mode 100644 ghy-common/src/main/java/com/ghy/common/adapay/callback/IRefundCallback.java delete mode 100644 ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/DrawCashReplyMapping.java delete mode 100644 ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/PayReplyMapping.java delete mode 100644 ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/RefundReplyMapping.java rename ghy-common/src/main/java/com/ghy/common/adapay/{callback => model}/Event.java (95%) delete mode 100644 ghy-payment/src/main/java/com/ghy/payment/service/impl/DrawCashCallBackServiceImpl.java create mode 100644 ghy-payment/src/main/java/com/ghy/payment/service/impl/DrawCashCallbackService.java rename ghy-payment/src/main/java/com/ghy/payment/service/impl/{PayCallBackServiceImpl.java => PayCallbackService.java} (71%) create mode 100644 ghy-payment/src/main/java/com/ghy/payment/service/impl/PayReverseCallbackService.java delete mode 100644 ghy-payment/src/main/java/com/ghy/payment/service/impl/RefundCallBackServiceImpl.java create mode 100644 ghy-payment/src/main/java/com/ghy/payment/service/impl/RefundCallbackService.java diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/pay/AdapayCallbackController.java b/ghy-admin/src/main/java/com/ghy/web/controller/pay/AdapayCallbackController.java index 69bc18d0..274f7ddf 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/pay/AdapayCallbackController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/pay/AdapayCallbackController.java @@ -1,6 +1,6 @@ package com.ghy.web.controller.pay; -import com.ghy.common.adapay.callback.Event; +import com.ghy.common.adapay.model.Event; import com.ghy.common.core.controller.BaseController; import com.ghy.common.utils.spring.SpringUtils; import com.ghy.payment.service.CallBackService; @@ -19,8 +19,6 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class AdapayCallbackController extends BaseController { - private CallBackService callBackService; - @PostMapping("/adapay/callback") public String callback(Event event) { logger.info(" 收单返回消息event" + event); @@ -45,15 +43,19 @@ public class AdapayCallbackController extends BaseController { switch (type) { case "payment.succeeded": case "payment.failed": - beanName = "payCallBackService"; + beanName = "payCallbackService"; + break; + case "payment_reverse.succeeded": + case "payment_reverse.failed": + beanName = "payReverseCallbackService"; break; case "payment.close.succeeded": case "payment.close.failed": - beanName = "refundCallBackService"; + beanName = "refundCallbackService"; break; case "cash.succeeded": case "cash.failed": - beanName = "drawCashCallBackService"; + beanName = "drawCashCallbackService"; break; default: logger.warn("UNKNOWN EVENT TYPE [{}]", type); @@ -61,7 +63,7 @@ public class AdapayCallbackController extends BaseController { } logger.info("handler bean is {} ", beanName); - callBackService = SpringUtils.getBean(beanName); + CallBackService callBackService = SpringUtils.getBean(beanName); callBackService.onCallback(event); return "OK"; } diff --git a/ghy-admin/src/main/java/com/ghy/web/core/adapay/DrawCashCallback.java b/ghy-admin/src/main/java/com/ghy/web/core/adapay/DrawCashCallback.java deleted file mode 100644 index a4fd984e..00000000 --- a/ghy-admin/src/main/java/com/ghy/web/core/adapay/DrawCashCallback.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ghy.web.core.adapay; - -import com.ghy.common.adapay.callback.IDrawCashCallback; -import com.ghy.common.adapay.model.DrawCashReply; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -/** - * 处理提现结果 - * - * @author HH 2022/5/27 - */ -@Component -public class DrawCashCallback implements IDrawCashCallback { - - private static final Logger logger = LoggerFactory.getLogger(DrawCashCallback.class); - - @Override - public void onCallback(DrawCashReply reply) { - logger.info("提现结果:{}", reply); - } -} diff --git a/ghy-admin/src/main/java/com/ghy/web/core/adapay/PayCallback.java b/ghy-admin/src/main/java/com/ghy/web/core/adapay/PayCallback.java deleted file mode 100644 index 6207a591..00000000 --- a/ghy-admin/src/main/java/com/ghy/web/core/adapay/PayCallback.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.ghy.web.core.adapay; - -import com.alibaba.fastjson.JSONObject; -import com.ghy.common.adapay.callback.IPayCallback; -import com.ghy.common.adapay.model.AdapayStatusEnum; -import com.ghy.common.adapay.model.PayReply; -import com.ghy.common.adapay.model.PaymentDTO; -import com.ghy.payment.domain.FinancialMaster; -import com.ghy.payment.service.FinancialMasterService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - -/** - * 处理支付结果 - * - * @author HH 2022/5/27 - */ -@Component -public class PayCallback implements IPayCallback { - - private static final Logger logger = LoggerFactory.getLogger(PayCallback.class); - - @Resource - FinancialMasterService financialMasterService; - - @Override - public void onCallback(PayReply reply) { - // 更新交易记录 - PaymentDTO payment = new PaymentDTO(); - payment.setId(reply.getId()); - payment.setStatus(reply.getStatus()); - payment.setPayTime(reply.getPayTime()); - financialMasterService.updatePayment(payment); - - if (AdapayStatusEnum.succeeded.code.equals(reply.getStatus())) { - // 修改主财务单状态 - financialMasterService.paySucceeded(reply.getOrderNo(), reply.getPayChannel()); - } else { - logger.warn("支付失败 : {}", reply); - } - } - - @Override - public void onResponse(JSONObject response) { - // 保存一条支付记录 - PaymentDTO payment = response.toJavaObject(PaymentDTO.class); - payment.setStatus("pending"); - financialMasterService.insertPayment(payment); - - if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { - FinancialMaster update = new FinancialMaster(); - update.setOrderMasterCode(response.getString("order_no")); - update.setPaymentId(response.getString("id")); - financialMasterService.updateFinancialMaster(update); - } else { - logger.warn("请求支付失败 : {}", response.toJSONString()); - } - } -} \ No newline at end of file diff --git a/ghy-admin/src/main/java/com/ghy/web/core/adapay/RefundCallback.java b/ghy-admin/src/main/java/com/ghy/web/core/adapay/RefundCallback.java deleted file mode 100644 index 1e88dd40..00000000 --- a/ghy-admin/src/main/java/com/ghy/web/core/adapay/RefundCallback.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ghy.web.core.adapay; - -import com.ghy.common.adapay.callback.IRefundCallback; -import com.ghy.common.adapay.model.RefundReply; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -/** - * 处理退款结果 - * - * @author HH 2022/5/27 - */ -@Component -public class RefundCallback implements IRefundCallback { - - private static final Logger logger = LoggerFactory.getLogger(RefundCallback.class); - - @Override - public void onCallback(RefundReply reply) { - logger.info("退款结果:{}", reply); - } -} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/IDrawCashCallback.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/IDrawCashCallback.java deleted file mode 100644 index ba9e04b2..00000000 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/IDrawCashCallback.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.ghy.common.adapay.callback; - -import com.ghy.common.adapay.model.DrawCashReply; - -/** - * 处理提现结果的接口 - * - * @author HH 2022/4/1 - */ -public interface IDrawCashCallback { - - void onCallback(DrawCashReply reply); - -} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/IPayCallback.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/IPayCallback.java deleted file mode 100644 index 7ef8091e..00000000 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/IPayCallback.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ghy.common.adapay.callback; - -import com.alibaba.fastjson.JSONObject; -import com.ghy.common.adapay.model.PayReply; - -/** - * 处理支付结果的回调接口 - * - * @author HH 2022/3/25 - */ -public interface IPayCallback { - - void onCallback(PayReply reply); - - void onResponse(JSONObject response); -} \ No newline at end of file diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/IRefundCallback.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/IRefundCallback.java deleted file mode 100644 index a8e1cb58..00000000 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/IRefundCallback.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ghy.common.adapay.callback; - -import com.ghy.common.adapay.model.RefundReply; - -/** - * 处理退款结果的回调接口 - * - * @author HH 2022/3/29 - */ -public interface IRefundCallback { - - void onCallback(RefundReply reply); -} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/DrawCashReplyMapping.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/DrawCashReplyMapping.java deleted file mode 100644 index 18bf0896..00000000 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/DrawCashReplyMapping.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ghy.common.adapay.callback.mapping; - -import com.alibaba.fastjson.JSON; -import com.ghy.common.adapay.callback.IDrawCashCallback; -import com.ghy.common.adapay.callback.Event; -import com.ghy.common.adapay.model.DrawCashReply; -import org.springframework.util.Assert; - -import java.util.concurrent.ConcurrentHashMap; - -/** - * 提现结果匹配 - * - * @author HH 2022/4/1 - */ -public class DrawCashReplyMapping { - - /** - * 临时保存支付结果 - * key: orderNo - * value: 处理支付结果的回调接口 - */ - private final static ConcurrentHashMap PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024); - - public static void putReply(Event event, IDrawCashCallback callback) { - String data = event.getData(); - DrawCashReply reply = JSON.parseObject(data, DrawCashReply.class); - Assert.hasText(reply.getOrderNo(), "orderNo is blank !!!"); - PAY_RESULT_CALLBACK_MAP.remove(reply.getOrderNo()); - if (callback != null) { - callback.onCallback(reply); - } - } - - public static void putCallback(String orderNo, IDrawCashCallback callback) { - Assert.hasText(orderNo, "orderNo is blank !!!"); - Assert.notNull(callback, "PayCallback is null !!!"); - PAY_RESULT_CALLBACK_MAP.put(orderNo, callback); - } -} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/PayReplyMapping.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/PayReplyMapping.java deleted file mode 100644 index bfcc4c9f..00000000 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/PayReplyMapping.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ghy.common.adapay.callback.mapping; - -import com.alibaba.fastjson.JSON; -import com.ghy.common.adapay.callback.Event; -import com.ghy.common.adapay.callback.IPayCallback; -import com.ghy.common.adapay.model.PayReply; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.Assert; - -import java.util.concurrent.ConcurrentHashMap; - -/** - * 支付结果匹配 - * - * @author HH 2022/3/25 - */ -public class PayReplyMapping { - - protected static final Logger logger = LoggerFactory.getLogger(PayReplyMapping.class); - - /** - * 临时保存支付结果 - * key: orderNo - * value: 处理支付结果的回调接口 - */ - private final static ConcurrentHashMap PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024); - - public static void putReply(Event event, IPayCallback callback) { - String data = event.getData(); - PayReply payment = JSON.parseObject(data, PayReply.class); - Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!"); - payment.setPayTime(event.getCreatedTime()); - PAY_RESULT_CALLBACK_MAP.remove(payment.getOrderNo()); - if (callback != null) { - callback.onCallback(payment); - } else { - logger.warn("PayCallback don't exist! {}", payment); - } - } - - public static void putCallback(String orderNo, IPayCallback callback) { - Assert.hasText(orderNo, "orderNo is blank !!!"); - Assert.notNull(callback, "PayCallback is null !!!"); - PAY_RESULT_CALLBACK_MAP.put(orderNo, callback); - } -} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/RefundReplyMapping.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/RefundReplyMapping.java deleted file mode 100644 index 86d80dbd..00000000 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/RefundReplyMapping.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ghy.common.adapay.callback.mapping; - -import com.alibaba.fastjson.JSON; -import com.ghy.common.adapay.callback.Event; -import com.ghy.common.adapay.callback.IRefundCallback; -import com.ghy.common.adapay.model.RefundReply; -import org.springframework.util.Assert; - -import java.util.concurrent.ConcurrentHashMap; - -/** - * 退款结果匹配 - * - * @author HH 2022/3/29 - */ -public class RefundReplyMapping { - - /** - * 临时保存退款结果 - * key: orderNo - * value: 处理支付结果的回调接口 - */ - private final static ConcurrentHashMap PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024); - - public static void putReply(Event event, IRefundCallback refundCallback) { - String data = event.getData(); - RefundReply payment = JSON.parseObject(data, RefundReply.class); - Assert.hasText(payment.getPaymentId(), "paymentId is blank !!!"); - IRefundCallback callback = PAY_RESULT_CALLBACK_MAP.remove(payment.getPaymentId()); - if (callback != null) { - callback.onCallback(payment); - } - } - - public static void putCallback(String paymentId, IRefundCallback callback) { - Assert.hasText(paymentId, "paymentId is blank !!!"); - Assert.notNull(callback, "RefundCallback is null !!!"); - PAY_RESULT_CALLBACK_MAP.put(paymentId, callback); - } -} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/Event.java b/ghy-common/src/main/java/com/ghy/common/adapay/model/Event.java similarity index 95% rename from ghy-common/src/main/java/com/ghy/common/adapay/callback/Event.java rename to ghy-common/src/main/java/com/ghy/common/adapay/model/Event.java index eb065525..5e8e851d 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/Event.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/model/Event.java @@ -1,4 +1,4 @@ -package com.ghy.common.adapay.callback; +package com.ghy.common.adapay.model; import com.alibaba.fastjson.annotation.JSONField; import lombok.Data; diff --git a/ghy-payment/src/main/java/com/ghy/payment/mapper/PaymentMapper.java b/ghy-payment/src/main/java/com/ghy/payment/mapper/PaymentMapper.java index 54e4de3c..96944f80 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/mapper/PaymentMapper.java +++ b/ghy-payment/src/main/java/com/ghy/payment/mapper/PaymentMapper.java @@ -1,5 +1,6 @@ package com.ghy.payment.mapper; +import com.ghy.common.adapay.model.PaymentDTO; import com.huifu.adapay.model.Payment; /** @@ -12,4 +13,6 @@ public interface PaymentMapper { int insertPayment(Payment payment); int updatePayment(Payment payment); + + PaymentDTO selectById(String id); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/AdapayService.java b/ghy-payment/src/main/java/com/ghy/payment/service/AdapayService.java index 0991ca6b..445aae6c 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/AdapayService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/AdapayService.java @@ -3,13 +3,11 @@ package com.ghy.payment.service; import com.alibaba.fastjson.JSONObject; import com.ghy.common.adapay.AdapayConfig; import com.ghy.common.adapay.AdapayProperties; -import com.ghy.common.adapay.callback.IDrawCashCallback; -import com.ghy.common.adapay.callback.IPayCallback; -import com.ghy.common.adapay.callback.IRefundCallback; -import com.ghy.common.adapay.callback.mapping.DrawCashReplyMapping; -import com.ghy.common.adapay.callback.mapping.RefundReplyMapping; import com.ghy.common.adapay.model.*; -import com.ghy.payment.service.impl.PayCallBackServiceImpl; +import com.ghy.payment.service.impl.DrawCashCallbackService; +import com.ghy.payment.service.impl.PayCallbackService; +import com.ghy.payment.service.impl.PayReverseCallbackService; +import com.ghy.payment.service.impl.RefundCallbackService; import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.model.*; import org.apache.commons.lang3.StringUtils; @@ -33,13 +31,13 @@ public class AdapayService { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @Resource - private IPayCallback payCallback; + private PayCallbackService payCallBackService; @Resource - private PayCallBackServiceImpl payCallBackService; + private RefundCallbackService refundCallbackService; @Resource - private IDrawCashCallback drawCashCallback; + private DrawCashCallbackService drawCashCallbackService; @Resource - private IRefundCallback refundCallback; + private PayReverseCallbackService payReverseCallbackService; @Resource private AdapayProperties adapayProperties; @@ -237,8 +235,9 @@ public class AdapayService { cashParam.put("notify_url", adapayProperties.getNotifyUrl()); cashParam.put("remark", remark); cashParam.put("fee_mode", feeMode); - DrawCashReplyMapping.putCallback(orderNo, drawCashCallback); - return (JSONObject) Drawcash.create(cashParam, deptId.toString()); + JSONObject response = (JSONObject) Drawcash.create(cashParam, deptId.toString()); + drawCashCallbackService.onResponse(response); + return response; } /** @@ -298,7 +297,7 @@ public class AdapayService { } /** - * 发起退款 + * 发起退款(用于[延迟分账]或者[延迟分账且确认支付后]的支付单) * 当您的业务需要发起退款时,可通过 Adapay 系统提供的创建 Refund对象 方法创建一个退款对象,资金会原路退回用户的支付宝或微信中。 * 支持一次全额或多次部分退款,退款次数最多不超过10次。多次部分退款时,当前退款金额 + 已退款金额不能大于原支付金额。 * 对于每次撤销交易,Adapay 都会通过 异步消息通知 告知结果。 @@ -319,8 +318,9 @@ public class AdapayService { JSONObject refundParams = new JSONObject(); refundParams.put("refund_amt", refundAmt); refundParams.put("refund_order_no", refundOrderNo); - RefundReplyMapping.putCallback(paymentId, refundCallback); - return (JSONObject) Refund.create(paymentId, refundParams, deptId.toString()); + JSONObject response = (JSONObject) Refund.create(paymentId, refundParams, deptId.toString()); + refundCallbackService.onResponse(response); + return response; } /** @@ -362,4 +362,29 @@ public class AdapayService { return (JSONObject) Member.query(memberParams, deptId.toString()); } + /** + * 支付撤销 + * 支付撤销对象适用于[延时分账]的场景。只有已支付完成且为延时分账的Payment对象,在没有创建支付确认对象成功之前,可以调用创建支付撤销对象。 + * 用来撤销支付,资金会原路退回用户的支付宝或微信中。 支持一次全额或多次部分撤销,撤销次数最多不超过10次。 + * 多次部分撤销时,当前撤销金额 + 已撤销金额 + 已确认金额不能大于原支付金额。 + * 对于每次撤销交易,Adapay 都会通过 异步消息通知 告知结果。 + * https://docs.adapay.tech/api/trade.html#payment-reverse-object + * + * @param deptId [必填]商户ID + * @param paymentId [必填]Adapay生成的支付对象id + * @param reverseAmt [必填]撤销金额,必须大于0,保留两位小数点,如0.10、100.05等。撤销金额必须小于等于支付金额 - 已确认金额 - 已撤销(撤销成功+撤销中)金额。 + * @return 创建支付撤销对象同步返回成功,表示 Adapay 受理成功,撤销结果以异步通知为准 + */ + public JSONObject payReverse(@NotNull Long deptId, @NotNull String paymentId, @NotNull String reverseAmt) throws BaseAdaPayException { + JSONObject reverseParams = new JSONObject(); + reverseParams.put("app_id", AdapayConfig.getAppId(deptId)); + reverseParams.put("payment_id", paymentId); + reverseParams.put("reverse_amt", reverseAmt); + reverseParams.put("notify_url", adapayProperties.getNotifyUrl()); + reverseParams.put("order_no", "PAYMENT_REVERSE" + System.currentTimeMillis()); + JSONObject response = (JSONObject) PaymentReverse.create(reverseParams); + payReverseCallbackService.onResponse(response); + return response; + } + } \ No newline at end of file diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/CallBackService.java b/ghy-payment/src/main/java/com/ghy/payment/service/CallBackService.java index c4fa79b5..0837957c 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/CallBackService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/CallBackService.java @@ -1,16 +1,10 @@ package com.ghy.payment.service; import com.alibaba.fastjson.JSONObject; -import com.ghy.common.adapay.callback.Event; - -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; +import com.ghy.common.adapay.model.Event; public interface CallBackService { - public final static ConcurrentMap> resultCallBackMap = new ConcurrentHashMap<>(1024); - /** * @param event 回调 */ 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 969f75ef..db2e00f7 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 @@ -76,4 +76,11 @@ public interface FinancialMasterService { * @param payment 支付对象 */ int updatePayment(PaymentDTO payment); + + /** + * 用交易ID查询交易记录 + * + * @param id 交易ID + */ + PaymentDTO selectPaymentById(String id); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/DrawCashCallBackServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/DrawCashCallBackServiceImpl.java deleted file mode 100644 index 1218a11b..00000000 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/DrawCashCallBackServiceImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ghy.payment.service.impl; - -import com.alibaba.fastjson.JSONObject; -import com.ghy.common.adapay.callback.Event; -import com.ghy.payment.service.CallBackService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; - - -@Service("drawCashCallBackService") -public class DrawCashCallBackServiceImpl implements CallBackService { - - private static Logger logger = LoggerFactory.getLogger(DrawCashCallBackServiceImpl.class); - - private final static List drawCashList = new ArrayList<>(1024); - - /** - * 临时保存支付结果 - * key: orderNo - * value: 处理支付结果的回调接口 - */ - - @Override - public void onCallback(Event event) { - logger.info("draw callback is {}", event.toString()); - } - - @Override - public void onResponse(JSONObject response) { - logger.info("draw response is {}", response.toString()); - } - -} diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/DrawCashCallbackService.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/DrawCashCallbackService.java new file mode 100644 index 00000000..e9df8896 --- /dev/null +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/DrawCashCallbackService.java @@ -0,0 +1,30 @@ +package com.ghy.payment.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.ghy.common.adapay.model.Event; +import com.ghy.payment.service.CallBackService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +/** + * 提现回调 + * + * @author HH 2022/5/30 + */ +@Service("drawCashCallbackService") +public class DrawCashCallbackService implements CallBackService { + + private static final Logger logger = LoggerFactory.getLogger(DrawCashCallbackService.class); + + @Override + public void onCallback(Event event) { + logger.info("提现 callback: {}", event.toString()); + } + + @Override + public void onResponse(JSONObject response) { + logger.info("提现 response: {}", response.toString()); + } + +} 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 7b30f0c7..28117449 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 @@ -76,7 +76,7 @@ public class FinancialMasterServiceImpl implements FinancialMasterService { public void paySucceeded(String orderNo, String payChannel) { try { financialMasterMapper.paySucceeded(orderNo, PayTypeEnum.valueOf(payChannel.toUpperCase()).getCode()); - }catch (IllegalArgumentException e){ + } catch (IllegalArgumentException e) { logger.warn("OrderNo[{}] Unknown payChannel [{}]!", orderNo, payChannel); } } @@ -103,4 +103,9 @@ public class FinancialMasterServiceImpl implements FinancialMasterService { return paymentMapper.updatePayment(payment); } + @Override + public PaymentDTO selectPaymentById(String id) { + return paymentMapper.selectById(id); + } + } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallBackServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java similarity index 71% rename from ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallBackServiceImpl.java rename to ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java index e32c334e..64f2f62f 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallBackServiceImpl.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java @@ -2,7 +2,7 @@ package com.ghy.payment.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.ghy.common.adapay.callback.Event; +import com.ghy.common.adapay.model.Event; import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.adapay.model.PayReply; import com.ghy.common.adapay.model.PaymentDTO; @@ -15,41 +15,54 @@ import org.springframework.stereotype.Service; import org.springframework.util.Assert; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; -@Service("payCallBackService") -public class PayCallBackServiceImpl implements CallBackService { +/** + * 支付回调 + * + * @author HH 2022/5/31 + */ +@Service("payCallbackService") +public class PayCallbackService implements CallBackService { - private static Logger logger = LoggerFactory.getLogger(PayCallBackServiceImpl.class); + private static final Logger logger = LoggerFactory.getLogger(PayCallbackService.class); - private final static List payList = new ArrayList<>(1024); + // 用HashSet检索效率高 + private final static HashSet orderNoSet = new HashSet<>(1024); @Resource FinancialMasterService financialMasterService; @Override public void onCallback(Event event) { + logger.debug("pay callback is {}", event); String data = event.getData(); PayReply payment = JSON.parseObject(data, PayReply.class); Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!"); // 校验是否是本系统发出去的回调请求 - if(payList.contains(payment.getOrderNo())){ + boolean ours = orderNoSet.remove(payment.getOrderNo()); + if (!ours) { + //如果内存里没有 就从数据库里找这条记录 + PaymentDTO dto = financialMasterService.selectPaymentById(payment.getId()); + ours = dto != null; + } + if (ours) { // 更新交易记录 PaymentDTO param = new PaymentDTO(); param.setId(payment.getId()); param.setStatus(payment.getStatus()); param.setPayTime(payment.getPayTime()); financialMasterService.updatePayment(param); - + if (AdapayStatusEnum.succeeded.code.equals(payment.getStatus())) { // 修改主财务单状态 financialMasterService.paySucceeded(payment.getOrderNo(), payment.getPayChannel()); } else { logger.warn("支付失败 : {}", payment); } + } else { + logger.warn("系统中不存在这条交易记录: {}", event); } - logger.info("pay callback is {}", event.toString()); } @Override @@ -67,10 +80,8 @@ public class PayCallBackServiceImpl implements CallBackService { } else { logger.warn("请求支付失败 : {}", response.toJSONString()); } - // 将记录保存到临时会话中 - payList.add(response.getString("order_no")); - resultCallBackMap.put("pay", payList); + orderNoSet.add(response.getString("order_no")); } } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayReverseCallbackService.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayReverseCallbackService.java new file mode 100644 index 00000000..7ebee80d --- /dev/null +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayReverseCallbackService.java @@ -0,0 +1,29 @@ +package com.ghy.payment.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.ghy.common.adapay.model.Event; +import com.ghy.payment.service.CallBackService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +/** + * 撤销支付回调 + * + * @author HH 2022/5/31 + */ +@Service("payReverseCallbackService") +public class PayReverseCallbackService implements CallBackService { + + private static final Logger logger = LoggerFactory.getLogger(PayReverseCallbackService.class); + + @Override + public void onCallback(Event event) { + logger.debug("撤销支付 callback: {}", event.toString()); + } + + @Override + public void onResponse(JSONObject response) { + logger.debug("撤销支付 Response: {}", response.toString()); + } +} diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/RefundCallBackServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/RefundCallBackServiceImpl.java deleted file mode 100644 index 1937a771..00000000 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/RefundCallBackServiceImpl.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ghy.payment.service.impl; - -import com.alibaba.fastjson.JSONObject; -import com.ghy.common.adapay.callback.Event; -import com.ghy.payment.service.CallBackService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -@Service("refundCallBackService") -public class RefundCallBackServiceImpl implements CallBackService { - - private static Logger logger = LoggerFactory.getLogger(RefundCallBackServiceImpl.class); - - @Override - public void onCallback(Event event) { - logger.info("refund callback is {}", event.toString()); - } - - @Override - public void onResponse(JSONObject response) { - logger.info("refund response is {}", response.toString()); - } - -} diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/RefundCallbackService.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/RefundCallbackService.java new file mode 100644 index 00000000..5b1477b2 --- /dev/null +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/RefundCallbackService.java @@ -0,0 +1,30 @@ +package com.ghy.payment.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.ghy.common.adapay.model.Event; +import com.ghy.payment.service.CallBackService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +/** + * 退款回调 + * + * @author HH 2022/5/30 + */ +@Service("refundCallbackService") +public class RefundCallbackService implements CallBackService { + + private static final Logger logger = LoggerFactory.getLogger(RefundCallbackService.class); + + @Override + public void onCallback(Event event) { + logger.debug("退款 callback: {}", event.toString()); + } + + @Override + public void onResponse(JSONObject response) { + logger.debug("退款 Response: {}", response.toString()); + } + +} diff --git a/ghy-payment/src/main/resources/mapper/payment/PaymentMapper.xml b/ghy-payment/src/main/resources/mapper/payment/PaymentMapper.xml index 127b9495..f445affc 100644 --- a/ghy-payment/src/main/resources/mapper/payment/PaymentMapper.xml +++ b/ghy-payment/src/main/resources/mapper/payment/PaymentMapper.xml @@ -2,7 +2,7 @@ - + @@ -16,7 +16,7 @@ - + SELECT id, order_no, prod_mode, app_id, pay_channel, pay_amt, party_order_id, query_url, currency, status, pay_time, created_time, update_time FROM adapay_pay_log @@ -58,4 +58,8 @@ WHERE id = #{id} + + \ No newline at end of file From ca4773db9919ce63571ae2dbee39d3c6135168eb Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Tue, 31 May 2022 23:27:30 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E5=95=86=E5=93=81+=E8=BD=AC=E6=B4=BE=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/goods/GoodsController.java | 1 + .../web/controller/order/OrderController.java | 10 +++ .../com/ghy/goods/mapper/GoodsAreaMapper.java | 3 +- .../com/ghy/goods/mapper/GoodsImgsMapper.java | 2 +- .../ghy/goods/mapper/GoodsStandardMapper.java | 3 +- .../ghy/goods/service/GoodsImgsService.java | 2 +- .../service/impl/GoodsAreaServiceImpl.java | 1 + .../service/impl/GoodsImgsServiceImpl.java | 3 +- .../mapper/goods/GoodsAreaMapper.xml | 17 ++-- .../mapper/goods/GoodsImgsMapper.xml | 47 +++++----- .../mapper/goods/GoodsStandardMapper.xml | 88 +++++++++---------- 11 files changed, 90 insertions(+), 87 deletions(-) diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/goods/GoodsController.java b/ghy-admin/src/main/java/com/ghy/web/controller/goods/GoodsController.java index 0c9ba4dc..a0e57b9b 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/goods/GoodsController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/goods/GoodsController.java @@ -68,6 +68,7 @@ public class GoodsController extends BaseController { goodsService.addGoods(goods); return AjaxResult.success("新增成功"); }catch (Exception e){ + e.printStackTrace(); logger.error(e.getMessage()); return AjaxResult.error(ExceptionUtil.getExceptionMessage(e)); } diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java index fea09019..6c99805d 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java @@ -108,6 +108,16 @@ public class OrderController extends BaseController { od.setRevTime(new Date()); orderDetailService.insertOrderDetail(od); + // 批量生成订单商品 + request.getGoodsList().forEach(goods->{ + OrderGoods orderGoods = new OrderGoods(); + orderGoods.setGoodsId(goods.getGoodsStandardId()); + orderGoods.setGoodsNum(goods.getNum()); + orderGoods.setOrderId(od.getId()); + orderGoods.setServerGoodsNum(0); + orderGoodsService.insertOrderGoods(orderGoods); + }); + String leaderTeamMoney = assignWorker.getLeaderTeamMoney(); String leaderTeamRate = assignWorker.getLeaderTeamRate(); // 派单师傅的钱 diff --git a/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsAreaMapper.java b/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsAreaMapper.java index b938c711..d540ff15 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsAreaMapper.java +++ b/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsAreaMapper.java @@ -1,6 +1,7 @@ package com.ghy.goods.mapper; import com.ghy.goods.domain.GoodsArea; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -16,6 +17,6 @@ public interface GoodsAreaMapper { * @param areas 区域集合id * @return 批量insert成功条数 */ - int batchInsert(List areas); + int batchInsert(@Param("areas") List areas); } diff --git a/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsImgsMapper.java b/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsImgsMapper.java index f9668636..345384cf 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsImgsMapper.java +++ b/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsImgsMapper.java @@ -18,7 +18,7 @@ public interface GoodsImgsMapper { * @param goodsImgs 商品图片信息 * @return 成功条数 */ - int batchInsert(Collection goodsImgs); + int batchInsert(@Param("goodsImgs") List goodsImgs); /** * 批量修改商品图片 diff --git a/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsStandardMapper.java b/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsStandardMapper.java index a5c83483..79ca2aec 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsStandardMapper.java +++ b/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsStandardMapper.java @@ -2,6 +2,7 @@ package com.ghy.goods.mapper; import com.ghy.goods.domain.GoodsStandard; import com.ghy.goods.request.AppGoodsRequest; +import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; @@ -34,7 +35,7 @@ public interface GoodsStandardMapper { * @param goodsStandardList 批量添加商品规格 * @return 添加成功条数 */ - int batchInsert(List goodsStandardList); + int batchInsert(@Param("goodsStandards") List goodsStandardList); /** * @param request 校验的商品数量 diff --git a/ghy-goods/src/main/java/com/ghy/goods/service/GoodsImgsService.java b/ghy-goods/src/main/java/com/ghy/goods/service/GoodsImgsService.java index 71b20c03..f317319a 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/service/GoodsImgsService.java +++ b/ghy-goods/src/main/java/com/ghy/goods/service/GoodsImgsService.java @@ -17,7 +17,7 @@ public interface GoodsImgsService { * @param goodsImgs 商品图片信息 * @return */ - int batchInsert(Collection goodsImgs); + int batchInsert(List goodsImgs); /** * 批量编辑商品图片信息 diff --git a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsAreaServiceImpl.java b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsAreaServiceImpl.java index cb87d8ce..d9bc8ddc 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsAreaServiceImpl.java +++ b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsAreaServiceImpl.java @@ -4,6 +4,7 @@ import com.ghy.goods.domain.GoodsArea; import com.ghy.goods.mapper.GoodsAreaMapper; import com.ghy.goods.service.GoodsAreaService; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Service; import javax.annotation.Resource; diff --git a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsImgsServiceImpl.java b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsImgsServiceImpl.java index 5fb1c795..7d672e5a 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsImgsServiceImpl.java +++ b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsImgsServiceImpl.java @@ -23,8 +23,7 @@ public class GoodsImgsServiceImpl implements GoodsImgsService { GoodsImgsMapper goodsImgsMapper; @Override - public int batchInsert(Collection goodsImgs) { - if (CollectionUtils.isEmpty(goodsImgs)) return 0; + public int batchInsert(List goodsImgs) { return goodsImgsMapper.batchInsert(goodsImgs); } diff --git a/ghy-goods/src/main/resources/mapper/goods/GoodsAreaMapper.xml b/ghy-goods/src/main/resources/mapper/goods/GoodsAreaMapper.xml index c795710a..970f9de2 100644 --- a/ghy-goods/src/main/resources/mapper/goods/GoodsAreaMapper.xml +++ b/ghy-goods/src/main/resources/mapper/goods/GoodsAreaMapper.xml @@ -24,18 +24,11 @@ - - - INSERT INTO goods_imgs( - goods_imgs_id, - goods_id, - img_url - ) - VALUES( - #{goodsImgsId}, - #{goodsId}, - #{imgUrl} - ); + + INSERT INTO goods_area ( goods_id,country_area_id) + VALUES + + (#{area.goodsId},#{area.countryAreaId}) diff --git a/ghy-goods/src/main/resources/mapper/goods/GoodsImgsMapper.xml b/ghy-goods/src/main/resources/mapper/goods/GoodsImgsMapper.xml index 7ffa6c67..1e35c2a8 100644 --- a/ghy-goods/src/main/resources/mapper/goods/GoodsImgsMapper.xml +++ b/ghy-goods/src/main/resources/mapper/goods/GoodsImgsMapper.xml @@ -3,10 +3,10 @@ - - - - + + + + @@ -22,7 +22,9 @@ - DELETE FROM goods_imgs WHERE goods_id = #{goodsId} + DELETE + FROM goods_imgs + WHERE goods_id = #{goodsId} - - - INSERT INTO goods_imgs( - goods_imgs_id, - goods_id, - img_url, - remark, - create_by, - create_time) - VALUES( - #{goodsImgsId}, - #{goodsId}, - #{imgUrl}, - #{remark}, - #{createBy}, - sysdate()); + + INSERT INTO + goods_imgs + ( + goods_id, + img_url, + remark, + create_by, + create_time + ) + VALUES + + ( + #{goodsImg.goodsId}, + #{goodsImg.imgUrl}, + #{goodsImg.remark}, + #{goodsImg.createBy}, + sysdate() + ) diff --git a/ghy-goods/src/main/resources/mapper/goods/GoodsStandardMapper.xml b/ghy-goods/src/main/resources/mapper/goods/GoodsStandardMapper.xml index e8723236..d050bd7e 100644 --- a/ghy-goods/src/main/resources/mapper/goods/GoodsStandardMapper.xml +++ b/ghy-goods/src/main/resources/mapper/goods/GoodsStandardMapper.xml @@ -3,31 +3,43 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - SELECT goods_standard_id, goods_standard_name, goods_id, dept_goods_category_id, goods_price, - discount_price, group_price, goods_num, create_by, create_time, sale_num, status, update_by, update_time, + SELECT goods_standard_id, + goods_standard_name, + goods_id, + dept_goods_category_id, + goods_price, + discount_price, + group_price, + goods_num, + create_by, + create_time, + sale_num, + status, + update_by, + update_time, remark FROM goods_standard - + - - - INSERT INTO goods_standard( - goods_standard_name, - goods_id, - dept_goods_category_id - goods_price, - discount_price, - group_price, - goods_num, - sale_num, - status, - remark, - create_by, - create_time + + INSERT INTO goods_standard ( + goods_standard_name, goods_id, dept_goods_category_id, goods_price, discount_price, group_price, goods_num, + sale_num, status, remark, create_by, create_time ) + VALUES + + ( + #{goodsStandard.goodsStandardName}, #{goodsStandard.goodsId}, #{goodsStandard.deptGoodsCategoryId}, #{goodsStandard.goodsPrice}, #{goodsStandard.discountPrice}, + #{goodsStandard.groupPrice}, #{goodsStandard.goodsNum}, #{goodsStandard.saleNum}, #{goodsStandard.status}, #{goodsStandard.remark}, #{goodsStandard.createBy}, sysdate() ) - VALUES( - #{goodsStandardName}, - #{goodsId}, - #{deptGoodsCategoryId} - #{goodsPrice}, - #{discountPrice}, - #{groupPrice}, - #{goodsNum}, - #{saleNum}, - #{status}, - #{remark}, - #{createBy}, - sysdate() - ); - +