From 7897dd68764b775a13dfcc308150dc202e4e4524 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Tue, 26 Sep 2023 11:12:54 +0800 Subject: [PATCH] update --- .../jsowell/api/uniapp/TempController.java | 3 +- .../com/jsowell/service/OrderService.java | 12 +- .../java/com/jsowell/service/TempService.java | 24 ++++ .../jsowell/adapay/vo/DeductionRecord.java | 17 +++ .../com/jsowell/adapay/vo/PaymentInfo.java | 14 +++ .../pile/service/IOrderBasicInfoService.java | 2 - .../impl/OrderBasicInfoServiceImpl.java | 105 +----------------- .../orderlogic/AbstractOrderLogic.java | 2 +- .../orderlogic/DelayMerchantOrderLogic.java | 11 -- 9 files changed, 69 insertions(+), 121 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/adapay/vo/DeductionRecord.java create mode 100644 jsowell-pile/src/main/java/com/jsowell/adapay/vo/PaymentInfo.java diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/TempController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/TempController.java index bd1fbc0a0..c431d7dbe 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/TempController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/TempController.java @@ -234,7 +234,8 @@ public class TempController extends BaseController { throw new BusinessException("", "查询信息为空"); } String appId = pileMerchantInfoService.queryAppIdByMerchantId(merchantId); - orderBasicInfoService.doBalancePaymentWithDelay(orderBasicInfo, adapayMemberAccount, appId); + // orderBasicInfoService.doBalancePaymentWithDelay(orderBasicInfo, adapayMemberAccount, appId); + tempService.doBalancePaymentTemp(orderBasicInfo, adapayMemberAccount, appId); } catch (Exception e) { logger.error("临时接口交易确认接口 error,", e); response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR); diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 289b64b72..9a15682f0 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -12,6 +12,7 @@ import com.google.common.collect.Sets; import com.huifu.adapay.core.AdapayCore; import com.huifu.adapay.core.util.AdapaySign; import com.jsowell.adapay.response.PaymentReverseResponse; +import com.jsowell.adapay.vo.PaymentInfo; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.vo.AuthorizedDeptVO; @@ -1007,9 +1008,12 @@ public class OrderService { memberTransactionRecordService.insertSelective(record); if (StringUtils.equals(scenarioType, ScenarioEnum.ORDER.getValue())) { // 1-订单支付 - JSONObject json = new JSONObject(); - json.put("paymentId", paymentId); - json.put("amount", amount); + // JSONObject json = new JSONObject(); + // json.put("paymentId", paymentId); + // json.put("amount", amount); + PaymentInfo paymentInfo = new PaymentInfo(); + paymentInfo.setPaymentId(paymentId); + paymentInfo.setAmount(amount.toString()); // 记录订单支付流水 OrderPayRecord orderPayRecord = OrderPayRecord.builder() @@ -1017,7 +1021,7 @@ public class OrderService { .payMode(OrderPayRecordEnum.WECHATPAY_PAYMENT.getValue()) .payAmount(amount) .acquirer(AcquirerEnum.ADAPAY.getValue()) - .deductionRecord(json.toJSONString()) + .deductionRecord(JSON.toJSONString(Lists.newArrayList(paymentInfo))) .createBy(null) .delFlag(DelFlagEnum.NORMAL.getValue()) .build(); diff --git a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java index ab7084102..2d96da7a6 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -20,6 +20,8 @@ import com.jsowell.pile.dto.QueryOrderDTO; import com.jsowell.pile.dto.SettleOrderReportDTO; import com.jsowell.pile.mapper.OrderBasicInfoMapper; import com.jsowell.pile.service.*; +import com.jsowell.pile.service.orderlogic.AbstractOrderLogic; +import com.jsowell.pile.service.orderlogic.DelayMerchantOrderLogic; import com.jsowell.pile.transaction.service.TransactionService; import com.jsowell.pile.vo.web.ClearingBillVO; import com.jsowell.pile.vo.web.OrderListVO; @@ -448,4 +450,26 @@ public class TempService { List memberAdapayRecordList = memberAdapayRecordService.selectAdapayRecordList(memberId, ScenarioEnum.BALANCE.getValue()); } + + public void doBalancePaymentTemp(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String appId) { + String orderCode = orderBasicInfo.getOrderCode(); + // 查询订单支付记录 + List orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode); + if (CollectionUtils.isEmpty(orderPayRecordList)) { + return; + } + OrderPayRecord record = orderPayRecordList.get(0); + String deductionRecord = record.getDeductionRecord(); + AbstractOrderLogic orderLogic = new DelayMerchantOrderLogic(); + List jsonObjects = orderLogic.parseDeductionRecord(deductionRecord); + // 通过paymentId查询 分账记录 + + // 找到orderCode的分账记录 + + // 校验是不是分给正确的商户 + + // 撤销原分账 + + // 重新分账 + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/DeductionRecord.java b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/DeductionRecord.java new file mode 100644 index 000000000..18d4207c6 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/DeductionRecord.java @@ -0,0 +1,17 @@ +package com.jsowell.adapay.vo; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * 支付信息对象 + * order_pay_record表中的deduction_record + * json数组 字符串 + */ +@Getter +@Setter +public class DeductionRecord { + List list; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/PaymentInfo.java b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/PaymentInfo.java new file mode 100644 index 000000000..dfc869bc1 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/PaymentInfo.java @@ -0,0 +1,14 @@ +package com.jsowell.adapay.vo; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class PaymentInfo { + // 支付id + private String paymentId; + + // 金额 + private String amount; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java index ccc91c80a..8c3f0aebf 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java @@ -149,8 +149,6 @@ public interface IOrderBasicInfoService { List getListByMemberIdAndOrderStatus(String memberId, List orderStatusList, LocalDateTime dateTime, String stationId); - List> calculateUnfreezeAmount(BigDecimal orderAmount, List payRecordList); - void orderSplittingOperations(AdapayMemberAccount adapayMemberAccount, List stationReportList); void orderSplittingOperations(String merchantId, String tradeDate); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index bae0da757..21f2d6351 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -38,6 +38,7 @@ import com.jsowell.pile.dto.*; import com.jsowell.pile.mapper.OrderBasicInfoMapper; import com.jsowell.pile.service.*; import com.jsowell.pile.service.orderlogic.AbstractOrderLogic; +import com.jsowell.pile.service.orderlogic.DelayMerchantOrderLogic; import com.jsowell.pile.service.orderlogic.OrderLogicFactory; import com.jsowell.pile.transaction.dto.ClearingBillTransactionDTO; import com.jsowell.pile.transaction.dto.OrderTransactionDTO; @@ -773,63 +774,10 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { */ notDelayMerchantOrderRefundLogic(orderBasicInfo, adapayMemberAccount, merchantInfo.getAppId()); } - - // OrderSettleResult orderSettleResult = null; - - // 退款逻辑/需要退款的情况 - // BigDecimal residue = orderBasicInfo.getRefundAmount(); - // if (residue.compareTo(BigDecimal.ZERO) > 0) { - // // 执行退款逻辑 - // try { - // String payMode = orderBasicInfo.getPayMode(); - // if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) { - // // 余额支付 - // balancePaymentOrderRefundV2(orderBasicInfo); - // } else if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) { - // // 微信支付 - // onlinePaymentOrderRefund(orderBasicInfo); - // } else { - // // 白名单支付 - // logger.info("订单:{}使用白名单支付,不进行退款处理", orderBasicInfo.getOrderCode()); - // } - // } catch (Exception e) { - // logger.error("订单退款逻辑异常orderCode:{}", orderBasicInfo.getOrderCode(), e); - // } - // } - return null; } - - /** - * 冻结订单金额 - * delay模式的运营商需要用到 - * 记一笔账,还没有到分账时间,把订单消费金额在支付单里冻结,退款的时候不能动这些钱 - */ - private void freezeAmount(OrderBasicInfo orderBasicInfo) { - String orderCode = orderBasicInfo.getOrderCode(); - // 查询这笔订单的支付id/查询该笔订单的支付交易回调 - - // 根据订单编号,查询订单支付记录,一般在线支付只有1条,余额支付可能有多条 - List orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode); - - // 需要根据订单消费的金额,计算一下每个paymentId需要冻结多少钱 - - for (OrderPayRecord record : orderPayRecordList) { - // 支付的信息,json字符串包含,paymentId和支付金额 - String deductionRecord = record.getDeductionRecord(); - JSONObject jsonObject = JSON.parseObject(deductionRecord); - String paymentId = jsonObject.getString("paymentId"); - - } - - // 订单支付记录,保存一下消费记录 deduction_record - if (CollectionUtils.isNotEmpty(orderPayRecordList)) { - // - } - } - private AdapayCallbackRecord selectAdapayCallbackRecord(String orderCode) { AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderCode); if (adapayCallbackRecord == null) { @@ -1146,7 +1094,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO); // 更新order_pay_record, 解冻部分 - List> list = calculateUnfreezeAmount(orderAmount, payRecordList); + AbstractOrderLogic orderLogic = new DelayMerchantOrderLogic(); + List> list = orderLogic.calculateUnfreezeAmount(orderAmount, payRecordList); for (Map map : list) { String paymentId = (String) map.get("paymentId"); BigDecimal unfreezeAmount = (BigDecimal) map.get("unfreezeAmount"); @@ -1154,54 +1103,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { } } - /** - * 计算解冻金额 - * @param orderAmount 订单消费金额 - * @param payRecordList 订单支付记录 - */ - @Override - public List> calculateUnfreezeAmount(BigDecimal orderAmount, List payRecordList) { - List> resultList = Lists.newArrayList(); - BigDecimal tempAmount = new BigDecimal(orderAmount.toString()); // 临时金额 - for (OrderPayRecord record : payRecordList) { - JSONObject jsonObject = JSON.parseObject(record.getDeductionRecord()); - String paymentId = jsonObject.getString("paymentId"); // 交易流水号 - BigDecimal payAmount = record.getPayAmount(); // 此交易单支付的金额 - - if (BigDecimal.ZERO.compareTo(tempAmount) >= 0) { - Map map = Maps.newHashMap(); - map.put("paymentId", paymentId); - map.put("unfreezeAmount", payAmount); - resultList.add(map); - } else { - // 该笔支付扣除金额 - BigDecimal deductionAmount; - // 该笔支付解冻金额 - BigDecimal unfreezeAmount = null; - // 临时消费金额 = 临时消费金额 - 该笔交易的剩余金额 - tempAmount = tempAmount.subtract(payAmount); - if (tempAmount.compareTo(BigDecimal.ZERO) >= 0) { - // 计算以后,大于等于0,说明这笔支付剩余金额需要扣完,还要继续扣下一笔 - deductionAmount = payAmount; - unfreezeAmount = payAmount.subtract(deductionAmount); // 支付金额 - 扣除金额 = 需要退回的金额 - Map map = Maps.newHashMap(); - map.put("paymentId", paymentId); - map.put("unfreezeAmount", unfreezeAmount); - resultList.add(map); - } else { - // 如果小于0,则说明该笔交易的剩余金额用不完,扣除金额等于临时消费金额,并结束循环 - deductionAmount = payAmount.add(tempAmount); // 该笔交易的剩余金额加上一个负数临时消费金额,就是该笔交易扣除金额 - unfreezeAmount = payAmount.subtract(deductionAmount); // 支付金额 - 扣除金额 = 需要退回的金额 - Map map = Maps.newHashMap(); - map.put("paymentId", paymentId); - map.put("unfreezeAmount", unfreezeAmount); - resultList.add(map); - } - } - } - return resultList; - } - /** * 订单分账逻辑 * orderSplittingOperations diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java index d40aa569f..9f60ddf0b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java @@ -454,7 +454,7 @@ public abstract class AbstractOrderLogic implements InitializingBean { * 解析deductionRecord * 【公共方法】 */ - protected List parseDeductionRecord(String deductionRecord) { + public List parseDeductionRecord(String deductionRecord) { List resultList = Lists.newArrayList(); if (StringUtils.isBlank(deductionRecord)) { return resultList; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java index 62d67720f..283049948 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java @@ -279,17 +279,6 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic { // 把消费金额冻结 for (OrderPayRecord record : payRecordList) { - // String deductionRecord = record.getDeductionRecord(); - // Object object = JSON.parse(deductionRecord); - // - // // 都放入list里 - // List arr = Lists.newArrayList(); - // if (object instanceof JSONArray) { - // arr.addAll(((JSONArray) object).toList(JSONObject.class)); - // } else { - // arr.add((JSONObject) object); - // } - List arr = parseDeductionRecord(record.getDeductionRecord()); // 循环冻结金额