From cfbc5aee585d29c940001dfb3974c5d19bd45dce Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 11:44:32 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ghy/web/controller/order/OrderMasterController.java | 2 -- .../com/ghy/order/service/impl/OrderMasterServiceImpl.java | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java index 939bec47..643df426 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java @@ -36,7 +36,6 @@ import com.ghy.worker.domain.WorkerCertification; import com.ghy.worker.service.IWorkerCertificationService; import com.ghy.worker.service.WorkerService; import com.huifu.adapay.core.exception.BaseAdaPayException; -import lombok.RequiredArgsConstructor; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -55,7 +54,6 @@ import java.util.List; */ @Controller @RequestMapping("/order/master") -@RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class OrderMasterController extends BaseController { private final String prefix = "order/master"; diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index a3b93a98..f24d9412 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -78,6 +78,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { @Override public int updateOrderMaster(OrderMaster orderMaster) throws BaseAdaPayException { if (orderMaster.getOrderStatus().equals(OrderStatus.FINISH.code())) { + logger.info("订单[{}]完成,进入确认分账", orderMaster.getCode()); confirm(orderMaster.getId()); } return orderMasterMapper.updateOrderMaster(orderMaster); @@ -137,6 +138,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { Assert.notNull(payment, "找不到支付记录"); if (BigDecimal.ZERO.compareTo(financialMaster.getPayMoney()) < 0) { + logger.info("订单[{}]支付金额<=0,不需要分账", orderMaster.getCode()); // 支付金额<=0的话 不需要走下面的流程了 return; } @@ -192,11 +194,13 @@ public class OrderMasterServiceImpl implements OrderMasterService { JSONObject response = adapayService.paymentConfirm(orderMaster.getDeptId(), payment.getId(), payment.getOrderNo(), AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null); + logger.info("订单[{}]分账结果: {}", orderMaster.getCode(), response.toJSONString()); boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status")); // 如果确认支付失败 这里抛出异常 Assert.isTrue(status, response.getString("error_msg")); // 走到这里确认支付和分账都成功了 异步进入自动提现流程 + logger.info("订单[{}]开始自动提现", orderMaster.getCode()); autoDrawCashMembers.forEach(member -> executor.execute(() -> { String memberId = member.getMemberId(); String amount = member.getAmount(); From fbf122b9b2a2058aaefc195d573ee5e385206527 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 13:33:42 +0800 Subject: [PATCH 02/13] =?UTF-8?q?payment=5Fid=E6=B2=A1=E6=9C=89=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=88=B0financial=5Fmaster=E8=A1=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ghy/common/enums/AdapayOrderType.java | 1 + .../ghy/order/service/impl/OrderMasterServiceImpl.java | 8 ++++---- .../com/ghy/payment/service/impl/PayCallbackService.java | 7 ++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ghy-common/src/main/java/com/ghy/common/enums/AdapayOrderType.java b/ghy-common/src/main/java/com/ghy/common/enums/AdapayOrderType.java index 4adeb32e..6ef7e7d1 100644 --- a/ghy-common/src/main/java/com/ghy/common/enums/AdapayOrderType.java +++ b/ghy-common/src/main/java/com/ghy/common/enums/AdapayOrderType.java @@ -3,6 +3,7 @@ package com.ghy.common.enums; public enum AdapayOrderType { PAY("PAY", "支付"), + REFUND("REFUND", "退款"), DRAW_CASH("DRAW_CASH", "提现"), PAYMENT_CONFIRM("PAYMENT_CONFIRM", "确认支付"); diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index f24d9412..b199f660 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -78,7 +78,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { @Override public int updateOrderMaster(OrderMaster orderMaster) throws BaseAdaPayException { if (orderMaster.getOrderStatus().equals(OrderStatus.FINISH.code())) { - logger.info("订单[{}]完成,进入确认分账", orderMaster.getCode()); + logger.info("订单[ID={}]完成,进入确认分账", orderMaster.getId()); confirm(orderMaster.getId()); } return orderMasterMapper.updateOrderMaster(orderMaster); @@ -138,7 +138,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { Assert.notNull(payment, "找不到支付记录"); if (BigDecimal.ZERO.compareTo(financialMaster.getPayMoney()) < 0) { - logger.info("订单[{}]支付金额<=0,不需要分账", orderMaster.getCode()); + logger.info("订单[code={}]支付金额<=0,不需要分账", orderMaster.getCode()); // 支付金额<=0的话 不需要走下面的流程了 return; } @@ -194,13 +194,13 @@ public class OrderMasterServiceImpl implements OrderMasterService { JSONObject response = adapayService.paymentConfirm(orderMaster.getDeptId(), payment.getId(), payment.getOrderNo(), AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null); - logger.info("订单[{}]分账结果: {}", orderMaster.getCode(), response.toJSONString()); + logger.info("订单[code={}]分账结果: {}", orderMaster.getCode(), response.toJSONString()); boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status")); // 如果确认支付失败 这里抛出异常 Assert.isTrue(status, response.getString("error_msg")); // 走到这里确认支付和分账都成功了 异步进入自动提现流程 - logger.info("订单[{}]开始自动提现", orderMaster.getCode()); + logger.info("订单[code={}]开始自动提现", orderMaster.getCode()); autoDrawCashMembers.forEach(member -> executor.execute(() -> { String memberId = member.getMemberId(); String amount = member.getAmount(); 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 9ff04e86..29446a34 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 @@ -69,13 +69,14 @@ public class PayCallbackService implements CallBackService { public void onResponse(JSONObject response) { // 保存一条支付记录 PaymentDTO payment = response.toJavaObject(PaymentDTO.class); + String status = payment.getStatus(); payment.setStatus("pending"); financialMasterService.insertPayment(payment); - if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { + if (AdapayStatusEnum.succeeded.code.equals(status)) { FinancialMaster update = new FinancialMaster(); - update.setOrderMasterCode(response.getString("order_no")); - update.setPaymentId(response.getString("id")); + update.setOrderMasterCode(payment.getOrderNo()); + update.setPaymentId(payment.getId()); financialMasterService.updateFinancialMaster(update); } else { logger.warn("请求支付失败 : {}", response.toJSONString()); From 9b8781a87b6c3acc8769e52ba55cc82a8cf2e276 Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Thu, 21 Jul 2022 14:11:51 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E5=A4=B4=E5=83=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/templates/customer/customer.html | 12 ++++++++---- .../src/main/resources/templates/worker/worker.html | 5 ++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/ghy-admin/src/main/resources/templates/customer/customer.html b/ghy-admin/src/main/resources/templates/customer/customer.html index e68a61bb..4cfb43c6 100644 --- a/ghy-admin/src/main/resources/templates/customer/customer.html +++ b/ghy-admin/src/main/resources/templates/customer/customer.html @@ -125,7 +125,12 @@ }, { field: 'customerLogoUrl', - title: '头像' + title: '头像', + formatter: function(value, row, index) { + var actions = []; + actions.push('消费者头像'); + return actions.join(''); + } }, { visible: editFlag == 'hidden' ? false : true, @@ -146,7 +151,6 @@ formatter: function(value, row, index) { if (row.customerId != 1) { var actions = []; - actions.push("重置密码 "); actions.push('删除 '); return actions.join(''); } else { @@ -169,9 +173,9 @@ /* 用户状态显示 */ function statusTools(row) { if (row.status == 0) { - return ' '; - } else { return ' '; + } else { + return ' '; } } diff --git a/ghy-admin/src/main/resources/templates/worker/worker.html b/ghy-admin/src/main/resources/templates/worker/worker.html index bb63c507..8117e335 100644 --- a/ghy-admin/src/main/resources/templates/worker/worker.html +++ b/ghy-admin/src/main/resources/templates/worker/worker.html @@ -152,7 +152,6 @@ formatter: function(value, row, index) { if (row.workerId != 1) { var actions = []; - actions.push("重置密码 "); actions.push('删除 '); return actions.join(''); } else { @@ -175,9 +174,9 @@ /* 用户状态显示 */ function statusTools(row) { if (row.status == 0) { - return ' '; - } else { return ' '; + } else { + return ' '; } } From 2113e902e7cb611f886c24a55a223a729fba89a1 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 14:12:01 +0800 Subject: [PATCH 04/13] =?UTF-8?q?payment=5Fid=E6=B2=A1=E6=9C=89=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=88=B0financial=5Fmaster=E8=A1=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ghy/payment/service/FinancialMasterService.java | 6 +++--- .../service/impl/FinancialMasterServiceImpl.java | 12 +++++------- .../ghy/payment/service/impl/PayCallbackService.java | 10 +++++----- 3 files changed, 13 insertions(+), 15 deletions(-) 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 f4ec6416..24b273f2 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 orderNo 订单号 - * @param payChannel 支付渠道 + * @param orderMasterCode 主订单号 + * @param payChannel 支付渠道 */ - void paySucceeded(String orderNo, String payChannel); + void paySucceeded(String orderMasterCode, 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 bfe86534..47af1757 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 @@ -74,15 +74,13 @@ public class FinancialMasterServiceImpl implements FinancialMasterService { } @Override - public void paySucceeded(String orderNo, String payChannel) { + public void paySucceeded(String orderMasterCode, String payChannel) { try { - if(orderNo.contains("_")){ - orderNo = orderNo.split("_")[0]; - } - financialMasterMapper.paySucceeded(orderNo, PayTypeEnum.valueOf(payChannel.toUpperCase()).getCode()); - financialMasterMapper.updateOrderStatus(orderNo, PayStatus.PAID.getCode()); + + financialMasterMapper.paySucceeded(orderMasterCode, PayTypeEnum.valueOf(payChannel.toUpperCase()).getCode()); + financialMasterMapper.updateOrderStatus(orderMasterCode, PayStatus.PAID.getCode()); } catch (IllegalArgumentException e) { - logger.warn("OrderNo[{}] Unknown payChannel [{}]!", orderNo, payChannel); + logger.warn("OrderNo[{}] Unknown payChannel [{}]!", orderMasterCode, payChannel); } } 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 29446a34..0480be8a 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 @@ -35,7 +35,7 @@ public class PayCallbackService implements CallBackService { @Override public void onCallback(Event event) { - logger.debug("pay callback is {}", event); + logger.info("pay callback is {}", event); String data = event.getData(); PayCallback payment = JSON.parseObject(data, PayCallback.class); Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!"); @@ -51,12 +51,12 @@ public class PayCallbackService implements CallBackService { PaymentDTO param = new PaymentDTO(); param.setId(payment.getId()); param.setStatus(payment.getStatus()); - param.setPayTime(payment.getPayTime()); + param.setPayTime(System.currentTimeMillis()); financialMasterService.updatePayment(param); if (AdapayStatusEnum.succeeded.code.equals(payment.getStatus())) { // 修改主财务单状态 - financialMasterService.paySucceeded(payment.getOrderNo(), payment.getPayChannel()); + financialMasterService.paySucceeded(payment.getOrderNo().split("_")[0], payment.getPayChannel()); } else { logger.warn("支付失败 : {}", payment); } @@ -67,15 +67,15 @@ public class PayCallbackService implements CallBackService { @Override public void onResponse(JSONObject response) { + logger.info("支付结果: {}", response.toJSONString()); // 保存一条支付记录 PaymentDTO payment = response.toJavaObject(PaymentDTO.class); String status = payment.getStatus(); - payment.setStatus("pending"); financialMasterService.insertPayment(payment); if (AdapayStatusEnum.succeeded.code.equals(status)) { FinancialMaster update = new FinancialMaster(); - update.setOrderMasterCode(payment.getOrderNo()); + update.setOrderMasterCode(payment.getOrderNo().split("_")[0]); update.setPaymentId(payment.getId()); financialMasterService.updateFinancialMaster(update); } else { From d37f005b8db87c18098537bab0b18f7107aa00f5 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 15:12:41 +0800 Subject: [PATCH 05/13] =?UTF-8?q?payment=5Fid=E6=B2=A1=E6=9C=89=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=88=B0financial=5Fmaster=E8=A1=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E4=BB=A5=E5=8F=8A=E5=A4=84=E7=90=86=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=9B=9E=E8=B0=83=E4=B8=AD=20=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=8D=95=E3=80=81=E8=B4=A2=E5=8A=A1=E5=8D=95=E3=80=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ghy/common/adapay/model/PayCallback.java | 4 --- .../ghy/common/adapay/model/PaymentDTO.java | 6 ++++ .../payment/mapper/FinancialMasterMapper.java | 12 ++++---- .../service/FinancialMasterService.java | 6 ++-- .../impl/FinancialMasterServiceImpl.java | 17 +++++------ .../service/impl/PayCallbackService.java | 30 ++++++------------- .../financial/FinancialMasterMapper.xml | 4 +-- 7 files changed, 34 insertions(+), 45 deletions(-) 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} From 67621c8250839ef7522aa3fc39dbf913cc0a95a9 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 15:47:50 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E4=B8=AD=20=E6=94=AF=E4=BB=98=E5=8D=95?= =?UTF-8?q?=E3=80=81=E8=B4=A2=E5=8A=A1=E5=8D=95=E3=80=81=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ghy/common/adapay/model/PaymentDTO.java | 4 +++- .../java/com/ghy/payment/service/impl/PayCallbackService.java | 3 ++- .../src/main/resources/mapper/payment/PaymentMapper.xml | 2 +- pom.xml | 2 ++ 4 files changed, 8 insertions(+), 3 deletions(-) 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 7ea5882a..78942673 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 @@ -5,6 +5,8 @@ import com.huifu.adapay.model.Payment; import lombok.Data; import lombok.EqualsAndHashCode; +import java.time.LocalDateTime; + @Data @EqualsAndHashCode(callSuper = true) public class PaymentDTO extends Payment { @@ -29,5 +31,5 @@ public class PaymentDTO extends Payment { /** * 支付时间 */ - private Long payTime; + private LocalDateTime payTime; } 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 a70735f6..8096e201 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 @@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDateTime; /** * 支付回调 @@ -41,7 +42,7 @@ public class PayCallbackService implements CallBackService { param.setId(payment.getId()); param.setFeeAmt(payment.getFeeAmt()); param.setStatus(payment.getStatus()); - param.setPayTime(System.currentTimeMillis()); + param.setPayTime(LocalDateTime.now()); financialMasterService.updatePayment(param); if (AdapayStatusEnum.succeeded.code.equals(payment.getStatus())) { diff --git a/ghy-payment/src/main/resources/mapper/payment/PaymentMapper.xml b/ghy-payment/src/main/resources/mapper/payment/PaymentMapper.xml index f445affc..2a2b8499 100644 --- a/ghy-payment/src/main/resources/mapper/payment/PaymentMapper.xml +++ b/ghy-payment/src/main/resources/mapper/payment/PaymentMapper.xml @@ -52,7 +52,7 @@ UPDATE adapay_pay_log status = #{status}, - pay_time = #{payTime}, + pay_time = #{payTime}, update_time = SYSDATE() WHERE id = #{id} diff --git a/pom.xml b/pom.xml index 3ba85311..929f5f9f 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,8 @@ 1.2.10 1.10 4.5.13 + + true From 90c5d83da92358989cd75db4389e232634b70989 Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Thu, 21 Jul 2022 16:20:56 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=98=AF=E6=9C=AC?= =?UTF-8?q?=E4=BA=BA=E6=8E=A5=E5=8D=95=EF=BC=8C=E5=88=99=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=89=A9=E4=BD=99=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ghy/web/controller/order/OrderController.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 ea3caea9..6202b7d4 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 @@ -133,6 +133,13 @@ public class OrderController extends BaseController { if(!om.getWorkerId().equals(request.getWorkerId())){ boolean checkInTeam = workerService.checkInTeam(assignWorker.getWorkerId(), acceptWorker.getWorkerId()); Assert.isTrue(checkInTeam, "接单师傅不在本团队"); + }else { + // 自己接单 -- 计算剩余金额 + BigDecimal realPay = fm.getPayMoney(); + for (FinancialDetail financialDetail : financialDetailService.selectByFinancialMasterId(fm.getId())) { + realPay = realPay.subtract(financialDetail.getPayMoney()); + } + request.setTotalPay(realPay); } // 判断是否全部派完 From 40222ba23963b2de5bb025e18624714f04df1499 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 16:33:27 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E5=88=86=E8=B4=A6?= =?UTF-8?q?=E6=97=B6=E5=90=88=E5=B9=B6=E5=90=8C=E4=B8=80=E4=B8=AA=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E7=9A=84=E5=A4=9A=E4=B8=AA=E5=AD=90=E8=B4=A2=E5=8A=A1?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OrderMasterServiceImpl.java | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index b199f660..e4ff4008 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -29,9 +29,7 @@ import org.springframework.util.Assert; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.concurrent.atomic.AtomicLong; /** @@ -145,41 +143,33 @@ public class OrderMasterServiceImpl implements OrderMasterService { // 用子财务单组成分账信息 List financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId()); - // 分账账户 - ArrayList divMembers = new ArrayList<>(); - // 需要自动提现的账户 - ArrayList autoDrawCashMembers = new ArrayList<>(); // 校验金额 主财务单的金额减去所有子财务单的金额是否=0 BigDecimal checkMoney = financialMaster.getPayMoney(); // 确认支付金额 = 主财务单付款金额 - 退款金额 BigDecimal confirmAmt = financialMaster.getPayMoney(); + + // key:memberId(分账账户ID) value:分账金额 + HashMap memberMap = new HashMap<>(); + for (FinancialDetail financialDetail : financialDetails) { checkMoney = checkMoney.subtract(financialDetail.getPayMoney()); - String memberId, amount; - DivMember member; + String memberId; switch (financialDetail.getFinancialDetailType()) { case 0: // 上门师傅结单 分账同下 case 1: // 大师傅/店铺提成 memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId()); - amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney()); - member = new DivMember(memberId, amount, false); - divMembers.add(member); - autoDrawCashMembers.add(member); + memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add); break; case 2: // 平台提成 并且是手续费承担方 - amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney()); - divMembers.add(new DivMember("0", amount, true)); + memberMap.merge("0", financialDetail.getPayMoney(), BigDecimal::add); break; case 3: // 分销 memberId = AdapayUtils.getCustomerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId()); - amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney()); - member = new DivMember(memberId, amount, false); - divMembers.add(member); - autoDrawCashMembers.add(member); + memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add); break; case 4: // 退款 @@ -192,6 +182,25 @@ public class OrderMasterServiceImpl implements OrderMasterService { // 这里校验一次主财务单的金额减去所有子财务单的金额是否=0 Assert.isTrue(BigDecimal.ZERO.compareTo(checkMoney) == 0, "订单异常,请稍后再试"); + // 分账账户 + ArrayList divMembers = new ArrayList<>(); + // 需要自动提现的账户 + ArrayList autoDrawCashMembers = new ArrayList<>(); + for (Map.Entry entry : memberMap.entrySet()) { + String memberId = entry.getKey(); + BigDecimal money = entry.getValue(); + String amount = AdapayUtils.bigDecimalToString(money); + if ("0".equals(memberId)) { + // 0是平台账户 只参与分账 不自动提现 + divMembers.add(new DivMember("0", amount, true)); + } else { + DivMember member = new DivMember(memberId, amount, false); + divMembers.add(member); + autoDrawCashMembers.add(member); + } + } + + JSONObject response = adapayService.paymentConfirm(orderMaster.getDeptId(), payment.getId(), payment.getOrderNo(), AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null); logger.info("订单[code={}]分账结果: {}", orderMaster.getCode(), response.toJSONString()); From dd477df952db50d337671ec3f144c82791acbf95 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 17:08:43 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E9=87=91=E9=A2=9D=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=94=99=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ghy/order/service/impl/OrderMasterServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index e4ff4008..eb652bf0 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -135,7 +135,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { PaymentDTO payment = financialMasterService.selectPaymentById(financialMaster.getPaymentId()); Assert.notNull(payment, "找不到支付记录"); - if (BigDecimal.ZERO.compareTo(financialMaster.getPayMoney()) < 0) { + if (BigDecimal.ZERO.compareTo(financialMaster.getPayMoney()) > -1) { logger.info("订单[code={}]支付金额<=0,不需要分账", orderMaster.getCode()); // 支付金额<=0的话 不需要走下面的流程了 return; From 13faf6690128018e33e706959ae43a03b8d4688e Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Thu, 21 Jul 2022 17:28:31 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E8=B4=A2=E5=8A=A1=E5=AD=90=E5=8D=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ghy/web/controller/order/OrderController.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 6202b7d4..064fa195 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 @@ -317,7 +317,7 @@ public class OrderController extends BaseController { BigDecimal deptTotal = payMoney.multiply(deptRate).add(deptMoney); FinancialDetail deptDetail = new FinancialDetail(deptId, financialDetailService.createCode(), - financialMaster.getId(), financialMaster.getCode(), deptTotal, 3, null); + financialMaster.getId(), financialMaster.getCode(), deptTotal, FinancialDetailType.PLATFORM_FEE.getCode(), null); financialDetailService.insertFinancialDetail(deptDetail); /* 2 截留扣点 */ @@ -327,7 +327,7 @@ public class OrderController extends BaseController { BigDecimal retainTotal = payMoney.multiply(retainRate).add(retainMoney); FinancialDetail retainDetail = new FinancialDetail(deptId, financialDetailService.createCode(), - financialMaster.getId(), financialMaster.getCode(), retainTotal, 2, null); + financialMaster.getId(), financialMaster.getCode(), retainTotal, FinancialDetailType.PLATFORM_FEE.getCode(), null); financialDetailService.insertFinancialDetail(retainDetail); /* 3 分销扣点 */ @@ -341,7 +341,7 @@ public class OrderController extends BaseController { // 一级分销 if (customerPlaceId != null) { FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(), - financialMaster.getId(), financialMaster.getCode(), onePlaceMoney, 2, customerPlaceId); + financialMaster.getId(), financialMaster.getCode(), onePlaceMoney, FinancialDetailType.PLACE_FEE.getCode(), customerPlaceId); financialDetailService.insertFinancialDetail(financialDetail); } else { deptPlaceTotal = deptPlaceTotal.add(onePlaceMoney); @@ -351,7 +351,7 @@ public class OrderController extends BaseController { Long parentCustomerPlaceId = customer.getParentCustomerPlace(); if (parentCustomerPlaceId != null) { FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(), - financialMaster.getId(), financialMaster.getCode(), twoPlaceMoney, 2, parentCustomerPlaceId); + financialMaster.getId(), financialMaster.getCode(), twoPlaceMoney, FinancialDetailType.PLACE_FEE.getCode(), parentCustomerPlaceId); financialDetailService.insertFinancialDetail(financialDetail); } else { deptPlaceTotal = deptPlaceTotal.add(twoPlaceMoney); @@ -360,7 +360,7 @@ public class OrderController extends BaseController { // 平台分销 deptPlaceTotal = deptPlaceTotal.add(threePlaceMoney); FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(), - financialMaster.getId(), financialMaster.getCode(), deptPlaceTotal, 2, null); + financialMaster.getId(), financialMaster.getCode(), deptPlaceTotal, FinancialDetailType.PLACE_FEE.getCode(), null); financialDetailService.insertFinancialDetail(financialDetail); } From f31426a97d7893e00fc98240abb73cbae0836687 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 18:09:26 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=88=86=E9=94=80=E4=BA=BA=E7=9A=84=E8=AF=9D=E5=88=86=E9=94=80?= =?UTF-8?q?=E6=8F=90=E6=88=90=E7=BB=99=E5=B9=B3=E5=8F=B0=EF=BC=9B=E6=8A=8A?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=9A=84=E6=94=AF=E4=BB=98=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=BB=B6=E8=BF=9F=E5=88=86=E8=B4=A6=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ghy/web/controller/pay/AlipayController.java | 4 ++-- .../ghy/web/controller/pay/WxPayController.java | 8 ++++---- .../com/ghy/common/adapay/model/PayParam.java | 2 +- .../service/impl/OrderMasterServiceImpl.java | 15 ++++++++++++--- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/pay/AlipayController.java b/ghy-admin/src/main/java/com/ghy/web/controller/pay/AlipayController.java index e4c2c792..469bab51 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/pay/AlipayController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/pay/AlipayController.java @@ -1,12 +1,12 @@ package com.ghy.web.controller.pay; -import com.ghy.payment.service.AdapayService; import com.ghy.common.adapay.model.PayParam; import com.ghy.common.core.controller.BaseController; import com.ghy.common.core.domain.AjaxResult; import com.ghy.order.domain.OrderMaster; import com.ghy.order.service.OrderMasterService; import com.ghy.payment.domain.FinancialMaster; +import com.ghy.payment.service.AdapayService; import com.ghy.payment.service.FinancialMasterService; import com.huifu.adapay.core.exception.BaseAdaPayException; import org.springframework.web.bind.annotation.PostMapping; @@ -50,7 +50,7 @@ public class AlipayController extends BaseController { Map map; String payMoney = fm.getPayMoney().setScale(2, BigDecimal.ROUND_UNNECESSARY).toString(); // TODO 这里需要补充商品标题和商品描述信息 - PayParam payParam = PayParam.createDelayPay(om.getCode() + "_" + System.currentTimeMillis(), "0.01", "商品标题", "商品描述信息"); + PayParam payParam = PayParam.delayPayParam(om.getCode() + "_" + System.currentTimeMillis(), "0.01", "商品标题", "商品描述信息"); try { map = adapayService.alipayQrPay(om.getDeptId(), payParam, null, null, null); } catch (BaseAdaPayException e) { diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/pay/WxPayController.java b/ghy-admin/src/main/java/com/ghy/web/controller/pay/WxPayController.java index dc787a3b..aa0856bd 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/pay/WxPayController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/pay/WxPayController.java @@ -39,7 +39,7 @@ public class WxPayController extends BaseController { @PostMapping("drawCash") @ResponseBody - public AjaxResult drawCash(@RequestBody JSONObject object){ + public AjaxResult drawCash(@RequestBody JSONObject object) { try { // 101 123dasda D0 1.00 C7D101 Long deptId = object.getLong("deptId"); @@ -50,7 +50,7 @@ public class WxPayController extends BaseController { String remark = object.getStr("remark"); adapayService.drawCash(deptId, orderNo, cashType, cashAmt, memberId, remark, null); return AjaxResult.success("操作成功"); - }catch (Exception e){ + } catch (Exception e) { return AjaxResult.error("操作失败"); } } @@ -74,7 +74,7 @@ public class WxPayController extends BaseController { List divMembers = new ArrayList<>(); divMembers.add(new DivMember("C7D101", String.valueOf(financialMaster.getPayMoney()), true)); // TODO 订单里需要补充支付金额、tittle、简要描述、分账信息、description - PayParam payParam = new PayParam(orderMaster.getCode() + "_" + System.currentTimeMillis(), + PayParam payParam = PayParam.delayPayParam(orderMaster.getCode() + "_" + System.currentTimeMillis(), String.valueOf(financialMaster.getPayMoney()), "工圈子居家设备", "工圈子居家设备购买付费"); map = adapayService.wxLitePay(orderMaster.getDeptId(), payParam, expend, null, null); } catch (BaseAdaPayException e) { @@ -107,7 +107,7 @@ public class WxPayController extends BaseController { WxpayExpend expend = new WxpayExpend(); expend.setOpenId(openId); Map map; - PayParam payParam = new PayParam(orderMaster.getCode(), "0.01", "工圈子测试", "工圈子测试描述"); + PayParam payParam = PayParam.delayPayParam(orderMaster.getCode(), "0.01", "工圈子测试", "工圈子测试描述"); map = adapayService.wxPubPay(orderMaster.getDeptId(), payParam, expend, null, null); return AjaxResult.success(map); } catch (Exception e) { diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/model/PayParam.java b/ghy-common/src/main/java/com/ghy/common/adapay/model/PayParam.java index 67955be1..3b86f10a 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/model/PayParam.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/model/PayParam.java @@ -90,7 +90,7 @@ public class PayParam { * @param goodsDesc [必填项]商品描述信息,微信小程序和微信公众号该字段最大长度42个字符 * @return 支付参数 */ - public static PayParam createDelayPay(String orderNo, String payAmt, String goodsTittle, String goodsDesc) { + public static PayParam delayPayParam(String orderNo, String payAmt, String goodsTittle, String goodsDesc) { PayParam payParam = new PayParam(orderNo, payAmt, goodsTittle, goodsDesc); payParam.setPayMode("delay"); return payParam; diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index eb652bf0..508dca89 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -1,5 +1,6 @@ package com.ghy.order.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.adapay.model.DivMember; @@ -168,8 +169,15 @@ public class OrderMasterServiceImpl implements OrderMasterService { break; case 3: // 分销 - memberId = AdapayUtils.getCustomerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId()); - memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add); + Long payeeId = financialDetail.getPayeeId(); + if (payeeId != null) { + memberId = AdapayUtils.getCustomerMemberId(payeeId, orderMaster.getDeptId()); + // 如果有分销人 那这笔钱就是分销人的 + memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add); + } else { + // 如果没有分销人 那这笔钱就分到平台账户 + memberMap.merge("0", financialDetail.getPayMoney(), BigDecimal::add); + } break; case 4: // 退款 @@ -200,10 +208,11 @@ public class OrderMasterServiceImpl implements OrderMasterService { } } - + logger.info("订单[code={}]分账信息: {}", orderMaster.getCode(), JSON.toJSONString(divMembers)); JSONObject response = adapayService.paymentConfirm(orderMaster.getDeptId(), payment.getId(), payment.getOrderNo(), AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null); logger.info("订单[code={}]分账结果: {}", orderMaster.getCode(), response.toJSONString()); + boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status")); // 如果确认支付失败 这里抛出异常 Assert.isTrue(status, response.getString("error_msg")); From 7a235f058a59e1fb398b7f9767aa7f236c6538b8 Mon Sep 17 00:00:00 2001 From: HH Date: Fri, 22 Jul 2022 16:16:41 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E4=B8=BB=E8=AE=A2=E5=8D=95=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E5=B9=B6=E5=8F=91=E8=B5=B7=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/OrderMasterController.java | 25 +++++ .../ghy/web/controller/pay/PayController.java | 10 -- .../com/ghy/common/enums/OrderStatus.java | 6 +- .../ghy/order/service/OrderMasterService.java | 17 +++- .../service/impl/OrderMasterServiceImpl.java | 91 ++++++++++++++++++- .../impl/PayReverseCallbackService.java | 2 +- 6 files changed, 136 insertions(+), 15 deletions(-) diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java index 643df426..8429e450 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java @@ -392,4 +392,29 @@ public class OrderMasterController extends BaseController { public String checkOrderMasterCodeUnique(OrderMaster orderMaster) { return orderMasterService.checkOrderMasterCodeUnique(orderMaster); } + + /** + * 消费者申请取消主订单 + * + * @param orderMasterId 主订单ID + */ + @PostMapping("/cancel") + @ResponseBody + public AjaxResult cancel(Long orderMasterId) { + orderMasterService.cancel(orderMasterId); + return AjaxResult.success(); + } + + /** + * 师傅审核取消主订单申请 + * + * @param orderMasterId 主订单ID + * @param agree 0=不同意 1=同意 + */ + @PostMapping("/cancel/agree") + @ResponseBody + public AjaxResult cancelAgree(Long orderMasterId, Integer agree) { + orderMasterService.cancelAgree(orderMasterId, agree); + return AjaxResult.success(); + } } diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/pay/PayController.java b/ghy-admin/src/main/java/com/ghy/web/controller/pay/PayController.java index e1e3c0ee..4aa9cbf8 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/pay/PayController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/pay/PayController.java @@ -36,16 +36,6 @@ public class PayController { @Resource private FinancialMasterService financialMasterService; - /** - * 确认支付 - * - * @param orderMasterId 主订单ID - */ - public AjaxResult confirm(Long orderMasterId) throws BaseAdaPayException { - orderMasterService.confirm(orderMasterId); - return AjaxResult.success(); - } - /** * 发起退款 * diff --git a/ghy-common/src/main/java/com/ghy/common/enums/OrderStatus.java b/ghy-common/src/main/java/com/ghy/common/enums/OrderStatus.java index f244cdb3..1c037297 100644 --- a/ghy-common/src/main/java/com/ghy/common/enums/OrderStatus.java +++ b/ghy-common/src/main/java/com/ghy/common/enums/OrderStatus.java @@ -7,12 +7,16 @@ import java.util.Map; import java.util.stream.Collectors; /** - * 订单状态 + * 订单状态 * * @author clunt */ public enum OrderStatus implements IEnumType { + GOING_CANCEL(-2, "待上门时申请取消"), + SERVER_CANCEL(-3, "服务中申请取消"), + FINISH_CHECK_CANCEL(-4, "待确认时申请取消"), + RECEIVE(0, "待接单"), PLAIN(1, "待排期"), GOING(2, "待上门"), diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java index b9417dfe..3d5432a4 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java @@ -83,7 +83,7 @@ public interface OrderMasterService { * * @param orderMasterId 主订单ID */ - void confirm(Long orderMasterId) throws BaseAdaPayException; + void finish(Long orderMasterId) throws BaseAdaPayException; /** * 发起提现 @@ -93,4 +93,19 @@ public interface OrderMasterService { * @param amount 提现金额 */ void drawCash(Long deptId, String memberId, String amount) throws BaseAdaPayException; + + /** + * 消费者申请取消主订单 + * + * @param orderMasterId 主订单ID + */ + void cancel(Long orderMasterId); + + /** + * 师傅同意取消主订单 + * + * @param orderMasterId 主订单ID + * @param agree 0=不同意 1=同意 + */ + void cancelAgree(Long orderMasterId, Integer agree); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index 508dca89..666629d0 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -8,6 +8,7 @@ import com.ghy.common.adapay.model.PaymentDTO; import com.ghy.common.constant.UserConstants; import com.ghy.common.core.text.Convert; import com.ghy.common.enums.AdapayOrderType; +import com.ghy.common.enums.FinancialDetailType; import com.ghy.common.enums.OrderStatus; import com.ghy.common.utils.AdapayUtils; import com.ghy.order.domain.OrderMaster; @@ -78,7 +79,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { public int updateOrderMaster(OrderMaster orderMaster) throws BaseAdaPayException { if (orderMaster.getOrderStatus().equals(OrderStatus.FINISH.code())) { logger.info("订单[ID={}]完成,进入确认分账", orderMaster.getId()); - confirm(orderMaster.getId()); + finish(orderMaster.getId()); } return orderMasterMapper.updateOrderMaster(orderMaster); } @@ -126,7 +127,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { @Override @Transactional(rollbackFor = Exception.class) - public void confirm(Long orderMasterId) throws BaseAdaPayException { + public void finish(Long orderMasterId) throws BaseAdaPayException { // 校验订单 OrderMaster orderMaster = selectById(orderMasterId); Assert.notNull(orderMaster, "找不到对应的订单"); @@ -244,4 +245,90 @@ public class OrderMasterServiceImpl implements OrderMasterService { boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status")); Assert.isTrue(status, response.getString("error_msg")); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancel(Long orderMasterId) { + OrderMaster orderMaster = selectById(orderMasterId); + Assert.notNull(orderMaster, "找不到对应的订单"); + switch (orderMaster.getOrderStatus()) { + case 0: // 待接单状态可直接取消 + case 1: // 待排期状态可直接取消 + updateStatus(orderMasterId, OrderStatus.CANCEL.code()); + // 发起退款 + try { + refund(orderMaster); + } catch (BaseAdaPayException e) { + logger.error("订单[code={}]退款失败", orderMaster.getCode(), e); + } + break; + case 2: // 待上门状态需要师傅同意才能取消 + updateStatus(orderMasterId, OrderStatus.GOING_CANCEL.code()); + break; + case 3: // 服务中状态需要师傅同意才能取消 + updateStatus(orderMasterId, OrderStatus.SERVER_CANCEL.code()); + break; + case 4: // 待确认状态需要师傅同意才能取消 + updateStatus(orderMasterId, OrderStatus.FINISH_CHECK_CANCEL.code()); + break; + default: // 其他状态不可取消 + throw new IllegalArgumentException("这个订单不能取消了"); + } + } + + @Override + public void cancelAgree(Long orderMasterId, Integer agree) { + OrderMaster orderMaster = selectById(orderMasterId); + Assert.notNull(orderMaster, "找不到对应的订单"); + if (Integer.valueOf(1).equals(agree)) { + // 师傅同意取消订单 + // 修改主订单状态为已取消 + updateStatus(orderMasterId, OrderStatus.CANCEL.code()); + // 发起退款 + try { + refund(orderMaster); + } catch (BaseAdaPayException e) { + logger.error("订单[code={}]退款失败", orderMaster.getCode(), e); + } + } else { + // 师傅不同意取消订单 + Integer orderStatus = orderMaster.getOrderStatus(); + // 修改主订单状态为原来的状态 + updateStatus(orderMasterId, Math.abs(orderStatus)); + } + } + + /** + * 主订单发起退款 + * + * @param orderMaster 主订单 + */ + public void refund(OrderMaster orderMaster) throws BaseAdaPayException { + FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId()); + // 支付状态 + Integer payStatus = financialMaster.getPayStatus(); + if (!payStatus.equals(1)) { + // 如果状态不是已支付 则不需要退款 + return; + } + List financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId()); + + // 主订单实付金额 - 已退款金额 = 待退款金额 + BigDecimal payMoney = financialMaster.getPayMoney(); + for (FinancialDetail fd : financialDetails) { + if (FinancialDetailType.RETURN_FEE.getCode().equals(fd.getFinancialDetailType())) { + // 如果有退款子财务单 则减去子财务单的已退款金额 + payMoney = payMoney.subtract(fd.getPayMoney()); + } + } + + if (BigDecimal.ZERO.compareTo(payMoney) > -1) { + logger.info("订单[code={}]待退款金额<=0,不需要退款", orderMaster.getCode()); + return; + } + + String refundAmt = AdapayUtils.bigDecimalToString(payMoney); + JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt); + logger.info("退款结果: " + response.toJSONString()); + } } 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 index 23919acf..7ac76ae9 100644 --- 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 @@ -45,7 +45,7 @@ public class PayReverseCallbackService implements CallBackService { @Override public void onResponse(JSONObject response) { logger.debug("撤销支付 Response: {}", response.toString()); - if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { + if (AdapayStatusEnum.pending.code.equals(response.getString("status"))) { String reverseId = response.getString("id"); String paymentId = response.getString("payment_id"); String reverseAmt = response.getString("reverse_amt"); From 321137a902cda46e92fa57044288ec3d5d89521e Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Fri, 22 Jul 2022 17:55:19 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=8F=91=E5=8D=95=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/order/OrderController.java | 30 +++++++++++++++++++ .../order/request/SysOrderAssignRequest.java | 11 +++++++ 2 files changed, 41 insertions(+) create mode 100644 ghy-order/src/main/java/com/ghy/order/request/SysOrderAssignRequest.java 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 064fa195..dc0063a7 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 @@ -20,6 +20,7 @@ import com.ghy.order.domain.OrderGoods; import com.ghy.order.domain.OrderMaster; import com.ghy.order.request.AppOrderAssignRequest; import com.ghy.order.request.AppOrderRequest; +import com.ghy.order.request.SysOrderAssignRequest; import com.ghy.order.service.OrderDetailService; import com.ghy.order.service.OrderGoodsService; import com.ghy.order.service.OrderMasterService; @@ -86,6 +87,9 @@ public class OrderController extends BaseController { @Autowired private GoodsStandardService goodsStandardService; + /** + * 可派单商品数量 + * */ @PostMapping("/can/assign") @ResponseBody public AjaxResult canAssign(@RequestBody AppOrderAssignRequest request){ @@ -115,6 +119,32 @@ public class OrderController extends BaseController { } } + /** + * 后台批量下单 + * */ + @PostMapping("/sys/order") + @ResponseBody + public AjaxResult sysOrder(@RequestBody SysOrderAssignRequest request){ + try { + // 新增商品 -- 商品不关联师傅,状态为不展示在商城页面 + + // 选择消费者(消费者类型为渠道商、不需要) -- + + // 生成消费者下单地址 + + // 生成主单 + + // 生成财务单 + + // 生成财务细单 -- 平台扣点、提成 + return AjaxResult.success("下单成功"); + }catch (Exception e){ + + return AjaxResult.error("系统异常"); + } + } + + @PostMapping("/assign") @ResponseBody @Transactional(rollbackFor = Exception.class) diff --git a/ghy-order/src/main/java/com/ghy/order/request/SysOrderAssignRequest.java b/ghy-order/src/main/java/com/ghy/order/request/SysOrderAssignRequest.java new file mode 100644 index 00000000..67adbe03 --- /dev/null +++ b/ghy-order/src/main/java/com/ghy/order/request/SysOrderAssignRequest.java @@ -0,0 +1,11 @@ +package com.ghy.order.request; + +import lombok.Data; + +@Data +public class SysOrderAssignRequest { + + // 商品相关信息 + private Long goodsDeptCategoryId; + +}