skyline 1 месяц назад
Родитель
Сommit
dca96c6586

+ 38 - 0
haha-common/src/main/java/com/haha/common/enums/OpenType.java

@@ -0,0 +1,38 @@
+package com.haha.common.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum OpenType {
+
+    IN("IN", "上货"),
+    OUT("OUT", "消费");
+
+    private final String code;
+    private final String description;
+
+    OpenType(String code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    public static OpenType fromCode(String code) {
+        if (code == null) {
+            return null;
+        }
+        for (OpenType type : values()) {
+            if (type.code.equals(code)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static boolean isIn(String code) {
+        return IN.code.equals(code);
+    }
+
+    public static boolean isOut(String code) {
+        return OUT.code.equals(code);
+    }
+}

+ 49 - 0
haha-common/src/main/java/com/haha/common/enums/OrderStatus.java

@@ -0,0 +1,49 @@
+package com.haha.common.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum OrderStatus {
+
+    CANCELLED(0, "已取消"),
+    PENDING_PAYMENT(1, "待支付"),
+    COMPLETED(2, "已完成"),
+    CLOSED(3, "已关闭");
+
+    private final int code;
+    private final String description;
+
+    OrderStatus(int code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    public static OrderStatus fromCode(Integer code) {
+        if (code == null) {
+            return null;
+        }
+        for (OrderStatus status : values()) {
+            if (status.code == code) {
+                return status;
+            }
+        }
+        return null;
+    }
+
+    public static String getDescription(Integer code) {
+        OrderStatus status = fromCode(code);
+        return status != null ? status.description : "未知";
+    }
+
+    public static boolean isCancelled(Integer code) {
+        return code != null && code == CANCELLED.code;
+    }
+
+    public static boolean isPendingPayment(Integer code) {
+        return code != null && code == PENDING_PAYMENT.code;
+    }
+
+    public static boolean isCompleted(Integer code) {
+        return code != null && code == COMPLETED.code;
+    }
+}

+ 44 - 0
haha-common/src/main/java/com/haha/common/enums/PayScoreState.java

@@ -0,0 +1,44 @@
+package com.haha.common.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum PayScoreState {
+
+    CREATED("CREATED", "已创建"),
+    DOING("DOING", "进行中"),
+    DONE("DONE", "已完成"),
+    REVOKED("REVOKED", "已取消");
+
+    private final String code;
+    private final String description;
+
+    PayScoreState(String code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    public static PayScoreState fromCode(String code) {
+        if (code == null) {
+            return null;
+        }
+        for (PayScoreState state : values()) {
+            if (state.code.equals(code)) {
+                return state;
+            }
+        }
+        return null;
+    }
+
+    public static boolean isFinished(String code) {
+        return DONE.code.equals(code) || REVOKED.code.equals(code);
+    }
+
+    public static boolean isDone(String code) {
+        return DONE.code.equals(code);
+    }
+
+    public static boolean isRevoked(String code) {
+        return REVOKED.code.equals(code);
+    }
+}

+ 48 - 0
haha-common/src/main/java/com/haha/common/enums/PayStatus.java

@@ -0,0 +1,48 @@
+package com.haha.common.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum PayStatus {
+
+    UNPAID("UNPAID", "未支付"),
+    PAID("PAID", "已支付"),
+    REFUND("REFUND", "已退款");
+
+    private final String code;
+    private final String description;
+
+    PayStatus(String code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    public static PayStatus fromCode(String code) {
+        if (code == null) {
+            return null;
+        }
+        for (PayStatus status : values()) {
+            if (status.code.equals(code)) {
+                return status;
+            }
+        }
+        return null;
+    }
+
+    public static String getDescription(String code) {
+        PayStatus status = fromCode(code);
+        return status != null ? status.description : "未知";
+    }
+
+    public static boolean isUnpaid(String code) {
+        return UNPAID.code.equals(code);
+    }
+
+    public static boolean isPaid(String code) {
+        return PAID.code.equals(code);
+    }
+
+    public static boolean isRefund(String code) {
+        return REFUND.code.equals(code);
+    }
+}

+ 1 - 1
haha-miniapp/src/main/java/com/haha/miniapp/controller/PaymentController.java

@@ -123,7 +123,7 @@ public class PaymentController {
 
             Map<String, Object> params = new HashMap<>();
 
-            if ("wechat_payscore".equalsIgnoreCase(channel)) {
+            if (PaymentChannel.WECHAT_PAYSCORE.getCode().equalsIgnoreCase(channel)) {
                 StringBuilder sb = new StringBuilder();
                 try (BufferedReader reader = request.getReader()) {
                     String line;

+ 9 - 6
haha-service/src/main/java/com/haha/service/impl/DeviceServiceImpl.java

@@ -7,6 +7,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.haha.common.constant.DeviceConstants;
 import com.haha.common.constant.OrderConstants;
 import com.haha.common.enums.DeviceDoorStatus;
+import com.haha.common.enums.OpenType;
+import com.haha.common.enums.OrderStatus;
+import com.haha.common.enums.PayStatus;
 import com.haha.common.exception.BusinessException;
 import com.haha.common.utils.EntityLabelUtils;
 import com.haha.entity.Device;
@@ -194,8 +197,9 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
     public OpenDoorVO scanOpenDoor(String deviceId, Long userId) throws HahaException {
         log.info("用户 {} 请求打开设备 {}", userId, deviceId);
 
+        // TODO: 微信商户号开通后恢复此校验
         // 1. 检查用户支付分开通状态
-        checkUserPayscoreStatus(userId);
+        // checkUserPayscoreStatus(userId);
 
         // 2. 检查设备在线状态
         DeviceOnlineStatus onlineStatus = hahaClient.getDeviceApi().getOnlineStatus(deviceId);
@@ -215,8 +219,8 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
         }
 
         // 3. 生成商户用户编号并开门
-        String openType = "OUT"; // OUT表示消费,IN表示上货
-        String source = "MINIAPP"; // 请求来源
+        String openType = OpenType.OUT.getCode();
+        String source = "MINIAPP";
 
         OpenDoorResult openResult = hahaClient.getDeviceApi().openDoor(deviceId, String.valueOf(userId), openType, doorIndex, source);
 
@@ -224,11 +228,10 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
         Order order = new Order();
         order.setOrderNo(OrderUtils.getOrderNo());
         order.setActivityId(openResult.getActivityId());
-//         order.setOutTradeNo(""); todo 收到支付完成的通知时更新为支付订单号
         order.setUserId(userId);
         order.setDeviceId(deviceId);
-        order.setStatus(OrderConstants.STATUS_PENDING_PAYMENT);
-        order.setPayStatus(OrderConstants.PAY_STATUS_UNPAID);
+        order.setStatus(OrderStatus.PENDING_PAYMENT.getCode());
+        order.setPayStatus(PayStatus.UNPAID.getCode());
         order.setCreateTime(LocalDateTime.now());
 
         boolean saved = orderService.save(order);

+ 7 - 4
haha-service/src/main/java/com/haha/service/impl/HahaCallbackServiceImpl.java

@@ -4,6 +4,9 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.haha.common.enums.DeviceDoorStatus;
+import com.haha.common.enums.PayScoreState;
+import com.haha.common.enums.PaymentChannel;
+import com.haha.common.enums.ProductAuditStatus;
 import com.haha.common.enums.RecognizeConsumeType;
 import com.haha.entity.Order;
 import com.haha.entity.OrderGoods;
@@ -194,13 +197,13 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
             log.info("新品审核结果 - ID: {}, 商品名: {}, 状态: {}, code: {}, barCode: {}", 
                     id, name, status, code, barCode);
 
-            if (status != null && status == 2) {
+            if (status != null && status == ProductAuditStatus.REJECTED.getCode()) {
                 log.warn("新品 {} 被拒绝,原因: {}", name, rejectReason);
             }
 
             newProductApplyService.updateByCallback(id, status, code, rejectReason);
 
-            if (status != null && status == 3 && code != null && !code.isEmpty()) {
+            if (status != null && status == ProductAuditStatus.LISTED.getCode() && code != null && !code.isEmpty()) {
                 syncProductToMerchant(code, name);
             }
 
@@ -710,7 +713,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
      */
     private void processPayScorePayment(Order order, Object orderMoney) {
         // 检查是否为支付分订单
-        if (order.getPayChannel() == null || !"wechat_payscore".equals(order.getPayChannel())) {
+        if (order.getPayChannel() == null || !PaymentChannel.WECHAT_PAYSCORE.getCode().equals(order.getPayChannel())) {
             log.debug("订单未使用支付分,跳过扣费 - orderId: {}, payChannel: {}",
                     order.getId(), order.getPayChannel());
             return;
@@ -729,7 +732,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
         }
 
         // 检查订单状态,避免重复扣费
-        if ("DONE".equals(order.getPayScoreState()) || "REVOKED".equals(order.getPayScoreState())) {
+        if (PayScoreState.isFinished(order.getPayScoreState())) {
             log.info("订单已完结或已取消,跳过扣费 - orderId: {}, payScoreState: {}",
                     order.getId(), order.getPayScoreState());
             return;

+ 6 - 4
haha-service/src/main/java/com/haha/service/impl/OrderServiceImpl.java

@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.haha.common.constant.OrderConstants;
+import com.haha.common.enums.OrderStatus;
+import com.haha.common.enums.PayStatus;
 import com.haha.common.enums.PaymentChannel;
 import com.haha.common.exception.BusinessException;
 import com.haha.common.utils.EntityLabelUtils;
@@ -384,7 +386,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 }
             } else if (order.getOutTradeNo() != null && !order.getOutTradeNo().isEmpty()) {
                 order.setPayType("微信支付"); // 兼容旧数据
-            } else if ("PAID".equals(order.getPayStatus())) {
+            } else if (PayStatus.isPaid(order.getPayStatus())) {
                 order.setPayType("免费");
             }
         }
@@ -436,7 +438,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                         order.getId(), result.getOutOrderNo());
                 order.setPayScoreOrderId(result.getOutOrderNo());
                 order.setPayScoreState(result.getState());
-                order.setPayChannel("wechat_payscore");
+                order.setPayChannel(PaymentChannel.WECHAT_PAYSCORE.getCode());
                 order.setPayType("微信支付分");
                 this.updateById(order);
             } else {
@@ -462,8 +464,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         if (order.getPayScoreOrderId() == null) {
             log.warn("[支付分集成] 订单未创建支付分服务订单,直接更新状态 - orderId: {}", orderId);
             order.setTotalAmount(totalAmount);
-            order.setPayStatus(OrderConstants.PAY_STATUS_PAID);
-            order.setStatus(OrderConstants.STATUS_COMPLETED);
+            order.setPayStatus(PayStatus.PAID.getCode());
+            order.setStatus(OrderStatus.COMPLETED.getCode());
             order.setPayTime(LocalDateTime.now());
             return this.updateById(order);
         }

+ 19 - 15
haha-service/src/main/java/com/haha/service/payment/payscore/impl/PayScoreServiceImpl.java

@@ -1,6 +1,10 @@
 package com.haha.service.payment.payscore.impl;
 
 import com.haha.common.constant.OrderConstants;
+import com.haha.common.enums.OrderStatus;
+import com.haha.common.enums.PayScoreState;
+import com.haha.common.enums.PayStatus;
+import com.haha.common.enums.PaymentChannel;
 import com.haha.entity.Order;
 import com.haha.service.OrderService;
 import com.haha.service.payment.config.WxPayConfig;
@@ -59,7 +63,7 @@ public class PayScoreServiceImpl implements PayScoreService {
 
         Order order = validateAndGetOrder(orderId);
 
-        if (order.getPayScoreOrderId() != null && !"REVOKED".equals(order.getPayScoreState())) {
+        if (order.getPayScoreOrderId() != null && !PayScoreState.REVOKED.getCode().equals(order.getPayScoreState())) {
             log.warn("[支付分服务] 订单已存在支付分订单 - orderId: {}, payScoreState: {}", 
                     orderId, order.getPayScoreState());
             return PayScoreResult.fail("ORDER_EXISTS", "该订单已创建支付分服务订单");
@@ -91,7 +95,7 @@ public class PayScoreServiceImpl implements PayScoreService {
                 order.setServiceId(wxPayConfig.getServiceId());
             }
             order.setServiceStartTime(LocalDateTime.now());
-            order.setPayChannel("wechat_payscore");
+            order.setPayChannel(PaymentChannel.WECHAT_PAYSCORE.getCode());
             order.setPayType("微信支付分");
             orderService.updateById(order);
 
@@ -130,7 +134,7 @@ public class PayScoreServiceImpl implements PayScoreService {
             return PayScoreResult.fail("ORDER_NOT_CREATED", "该订单未创建支付分服务订单");
         }
 
-        if ("DONE".equals(order.getPayScoreState()) || "REVOKED".equals(order.getPayScoreState())) {
+        if (PayScoreState.isFinished(order.getPayScoreState())) {
             log.warn("[支付分服务] 订单已完结或已取消 - orderId: {}, payScoreState: {}", 
                     orderId, order.getPayScoreState());
             return PayScoreResult.fail("ORDER_COMPLETED", "该订单已完结或已取消");
@@ -179,7 +183,7 @@ public class PayScoreServiceImpl implements PayScoreService {
             return PayScoreResult.fail("ORDER_NOT_CREATED", "该订单未创建支付分服务订单");
         }
 
-        if ("DONE".equals(order.getPayScoreState()) || "REVOKED".equals(order.getPayScoreState())) {
+        if (PayScoreState.isFinished(order.getPayScoreState())) {
             log.warn("[支付分服务] 订单已完结或已取消 - orderId: {}, payScoreState: {}", 
                     orderId, order.getPayScoreState());
             return PayScoreResult.fail("ORDER_COMPLETED", "该订单已完结或已取消");
@@ -192,8 +196,8 @@ public class PayScoreServiceImpl implements PayScoreService {
         PayScoreResult result = payScoreStrategy.cancelServiceOrder(request);
 
         if (result.isSuccess()) {
-            order.setPayScoreState("REVOKED");
-            order.setStatus(OrderConstants.STATUS_CANCELLED);
+            order.setPayScoreState(PayScoreState.REVOKED.getCode());
+            order.setStatus(OrderStatus.CANCELLED.getCode());
             orderService.updateById(order);
 
             log.info("[支付分服务] 取消服务订单成功 - orderId: {}", orderId);
@@ -251,12 +255,12 @@ public class PayScoreServiceImpl implements PayScoreService {
         }
 
         if ("PAYSCORE.USER_CONFIRMED".equals(eventType)) {
-            order.setPayScoreState("DOING");
+            order.setPayScoreState(PayScoreState.DOING.getCode());
             log.info("[支付分服务] 用户确认使用服务 - orderId: {}", order.getId());
         } else if ("PAYSCORE.USER_PAID".equals(eventType)) {
-            order.setPayScoreState("DONE");
-            order.setPayStatus(OrderConstants.PAY_STATUS_PAID);
-            order.setStatus(OrderConstants.STATUS_COMPLETED);
+            order.setPayScoreState(PayScoreState.DONE.getCode());
+            order.setPayStatus(PayStatus.PAID.getCode());
+            order.setStatus(OrderStatus.COMPLETED.getCode());
             order.setPayTime(result.getPayTime() != null ? result.getPayTime() : LocalDateTime.now());
             if (result.getTotalAmount() != null) {
                 order.setTotalAmount(result.getTotalAmount());
@@ -301,14 +305,14 @@ public class PayScoreServiceImpl implements PayScoreService {
         if (newState != null && !newState.equals(oldState)) {
             order.setPayScoreState(newState);
 
-            if ("DONE".equals(newState)) {
-                order.setPayStatus(OrderConstants.PAY_STATUS_PAID);
-                order.setStatus(OrderConstants.STATUS_COMPLETED);
+            if (PayScoreState.isDone(newState)) {
+                order.setPayStatus(PayStatus.PAID.getCode());
+                order.setStatus(OrderStatus.COMPLETED.getCode());
                 if (result.getTotalAmount() != null) {
                     order.setTotalAmount(result.getTotalAmount());
                 }
-            } else if ("REVOKED".equals(newState)) {
-                order.setStatus(OrderConstants.STATUS_CANCELLED);
+            } else if (PayScoreState.isRevoked(newState)) {
+                order.setStatus(OrderStatus.CANCELLED.getCode());
             }
 
             orderService.updateById(order);