TRX 1 سال پیش
والد
کامیت
537a42bb09

+ 19 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/type/payment/SettlementState.java

@@ -0,0 +1,19 @@
+package com.zhongshu.card.client.type.payment;
+
+import lombok.Getter;
+
+/**
+ * 订单结算状态
+ */
+public enum SettlementState {
+    AlreadySettled("已结算"),
+    Unsettled("未结算"),
+    ;
+
+    @Getter
+    private String remark;
+
+    SettlementState(String remark) {
+        this.remark = remark;
+    }
+}

+ 7 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/ExpenseFlowOpenApiController.java

@@ -54,4 +54,11 @@ public class ExpenseFlowOpenApiController {
         return expenseFlowOpenApiService.getDetailByPaymentNo(param);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "关闭订单", description = "关闭订单")
+    @RequestMapping(value = {"closeOrder"}, method = {RequestMethod.POST})
+    public ResultContent<ExpenseFlowOpenApiModel> closeOrder(@RequestBody PaymentNoParam param) {
+        return expenseFlowOpenApiService.closeOrder(param);
+    }
+
 }

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

@@ -7,6 +7,7 @@ import com.github.microservice.types.OrderModeType;
 import com.github.microservice.types.OrderState;
 import com.zhongshu.card.client.model.school.AreaSimpleModel;
 import com.zhongshu.card.client.type.RefundState;
+import com.zhongshu.card.client.type.payment.SettlementState;
 import com.zhongshu.card.server.core.domain.base.SuperMain;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
 import com.zhongshu.card.server.core.domain.school.CardInfo;
@@ -229,4 +230,12 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "退款账单流量")
     private List<String> refundTransactionIds = new ArrayList<String>();
 
+    //-------------------------结算信息 start ----------------
+
+    @Schema(description = "结算状态")
+    private SettlementState settlementState = SettlementState.Unsettled;
+
+    @Schema(description = "结算时间")
+    private Long settlementTime;
+    
 }

+ 27 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/ExpenseFlowOpenApiService.java

@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.service.openAPI;
 import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.types.OrderModeType;
+import com.github.microservice.types.OrderState;
 import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
 import com.zhongshu.card.client.openApi.model.ExpenseFlowOpenApiModel;
 import com.zhongshu.card.client.openApi.params.ExpenseFlowOpenApiSearch;
@@ -75,6 +76,32 @@ public class ExpenseFlowOpenApiService extends SuperService {
         return ResultContent.buildSuccess(toModel(expenseFlow));
     }
 
+    /**
+     * 关闭订单
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent closeOrder(PaymentNoParam param) {
+        if (StringUtils.isEmpty(param.getPaymentNo())) {
+            return ResultContent.buildFail("paymentNo不能为空");
+        }
+        ExpenseFlow expenseFlow = expenseFlowDao.findTopByPaymentNo(param.getPaymentNo());
+        if (ObjectUtils.isEmpty(expenseFlow)) {
+            return ResultContent.buildFail("订单不存在");
+        }
+        OrderState orderType = expenseFlow.getOrderType();
+        if (orderType == OrderState.CLOSED) {
+            return ResultContent.buildFail("订单已关闭");
+        }
+        if (expenseFlow.getIsPaySuccess() != null && expenseFlow.getIsPaySuccess()) {
+            return ResultContent.buildFail("订单已支付成功,不能关闭");
+        }
+        expenseFlow.setOrderType(OrderState.CLOSED);
+        expenseFlowDao.save(expenseFlow);
+        return ResultContent.buildSuccess();
+    }
+
     //----------------------------数据默认转换 start-----------------
 
     public ExpenseFlowOpenApiModel toModel(ExpenseFlow entity) {

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

@@ -26,6 +26,7 @@ import com.zhongshu.card.client.service.payment.ExpenseFlowService;
 import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.client.type.StatisticType;
 import com.zhongshu.card.client.type.UserState;
+import com.zhongshu.card.client.type.payment.SettlementState;
 import com.zhongshu.card.client.type.school.CardState;
 import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
@@ -145,7 +146,8 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         expenseFlow.setPaymentDeviceType(PaymentDeviceType.HxzConsumTransactions);
 
         expenseFlow.setOrderType(OrderState.WAIT_PAYMENT);
-
+        // 默认未结算状态
+        expenseFlow.setSettlementState(SettlementState.Unsettled);
         // 验证参数、填充数据
         commonVerifyExpenseFlow(expenseFlow);
         return ResultContent.buildSuccess(expenseFlow);
@@ -173,7 +175,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             if (entity.getMode() == 0) {
                 entity.setOrderModeType(OrderModeType.Consume);
                 // 支付
-                payCallService.pay(entity);
+                payCallService.payOrder(entity);
                 expenseFlowDao.save(entity);
             } else if (entity.getMode() == 2) {
                 // 查询余额模式
@@ -750,6 +752,9 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         if (expenseFlow.getOrderType() != OrderState.HAVE_PAID) {
             return ResultContent.buildFail(String.format("未支付成功,不能退款"));
         }
+        if (expenseFlow.getSettlementState() == SettlementState.AlreadySettled) {
+            return ResultContent.buildFail("订单已结算,不能退款");
+        }
         ResultContent resultContent = payCallService.refund(expenseFlow, param);
         if (resultContent.isFailed()) {
             return ResultContent.buildFail(resultContent.getMsg());

+ 6 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/PayCallService.java

@@ -50,8 +50,13 @@ public class PayCallService extends SuperService {
      * @param entity
      * @return
      */
-    public ResultContent pay(ExpenseFlow entity) {
+    public ResultContent payOrder(ExpenseFlow entity) {
         PaymentType paymentType = entity.getPaymentType();
+        OrderState orderType = entity.getOrderType();
+        if (orderType != OrderState.WAIT_PAYMENT) {
+            return ResultContent.buildFail(String.format("订单不能支付:%s", orderType.getRemark()));
+        }
+        // 判断支付渠道
         if (paymentType == PaymentType.UserWallet) {
             return balancePay(entity);
         }