TRX преди 1 година
родител
ревизия
6e2004129e

+ 0 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperSearch.java

@@ -24,9 +24,6 @@ public class SuperSearch implements Serializable {
     @JsonProperty("oid")
     private String oid;
 
-//    @Schema(description = "epId")
-//    private String epId;
-
     @Schema(description = "所属项目oid")
     private String projectOid;
 

+ 25 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/model/order/MarkPaidParam.java

@@ -0,0 +1,25 @@
+package com.zhongshu.card.client.openApi.model.order;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/11/12
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MarkPaidParam {
+
+    @Schema(description = "支付订单号")
+    private String orderNo;
+
+    @Schema(description = "支付结果备注,返回给设备展示")
+    private String payRemark;
+
+    @Schema(description = "支付用户的userId")
+    private String userId;
+}

+ 20 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/params/CloseOrderParam.java

@@ -0,0 +1,20 @@
+package com.zhongshu.card.client.openApi.params;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ *
+ * @author TRX
+ * @date 2025/3/12
+ */
+@Data
+public class CloseOrderParam {
+
+    @Schema(description = "")
+    private String closeReason;
+
+    @Schema(description = "")
+    private String closeUserId;
+
+}

+ 20 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/params/OrderNoParam.java

@@ -0,0 +1,20 @@
+package com.zhongshu.card.client.openApi.params;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/11/12
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderNoParam extends CloseOrderParam {
+
+    @Schema(description = "支付订单号")
+    private String orderNo;
+
+}

+ 1 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/params/PaymentNoParam.java

@@ -12,7 +12,7 @@ import lombok.NoArgsConstructor;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-public class PaymentNoParam {
+public class PaymentNoParam extends CloseOrderParam {
 
     @Schema(description = "支付订单号")
     private String paymentNo;

+ 25 - 5
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/order/ExpenseFlowOpenApiController.java

@@ -3,8 +3,10 @@ package com.zhongshu.card.server.core.controller.openAPI.order;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.client.openApi.model.ExpenseFlowOpenApiModel;
+import com.zhongshu.card.client.openApi.model.order.MarkPaidParam;
 import com.zhongshu.card.client.openApi.model.order.OrderCreateParam;
 import com.zhongshu.card.client.openApi.params.ExpenseFlowOpenApiSearch;
+import com.zhongshu.card.client.openApi.params.OrderNoParam;
 import com.zhongshu.card.client.openApi.params.PaymentNoParam;
 import com.zhongshu.card.server.core.service.openAPI.order.OrderOpenApiService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -40,16 +42,34 @@ public class ExpenseFlowOpenApiController {
         return expenseFlowOpenApiService.page(param);
     }
 
-    @Operation(summary = "订单详情", description = "订单详情")
+    @Operation(summary = "订单详情(支付订单号)", description = "订单详情")
     @RequestMapping(value = {"getDetailByPaymentNo"}, method = {RequestMethod.POST})
     public ResultContent<ExpenseFlowOpenApiModel> getDetailByPaymentNo(@RequestBody PaymentNoParam param) {
         return expenseFlowOpenApiService.getDetailByPaymentNo(param);
     }
 
-    @Operation(summary = "关闭订单", description = "关闭订单")
-    @RequestMapping(value = {"closeOrder"}, method = {RequestMethod.POST})
-    public ResultContent<ExpenseFlowOpenApiModel> closeOrder(@RequestBody PaymentNoParam param) {
-        return expenseFlowOpenApiService.closeOrder(param);
+    @Operation(summary = "订单详情(订单号查询)", description = "订单详情")
+    @RequestMapping(value = {"getDetailByOrderNo"}, method = {RequestMethod.POST})
+    public ResultContent<ExpenseFlowOpenApiModel> getDetailByOrderNo(@RequestBody OrderNoParam param) {
+        return expenseFlowOpenApiService.getDetailByOrderNo(param);
+    }
+
+    @Operation(summary = "关闭订单(支付订单号)", description = "关闭订单")
+    @RequestMapping(value = {"closeOrderByPaymentNo"}, method = {RequestMethod.POST})
+    public ResultContent closeOrderByPaymentNo(@RequestBody PaymentNoParam param) {
+        return expenseFlowOpenApiService.closeOrderByPaymentNo(param);
+    }
+
+    @Operation(summary = "关闭订单(订单号)", description = "关闭订单")
+    @RequestMapping(value = {"closeOrderByOrderNo"}, method = {RequestMethod.POST})
+    public ResultContent closeOrderByOrderNo(@RequestBody OrderNoParam param) {
+        return expenseFlowOpenApiService.closeOrderByOrderNo(param);
+    }
+
+    @Operation(summary = "标记订单已支付(订单号)", description = "标记订单已支付")
+    @RequestMapping(value = {"markOrderPaid"}, method = {RequestMethod.POST})
+    public ResultContent markOrderPaid(@RequestBody MarkPaidParam param) {
+        return expenseFlowOpenApiService.markOrderPaid(param);
     }
 
 }

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

@@ -1,11 +1,11 @@
 package com.zhongshu.card.server.core.domain.payment;
 
 import cn.hutool.json.JSONObject;
-import com.github.microservice.types.deviceUse.DeviceType;
-import com.github.microservice.types.deviceUse.OrderFromType;
 import com.github.microservice.pay.client.model.ledger.TransactionLogModel;
 import com.github.microservice.types.OrderModeType;
 import com.github.microservice.types.OrderState;
+import com.github.microservice.types.deviceUse.DeviceType;
+import com.github.microservice.types.deviceUse.OrderFromType;
 import com.github.microservice.types.payment.ChargeableType;
 import com.github.microservice.types.payment.PaymentDeviceType;
 import com.github.microservice.types.payment.PaymentType;
@@ -130,7 +130,20 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "订单所属的商户")
     private String shopOid;
 
-    //------------------------------消费关联的卡片信息 ---------------------
+    //------------------------------自动关闭订单 start---------------
+    @Schema(description = "是否已关闭")
+    private Boolean isClosed = Boolean.FALSE;
+
+    @Schema(description = "")
+    private String closeUserId;
+
+    @Schema(description = "")
+    private String closeReason;
+
+    @Schema(description = "关闭时间")
+    private Long closeTime;
+
+    //------------------------------消费关联的卡片信息 ---------------
 
     @Schema(description = "支付设备和方式")
     private PaymentDeviceType paymentDeviceType;

+ 74 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/order/OrderOpenApiService.java

@@ -9,8 +9,11 @@ import com.github.microservice.types.payment.ChargeableType;
 import com.zhongshu.card.client.model.payment.CreateOrderParam;
 import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
 import com.zhongshu.card.client.openApi.model.ExpenseFlowOpenApiModel;
+import com.zhongshu.card.client.openApi.model.order.MarkPaidParam;
 import com.zhongshu.card.client.openApi.model.order.OrderCreateParam;
+import com.zhongshu.card.client.openApi.params.CloseOrderParam;
 import com.zhongshu.card.client.openApi.params.ExpenseFlowOpenApiSearch;
+import com.zhongshu.card.client.openApi.params.OrderNoParam;
 import com.zhongshu.card.client.openApi.params.PaymentNoParam;
 import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
@@ -174,17 +177,45 @@ public class OrderOpenApiService extends SuperService {
         return ResultContent.buildSuccess(toModel(expenseFlow));
     }
 
+    /**
+     * 订单号查询详情
+     * @param param
+     * @return
+     */
+    public ResultContent<ExpenseFlowOpenApiModel> getDetailByOrderNo(OrderNoParam param) {
+        if (StringUtils.isEmpty(param.getOrderNo())) {
+            return ResultContent.buildFail("orderNo不能为空");
+        }
+        ExpenseFlow expenseFlow = expenseFlowDao.findTopByOrderNoOrderByCreateTimeDesc(param.getOrderNo());
+        if (ObjectUtils.isEmpty(expenseFlow)) {
+            return ResultContent.buildFail("订单不存在");
+        }
+        return ResultContent.buildSuccess(toModel(expenseFlow));
+    }
+
     /**
      * 关闭订单
      *
      * @param param
      * @return
      */
-    public ResultContent closeOrder(PaymentNoParam param) {
+    public ResultContent closeOrderByPaymentNo(PaymentNoParam param) {
         if (StringUtils.isEmpty(param.getPaymentNo())) {
             return ResultContent.buildFail("paymentNo不能为空");
         }
         ExpenseFlow expenseFlow = expenseFlowDao.findTopByPaymentNo(param.getPaymentNo());
+        return closeOrder(expenseFlow, param);
+    }
+
+    public ResultContent closeOrderByOrderNo(OrderNoParam param) {
+        if (StringUtils.isEmpty(param.getOrderNo())) {
+            return ResultContent.buildFail("orderNo不能为空");
+        }
+        ExpenseFlow expenseFlow = expenseFlowDao.findTopByOrderNoOrderByCreateTimeDesc(param.getOrderNo());
+        return closeOrder(expenseFlow, param);
+    }
+
+    public ResultContent closeOrder(ExpenseFlow expenseFlow, CloseOrderParam param) {
         if (ObjectUtils.isEmpty(expenseFlow)) {
             return ResultContent.buildFail("订单不存在");
         }
@@ -196,6 +227,48 @@ public class OrderOpenApiService extends SuperService {
             return ResultContent.buildFail("订单已支付成功,不能关闭");
         }
         expenseFlow.setOrderState(OrderState.CLOSED);
+        expenseFlow.setCloseTime(System.currentTimeMillis());
+        if (param != null) {
+            expenseFlow.setCloseUserId(param.getCloseUserId());
+            expenseFlow.setCloseReason(param.getCloseReason());
+        }
+        expenseFlowDao.save(expenseFlow);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 标记订单已支付
+     * @return
+     */
+    public ResultContent markOrderPaid(MarkPaidParam param) {
+        if (StringUtils.isEmpty(param.getOrderNo())) {
+            return ResultContent.buildFail("orderNo不能为空");
+        }
+        if (StringUtils.isEmpty(param.getUserId())) {
+            return ResultContent.buildFail("userId不能为空");
+        }
+        ExpenseFlow expenseFlow = expenseFlowDao.findTopByOrderNoOrderByCreateTimeDesc(param.getOrderNo());
+        if (ObjectUtils.isEmpty(expenseFlow)) {
+            return ResultContent.buildFail(String.format("订单不存在:%s", param.getOrderNo()));
+        }
+        if (expenseFlow.getOrderState() != OrderState.WAIT_PAYMENT) {
+            String stateStr = "";
+            if (expenseFlow.getOrderState() != null) {
+                stateStr = expenseFlow.getOrderState().getRemark();
+            }
+            return ResultContent.buildFail(String.format("订单不能支付:%s", stateStr));
+        }
+        if (expenseFlow.getVerifyParamIsSuccess() == null || !expenseFlow.getVerifyParamIsSuccess()) {
+            return ResultContent.buildFail(String.format("订单不能支付:%s", expenseFlow.getVerifyParamMsg()));
+        }
+
+        expenseFlow.setOrderState(OrderState.HAVE_PAID);
+        expenseFlow.setPayRemark(param.getPayRemark());
+        expenseFlow.setIsPaySuccess(Boolean.TRUE);
+        expenseFlow.setPaymentStatus("已支付");
+        expenseFlow.setPayUserId(param.getUserId());
+        expenseFlow.setIsPaid(Boolean.TRUE);
+
         expenseFlowDao.save(expenseFlow);
         return ResultContent.buildSuccess();
     }

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

@@ -487,7 +487,6 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
                         List<TransactionLogModel> list = content.getContent();
                         expenseFlow.setTransactionIds(list);
                         expenseFlow.setPaymentStatus(msg);
-                        expenseFlow.setPayRemark(msg);
                     } else {
                         expenseFlow.setPayRemark(String.format("调用支付中心失败: {}", content.getMsg()));
                     }