Browse Source

查询商家的收货地址
补全退货退款的物流单号

zhangwl 1 month ago
parent
commit
0570a6c545

+ 19 - 0
src/main/java/zs/payment/controller/YxSupplyChannelManualController.java

@@ -139,6 +139,25 @@ public class YxSupplyChannelManualController {
     }
 
 
+    /**
+     * 查询商家的收货地址
+     * @param req
+     * @return
+     */
+    @PostMapping("/getShopAddress")
+    public Result getShopAddress(@Valid @RequestBody OrderPayReq req){
+        return paySupplyService.findShopAddressByOrderSn(req.getOrderSn());
+    }
+
+    /**
+     * 补全退货退款的物流单号
+     * @param req
+     * @return
+     */
+    @PostMapping("/afterSalesExpress")
+    public Result afterSalesClose(@Valid @RequestBody OrderPayReq  req){
+        return paySupplyService.executeAfterSalesExpress(req.getOrderSn());
+    }
 
 
 

+ 5 - 0
src/main/java/zs/payment/mapper/primary/ImsEweiShopOrderMapper.java

@@ -2,9 +2,14 @@ package zs.payment.mapper.primary;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import zs.payment.entity.mysql.ImsEweiShopOrder;
 
+import java.util.Map;
+
 @Mapper
 public interface ImsEweiShopOrderMapper extends BaseMapper<ImsEweiShopOrder> {
 
+    Map<String, Object> findExpressByOrdersn(@Param("ordersn") String ordersn);
+
 }

+ 23 - 0
src/main/java/zs/payment/messages/KafkaConsumer.java

@@ -372,4 +372,27 @@ public class KafkaConsumer {
         paySupplyService.updateOrderLogistic(orderSn);
         log.info("=======订单发货-第三方订单编号:{} =======", orderSn);
     }
+
+
+    //--------补全退货退款订单的物流信息---------------
+    /**
+     * 退货退款订单的物流信息补全
+     *
+     * @param afterSalesId
+     */
+    @KafkaListener(
+        topics = "aftersales.express",
+        groupId = "pay2-group"
+    )
+    public void aftersalesExpress(String data) {
+        //通过售后id获取默认商家售后退货地址
+
+        JSONObject jsonObject = JSONObject.parseObject(data);
+        String afterSalesId = jsonObject.getString("afterSalesId");
+        String orderSn = jsonObject.getString("orderSn");
+        paySupplyService.executeAfterSalesExpress(afterSalesId,orderSn);
+        log.info("=======退货退款订单的物流信息补全:{} =======", orderSn);
+    }
+
+
 }

+ 2 - 12
src/main/java/zs/payment/req/aftersales/AfterSalesOrderReq.java

@@ -10,9 +10,6 @@ import javax.validation.constraints.NotNull;
 @Getter
 @NoArgsConstructor
 public class AfterSalesOrderReq {
-    //中台订单id- 实际场合下不适合
-//    @NotNull(message = "id不能为空")
-//    private Integer orderId;
 
     //第三方订单号(提交订单使用的订单号),两个参数二选一  , 前端传值
     @NotNull(message = "订单编号不能为空")
@@ -20,19 +17,12 @@ public class AfterSalesOrderReq {
     //是否收到货 1是0否  ,前端传值
     @NotNull(message = "是否收到货")
     private Integer isReceived;
-    //订单详情的order_items中的id
-//    @NotNull(message = "子订单id不能为空") - 需要自行查询出来
-//    private Integer orderItemId;
-    //退款金额(单位分) ,
-//    private Integer amount;
 
     // 退款方式: "0": "退款",  "1": "退货退款" , 前端传值
     @NotNull(message = "退款方式不能为空")
     private Integer refundType;
 
-    //技术服务费(单位分)
-//    private Integer technicalServicesFee;
+    //物流单号, 当退款方式为退货退款时,必填
+//    private String expresssn;
 
-    //运费(单位分)
-//    private Integer freight;
 }

+ 17 - 0
src/main/java/zs/payment/service/supply/paysupply/PaySupplyService.java

@@ -45,4 +45,21 @@ public interface PaySupplyService {
      * @return
      */
     Result updateOrderLogistic(String orderSn);
+
+
+    /**
+     * 补全退货退款订单的物流信息
+     *
+     * @param orderSn
+     */
+    Result executeAfterSalesExpress(String orderSn);
+
+
+    /**
+     * 根据订单编号查询商家默认售后退货地址
+     * @param orderSn
+     * @return
+     */
+    Result findShopAddressByOrderSn(String orderSn);
+
 }

+ 146 - 2
src/main/java/zs/payment/service/supply/paysupply/impl/PaySupplyServiceImpl.java

@@ -43,8 +43,6 @@ public class PaySupplyServiceImpl implements PaySupplyService {
 
     @Autowired
     private SupplyTokenService supplyTokenService;
-
-
     /**
      * 芸信供应的中台订单
      */
@@ -60,6 +58,13 @@ public class PaySupplyServiceImpl implements PaySupplyService {
     @Autowired
     private AfterSalesLogService afterSalesLogService;
 
+    @Autowired
+    private KafkaProducer kafkaProducer;
+
+    @Autowired
+    private zs.payment.mapper.primary.ImsEweiShopOrderMapper imsEweiShopOrderMapper;
+
+
 
     @Override
     public Result orderPayOnly(OrderPayReq req) {
@@ -156,6 +161,18 @@ public class PaySupplyServiceImpl implements PaySupplyService {
                 salesLog.setCreateTime(System.currentTimeMillis());
                 afterSalesLogService.save(salesLog);
 
+//                if (1==req.getRefundType()){
+//                    Map<String,Object> map =new HashMap<>();
+//                    //售后id
+//                    map.put("afterSalesId",salesLog.getAfterSalesId());
+//                    //订单编号
+//                    map.put("orderSn",salesLog.getOrderSn());
+//                    //若是退货退款,则需要补充物流信息
+//                    kafkaProducer.sendMessage("aftersales.express",JSONObject.toJSONString(map));
+//                }
+
+
+
             }
             //保存order
             ordersService.saveOrders(orders);
@@ -224,4 +241,131 @@ public class PaySupplyServiceImpl implements PaySupplyService {
         Boolean b = imsEweiShopOrderService.updateExpressByOrdersn(dto);
         return Result.success(b);
     }
+
+
+
+
+
+    @Override
+    public Result executeAfterSalesExpress( String orderSn) {
+
+        Map<String, String> headers = supplyTokenService.buildAuthHeaders();
+        if (headers == null) {
+            return Result.fail("获取token失败");
+        }
+
+        Map<String, Object> expressInfo = imsEweiShopOrderMapper.findExpressByOrdersn(orderSn);
+
+        if (expressInfo.isEmpty()) {
+            throw new ApiException("买家尚未上传物流单号");
+        }
+
+        //查询售后记录
+        List<AfterSalesLog> logs = afterSalesLogService.listByOrderSn(orderSn);
+        if (logs == null || logs.isEmpty()) {
+            return Result.fail("未找到售后记录");
+        }
+        String afterSalesId = String.valueOf(logs.get(0).getAfterSalesId());
+
+        String resp = HttpUtil.restTemplateGet(prefixUrl + "/supplyapi/app/order/cloud/company/list", null, headers);
+
+        JSONObject companyResp = JSONObject.parseObject(resp);
+        if (companyResp.getIntValue("code") != 0) {
+            return Result.fail("获取物流公司列表失败:" + companyResp.getString("msg"));
+        }
+        String expresscom = String.valueOf(expressInfo.get("expresscom"));
+        String companyCode = null;
+
+        for (Object item : companyResp.getJSONObject("data").getJSONArray("list")) {
+            JSONObject company = (JSONObject) item;
+            if (company.getString("name").equals(expresscom)) {
+                companyCode = company.getString("code");
+
+                break;
+            }
+        }
+        if (companyCode == null) {
+            return Result.fail("未匹配到物流公司:" + expresscom);
+        }
+
+        Map<String, String> result2 = getShopAddress(headers, afterSalesId);
+        if (result2.isEmpty()) {
+
+            return Result.fail("未查询到商户收货地址:" + expresscom);
+        }
+
+        Map<String, Object> sendParams = new HashMap<>();
+        sendParams.put("after_sales_id", Integer.valueOf(afterSalesId));
+        sendParams.put("company_name", expresscom);
+        sendParams.put("company_code", companyCode);
+        sendParams.put("express_no", expressInfo.get("expresssn"));
+        sendParams.put("shipping_address_id", Integer.valueOf(result2.get("shipping_address_id")));
+
+        String sendResp = HttpUtil.restTemplatePost(prefixUrl + "/supplyapi/app/afterSales/send", sendParams, headers);
+        JSONObject sendRespJson = JSONObject.parseObject(sendResp);
+        if (sendRespJson.getIntValue("code") != 0) {
+            return Result.fail("售后发货失败:" + sendRespJson.getString("msg"));
+        }
+
+        return Result.success();
+
+
+    }
+
+    @Override
+    public Result findShopAddressByOrderSn(String orderSn) {
+
+        Map<String, String> headers = supplyTokenService.buildAuthHeaders();
+        if (headers == null) {
+            return Result.fail("获取token失败");
+        }
+
+        //查询售后记录
+        List<AfterSalesLog> logs = afterSalesLogService.listByOrderSn(orderSn);
+        if (logs == null || logs.isEmpty()) {
+            return Result.fail("未找到售后记录");
+        }
+        String afterSalesId = String.valueOf(logs.get(0).getAfterSalesId());
+
+        Map<String, String> result = getShopAddress(headers,afterSalesId);
+
+        return Result.success(result);
+    }
+
+    /**
+     * 获取到商家地址+商家电话+收货人
+     * @param afterSalesId
+     * @return
+     */
+    public Map<String,String> getShopAddress( Map<String, String> headers,String afterSalesId){
+        Map<String, String> result = new HashMap<>();
+        Map<String, Object> params = new HashMap<>();
+        //第三方的订单编号
+        params.put("after_sales_id", afterSalesId);
+
+        String resp = HttpUtil.restTemplatePost(prefixUrl + "/supplier/findShopAddressByOrderId", params, headers);
+
+        JSONObject respJson = JSONObject.parseObject(resp);
+        if (respJson.getIntValue("code") != 0) {
+            return result;
+        }
+        JSONObject data = respJson.getJSONObject("data");
+        String fullAddress = data.getJSONObject("province_name").getString("name")
+            + data.getJSONObject("city_name").getString("name")
+            + data.getJSONObject("district_name").getString("name")
+            + data.getString("address");
+        String tel = data.getString("tel");
+        String contacts = data.getString("contacts");
+
+        //收货地址
+        result.put("address", fullAddress);
+        //收货电话
+        result.put("tel", tel);
+        //收货人
+        result.put("contacts",contacts);
+        //id 用于售后发货中的shipping_address_id
+        result.put("shipping_address_id",data.getString("id"));
+        return result;
+    }
+
 }