Browse Source

中台售后完成后更新本地的售后状态

zhangwl 1 month ago
parent
commit
49a5fcaecf

+ 16 - 4
src/main/java/zs/payment/controller/YxSupplyChannelManualController.java

@@ -18,7 +18,9 @@ import zs.payment.req.aftersales.AfterSalesOrderReq;
 import zs.payment.req.aftersales.AfterSalesOrderTypeReq;
 import zs.payment.resp.Result;
 
+import zs.payment.service.order.OrdersService;
 import zs.payment.service.supply.paysupply.PaySupplyService;
+import zs.payment.utils.TimeUtils;
 
 import javax.validation.Valid;
 import java.util.HashMap;
@@ -44,6 +46,12 @@ public class YxSupplyChannelManualController {
     @Autowired
     private KafkaProducer kafkaProducer;
 
+    /**
+     * 芸信供应的中台订单
+     */
+    @Autowired
+    private OrdersService ordersService;
+
     //订单支付(单独下单之后使用这个支付)
     @PostMapping("/orderPayOnly")
     public Result orderPayOnly(@Valid @RequestBody OrderPayReq req){
@@ -90,6 +98,7 @@ public class YxSupplyChannelManualController {
         OrderCallback callback = new OrderCallback();
         callback.setMessageType(messageType);
         callback.setMessage(req);
+        callback.setCreateTime(TimeUtils.getLongFromCurrentTime());
         //当 message_type == 商品类的事件 时跳过保存,其他类型才入库
         if (CallbackMessageType.GOODS_ALTER.equalsIgnoreCase(messageType) || CallbackMessageType.GOODS_UNDERCARRIAGE.equalsIgnoreCase(messageType)
         || CallbackMessageType.GOODS_ON_SALE.equalsIgnoreCase(messageType) ||  CallbackMessageType.GOODS_DELETE.equalsIgnoreCase(messageType)) {
@@ -130,7 +139,13 @@ public class YxSupplyChannelManualController {
 
         //售后通过
         if (CallbackMessageType.AFTER_SALES_PASS.equalsIgnoreCase(messageType)) {
-
+            //第三方订单编号
+            String thirdOrderSn = reqJson.getString("third_order_sn");
+            //售后id
+            Integer afterSalesId = reqJson.getInteger("after_sales_id");
+            if (StringUtils.isNotBlank(thirdOrderSn) && afterSalesId != null) {
+                ordersService.updateRefundStatusByAfterSales(thirdOrderSn, afterSalesId, 2);
+            }
         }
 
         callbackDao.save(callback);
@@ -159,7 +174,4 @@ public class YxSupplyChannelManualController {
         return paySupplyService.executeAfterSalesExpress(req.getOrderSn());
     }
 
-
-
-
 }

+ 2 - 2
src/main/java/zs/payment/dto/OrderItemDTO.java

@@ -13,7 +13,7 @@ public class OrderItemDTO {
 
     // 子订单id,用于售后退款
     private Integer id;
-    // 创建时间
+    // 创建时间 (时间戳毫秒)
     private Long created_at;
     // 修改时间
     private Long updated_at;
@@ -45,7 +45,7 @@ public class OrderItemDTO {
     private String image_url;
     // 发货状态 0未发货 1已发货 2部分发货
     private Integer send_status;
-    // 退款状态
+    // 退款状态 1-退款中 2-完成退款
     private Integer refund_status;
     //
     private Integer trade_id;

+ 3 - 0
src/main/java/zs/payment/entity/mongodb/supply/OrderCallback.java

@@ -28,4 +28,7 @@ public class OrderCallback {
     //原始消息
     private Object message;
 
+    //创建时间(毫秒)
+    private Long createTime;
+
 }

+ 5 - 0
src/main/java/zs/payment/service/order/OrdersService.java

@@ -18,4 +18,9 @@ public interface OrdersService {
     Orders getOrderBySn(String orderSn);
 
     Orders saveOrders(Orders orders);
+
+    /**
+     * 通过第三方订单号+售后ID查询唯一Orders并更新refund_status
+     */
+    void updateRefundStatusByAfterSales(String thirdOrderSn, Integer afterSalesId, Integer refundStatus);
 }

+ 17 - 0
src/main/java/zs/payment/service/order/impl/OrdersServiceImpl.java

@@ -1,15 +1,19 @@
 package zs.payment.service.order.impl;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 import zs.payment.dao.OrderDao;
 import zs.payment.entity.mongodb.supply.Orders;
 import zs.payment.service.order.OrdersService;
+import zs.payment.utils.TimeUtils;
 
 import java.util.List;
 
+@Slf4j
 @Service
 public class OrdersServiceImpl implements OrdersService {
 
@@ -38,4 +42,17 @@ public class OrdersServiceImpl implements OrdersService {
     public Orders saveOrders(Orders orders) {
         return orderDao.save(orders);
     }
+
+    @Override
+    public void updateRefundStatusByAfterSales(String thirdOrderSn, Integer afterSalesId, Integer refundStatus) {
+        Query query = new Query(
+            Criteria.where("third_order_sn").is(thirdOrderSn)
+                .and("order_items.after_sales.id").is(afterSalesId)
+        );
+        Update update = new Update()
+                .set("refund_status", refundStatus)
+                .set("updated_at", TimeUtils.getLongFromCurrentTime());
+        long modified = orderDao.updateFirst(query, update);
+        log.info("售后通过更新订单 refund_status: thirdOrderSn={}, afterSalesId={}, modified={}", thirdOrderSn, afterSalesId, modified);
+    }
 }

+ 4 - 0
src/main/java/zs/payment/service/supply/paysupply/impl/PaySupplyServiceImpl.java

@@ -28,6 +28,7 @@ import zs.payment.service.supply.order.OrderSupplyService;
 import zs.payment.service.supply.paysupply.PaySupplyService;
 import zs.payment.service.supply.token.SupplyTokenService;
 import zs.payment.utils.HttpUtil;
+import zs.payment.utils.TimeUtils;
 
 import java.util.HashMap;
 import java.util.List;
@@ -150,6 +151,9 @@ public class PaySupplyServiceImpl implements PaySupplyService {
                 AfterSalesDTO afterSalesDTO = new AfterSalesDTO();
                 afterSalesDTO.setId(respJson.getInteger("data"));
                 item.setAfter_sales(afterSalesDTO);
+                //退款中
+                item.setRefund_status(1);
+                item.setCreated_at(TimeUtils.getLongFromCurrentTime());
 
                 // 存储售后日志
                 AfterSalesLog salesLog = new AfterSalesLog();