fubojin пре 1 недеља
родитељ
комит
bce40fc61b

+ 13 - 0
yami-shop-api/src/main/java/com/yami/shop/api/controller/PayNoticeController.java

@@ -16,7 +16,10 @@ import com.yami.shop.bean.model.Order;
 import com.yami.shop.bean.model.OrderItem;
 import com.yami.shop.bean.model.RefundDelivery;
 import com.yami.shop.common.enums.PayType;
+import com.yami.shop.common.util.hb.HBR;
 import com.yami.shop.service.*;
+import com.yami.shop.service.hb.IHBOrderService;
+import com.yami.shop.service.hb.impl.HBOrderService;
 import com.yami.shop.wx.service.WxProviderService;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
@@ -49,6 +52,8 @@ public class PayNoticeController {
 
     private final WxProviderService wxProviderService;
 
+    private final IHBOrderService hbOrderService;
+
     @SneakyThrows
     @RequestMapping("/order/wxNotify")
     public ResponseEntity<String> wxNotify(HttpServletRequest request, HttpServletResponse response) {
@@ -75,8 +80,16 @@ public class PayNoticeController {
                     skuService.removeSkuCacheBySkuId(orderItem.getSkuId(), orderItem.getProdId());
                 }
             }
+
+            //推送海博订单
+            for (Order order : orders) {
+                hbOrderService.createOrderAsync(order.getOrderNumber());
+            }
         }
 
+
+
+
         return ResponseEntity.ok(payInfoBo.getSuccessString());
     }
 

+ 14 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/hb/OrderPaymentRequest.java

@@ -0,0 +1,14 @@
+package com.yami.shop.bean.dto.hb;
+
+import lombok.Data;
+
+@Data
+public class OrderPaymentRequest {
+    //1001:支付宝
+    //1002:微信
+    //1301:积分
+    //9999:其他
+    private Integer paymentType; // 支付类型
+    private Long paymentAmount; // 支付金额
+    private Integer paymentNum; // 支付数量
+}

+ 22 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/hb/ProductRequest.java

@@ -0,0 +1,22 @@
+package com.yami.shop.bean.dto.hb;
+
+import lombok.Data;
+
+@Data
+public class ProductRequest {
+
+    private String skuName; // 商品名称
+    private Long skuId; // 商品中台skuId
+    private String channelSkuId; // 渠道商品id
+    private String upcCode; // 商品upc
+    private Integer refundCount; // 商品个数
+    private Double skuWeight; // 本次退掉的重量
+    private Long refundMoney; // 单品退款总金额
+    private String transId; // 商品唯一码
+    private Long businessSingleProductSubsidy; // 商家单品补贴金额
+    private Long platformSingleProductSubsidy; // 平台单品补贴金额
+    private Long businessOrderSubsidy; // 分摊商家整单补贴金额
+    private Long platformOrderSubsidy; // 分摊平台整单补贴金额
+    private Long totalSkuPrice; // 商品原总价
+
+}

+ 2 - 25
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/hb/ThirdPartyRefundRequest.java

@@ -33,30 +33,7 @@ public class ThirdPartyRefundRequest {
     private Long totalSkuPrice; // 商品原总价
     private Integer refundSource; // 退款发起方
     private String jsonParam; // 补丁参数
-    private List<Product> products; // 本次退款商品
-    private List<OrderPayment> orderPayments; // 支付信息
+    private List<ProductRequest> products; // 本次退款商品
+    private List<OrderPaymentRequest> orderPayments; // 支付信息
 
-    @Data
-    public static class Product {
-        private String skuName; // 商品名称
-        private Long skuId; // 商品中台skuId
-        private String channelSkuId; // 渠道商品id
-        private String upcCode; // 商品upc
-        private Integer refundCount; // 商品个数
-        private Double skuWeight; // 本次退掉的重量
-        private Long refundMoney; // 单品退款总金额
-        private String transId; // 商品唯一码
-        private Long businessSingleProductSubsidy; // 商家单品补贴金额
-        private Long platformSingleProductSubsidy; // 平台单品补贴金额
-        private Long businessOrderSubsidy; // 分摊商家整单补贴金额
-        private Long platformOrderSubsidy; // 分摊平台整单补贴金额
-        private Long totalSkuPrice; // 商品原总价
-    }
-
-    @Data
-    public static class OrderPayment {
-        private Integer paymentType; // 支付类型
-        private Long paymentAmount; // 支付金额
-        private Integer paymentNum; // 支付数量
-    }
 }

+ 28 - 15
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderController.java

@@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
 public class HBOrderController {
 
     private final IHBOrderService orderService;
+
     /**
      * 海博订单创建接口-推送接口
      *
@@ -30,8 +31,8 @@ public class HBOrderController {
      * @return 前台类目响应
      */
     @PostMapping("/createOrderAsync")
-    public String addGoods(String  channelOrderId) {
-        log.info("海博新增订单{}",channelOrderId);
+    public String addGoods(String channelOrderId) {
+        log.info("海博新增订单{}", channelOrderId);
         return orderService.createOrderAsync(channelOrderId);
     }
 
@@ -43,28 +44,29 @@ public class HBOrderController {
      */
     @PostMapping("/delivery")
     public HBR delivery(@RequestBody JSONObject HBRequest) {
-        log.info("海博订单配送{}",HBRequest);
+        log.info("海博订单配送{}", HBRequest);
         return null;
     }
 
     /**
      * 海博订单完成-回调
+     *
      * @param HBRequest 海博订单完成请求参数
      */
     @PostMapping("/completed")
     public HBR completed(@RequestBody JSONObject HBRequest) {
-        log.info("海博订单完成{}",HBRequest);
+        log.info("海博订单完成{}", HBRequest);
         return null;
     }
 
     /**
      * 海博查询订单详情-回调
-     * @param HBRequest 海博查询订单详情请求参数
      *
+     * @param HBRequest 海博查询订单详情请求参数
      */
     @PostMapping("/details")
     public HBR details(@RequestBody JSONObject HBRequest) {
-        log.info("进入海博查询订单详情接口{}",HBRequest);
+        log.info("进入海博查询订单详情接口{}", HBRequest);
         return orderService.details(HBRequest);
     }
 
@@ -76,7 +78,7 @@ public class HBOrderController {
      */
     @PostMapping("/info")
     public HBR goodsInfo(@RequestBody JSONObject HBRequest) {
-        log.info("海博修改订单请求参数{}",HBRequest);
+        log.info("海博修改订单请求参数{}", HBRequest);
         return null;
     }
 
@@ -88,7 +90,7 @@ public class HBOrderController {
      */
     @PostMapping("/updateStatus")
     public HBR updateStatus(@RequestBody JSONObject hBRequest) {
-        log.info("海博修改订单状态{}",hBRequest);
+        log.info("海博修改订单状态{}", hBRequest);
         orderService.orderStatusNotify(hBRequest);
         return HBR.success();
     }
@@ -101,7 +103,7 @@ public class HBOrderController {
      */
     @PostMapping("/createOrderResult")
     public HBR createOrderResult(@RequestBody JSONObject hBRequest) {
-        log.info("海博订单创建结果通知{}",hBRequest);
+        log.info("海博订单创建结果通知{}", hBRequest);
         return orderService.createOrderResult(hBRequest);
     }
 
@@ -113,7 +115,7 @@ public class HBOrderController {
      */
     @PostMapping("/logisticsStatus")
     public HBR logisticsStatus(@RequestBody JSONObject hBRequest) {
-        log.info("海博订单物流状态通知{}",hBRequest);
+        log.info("海博订单物流状态通知{}", hBRequest);
         orderService.updateLogisticStatus(hBRequest);
         return HBR.success();
     }
@@ -124,19 +126,20 @@ public class HBOrderController {
     @PostMapping("/orderStatusNotify")
     public HBR orderStatusNotify(@RequestBody JSONObject hBRequest) {
         orderService.orderStatusNotify(hBRequest);
-        log.info("海博订单状态变更通知{}",hBRequest);
+        log.info("海博订单状态变更通知{}", hBRequest);
         return HBR.success();
     }
 
 
     /**
      * 骑手经纬度接口
+     *
      * @param hBRequest 海博骑手经纬度请求参数
      * @return 订单响应
      */
     @PostMapping("/riderLocation")
     public HBR riderLocation(@RequestBody JSONObject hBRequest) {
-        log.info("海博骑手经纬度{}",hBRequest);
+        log.info("海博骑手经纬度{}", hBRequest);
         orderService.riderLocation(hBRequest);
         return HBR.success();
     }
@@ -146,15 +149,25 @@ public class HBOrderController {
      * 海博订单修改状态接口-推送接口
      *
      * @param channelOrderId 海博订单请求参数
-     * 订单类型 (20:订单已接单 30:订单待配送 60:订单已取消 80:订单已完成)
+     *                       订单类型 (20:订单已接单 30:订单待配送 60:订单已取消 80:订单已完成)
      * @return 订单详情响应
      */
     @PostMapping("/changeOrderStatus")
     public HBR changeOrderStatus(String channelOrderId, Integer type) {
-        log.info("海博订单修改状态{}",channelOrderId);
+        log.info("海博订单修改状态{}", channelOrderId);
         return HBR.success(orderService.changeOrderStatus(channelOrderId, type));
     }
 
-
+    /**
+     * 订单-发货消息(下行)
+     *
+     * @param hBRequest 海博订单发货消息请求参数
+     */
+    @PostMapping("/deliveryMsg")
+    public HBR deliveryMsg(@RequestBody JSONObject hBRequest) {
+        log.info("海博订单发货消息{}", hBRequest);
+        orderService.deliveryMsg(hBRequest);
+        return HBR.success();
+    }
 
 }

+ 49 - 2
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderRefundController.java

@@ -45,11 +45,58 @@ public class HBOrderRefundController {
     }
 
     /**
-     * 查询退款单详情(下行)
+     * 退款-退款单状态同步(上行)
+     * @param afterSaleOrder  退款单号
+     */
+    @PostMapping("/changeStatus")
+    public HBR changeStatus(String afterSaleOrder) {
+        log.info("海博售后订单状态同步afterSaleOrder:{}",afterSaleOrder);
+        return HBR.success(orderRefundService.changeStatus(afterSaleOrder));
+    }
+
+    /**
+     * 查询退款单详情(下行)-回调接口
      */
     @PostMapping("/details")
     public HBR details(@RequestBody JSONObject hBRequest) {
         log.info("进入海博查询订单详情接口{}",hBRequest);
-        return HBR.success(orderRefundService.details(hBRequest));
+        return orderRefundService.details(hBRequest);
+    }
+
+    /**
+     * 商家审核(下行)-回调接口
+     * @param hBRequest 海博请求参数
+     */
+    @PostMapping("/audit")
+    public HBR audit(@RequestBody JSONObject hBRequest) {
+        log.info("进入海博商家审核接口{}",hBRequest);
+        return orderRefundService.audit(hBRequest);
+    }
+
+    /**
+     * 商家确认收货(下行)-回调接口
+     */
+    @PostMapping("/confirmOrder")
+    public HBR confirmOrder(@RequestBody JSONObject hBRequest) {
+        log.info("进入海博商家确认收货接口");
+        return orderRefundService.confirmOrder(hBRequest);
+    }
+
+    /**
+     * 商家发起部分退款(下行)-回调接口
+     */
+    @PostMapping("/partRefund")
+    public HBR partRefund(@RequestBody JSONObject hBRequest) {
+        log.info("进入海博商家发起部分退款接口");
+        return orderRefundService.partRefund(hBRequest);
+    }
+
+    /**
+     * 退款-退款创建结果通知接口-回调接口
+     */
+    @PostMapping("/createResult")
+    public HBR createResult(@RequestBody JSONObject hBRequest) {
+        log.info("进入海博退款创建结果通知接口");
+        return orderRefundService.createResult(hBRequest);
     }
 }

+ 38 - 1
yami-shop-service/src/main/java/com/yami/shop/service/OrderRefundService.java

@@ -13,6 +13,7 @@ import com.yami.shop.bean.model.OrderRefund;
 import com.yami.shop.bean.model.RefundDelivery;
 import com.yami.shop.bean.param.OrderRefundParam;
 import com.yami.shop.bean.param.StatisticsRefundParam;
+import com.yami.shop.common.util.hb.HBR;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -153,10 +154,46 @@ public interface OrderRefundService extends IService<OrderRefund> {
      */
     String createRefundOrder(String channelOrderId,String afterSaleOrder);
 
+    /**
+     * 退款-退款单状态同步(上行)
+     * @param afterSaleOrder  退款单号
+     */
+    String changeStatus(String afterSaleOrder);
+
+
     /**
      * 售后详情接口-回调接口
      * @param hBRequest 海博请求参数
      * @return 退款订单响应报文
      */
-    String details(JSONObject hBRequest);
+    HBR details(JSONObject hBRequest);
+
+    /**
+     * 售后审核接口-回调接口
+     * @param hBRequest 海博请求参数
+     * @return 退款订单响应报文
+     */
+    HBR audit(JSONObject hBRequest);
+
+
+    /**
+     * 售后确认接口-回调接口
+     * @param hBRequest 海博请求参数
+     * @return 退款订单响应报文
+     */
+    HBR confirmOrder(JSONObject hBRequest);
+
+    /**
+     * 部分退款接口-回调接口
+     * @param hBRequest 海博请求参数
+     * @return 退款订单响应报文
+     */
+    HBR partRefund(JSONObject hBRequest);
+
+    /**
+     * 创建退款结果接口-回调接口
+     * @param hBRequest 海博请求参数
+     * @return 退款订单响应报文
+     */
+    HBR createResult(JSONObject hBRequest);
 }

+ 5 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/IHBOrderService.java

@@ -66,4 +66,9 @@ public interface IHBOrderService {
     void riderLocation(JSONObject hBRequest);
 
 
+    /**
+     * 订单-发货消息(下行)
+     * @param hBRequest 海博订单结果请求参数
+     */
+    void deliveryMsg(JSONObject hBRequest);
 }

+ 9 - 1
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBOrderService.java

@@ -221,6 +221,14 @@ public class HBOrderService implements IHBOrderService {
         }
     }
 
+    @Override
+    public void deliveryMsg(JSONObject hBRequest) {
+        String bodyStr = hBRequest.getString("body");
+        log.info("订单信息,body:{}", bodyStr);
+        JSONObject bodyJson = JSON.parseObject(bodyStr);
+        Order order = orderMapper.getOrderAndOrderItemByOrderNumber(bodyJson.getString("channelOrderId"));
+
+    }
 
 
     @Override
@@ -361,7 +369,7 @@ public class HBOrderService implements IHBOrderService {
             orderProduct.setPlatformSingleProductSubsidy(0L);
             orderProduct.setBusinessOrderSubsidy(0L);
             orderProduct.setPlatformOrderSubsidy(0L);
-            orderProduct.setTransId(orderItem.getOrderItemId().toString());
+            orderProduct.setTransId(sku.getSkuId().toString());
             orderProduct.setParentHBSkuId(0L);
 //            orderProduct.setPromotionType(sku.getPromotionType());
 //            orderProduct.setProductFeatures(sku.getProductFeatures());

+ 187 - 19
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderRefundServiceImpl.java

@@ -13,6 +13,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.yami.shop.bean.dto.OrderRefundDto;
 import com.yami.shop.bean.dto.hb.HBBaseReq;
+import com.yami.shop.bean.dto.hb.OrderPaymentRequest;
+import com.yami.shop.bean.dto.hb.ProductRequest;
+import com.yami.shop.bean.dto.hb.ThirdPartyRefundRequest;
 import com.yami.shop.bean.enums.*;
 import com.yami.shop.bean.event.OrderRefundSuccessEvent;
 import com.yami.shop.bean.event.ReceiptOrderEvent;
@@ -27,6 +30,7 @@ import com.yami.shop.common.enums.PayType;
 import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.exception.YamiShopBindException;
 import com.yami.shop.common.util.Arith;
+import com.yami.shop.common.util.hb.HBR;
 import com.yami.shop.dao.OrderMapper;
 import com.yami.shop.dao.OrderRefundMapper;
 import com.yami.shop.dao.OrderSettlementMapper;
@@ -305,7 +309,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
         // 是否同意退款
         if (Objects.equals(orderRefundParam.getRefundSts(), RefundStsType.DISAGREE.value())) {
             // 不同意退款
-            disagreeRefund(orderRefundParam, orderRefundDto,1);
+            disagreeRefund(orderRefundParam, orderRefundDto, 1);
         } else {
             // 正在处理退款的状态
             orderRefundDto.setReturnMoneySts(ReturnMoneyStsType.PROCESSING.value());
@@ -380,7 +384,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
             agreeRefund(orderRefundDto);
 
         } else {
-            disagreeRefund(orderRefundParam, orderRefundDto,2);
+            disagreeRefund(orderRefundParam, orderRefundDto, 2);
         }
 
         // 是否收到货
@@ -462,11 +466,12 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
 
     /**
      * 不同意退款
+     *
      * @param orderRefundParam
      * @param orderRefundDto
-     * @param type 1 用户发起是拒绝  2 商家收货后拒绝
+     * @param type             1 用户发起是拒绝  2 商家收货后拒绝
      */
-    private void disagreeRefund(OrderRefundParam orderRefundParam, OrderRefundDto orderRefundDto,Integer type) {
+    private void disagreeRefund(OrderRefundParam orderRefundParam, OrderRefundDto orderRefundDto, Integer type) {
         // 不同意退款
         orderRefundDto.setReturnMoneySts(ReturnMoneyStsType.REJECT.value());
         orderRefundDto.setReturnMoneySts(ReturnMoneyStsType.FAIL.value());
@@ -485,7 +490,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
         } else {
             order.setRefundStatus(RefundStatusEnum.DISAGREE.value());
         }
-        if(type==2){
+        if (type == 2) {
             order.setStatus(OrderStatus.CLOSE.value());
         }
         orderService.updateById(order);
@@ -736,14 +741,14 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void cancelWhenTimeOut(List<OrderRefund> orderRefundList) {
-        if(CollectionUtils.isEmpty(orderRefundList)) {
+        if (CollectionUtils.isEmpty(orderRefundList)) {
             return;
         }
         Date now = new Date();
         for (OrderRefund orderRefund : orderRefundList) {
             orderRefund.setReturnMoneySts(ReturnMoneyStsType.FAIL.value());
             Order order = orderService.getById(orderRefund.getOrderId());
-            if(ObjectUtil.isNotEmpty(order)){
+            if (ObjectUtil.isNotEmpty(order)) {
                 order.setRefundStatus(4);
                 orderService.updateById(order);
             }
@@ -777,8 +782,8 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
     @Override
     public void overTimeRefundOrder(com.yami.shop.bean.app.param.OrderRefundParam orderRefundParam) {
         // 获取订单信息
-        Order order=orderService.getOrderByOrderNumber(orderRefundParam.getOrderNumber());
-        if(ObjectUtil.isEmpty(order)){
+        Order order = orderService.getOrderByOrderNumber(orderRefundParam.getOrderNumber());
+        if (ObjectUtil.isEmpty(order)) {
             throw new GlobalException("此订单不存在,无法退货退款");
         }
         if (!Objects.equals(order.getIsPayed(), 1)) {
@@ -821,8 +826,6 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
         }
 
 
-
-
         // 生成退款单信息
         OrderRefund newOrderRefund = new OrderRefund();
 
@@ -940,10 +943,9 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
     }
 
 
-
     //*************************** 售后接口 ***************************
     @Override
-    public String createRefundOrder(String channelOrderId,String afterSaleOrder) {
+    public String createRefundOrder(String channelOrderId, String afterSaleOrder) {
         HBBaseReq<Object> build = HBBaseReq.create();
         build.setAppId(hbSignUtil.getAppId());
 
@@ -956,17 +958,183 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
 
         build.setSign(hbSignUtil.signMd5(build));
         log.info("post 订单推送单号参数:{}", JSON.toJSONString(build));
-        String post = post(hbSignUtil.getHBHost() + "/api/order/asyncSave", build);
+        String post = post(hbSignUtil.getHBHost() + "/api/refund/asyncSave", build);
+        log.info("post 订单推送结果:{}", post);
+        return post;
+    }
+
+    @Override
+    public String changeStatus(String afterSaleOrder) {
+        HBBaseReq<Object> build = HBBaseReq.create();
+        build.setAppId(hbSignUtil.getAppId());
+        OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, afterSaleOrder));
+
+        // 3. 构建外层请求体
+        JSONObject requestBody = new JSONObject();
+        requestBody.put("afterSaleOrder", afterSaleOrder);
+//        退款单状态 10:待审核 20:处理中 30:驳回退款 40:撤销退款 60:待退货(一审同意) 65:待确认收货(二审待审核) 70:退款完成
+        requestBody.put("refundStatus", refundHbStatus(orderRefund.getReturnMoneySts()));
+        requestBody.put("timestamp", orderRefund.getApplyTime().getTime());
+
+//        deliveryMan 退货的配送员名称
+//        deliveryMobile 退货的配送员电话
+//        deliveryManNo 退货的配送员编号
+
+        // 4. 将整个JSON对象序列化为字符串并设置
+        build.setBody(JSON.toJSONString(requestBody));
+        build.setSign(hbSignUtil.signMd5(build));
+        log.info("post 订单推送单号参数:{}", JSON.toJSONString(build));
+        String post = post(hbSignUtil.getHBHost() + "/api/refund/changeStatus", build);
         log.info("post 订单推送结果:{}", post);
         return post;
     }
 
     @Override
-    public String details(JSONObject hBRequest) {
-//        try {
-//            JSONObject bodyStr = hBRequest.getObject("body");
-//            log.info("退款订单信息,body:{}", bodyStr);
+    public HBR details(JSONObject hBRequest) {
+        ThirdPartyRefundRequest thirdPartyRefundRequest = new ThirdPartyRefundRequest();
+        try {
+            JSONObject bodyStr = hBRequest.getJSONObject("body");
+            log.info("退款订单信息,body:{}", bodyStr);
+            OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
+            ShopDetail shopDetailByShopId = shopDetailService.getShopDetailByShopId(orderRefund.getShopId());
+
+            thirdPartyRefundRequest.setChannelOrderId(bodyStr.getString("channelOrderId"));
+            thirdPartyRefundRequest.setOutStationNo(shopDetailByShopId.getHbStationNo());
+            thirdPartyRefundRequest.setAfterSaleOrder(orderRefund.getRefundSn());
+            thirdPartyRefundRequest.setSaleType(2);
+            thirdPartyRefundRequest.setReason(orderRefund.getBuyerReason());
+            thirdPartyRefundRequest.setProblemDescription(orderRefund.getBuyerDesc());
+            thirdPartyRefundRequest.setPictures(orderRefund.getPhotoFiles());
+
+            Integer returnMoneySts = orderRefund.getReturnMoneySts();
+            thirdPartyRefundRequest.setRefundStatus(refundHbStatus(returnMoneySts));
+            Integer applyType = orderRefund.getApplyType();
+            if (Objects.equals(applyType, 2)) {
+                thirdPartyRefundRequest.setApplyDeal(40);
+            } else {
+                thirdPartyRefundRequest.setApplyDeal(10);
+            }
 
-        return null;
+            thirdPartyRefundRequest.setPickAddress(orderRefund.getBuyerMobile());
+            thirdPartyRefundRequest.setRefundType(orderRefund.getRefundType());
+            thirdPartyRefundRequest.setMoney((long) (orderRefund.getRefundAmount() * 100));
+            thirdPartyRefundRequest.setTimestamp(orderRefund.getApplyTime().getTime());
+            thirdPartyRefundRequest.setRefundSource(1);
+
+
+            List<ProductRequest> productRequests = new ArrayList<>();
+            orderItemService.list(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, orderRefund.getOrderId())).forEach(orderItem -> {
+                Sku sku = skuService.getById(orderItem.getSkuId());
+                ProductRequest productRequest = new ProductRequest();
+                productRequest.setSkuName(orderItem.getSkuName());
+                productRequest.setSkuId(orderItem.getSkuId());
+                productRequest.setChannelSkuId(sku.getHbSkuId());
+//                productRequest.setUpcCode(orderItem.getSkuId());
+                productRequest.setRefundCount(orderItem.getProdCount());
+                productRequest.setRefundMoney((long) (orderItem.getProductTotalAmount() * 100));
+                productRequest.setTransId(sku.getSkuId().toString());
+                productRequests.add(productRequest);
+
+            });
+            thirdPartyRefundRequest.setProducts(productRequests);
+
+            List<OrderPaymentRequest> orderPaymentRequests = new ArrayList<>();
+            OrderPaymentRequest orderPaymentRequest = new OrderPaymentRequest();
+            orderPaymentRequest.setPaymentType(1002);
+            orderPaymentRequest.setPaymentAmount((long) (orderRefund.getRefundAmount() * 100));
+            orderPaymentRequest.setPaymentNum(1);
+            orderPaymentRequests.add(orderPaymentRequest);
+            thirdPartyRefundRequest.setOrderPayments(orderPaymentRequests);
+            log.info("退款订单信息,参数:{}", thirdPartyRefundRequest);
+        } catch (Exception e) {
+            log.error("海博退款订单查询异常:{}", e);
+            HBR.error("未知异常");
+        }
+
+        return HBR.success(thirdPartyRefundRequest);
+    }
+
+    @Override
+    public HBR audit(JSONObject hBRequest) {
+        try {
+            JSONObject bodyStr = hBRequest.getJSONObject("body");
+            log.info("售后审核接口-回调接口,body:{}", bodyStr);
+            OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
+        } catch (Exception e) {
+            log.error("海博退款订单查询异常:{}", e);
+            HBR.error("未知异常");
+        }
+
+        return HBR.success();
+    }
+
+    @Override
+    public HBR confirmOrder(JSONObject hBRequest) {
+        try {
+            JSONObject bodyStr = hBRequest.getJSONObject("body");
+            log.info("售后确认接口-回调接口,body:{}", bodyStr);
+            OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
+        } catch (Exception e) {
+            log.error("海博退款订单查询异常:{}", e);
+            HBR.error("未知异常");
+        }
+
+        return HBR.success();
+    }
+
+    @Override
+    public HBR partRefund(JSONObject hBRequest) {
+        try {
+            JSONObject bodyStr = hBRequest.getJSONObject("body");
+            log.info("部分退款接口-回调接口,body:{}", bodyStr);
+            OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
+        } catch (Exception e) {
+            log.error("海博退款订单查询异常:{}", e);
+            HBR.error("未知异常");
+        }
+
+        return HBR.success();
+    }
+
+    @Override
+    public HBR createResult(JSONObject hBRequest) {
+        try {
+            JSONObject bodyStr = hBRequest.getJSONObject("body");
+            log.info("创建退款结果接口-回调接口,body:{}", bodyStr);
+            OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
+        } catch (Exception e) {
+            log.error("海博退款订单查询异常:{}", e);
+            HBR.error("未知异常");
+        }
+
+        return HBR.success();
+    }
+
+    /**
+     * 系统订单状态转换为海博订单状态
+     * 退款单状态 10:待审核 20:处理中 30:驳回退款 40:撤销退款 60:待退货(一审同意) 65:待确认收货(二审待审核) 70:退款完成
+     * 处理退款状态:(1.买家申请 2.卖家接受 3.买家发货 4.卖家收货 5.退款成功 6.买家撤回申请 7.商家拒绝 -1.退款关闭)详情见ReturnMoneyStsType
+     *
+     * @param returnMoneySts 退款单状态
+     * @return HB退款单状态
+     */
+    private Integer refundHbStatus(Integer returnMoneySts) {
+        switch (returnMoneySts) {
+            case 1:
+                return 10;
+            case 2:
+                return 60;
+            case 3:
+                return 10;
+            case 4:
+                return 20;
+            case 6:
+                return 40;
+            case 7:
+                return 30;
+            case 5:
+                return 70;
+        }
+        return 10;
     }
 }