diff --git a/docs/sql/init.sql b/docs/sql/init.sql index c858d1f..0b700fe 100644 --- a/docs/sql/init.sql +++ b/docs/sql/init.sql @@ -636,6 +636,7 @@ insert into t_sys_entitlement values('ENT_ORDER', '订单中心', 'transaction', insert into t_sys_entitlement values('ENT_ORDER_LIST', '页面:订单列表', 'no-icon', '', '', 'PB', 0, 1, 'ENT_PAY_ORDER', '0', 'MCH', now(), now()); insert into t_sys_entitlement values('ENT_PAY_ORDER_VIEW', '按钮:详情', 'no-icon', '', '', 'PB', 0, 1, 'ENT_PAY_ORDER', '0', 'MCH', now(), now()); insert into t_sys_entitlement values('ENT_PAY_ORDER_SEARCH_PAY_WAY', '筛选项:支付方式', 'no-icon', '', '', 'PB', 0, 1, 'ENT_PAY_ORDER', '0', 'MCH', now(), now()); + insert into t_sys_entitlement values('ENT_PAY_ORDER_REFUND', '按钮:订单退款', 'no-icon', '', '', 'PB', 0, 1, 'ENT_PAY_ORDER', '0', 'MCH', now(), now()); insert into t_sys_entitlement values('ENT_REFUND_ORDER', '退款记录', 'exception', '/refund', 'RefundOrderListPage', 'ML', 0, 1, 'ENT_ORDER', '20', 'MCH', now(), now()); insert into t_sys_entitlement values('ENT_REFUND_LIST', '页面:退款订单列表', 'no-icon', '', '', 'PB', 0, 1, 'ENT_REFUND_ORDER', '0', 'MCH', now(), now()); insert into t_sys_entitlement values('ENT_REFUND_ORDER_VIEW', '按钮:详情', 'no-icon', '', '', 'PB', 0, 1, 'ENT_REFUND_ORDER', '0', 'MCH', now(), now()); diff --git a/docs/sql/patch.sql b/docs/sql/patch.sql index 00a8057..21d1f2a 100644 --- a/docs/sql/patch.sql +++ b/docs/sql/patch.sql @@ -214,3 +214,9 @@ insert into t_sys_entitlement values('ENT_DIVISION_RECORD_VIEW', '按钮:详 ## -- ++++ ++++ +## -- ++++ [v1.7.0] ===> [v1.7.1] ++++ +-- 添加商户系统的退款功能权限配置项 +insert into t_sys_entitlement values('ENT_PAY_ORDER_REFUND', '按钮:订单退款', 'no-icon', '', '', 'PB', 0, 1, 'ENT_PAY_ORDER', '0', 'MCH', now(), now()); + +## -- ++++ ++++ + diff --git a/jeepay-manager/src/main/resources/banner.txt b/jeepay-manager/src/main/resources/banner.txt index e3d8832..7c0c577 100644 --- a/jeepay-manager/src/main/resources/banner.txt +++ b/jeepay-manager/src/main/resources/banner.txt @@ -4,5 +4,5 @@ / /_/ // __/ __/ /_/ / /_/ / /_/ / \____/ \___/\___/ .___/\__,_/\__, / /_/ /____/ - :: Jeepay :: (v1.7.0.RELEASE) + :: Jeepay :: (v1.7.1.RELEASE) 适合互联网企业使用的开源支付系统 : https://www.jeequan.com diff --git a/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/ctrl/order/PayOrderController.java b/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/ctrl/order/PayOrderController.java index 7e4a1b8..83f5a44 100644 --- a/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/ctrl/order/PayOrderController.java +++ b/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/ctrl/order/PayOrderController.java @@ -18,21 +18,29 @@ package com.jeequan.jeepay.mch.ctrl.order; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.jeequan.jeepay.JeepayClient; +import com.jeequan.jeepay.core.aop.MethodLog; import com.jeequan.jeepay.core.constants.ApiCodeEnum; +import com.jeequan.jeepay.core.entity.MchApp; import com.jeequan.jeepay.core.entity.PayOrder; import com.jeequan.jeepay.core.entity.PayWay; +import com.jeequan.jeepay.core.exception.BizException; import com.jeequan.jeepay.core.model.ApiRes; +import com.jeequan.jeepay.core.utils.SeqKit; +import com.jeequan.jeepay.exception.JeepayException; import com.jeequan.jeepay.mch.ctrl.CommonCtrl; +import com.jeequan.jeepay.model.RefundOrderCreateReqModel; +import com.jeequan.jeepay.request.RefundOrderCreateRequest; +import com.jeequan.jeepay.response.RefundOrderCreateResponse; +import com.jeequan.jeepay.service.impl.MchAppService; import com.jeequan.jeepay.service.impl.PayOrderService; import com.jeequan.jeepay.service.impl.PayWayService; +import com.jeequan.jeepay.service.impl.SysConfigService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; @@ -50,8 +58,9 @@ import java.util.Map; public class PayOrderController extends CommonCtrl { @Autowired private PayOrderService payOrderService; - @Autowired private PayWayService payWayService; + @Autowired private MchAppService mchAppService; + @Autowired private SysConfigService sysConfigService; /** * @Author: ZhuXiao @@ -138,4 +147,60 @@ public class PayOrderController extends CommonCtrl { return ApiRes.ok(payOrder); } + + /** + * 发起订单退款 + * @author terrfly + * @site https://www.jeequan.com + * @date 2021/6/17 16:38 + */ + @MethodLog(remark = "发起订单退款") + @PreAuthorize("hasAuthority('ENT_PAY_ORDER_REFUND')") + @PostMapping("/refunds/{payOrderId}") + public ApiRes refund(@PathVariable("payOrderId") String payOrderId) { + + Long refundAmount = getRequiredAmountL("refundAmount"); + String refundReason = getValStringRequired("refundReason"); + + PayOrder payOrder = payOrderService.getById(payOrderId); + if (payOrder == null || !payOrder.getMchNo().equals(getCurrentMchNo())) { + return ApiRes.fail(ApiCodeEnum.SYS_OPERATION_FAIL_SELETE); + } + + if(payOrder.getState() != PayOrder.STATE_SUCCESS){ + throw new BizException("订单状态不正确"); + } + + if(payOrder.getRefundAmount() + refundAmount > payOrder.getAmount()){ + throw new BizException("退款金额超过订单可退款金额!"); + } + + + RefundOrderCreateRequest request = new RefundOrderCreateRequest(); + RefundOrderCreateReqModel model = new RefundOrderCreateReqModel(); + request.setBizModel(model); + + model.setMchNo(payOrder.getMchNo()); // 商户号 + model.setAppId(payOrder.getAppId()); + model.setPayOrderId(payOrderId); + model.setMchRefundNo(SeqKit.genMhoOrderId()); + model.setRefundAmount(refundAmount); + model.setRefundReason(refundReason); + model.setCurrency("CNY"); + + MchApp mchApp = mchAppService.getById(payOrder.getAppId()); + + JeepayClient jeepayClient = new JeepayClient(sysConfigService.getDBApplicationConfig().getPaySiteUrl(), mchApp.getAppSecret()); + + try { + RefundOrderCreateResponse response = jeepayClient.execute(request); + if(response.getCode() != 0){ + throw new BizException(response.getMsg()); + } + return ApiRes.ok(response.get()); + } catch (JeepayException e) { + throw new BizException(e.getMessage()); + } + } + } diff --git a/jeepay-merchant/src/main/resources/banner.txt b/jeepay-merchant/src/main/resources/banner.txt index e3d8832..7c0c577 100644 --- a/jeepay-merchant/src/main/resources/banner.txt +++ b/jeepay-merchant/src/main/resources/banner.txt @@ -4,5 +4,5 @@ / /_/ // __/ __/ /_/ / /_/ / /_/ / \____/ \___/\___/ .___/\__,_/\__, / /_/ /____/ - :: Jeepay :: (v1.7.0.RELEASE) + :: Jeepay :: (v1.7.1.RELEASE) 适合互联网企业使用的开源支付系统 : https://www.jeequan.com diff --git a/jeepay-payment/src/main/resources/banner.txt b/jeepay-payment/src/main/resources/banner.txt index e3d8832..7c0c577 100644 --- a/jeepay-payment/src/main/resources/banner.txt +++ b/jeepay-payment/src/main/resources/banner.txt @@ -4,5 +4,5 @@ / /_/ // __/ __/ /_/ / /_/ / /_/ / \____/ \___/\___/ .___/\__,_/\__, / /_/ /____/ - :: Jeepay :: (v1.7.0.RELEASE) + :: Jeepay :: (v1.7.1.RELEASE) 适合互联网企业使用的开源支付系统 : https://www.jeequan.com diff --git a/pom.xml b/pom.xml index 89765ae..551d95e 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ - 1.7.0 + 1.7.1 1.8 UTF-8