From c7212fff413dce0a6571cefafd0af66ff0475b4d Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Mon, 10 Jul 2023 14:53:55 +0800 Subject: [PATCH 1/5] update --- .../impl/OrderBasicInfoServiceImpl.java | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) 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 36da6b3bf..faf0ccaef 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 @@ -12,6 +12,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.model.Payment; +import com.huifu.adapay.model.PaymentReverse; import com.huifu.adapay.model.Refund; import com.jsowell.adapay.common.CreateAdaPaymentParam; import com.jsowell.common.constant.CacheConstants; @@ -1939,18 +1940,36 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { } // 创建汇付退款对象 在完成初始化设置情况下,调用方法,获取 Refund对象 - String id = record.getPaymentId(); - Map refundParams = Maps.newHashMap(); + String id = record.getPaymentId(); // + String snowflakeId = SnowflakeIdWorker.getSnowflakeId(); String amount = AdapayUtil.formatAmount(dto.getRefundAmount()); - refundParams.put("refund_amt", amount); - refundParams.put("refund_order_no", SnowflakeIdWorker.getSnowflakeId()); - refundParams.put("notify_url", ADAPAY_REFUND_CALLBACK_URL); - try { - Map response = Refund.create(id, refundParams); - logger.info("汇付支付创建退款对象:{}", JSON.toJSONString(response)); - } catch (BaseAdaPayException e) { - logger.error("汇付支付创建退款对象error", e); + String payMode = "delay"; + if (StringUtils.equals("", payMode)) { + // 延迟分账确认的调退款接口 + Map refundParams = Maps.newHashMap(); + refundParams.put("refund_amt", amount); + refundParams.put("refund_order_no", snowflakeId); + refundParams.put("notify_url", ADAPAY_REFUND_CALLBACK_URL); + try { + Map response = Refund.create(id, refundParams); + logger.info("汇付支付创建退款对象:{}", JSON.toJSONString(response)); + } catch (BaseAdaPayException e) { + logger.error("汇付支付创建退款对象error", e); + } + } else { + // 延迟分账未确认调撤销调撤销接口退款 + Map reverseParams = Maps.newHashMap(); + reverseParams.put("app_id", ADAPAY_APP_ID); + reverseParams.put("payment_id", id); + reverseParams.put("reverse_amt", amount); + reverseParams.put("order_no", snowflakeId); + try { + Map paymentReverse = PaymentReverse.create(reverseParams); + logger.info("汇付支付创建交易撤销对象:{}", JSON.toJSONString(paymentReverse)); + } catch (BaseAdaPayException e) { + logger.error("汇付支付创建交易撤销对象error", e); + } } } From 82de8f7cdea3bb5e0aee59fe2f2b2298e252f3f9 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Mon, 10 Jul 2023 15:08:36 +0800 Subject: [PATCH 2/5] update --- .../jsowell/common/constant/Constants.java | 3 +++ .../impl/OrderBasicInfoServiceImpl.java | 23 +++++-------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java b/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java index 53e4c80c4..ac8df4293 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java +++ b/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java @@ -231,4 +231,7 @@ public class Constants { // 汇付企业用户前缀 public static final String ADAPAY_CORP_MEMBER_PREFIX = "ACM"; + + // 汇付延时分账支付模式 + public static final String ADAPAY_PAY_MODE_DELAY = "delay"; } 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 faf0ccaef..99ec6b2ad 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 @@ -2296,6 +2296,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { // 封装对象 String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额 + String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账 CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam(); createAdaPaymentParam.setOrder_no(orderInfo.getOrderCode()); createAdaPaymentParam.setPay_amt(amount); @@ -2306,38 +2307,26 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { Map map = Maps.newHashMap(); map.put("type", ScenarioEnum.ORDER.getValue()); map.put("orderCode", dto.getOrderCode()); + map.put("payMode", payMode); createAdaPaymentParam.setDescription(JSON.toJSONString(map)); // 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数 createAdaPaymentParam.setNotify_url(ADAPAY_CALLBACK_URL); createAdaPaymentParam.setExpend(JSONObject.toJSONString(ImmutableMap.of("open_id", openId))); - // 分账对象信息 - // String adapayMemberId = adapayMemberAccountService.selectAdapayMemberIdByStationId(orderInfo.getStationId()); - // if (StringUtils.isNotBlank(adapayMemberId)) { - // JSONObject jsonObject = new JSONObject(); - // jsonObject.put("member_id", adapayMemberId); - // jsonObject.put("amount", amount); - // jsonObject.put("fee_flag", Constants.Y); - // - // // 分账对象信息列表,最多仅支持7个分账方,json 数组形式 - // JSONArray jsonArray = new JSONArray(); - // jsonArray.add(jsonObject); - // createAdaPaymentParam.setDiv_members(jsonArray.toString()); - // } - // 延时分账 - createAdaPaymentParam.setPay_mode("delay"); + createAdaPaymentParam.setPay_mode(payMode); try { logger.info("创建汇付支付参数:{}", JSONObject.toJSONString(createAdaPaymentParam)); Map response = Payment.create(BeanMap.create(createAdaPaymentParam)); if (response != null && !response.isEmpty()) { JSONObject expend = JSONObject.parseObject(response.get("expend").toString()); JSONObject pay_info = expend.getJSONObject("pay_info"); - Map resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference>() { - }); + Map resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference>() {}); if (resultMap != null) { // 表示已经获取到支付参数了,后续再有支付请求就拒绝 redisCache.setCacheObject(redisKey, resultMap, 15, TimeUnit.MINUTES); + + // 设置订单号的 } return resultMap; } From b9cc7711841be5af4e244f491c0d402b3ca0d4e0 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Mon, 10 Jul 2023 15:14:58 +0800 Subject: [PATCH 3/5] update --- .../main/java/com/jsowell/service/OrderService.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 7941717f9..f541e2f77 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -3,6 +3,7 @@ package com.jsowell.service; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.github.pagehelper.PageHelper; @@ -1311,6 +1312,9 @@ public class OrderService { String data = request.getParameter("data"); //验签请参sign String sign = request.getParameter("sign"); + // type + String type = request.getParameter("type"); + //验签请参publicKey String publicKey = AdapayCore.PUBLIC_KEY; log.info("汇付支付回调验签请参data={}, sign={}", data, sign); @@ -1320,6 +1324,14 @@ public class OrderService { log.info("汇付支付回调验签失败:{}", data); return; } + + if (StringUtils.equals("payment.succeeded", type)) { + paymentSucceeded(data); + } + + } + + private void paymentSucceeded(String data) throws JsonProcessingException { //验签成功 保存到回调记录表中 JSONObject jsonObject = JSON.parseObject(data); ObjectMapper mapper = new ObjectMapper(); From 5b7cfa90095bb5152636b2bd53e2b66c29134c8f Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Mon, 10 Jul 2023 15:24:22 +0800 Subject: [PATCH 4/5] update --- .../common/enums/adapay/AdapayEventEnum.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayEventEnum.java diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayEventEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayEventEnum.java new file mode 100644 index 000000000..becffde30 --- /dev/null +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayEventEnum.java @@ -0,0 +1,38 @@ +package com.jsowell.common.enums.adapay; + +public enum AdapayEventEnum { + payment_succeeded("payment.succeeded", "支付成功"), + payment_failed("payment.failed", "支付失败"), + payment_close_succeeded("payment.close.succeeded", "支付关单成功"), + payment_close_failed("payment.close.failed", "支付关单失败"), + refund_succeeded("refund.succeeded", "退款成功"), + refund_failed("refund.failed", "退款失败"), + corp_member_succeeded("corp_member.succeeded", "开户成功"), + corp_member_failed("corp_member.failed", "开户失败"), + payment_reverse_succeeded("payment_reverse.succeeded", "支付撤销成功"), + payment_reverse_failed("payment_reverse.failed", "支付撤销失败"), + ; + private String value; + private String label; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + AdapayEventEnum(String value, String label) { + this.value = value; + this.label = label; + } +} From c271ad249dc42a1966e42cf45be67d0b11664c85 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Mon, 10 Jul 2023 15:49:54 +0800 Subject: [PATCH 5/5] =?UTF-8?q?update=20=E6=89=B9=E9=87=8F=E9=80=80?= =?UTF-8?q?=E6=AC=BE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/api/uniapp/JumpController.java | 23 +++++++++++++++++++ .../com/jsowell/pile/dto/QueryOrderDTO.java | 4 ++++ .../pile/mapper/OrderBasicInfoMapper.java | 3 +++ .../pile/service/IOrderBasicInfoService.java | 2 ++ .../impl/OrderBasicInfoServiceImpl.java | 21 +++++++++++++++++ .../com/jsowell/pile/vo/web/RefundOrder.java | 19 +++++++++++++++ .../mapper/pile/OrderBasicInfoMapper.xml | 19 +++++++++++++++ 7 files changed, 91 insertions(+) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/vo/web/RefundOrder.java diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java index 9be1963ed..36cf1c7aa 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java @@ -145,4 +145,27 @@ public class JumpController extends BaseController { return response; } + /** + * 批量退款接口 + * http://localhost:8080/app-xcx-h5/batchRefund + * @param dto + * @return + */ + @PostMapping("/batchRefund") + public RestApiResponse batchRefund(@RequestBody QueryOrderDTO dto) { + RestApiResponse response = null; + try { + orderBasicInfoService.batchRefund(dto); + response = new RestApiResponse<>(); + } catch (BusinessException e) { + logger.warn("临时订单退款接口 warn", e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("临时订单退款接口 error", e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR); + } + logger.info("临时刷数据接口 result:{}", JSONObject.toJSONString(response)); + return response; + } + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java index c05a17bc7..9b8ab1ad9 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @NoArgsConstructor @AllArgsConstructor @@ -67,4 +69,6 @@ public class QueryOrderDTO extends BaseEntity { // private int pageSize; // // private int pageNum; + + private List orderCodeList; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index 92a63dcb8..3fc755fdf 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -10,6 +10,7 @@ import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO; import com.jsowell.pile.vo.uniapp.SendMessageVO; import com.jsowell.pile.vo.web.IndexOrderInfoVO; import com.jsowell.pile.vo.web.OrderListVO; +import com.jsowell.pile.vo.web.RefundOrder; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -215,4 +216,6 @@ public interface OrderBasicInfoMapper { * @return */ List getMerchantOrderInfoList(@Param("dto") QueryMerchantOrderDTO dto); + + List batchRefundQuery(List orderCodeList); } 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 e1ea06571..b28d6bda8 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 @@ -289,4 +289,6 @@ public interface IOrderBasicInfoService { void analysisPileParameter(BasicPileDTO dto); Map payOrder(PayOrderDTO dto) throws Exception; + + void batchRefund(QueryOrderDTO dto); } 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 99ec6b2ad..38bf1bb15 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 @@ -2174,6 +2174,27 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { return resultMap; } + @Override + public void batchRefund(QueryOrderDTO dto) { + if (CollectionUtils.isEmpty(dto.getOrderCodeList())) { + return; + } + List list = orderBasicInfoMapper.batchRefundQuery(dto.getOrderCodeList()); + if (CollectionUtils.isEmpty(list)) { + return; + } + WeChatRefundDTO weChatRefundDTO = null; + for (RefundOrder refundOrder : list) { + if (StringUtils.isBlank(refundOrder.getRefundAmount())) { + continue; + } + weChatRefundDTO = new WeChatRefundDTO(); + weChatRefundDTO.setOrderCode(refundOrder.getOrderCode()); + weChatRefundDTO.setRefundAmount(new BigDecimal(refundOrder.getRefundAmount())); + this.refundForOrderWithAdapay(weChatRefundDTO); + } + } + /** * 白名单支付订单逻辑 * diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/RefundOrder.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/RefundOrder.java new file mode 100644 index 000000000..bebac02c0 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/RefundOrder.java @@ -0,0 +1,19 @@ +package com.jsowell.pile.vo.web; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class RefundOrder { + private String orderCode; + private String orderStatus; + private String stationId; + private String orderAmount; + private String payAmount; + private String refundAmount; +} diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index e270c0700..583a04c82 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -1087,4 +1087,23 @@ order by t1.create_time desc + + \ No newline at end of file