Bläddra i källkod

海博订单模块

fubojin 1 vecka sedan
förälder
incheckning
c0ad59fac2

+ 1 - 1
yami-shop-api/src/main/resources/application.yml

@@ -85,4 +85,4 @@ services:
   #支付回调
   notifyUrl: http://he56cd66.natappfree.cc/notice/pay/order/wxNotify
   #退款回调
-  refundNotifyUrl: http://he56cd66.natappfree.cc/notice/pay/order/refundNotify
+  refundNotifyUrl: http://he56cd66.natappfree.cc/notice/pay/order/refundNotify

+ 62 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/hb/ThirdPartyRefundRequest.java

@@ -0,0 +1,62 @@
+package com.yami.shop.bean.dto.hb;
+
+import lombok.Data;
+import java.util.List;
+
+@Data
+public class ThirdPartyRefundRequest {
+    private String channelOrderId; // 交互订单号
+    private String outStationNo; // 商家门店编码
+    private String afterSaleOrder; // 售后单号
+    private String reason; // 售后原因
+    private String problemDescription; // 售后描述
+    private String pictures; // 图片列表json
+    private String pickAddress; // 取货地址
+    private Long refundBoxesAmount; // 应退餐盒费
+    private Integer refundType; // 退款类型 1:全部退款 2:部分退款
+    private Integer refundStatus; // 退款单状态
+    private Long timestamp; // 请求发起的时间戳
+    private Integer saleType; // 售前售后标 1:售前 2:售后
+    private Long money; // 退款总金额
+    private Long pointDeduction; // 佣金,平台服务费
+    private String rejectReason; // 驳回原因
+    private Integer isAppeal; // 是否申诉单 0:否 1:是
+    private Integer applyDeal; // 退款类型
+    private Long packPay; // 包装费
+    private Long freightPay; // 配送费原价
+    private Long businessShippingFeeSubsidy; // 商家配送费补贴
+    private Long platformShippingFeeSubsidy; // 平台配送费补贴
+    private Long businessSingleProductSubsidy; // 商家单品补贴金额
+    private Long platformSingleProductSubsidy; // 平台单品补贴金额
+    private Long businessOrderSubsidy; // 商家整单补贴金额
+    private Long platformOrderSubsidy; // 平台整单补贴金额
+    private Long totalSkuPrice; // 商品原总价
+    private Integer refundSource; // 退款发起方
+    private String jsonParam; // 补丁参数
+    private List<Product> products; // 本次退款商品
+    private List<OrderPayment> 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; // 支付数量
+    }
+}

+ 2 - 2
yami-shop-multishop/src/main/resources/application.yml

@@ -1,8 +1,8 @@
 spring:
   # 环境 dev|prod|docker
   profiles:
-    active: dev
-#    active: prod
+#    active: dev
+    active: prod
   #文件上传设置
   servlet:
     multipart:

+ 16 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderController.java

@@ -141,4 +141,20 @@ public class HBOrderController {
         return HBR.success();
     }
 
+    /**
+     * 订单状态变更接口(上行)
+     * 海博订单修改状态接口-推送接口
+     *
+     * @param channelOrderId 海博订单请求参数
+     * 订单类型 (20:订单已接单 30:订单待配送 60:订单已取消 80:订单已完成)
+     * @return 订单详情响应
+     */
+    @PostMapping("/changeOrderStatus")
+    public HBR changeOrderStatus(String channelOrderId, Integer type) {
+        log.info("海博订单修改状态{}",channelOrderId);
+        return HBR.success(orderService.changeOrderStatus(channelOrderId, type));
+    }
+
+
+
 }

+ 55 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderRefundController.java

@@ -0,0 +1,55 @@
+package com.yami.shop.platform.controller.hb;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yami.shop.bean.dto.OrderRefundDto;
+import com.yami.shop.bean.model.OrderRefund;
+import com.yami.shop.common.util.PageParam;
+import com.yami.shop.common.util.R;
+import com.yami.shop.common.util.hb.HBR;
+import com.yami.shop.service.OrderRefundService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 订单退款管理实现
+ *
+ * @author lgh
+ * @version 1.0.0
+ * @since 2018-09-15
+ */
+@Slf4j
+@RestController
+@AllArgsConstructor
+@RequestMapping("/platform/orderRefund")
+public class HBOrderRefundController {
+
+    private final OrderRefundService orderRefundService;
+
+
+    //*************************** 售后接口 ***************************
+    /**
+     * 创建退款单(上行)
+     * 海博售后订单创建接口-推送接口
+     *
+     * @param channelOrderId 海博订单单号
+     * @param afterSaleOrder  退款单号
+     */
+    @PostMapping("/createRefundOrder")
+    public HBR createRefundOrder(String channelOrderId, String afterSaleOrder) {
+        log.info("海博售后订单推送channelOrderId:{},afterSaleOrder:{}",channelOrderId,afterSaleOrder);
+        return HBR.success(orderRefundService.createRefundOrder(channelOrderId,afterSaleOrder));
+    }
+
+    /**
+     * 查询退款单详情(下行)
+     */
+    @PostMapping("/details")
+    public HBR details(@RequestBody JSONObject hBRequest) {
+        log.info("进入海博查询订单详情接口{}",hBRequest);
+        return HBR.success(orderRefundService.details(hBRequest));
+    }
+}

+ 6 - 2
yami-shop-platform/src/main/resources/application.yml

@@ -1,8 +1,8 @@
 spring:
   # 环境 dev|prod|docker quartz定时任务
   profiles:
-    active: dev
-#    active: prod
+#    active: dev
+    active: prod
   #文件上传设置
   servlet:
     multipart:
@@ -35,4 +35,8 @@ application:
   datacenterId: 2
   workerId: 1
 
+hb:
+  host: https://p-open.hiboos.com
+  appId: 5347a7077e65428bb9a87510ca7e1ea1
+  secret: 67899367b17e4a8d8a7d10ebe8449b90
 

+ 18 - 0
yami-shop-service/src/main/java/com/yami/shop/service/OrderRefundService.java

@@ -1,6 +1,7 @@
 package com.yami.shop.service;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -141,4 +142,21 @@ public interface OrderRefundService extends IService<OrderRefund> {
     double sumRefundSuccessPlatformAmountByOrderId(Long orderId);
 
     void overTimeRefundOrder(com.yami.shop.bean.app.param.OrderRefundParam orderRefundParam);
+
+
+
+    //*************************** 售后接口 ***************************
+    /**
+     * 创建退款订单接口-推送接口
+     * @param channelOrderId 海博订单单号
+     * @param afterSaleOrder  退款单号
+     */
+    String createRefundOrder(String channelOrderId,String afterSaleOrder);
+
+    /**
+     * 售后详情接口-回调接口
+     * @param hBRequest 海博请求参数
+     * @return 退款订单响应报文
+     */
+    String details(JSONObject hBRequest);
 }

+ 3 - 1
yami-shop-service/src/main/java/com/yami/shop/service/hb/IHBOrderService.java

@@ -47,7 +47,7 @@ public interface IHBOrderService {
     HBR createOrderResult(JSONObject hBRequest);
 
     /**
-     * 海博订单创建接口-结果接口
+     * 海博修改订单状态接口-结果接口
      *
      * @param hBRequest 海博订单结果请求参数
      */
@@ -64,4 +64,6 @@ public interface IHBOrderService {
      * @param hBRequest 海博订单结果请求参数
      */
     void riderLocation(JSONObject hBRequest);
+
+
 }

+ 7 - 5
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBOrderService.java

@@ -125,9 +125,9 @@ public class HBOrderService implements IHBOrderService {
         build.setBody(JSON.toJSONString(requestBody));
 
         build.setSign(hbSignUtil.signMd5(build));
-        log.info("post 订单推送单号参数:{}", JSON.toJSONString(build));
+        log.info("post 创建订单推送单号参数:{}", JSON.toJSONString(build));
         String post = post(hbSignUtil.getHBHost() + "/api/order/createOrderAsync", build);
-        log.info("post 订单推送结果:{}", post);
+        log.info("post 创建订单推送结果:{}", post);
         return post;
     }
 
@@ -140,7 +140,7 @@ public class HBOrderService implements IHBOrderService {
         // 3. 构建外层请求体
         JSONObject requestBody = new JSONObject();
         requestBody.put("channelOrderId", channelOrderId);
-        requestBody.put("operator", channelOrderId);
+        requestBody.put("operator", "admin");
         // 订单操作时间戳毫秒数
         requestBody.put("operatorTime", System.currentTimeMillis());
         //操作类型 (20:订单已接单 30:订单待配送 60:订单已取消 80:订单已完成)
@@ -222,6 +222,7 @@ public class HBOrderService implements IHBOrderService {
     }
 
 
+
     @Override
     public HBR details(JSONObject hbRequest) {
         String bodyStr = hbRequest.getString("body");
@@ -262,9 +263,9 @@ public class HBOrderService implements IHBOrderService {
             createOrderRequest.setRecipientAddress(userAddrOrder.getAddress() + userAddrOrder.getAddressName() + userAddrOrder.getAddrDetail());
         }
 
-        int dvyType = 80;
+        int dvyType = 10;
         if (order.getDvyType() == 1) {
-            dvyType = 10;
+            dvyType = 80;
         } else if (order.getDvyType() == 2) {
             dvyType = 40;
         }
@@ -397,4 +398,5 @@ public class HBOrderService implements IHBOrderService {
         log.info("海博查询系统订单详情返回数据:{}", JSONObject.toJSONString(createOrderRequest));
         return HBR.success(createOrderRequest);
     }
+
 }

+ 40 - 1
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderRefundServiceImpl.java

@@ -3,6 +3,8 @@ package com.yami.shop.service.impl;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Snowflake;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -10,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.enums.*;
 import com.yami.shop.bean.event.OrderRefundSuccessEvent;
 import com.yami.shop.bean.event.ReceiptOrderEvent;
@@ -29,7 +32,9 @@ import com.yami.shop.dao.OrderRefundMapper;
 import com.yami.shop.dao.OrderSettlementMapper;
 import com.yami.shop.dao.ShopWalletMapper;
 import com.yami.shop.service.*;
+import com.yami.shop.utils.HBSignUtil;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import ma.glasnost.orika.MapperFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
@@ -42,6 +47,9 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.validation.Valid;
 import java.util.*;
 
+import static com.yami.shop.common.util.HttpUtil.post;
+
+@Slf4j
 @Service
 @AllArgsConstructor
 public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, OrderRefund> implements OrderRefundService {
@@ -67,7 +75,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
     private final ApplicationContext applicationContext;
     private final PayManagerService payManagerService;
     private final Snowflake snowflake;
-
+    private final HBSignUtil hbSignUtil;
 
 
     /**
@@ -930,4 +938,35 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
         newOrderRefund.setUpdateTime(new Date());
         this.applyRefund(newOrderRefund);
     }
+
+
+
+    //*************************** 售后接口 ***************************
+    @Override
+    public String createRefundOrder(String channelOrderId,String afterSaleOrder) {
+        HBBaseReq<Object> build = HBBaseReq.create();
+        build.setAppId(hbSignUtil.getAppId());
+
+        // 3. 构建外层请求体
+        JSONObject requestBody = new JSONObject();
+        requestBody.put("channelOrderId", channelOrderId);
+        requestBody.put("afterSaleOrder", afterSaleOrder);
+        // 4. 将整个JSON对象序列化为字符串并设置
+        build.setBody(JSON.toJSONString(requestBody));
+
+        build.setSign(hbSignUtil.signMd5(build));
+        log.info("post 订单推送单号参数:{}", JSON.toJSONString(build));
+        String post = post(hbSignUtil.getHBHost() + "/api/order/asyncSave", build);
+        log.info("post 订单推送结果:{}", post);
+        return post;
+    }
+
+    @Override
+    public String details(JSONObject hBRequest) {
+//        try {
+//            JSONObject bodyStr = hBRequest.getObject("body");
+//            log.info("退款订单信息,body:{}", bodyStr);
+
+        return null;
+    }
 }