TRX 1 жил өмнө
parent
commit
641ec7f89a

+ 17 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseRefundParam.java

@@ -0,0 +1,17 @@
+package com.zhongshu.card.client.model.payment;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/8/1
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ExpenseRefundParam {
+    private String id;
+    private String remark;
+}

+ 4 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/payment/ExpenseFlowService.java

@@ -3,6 +3,7 @@ package com.zhongshu.card.client.service.payment;
 import com.zhongshu.card.client.model.payment.ExpenseFlowCount;
 import com.zhongshu.card.client.model.payment.ExpenseFlowModel;
 import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
+import com.zhongshu.card.client.model.payment.ExpenseRefundParam;
 import com.zhongshu.card.client.ret.ResultContent;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -19,4 +20,7 @@ public interface ExpenseFlowService {
 
     ResultContent<ExpenseFlowModel> getDetail(String id);
 
+    // 商家直接消费订单退款
+    ResultContent expenseShopRefund(ExpenseRefundParam param);
+
 }

+ 2 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/utils/type/OrderType.java

@@ -14,6 +14,8 @@ public enum OrderType {
 
     HAVE_PAID("已支付"),
 
+    PAID_ERROR("支付失败"),
+
     WAIT_USE("待使用"),
 
     USED("已使用"),

+ 9 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/payment/ExpenseFlowController.java

@@ -7,6 +7,7 @@ import com.zhongshu.card.client.model.base.IDParam;
 import com.zhongshu.card.client.model.payment.ExpenseFlowCount;
 import com.zhongshu.card.client.model.payment.ExpenseFlowModel;
 import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
+import com.zhongshu.card.client.model.payment.ExpenseRefundParam;
 import com.zhongshu.card.client.model.school.BookInfoAddParam;
 import com.zhongshu.card.client.model.school.BookInfoModel;
 import com.zhongshu.card.client.model.school.BookInfoSearch;
@@ -66,10 +67,17 @@ public class ExpenseFlowController {
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "统计消费总数(当前用户)", description = "统计消费总数")
     @RequestMapping(value = {"countPayment"}, method = {RequestMethod.POST})
-    public ResultContent<ExpenseFlowCount> countPayment(ExpenseFlowSearch param) {
+    public ResultContent<ExpenseFlowCount> countPayment(@RequestBody ExpenseFlowSearch param) {
         param.setIsPaySuccess(Boolean.TRUE);
         param.setUserId(authHelper.getCurrentUser().getUserId());
         return expenseFlowService.countPayment(param);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "商家直接消费订单退款", description = "商家直接消费订单退款")
+    @RequestMapping(value = {"expenseShopRefund"}, method = {RequestMethod.POST})
+    public ResultContent expenseShopRefund(@RequestBody ExpenseRefundParam param) {
+        return expenseFlowService.expenseShopRefund(param);
+    }
+
 }

+ 3 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java

@@ -158,6 +158,9 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "是否退款")
     private Boolean isRefund;
 
+    @Schema(description = "退款用户userId")
+    private String refundUserId;
+
     @Schema(description = "退款状态")
     private RefundState refundState;
 

+ 45 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

@@ -10,13 +10,11 @@ import com.github.microservice.models.type.PaymentType;
 import com.zhongshu.card.client.model.payment.ExpenseFlowCount;
 import com.zhongshu.card.client.model.payment.ExpenseFlowModel;
 import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
+import com.zhongshu.card.client.model.payment.ExpenseRefundParam;
 import com.zhongshu.card.client.ret.ResultContent;
 import com.zhongshu.card.client.ret.ResultMessage;
 import com.zhongshu.card.client.service.payment.ExpenseFlowService;
-import com.zhongshu.card.client.utils.type.DataState;
-import com.zhongshu.card.client.utils.type.OrderType;
-import com.zhongshu.card.client.utils.type.RechargeType;
-import com.zhongshu.card.client.utils.type.UserState;
+import com.zhongshu.card.client.utils.type.*;
 import com.zhongshu.card.client.utils.type.school.CardState;
 import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
@@ -177,6 +175,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             entity.setPaymentStatus("支付成功");
             entity.setIsPaySuccess(Boolean.TRUE);
             entity.setPayRemark("支付成功");
+            entity.setOrderType(OrderType.HAVE_PAID);
         } else {
             String msg = content.getMsg();
             if (StringUtils.isNotEmpty(msg) && msg.contains("Connection reset")) {
@@ -185,6 +184,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             entity.setPaymentStatus(msg);
             entity.setIsPaySuccess(Boolean.FALSE);
             entity.setPayRemark(content.getMsg());
+            entity.setOrderType(OrderType.PAID_ERROR);
         }
         expenseFlowDao.save(entity);
         return ResultContent.buildSuccess();
@@ -529,6 +529,47 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         return ResultContent.buildSuccess(model);
     }
 
+    /**
+     * 商家端用户退款
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent expenseShopRefund(ExpenseRefundParam param) {
+        ExpenseFlow expenseFlow = expenseFlowDao.findTopById(param.getId());
+        if (ObjectUtils.isEmpty(expenseFlow)) {
+            return ResultContent.buildSuccess(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+        }
+        if (expenseFlow.getOrderType() == OrderType.HAVE_PAID) {
+            return ResultContent.buildFail(String.format("订单状态不是已支付状态,不能退款"));
+        }
+        // 调用支付中心退款
+        AmountUpdateParam updateParam = new AmountUpdateParam();
+        updateParam.setOid(expenseFlow.getProjectOid());
+        updateParam.setUserId(expenseFlow.getUserId());
+        updateParam.setShopId(expenseFlow.getShopOid());
+        updateParam.setSchoolId(expenseFlow.getSchoolOid());
+        updateParam.setTotal(expenseFlow.getPayAmount());
+        updateParam.setOutTradeNo(expenseFlow.getPaymentNo());
+
+        // 调用支付中心退款
+        com.zhongshu.payment.client.ret.ResultContent content = walletFeignService.refund(updateParam);
+        expenseFlow.setIsRefund(Boolean.TRUE);
+        expenseFlow.setRefundRemark(param.getRemark());
+        expenseFlow.setRefundTime(System.currentTimeMillis());
+        if (content.isSuccess()) {
+            // 退款人
+            expenseFlow.setRefundUserId(getCurrentUserId());
+            expenseFlow.setOrderType(OrderType.REFUNDED);
+            expenseFlow.setRefundState(RefundState.Refunded);
+            expenseFlow.setRefuseRemark("退款成功");
+            expenseFlowDao.save(expenseFlow);
+            return ResultContent.buildSuccess();
+        } else {
+            return ResultContent.buildFail(String.format("%s", content.getMsg()));
+        }
+    }
+
     public ExpenseFlowModel toModel(ExpenseFlow entity) {
         ExpenseFlowModel model = new ExpenseFlowModel();
         if (ObjectUtils.isNotEmpty(entity)) {