From 21f2947f45f8d70331b23a7348d5b8d2cb41fa1d Mon Sep 17 00:00:00 2001 From: donqi Date: Tue, 25 Oct 2022 00:34:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/pay/WxPayController.java | 4 +- ghy-admin/src/main/resources/application.yaml | 2 +- .../service/impl/PayCallbackService.java | 75 +++++++------------ 3 files changed, 29 insertions(+), 52 deletions(-) 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 bd0f9af7..4530c15c 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 @@ -85,9 +85,11 @@ public class WxPayController extends BaseController { } List idList = orderDetailService.selectByOrderMasterId(orderMaster.getId()).stream().map(OrderDetail::getId).collect(Collectors.toList()); List financialChangeRecords = financialChangeRecordService.selectByDetailIds(StringUtils.join(idList, ",")); + List financialChangeRecordIds = new ArrayList(); for (FinancialChangeRecord financialChangeRecord : financialChangeRecords) { if (PayStatus.WAIT_PAY.getCode().toString().equals(String.valueOf(financialChangeRecord.getPayStatus()))) { payMoney = payMoney.add(financialChangeRecord.getChangeMoney()); + financialChangeRecordIds.add(Long.valueOf(financialChangeRecord.getId())); } } //调用adapay微信公众号支付. @@ -98,7 +100,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 = PayParam.delayPayParam(orderMaster.getCode() + "_" + System.currentTimeMillis(), + PayParam payParam = PayParam.delayPayParam(orderMaster.getCode() + "_" + StringUtils.join(financialChangeRecordIds, ",") + "_"+ System.currentTimeMillis(), String.valueOf(payMoney), "工圈子居家设备", "工圈子居家设备购买付费"); map = adapayService.wxLitePay(orderMaster.getDeptId(), payParam, expend, null, null); } catch (BaseAdaPayException e) { diff --git a/ghy-admin/src/main/resources/application.yaml b/ghy-admin/src/main/resources/application.yaml index 594cfa10..48ebf039 100644 --- a/ghy-admin/src/main/resources/application.yaml +++ b/ghy-admin/src/main/resources/application.yaml @@ -119,7 +119,7 @@ qiniu: adapay: debug: true prod-mode: true - notifyUrl: 'https://www.opsoul.com/adapay/callback' + notifyUrl: 'https://www.opsoul.com:8881/adapay/callback' jim: appKey: '110e8830290152d76e2f1d97' 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 478dd460..8b610757 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 @@ -6,9 +6,7 @@ import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.adapay.model.Event; import com.ghy.common.adapay.model.PayCallback; import com.ghy.common.adapay.model.PaymentDTO; -import com.ghy.common.enums.FinancialDetailType; import com.ghy.common.enums.PayStatus; -import com.ghy.common.enums.PayTypeEnum; import com.ghy.payment.domain.FinancialChangeRecord; import com.ghy.payment.domain.FinancialDetail; import com.ghy.payment.domain.FinancialMaster; @@ -19,14 +17,12 @@ import com.ghy.payment.service.FinancialMasterService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicReference; /** * 支付回调 @@ -64,60 +60,39 @@ public class PayCallbackService implements CallBackService { financialMasterService.updatePayment(param); if (AdapayStatusEnum.succeeded.code.equals(payment.getStatus())) { if(payment.getOrderNo().split("_").length > 2){ - FinancialChangeRecord financialChangeRecord = new FinancialChangeRecord(); - financialChangeRecord.setId(payment.getOrderNo().split("_")[1]); - financialChangeRecord.setPayStatus(1); - financialChangeRecordService.updateFinancialChangeRecord(financialChangeRecord); + // 支付回调中的加价记录 + String financialChangeRecordIds = payment.getOrderNo().split("_")[1]; + String[] financialChangeRecordArr = financialChangeRecordIds.split(","); - // 修改子订单的payMoney - FinancialChangeRecord fc = financialChangeRecordService.selectFinancialChangeRecordById(financialChangeRecord.getId()); - FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(fc.getOrderDetailId()); - FinancialDetail financialDetail2Update = new FinancialDetail(); - financialDetail2Update.setId(financialDetail.getId()); - financialDetail2Update.setPayMoney(financialDetail.getPayMoney().add(fc.getChangeMoney())); - financialDetail2Update.setPayStatus(PayStatus.PAID.getCode()); - financialDetailService.updateFinancialDetail(financialDetail2Update); - - // 修改主单的payMoney - FinancialMaster financialMaster = financialMasterService.selectById(financialDetail.getFinancialMasterId()); - FinancialMaster financialMaster2Update = new FinancialMaster(); - financialMaster2Update.setId(financialMaster.getId()); - financialMaster2Update.setPayMoney(financialMaster.getPayMoney().add(fc.getChangeMoney())); - financialMaster2Update.setPayStatus(PayStatus.PAID.getCode()); - financialMasterService.updateFinancialMaster(financialMaster2Update); - // TODO 拆分对应的分账流水 - } else if (PayTypeEnum.valueOf(payment.getPayChannel().toUpperCase()).getCode().equals(PayTypeEnum.WX_LITE.getCode())) { - String orderMasterCode = payment.getOrderNo().split("_")[0]; - FinancialMaster fmQry = new FinancialMaster(); - fmQry.setOrderMasterCode(orderMasterCode); - FinancialMaster financialMaster = financialMasterService.selectFinancialMasterList(fmQry).get(0); - FinancialDetail qry = new FinancialDetail(); - qry.setFinancialMasterId(financialMaster.getId()); - qry.setFinancialDetailType(FinancialDetailType.ORDER_FEE.getCode()); - List financialDetails = financialDetailService.selectFinancialDetailList(qry); BigDecimal totalChangeMoney = BigDecimal.ZERO; - for (FinancialDetail financialDetail: financialDetails) { - // 查询是否有加价记录,对应加到子财务单的payMoney上 - FinancialChangeRecord financialChangeRecord = financialChangeRecordService.selectNotPayRecordByDetailId(financialDetail.getOrderDetailId()); - if (financialChangeRecord != null) { - totalChangeMoney = totalChangeMoney.add(financialChangeRecord.getChangeMoney()); - // 更新加价记录为已支付 - financialChangeRecord.setPayStatus(1); - financialChangeRecordService.updateFinancialChangeRecord(financialChangeRecord); - // 更新子单的payMoney,及修改为已支付 - FinancialDetail financialDetail2Update = new FinancialDetail(); - financialDetail2Update.setId(financialDetail.getId()); - financialDetail2Update.setPayMoney(financialDetail.getPayMoney().add(financialChangeRecord.getChangeMoney())); - financialDetail2Update.setPayStatus(PayStatus.PAID.getCode()); - financialDetailService.updateFinancialDetail(financialDetail2Update); + Long financialMasterId = null; + for (String financialChangeRecordId: financialChangeRecordArr) { + FinancialChangeRecord financialChangeRecord = new FinancialChangeRecord(); + financialChangeRecord.setId(financialChangeRecordId); + financialChangeRecord.setPayStatus(1); + financialChangeRecordService.updateFinancialChangeRecord(financialChangeRecord); + + // 修改子订单的payMoney + FinancialChangeRecord fc = financialChangeRecordService.selectFinancialChangeRecordById(financialChangeRecord.getId()); + FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(fc.getOrderDetailId()); + FinancialDetail financialDetail2Update = new FinancialDetail(); + financialDetail2Update.setId(financialDetail.getId()); + financialDetail2Update.setPayMoney(financialDetail.getPayMoney().add(fc.getChangeMoney())); + financialDetail2Update.setPayStatus(PayStatus.PAID.getCode()); + financialDetailService.updateFinancialDetail(financialDetail2Update); + totalChangeMoney = totalChangeMoney.add(fc.getChangeMoney()); + if (financialMasterId == null) { + financialMasterId = financialDetail.getFinancialMasterId(); } } // 修改主单的payMoney + FinancialMaster financialMaster = financialMasterService.selectById(financialMasterId); FinancialMaster financialMaster2Update = new FinancialMaster(); financialMaster2Update.setId(financialMaster.getId()); financialMaster2Update.setPayMoney(financialMaster.getPayMoney().add(totalChangeMoney)); financialMaster2Update.setPayStatus(PayStatus.PAID.getCode()); financialMasterService.updateFinancialMaster(financialMaster2Update); + // TODO 拆分对应的分账流水 } // 更新主财务单状态 financialMasterService.paySucceeded(payment.getId(), payment.getPayChannel());