Browse Source

feat: 对接erp

xdd 5 days ago
parent
commit
38d4c739c0

+ 2 - 1
fs-admin/src/main/java/com/fs/core/config/ThreadPoolConfig.java

@@ -12,7 +12,7 @@ import com.fs.common.utils.Threads;
 /**
  * 线程池配置
  *
- 
+
  **/
 @Configuration
 public class ThreadPoolConfig
@@ -42,6 +42,7 @@ public class ThreadPoolConfig
         return executor;
     }
 
+
     /**
      * 执行周期性或定时任务
      */

+ 13 - 0
fs-admin/src/test/java/com/fs/company/controller/CompanyControllerTest.java

@@ -8,6 +8,8 @@ import com.fs.erp.domain.ErpOrderItem;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.erp.service.impl.ErpOrderServiceImpl;
 import com.fs.pay.pay.util.PayUtil;
+import com.fs.store.domain.FsStoreOrder;
+import com.fs.store.service.IFsStoreOrderService;
 import com.fs.wx.dto.*;
 import com.fs.wx.service.OrderQueryService;
 import com.fs.wx.service.ShippingService;
@@ -19,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.OffsetDateTime;
 import java.time.format.DateTimeFormatter;
@@ -44,6 +47,15 @@ public class CompanyControllerTest {
     @Autowired
     private ShippingService shippingService;
 
+    @Autowired
+    private IFsStoreOrderService fsStoreOrderService;
+
+    @Test
+    public void test4() throws ParseException {
+        FsStoreOrder order=fsStoreOrderService.selectFsStoreOrderByOrderCode("1935899736686985216");
+        fsStoreOrderService.createOmsOrder(order.getId());
+    }
+
     @Test
     public void test(){
         UploadShippingInfoRequest request = new UploadShippingInfoRequest();
@@ -122,3 +134,4 @@ public class CompanyControllerTest {
         erpOrderService.addOrder(order);
     }
 }
+

+ 14 - 0
fs-admin/src/test/java/com/fs/store/controller/FsStorePaymentControllerTest.java

@@ -7,6 +7,7 @@ import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.erp.dto.*;
 import com.fs.erp.http.JstErpHttpService;
+import com.fs.erp.service.FsJstAftersalePushService;
 import com.fs.erp.service.IErpGoodsService;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.erp.utils.SignUtil;
@@ -46,6 +47,7 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
@@ -99,6 +101,18 @@ public class FsStorePaymentControllerTest {
     @Autowired
     private IErpGoodsService erpGoodsService;
 
+    @Autowired
+    private FsJstAftersalePushService fsJstAftersalePushService;
+
+    @Test
+    public void pushJstTest(){
+        fsJstAftersalePushService.pushJst();
+    }
+    @Test
+    public void updateExpress(){
+        storeTask.updateExpress();
+    }
+
     @Test
     public void pushErp() throws ParseException {
         fsStoreOrderService.createOmsOrder(1332687L);

+ 111 - 0
fs-service-system/src/main/java/com/fs/erp/constant/ErpQueryOrderStatusEnum.java

@@ -0,0 +1,111 @@
+package com.fs.erp.constant;
+
+import lombok.Getter;
+
+/**
+ * 订单状态枚举类
+ */
+@Getter
+public enum ErpQueryOrderStatusEnum {
+
+    /**
+     * 待付款
+     */
+    WAIT_PAY("WaitPay", "待付款"),
+
+    /**
+     * 发货中
+     */
+    DELIVERING("Delivering", "发货中"),
+
+    /**
+     * 被合并
+     */
+    MERGED("Merged", "被合并"),
+
+    /**
+     * 异常
+     */
+    QUESTION("Question", "异常"),
+
+    /**
+     * 被拆分
+     */
+    SPLIT("Split", "被拆分"),
+
+    /**
+     * 等供销商|外仓发货
+     */
+    WAIT_OUTER_SENT("WaitOuterSent", "等供销商|外仓发货"),
+
+    /**
+     * 已付款待审核
+     */
+    WAIT_CONFIRM("WaitConfirm", "已付款待审核"),
+
+    /**
+     * 已客审待财审
+     */
+    WAIT_FCONFIRM("WaitFConfirm", "已客审待财审"),
+
+    /**
+     * 已发货
+     */
+    SENT("Sent", "已发货"),
+
+    /**
+     * 取消
+     */
+    CANCELLED("Cancelled", "取消");
+
+    /**
+     * 状态码
+     */
+    private final String code;
+
+    /**
+     * 状态描述
+     */
+    private final String description;
+
+    /**
+     * 构造方法
+     *
+     * @param code        状态码
+     * @param description 状态描述
+     */
+    ErpQueryOrderStatusEnum(String code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    /**
+     * 根据状态码获取对应的枚举值
+     *
+     * @param code 状态码
+     * @return 对应的枚举值,若未找到则返回null
+     */
+    public static ErpQueryOrderStatusEnum getByCode(String code) {
+        for (ErpQueryOrderStatusEnum status : values()) {
+            if (status.getCode().equals(code)) {
+                return status;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 判断给定的状态码是否有效
+     *
+     * @param code 状态码
+     * @return 若有效返回true,否则返回false
+     */
+    public static boolean isValidCode(String code) {
+        return getByCode(code) != null;
+    }
+
+    @Override
+    public String toString() {
+        return this.code + ":" + this.description;
+    }
+}

+ 2 - 1
fs-service-system/src/main/java/com/fs/erp/dto/OrderItemDTO.java

@@ -3,6 +3,7 @@ package com.fs.erp.dto;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * 订单商品项DTO
@@ -23,7 +24,7 @@ public class OrderItemDTO implements Serializable {
     /**
      * 金额
      */
-    private Double amount;
+    private BigDecimal amount;
 
     /**
      * 基础价格

+ 12 - 0
fs-service-system/src/main/java/com/fs/erp/dto/ShopOrderDTO.java

@@ -1,6 +1,8 @@
 package com.fs.erp.dto;
 
 import lombok.Data;
+
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Date;
 import java.io.Serializable;
@@ -34,6 +36,16 @@ public class ShopOrderDTO implements Serializable {
      */
     private String shopStatus;
 
+    /**
+     * 是否货到付款
+     */
+    private Boolean isCod;
+
+    /**
+     * 总买家实付
+     */
+    private BigDecimal buyerPaidAmount;
+
     /**
      * 买家ID
      */

+ 2 - 1
fs-service-system/src/main/java/com/fs/erp/http/JstErpHttpServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -117,7 +118,7 @@ public class JstErpHttpServiceImpl implements JstErpHttpService {
         String url = BASE_URL + "/open/aftersale/upload";
         log.info("售后上传 - URL: {}, 请求体: {}", url, JSON.toJSONString(dto));
 
-        HttpResponse response = executeJsonPost(url, dto);
+        HttpResponse response = executeJsonPost(url, Collections.singletonList(dto));
         // 这里直接返回CommonResponse类型
         return parseCommonResponse(response);
     }

+ 57 - 30
fs-service-system/src/main/java/com/fs/erp/mapper/FsJstAftersalePushMapper.java

@@ -32,15 +32,15 @@ public interface FsJstAftersalePushMapper {
     /**
      * 插入记录
      */
-    @Insert("INSERT INTO fs_jst_aftersale_push(order_id, type, task_status, retry_count, last_execute_time, params) " +
-            "VALUES(#{orderId}, #{type}, #{taskStatus}, #{retryCount}, #{lastExecuteTime}, #{params})")
+    @Insert("INSERT INTO fs_jst_aftersale_push(order_id,after_sale_id, type, task_status, retry_count, last_execute_time, params) " +
+            "VALUES(#{orderId},#{afterSaleId}, #{type}, #{taskStatus}, #{retryCount}, #{lastExecuteTime}, #{params})")
     @Options(useGeneratedKeys = true, keyProperty = "id")
     int insert(FsJstAftersalePush push);
 
     /**
      * 更新记录
      */
-    @Update("UPDATE fs_jst_aftersale_push SET task_status = #{taskStatus}, retry_count = #{retryCount}, " +
+    @Update("UPDATE fs_jst_aftersale_push SET params=#{params},task_status = #{taskStatus}, retry_count = #{retryCount}, " +
             "last_execute_time = #{lastExecuteTime}, result = #{result}, error_message = #{errorMessage} " +
             "WHERE id = #{id}")
     int update(FsJstAftersalePush push);
@@ -52,32 +52,59 @@ public interface FsJstAftersalePushMapper {
             "last_execute_time = now() WHERE id = #{id}")
     int updateStatus(@Param("id") Long id, @Param("taskStatus") Byte taskStatus);
 
-    @Select("SELECT t1.*\n" +
-            "FROM fs_jst_aftersale_push t1\n" +
-            "WHERE t1.task_status = 0 and t1.retry_count<3\n" +
-            "  AND (\n" +
-            "      NOT EXISTS (\n" +
-            "          SELECT 1\n" +
-            "          FROM fs_jst_aftersale_push t_prev\n" +
-            "          WHERE t_prev.order_id = t1.order_id\n" +
-            "            AND t_prev.type < t1.type\n" +
-            "      )\n" +
-            "      OR\n" +
-            "      NOT EXISTS (\n" +
-            "          SELECT 1\n" +
-            "          FROM fs_jst_aftersale_push t_prev\n" +
-            "          WHERE t_prev.order_id = t1.order_id\n" +
-            "            AND t_prev.type < t1.type\n" +
-            "            AND t_prev.task_status != 1" +
-            "      )\n" +
-            "  )\n" +
-            "  AND NOT EXISTS (\n" +
-            "      SELECT 1\n" +
-            "      FROM fs_jst_aftersale_push t3\n" +
-            "      WHERE t3.order_id = t1.order_id\n" +
-            "        AND t3.type = t1.type\n" +
-            "        AND t3.task_status = 3" +
-            "  )\n" +
-            "ORDER BY t1.order_id, CAST(t1.type AS UNSIGNED), t1.create_time")
+    @Select("WITH OrderWithNextTaskType AS (\n" +
+            "    SELECT \n" +
+            "        id,\n" +
+            "        order_id,\n" +
+            "        after_sale_id,\n" +
+            "        type,\n" +
+            "        task_status,\n" +
+            "        retry_count,\n" +
+            "        ROW_NUMBER() OVER(PARTITION BY order_id ORDER BY CAST(type AS UNSIGNED)) AS task_seq\n" +
+            "    FROM \n" +
+            "        fs_jst_aftersale_push\n" +
+            "),\n" +
+            "PendingTasks AS (\n" +
+            "    SELECT \n" +
+            "        o.id,\n" +
+            "        o.order_id,\n" +
+            "        o.after_sale_id,\n" +
+            "        o.type,\n" +
+            "        o.task_status,\n" +
+            "        o.retry_count,\n" +
+            "        o.task_seq,\n" +
+            "        (\n" +
+            "            SELECT MAX(p.task_status)  \n" +
+            "            FROM OrderWithNextTaskType p\n" +
+            "            WHERE p.order_id = o.order_id\n" +
+            "              AND p.task_seq = o.task_seq - 1\n" +
+            "        ) AS prev_task_status,\n" +
+            "        EXISTS (\n" +
+            "            SELECT 1\n" +
+            "            FROM OrderWithNextTaskType p\n" +
+            "            WHERE p.order_id = o.order_id\n" +
+            "              AND p.task_seq < o.task_seq\n" +
+            "              AND p.task_status != 1\n" +
+            "        ) AS has_pending_prev_task\n" +
+            "    FROM \n" +
+            "        OrderWithNextTaskType o\n" +
+            "    WHERE \n" +
+            "        o.task_status = 0 OR (o.task_status = 2 AND o.retry_count < 3)\n" +
+            ")\n" +
+            "SELECT \n" +
+            "    id,\n" +
+            "    order_id,\n" +
+            "    after_sale_id,\n" +
+            "    type,\n" +
+            "    task_status,\n" +
+            "    retry_count\n" +
+            "FROM \n" +
+            "    PendingTasks\n" +
+            "WHERE \n" +
+            "    (task_seq = 1 OR prev_task_status = 1)\n" +
+            "    AND has_pending_prev_task = 0\n" +
+            "ORDER BY\n" +
+            "    order_id,\n" +
+            "    task_seq;\n")
     List<FsJstAftersalePush> queryPenddingData();
 }

+ 1 - 1
fs-service-system/src/main/java/com/fs/erp/service/impl/FsJstAftersalePushServiceImpl.java

@@ -142,7 +142,7 @@ public class FsJstAftersalePushServiceImpl implements FsJstAftersalePushService
         dto.setQuestionType("可更新");
         dto.setOuterAsId(item.getAfterSaleId());
         dto.setRemark("用户退款");
-        dto.setType("其他");
+        dto.setType("仅退款");
 
         dto.setShopId(Long.parseLong(shopId));
         dto.setTotalAmount(fsStoreOrder.getTotalPrice());

+ 62 - 25
fs-service-system/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -1,6 +1,10 @@
 package com.fs.erp.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.fs.erp.constant.AfterSalesOrderStatusEnum;
+import com.fs.erp.constant.ErpQueryOrderStatusEnum;
 import com.fs.erp.constant.OrderStatusEnum;
 import com.fs.erp.domain.*;
 import com.fs.erp.dto.*;
@@ -9,8 +13,16 @@ import com.fs.erp.mapper.FsJstAftersalePushMapper;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.erp.utils.SignUtil;
 import com.fs.express.enums.TaskStatusEnum;
+import com.fs.store.domain.FsStoreAfterSales;
+import com.fs.store.domain.FsStoreDelivers;
 import com.fs.store.domain.FsStoreOrder;
+import com.fs.store.domain.FsStoreProduct;
+import com.fs.store.mapper.FsStoreAfterSalesMapper;
+import com.fs.store.mapper.FsStoreDeliversMapper;
+import com.fs.store.service.IFsStoreOrderItemService;
 import com.fs.store.service.IFsStoreOrderService;
+import com.fs.store.service.IFsStoreProductService;
+import com.fs.store.vo.FsStoreOrderItemVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.Asserts;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +33,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -37,12 +50,22 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
     @Autowired
     private FsJstAftersalePushMapper fsJstAftersalePushMapper;
 
+    @Autowired
+    private IFsStoreOrderItemService fsStoreOrderItemService;
+
+    @Autowired
+    private IFsStoreProductService fsStoreProductService;
+
     @Override
     public ErpOrderResponse addOrder(ErpOrder order) {
+        FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(order.getPlatform_code());
+
         ErpOrderPayment erpOrderPayment = order.getPayments().get(0);
 
         ShopOrderDTO shopOrderDTO = new ShopOrderDTO();
 
+        BigDecimal couponPrice = fsStoreOrder.getCouponPrice();
+
         shopOrderDTO.setShopId(Long.valueOf(order.getShop_code()));
         shopOrderDTO.setSoId(order.getPlatform_code());
         shopOrderDTO.setOrderDate(order.getDeal_datetime());
@@ -74,19 +97,26 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         shopOrderDTO.setBuyerMessage(order.getBuyer_memo());
 
         // 订单商品项列表
-        List<ErpOrderItem> details = order.getDetails();
         List<OrderItemDTO> itemDTOList = new ArrayList<>();
-        for (ErpOrderItem detail : details) {
+
+        List<FsStoreOrderItemVO> fsStoreOrderItemVOS = fsStoreOrderItemService.selectFsStoreOrderItemListByOrderId(fsStoreOrder.getId());
+        for (FsStoreOrderItemVO item : fsStoreOrderItemVOS) {
             OrderItemDTO orderItemDTO = new OrderItemDTO();
-            orderItemDTO.setSkuId(detail.getItem_code());
-            orderItemDTO.setShopSkuId(detail.getItem_code());
-            orderItemDTO.setName(detail.getItem_code());
-            orderItemDTO.setAmount(Double.valueOf(detail.getPrice()));
-            if(detail.getOrigin_price() != null) {
-                orderItemDTO.setBasePrice(Double.valueOf(detail.getOrigin_price()));
-            }
-            orderItemDTO.setQty(detail.getQty());
-            orderItemDTO.setOuterOiId(order.getPlatform_code());
+            JSONObject jsonObject = JSON.parseObject(item.getJsonInfo());
+
+            String barCode = jsonObject.getString("barCode");
+            String productName = jsonObject.getString("productName");
+
+            orderItemDTO.setSkuId(barCode);
+            orderItemDTO.setShopSkuId(barCode);
+            orderItemDTO.setName(productName);
+
+            FsStoreProduct fsStoreProduct = fsStoreProductService.selectFsStoreProductById(item.getProductId());
+
+            orderItemDTO.setAmount(fsStoreProduct.getPrice());
+
+            orderItemDTO.setQty(item.getNum().intValue());
+            orderItemDTO.setOuterOiId(String.format("%s%s",item.getOrderCode(),item.getItemId()));
             itemDTOList.add(orderItemDTO);
         }
         shopOrderDTO.setItems(itemDTOList);
@@ -101,6 +131,13 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         paymentDTO.setSellerAccount("平台销售");
         shopOrderDTO.setPay(paymentDTO);
 
+        // 如果是货到付款
+        if("2".equals(fsStoreOrder.getPayType()) || "3".equals(fsStoreOrder.getPayType())){
+            shopOrderDTO.setIsCod(true);
+            // 货到付款金额 = 物流代收金额-优惠金额
+            shopOrderDTO.setBuyerPaidAmount(fsStoreOrder.getPayDelivery().subtract(couponPrice));
+        }
+
         ErpOrderResponseDTO upload = jstErpHttpService.upload(shopOrderDTO);
 
         if(CollectionUtils.isEmpty(upload.getDatas())) {
@@ -214,15 +251,15 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         // 构建完整地址
         erpOrder.setReceiver_address(fsStoreOrder.getUserAddress());
 
-        // 处理发货相关信息
-        if (order.getShipment() != null && StringUtils.hasText(order.getShipment())) {
+        // 如果是已发货
+        if(ObjectUtil.equal(order.getStatus(), ErpQueryOrderStatusEnum.SENT.getCode())){
             List<ErpDeliverys> deliverysList = new ArrayList<>();
 
             ErpDeliverys delivery = new ErpDeliverys();
-            delivery.setMail_no(order.getShipment());
+            delivery.setMail_no(order.getLId());
             delivery.setExpress_code(order.getLcId());
             delivery.setExpress_name(order.getLogisticsCompany());
-            delivery.setDelivery(true); // 假设有物流单号就是已发货状态
+            delivery.setDelivery(true);
             delivery.setCode(order.getSoId());
 
             deliverysList.add(delivery);
@@ -237,23 +274,23 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         return erpOrder;
     }
 
+    @Autowired
+    private FsStoreDeliversMapper fsStoreDeliversMapper;
+
+    @Autowired
+    private FsStoreAfterSalesMapper fsStoreAfterSalesMapper;
     @Override
     public BaseResponse refundUpdate(ErpRefundUpdateRequest param) {
 
         FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(param.getTid());
+        FsStoreDelivers byOrderCode = fsStoreDeliversMapper.findByOrderCode(fsStoreOrder.getOrderCode());
+
 
-        Set<Integer> statusSet = new HashSet<>();
-        statusSet.add(2);
-        statusSet.add(3);
+        FsStoreAfterSales afterSales = fsStoreAfterSalesMapper.selectFsStoreAfterSalesByOrderCode(fsStoreOrder.getOrderCode());
 
         // 发货后退款
-        if(statusSet.contains(fsStoreOrder.getStatus())){
-            FsJstAftersalePush fsJstAftersalePush = new FsJstAftersalePush();
-            fsJstAftersalePush.setOrderId(fsStoreOrder.getOrderCode());
-            fsJstAftersalePush.setType(String.valueOf(AfterSalesOrderStatusEnum.WAIT_SELLER_AGREE.getIndex()));
-            fsJstAftersalePush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
-            fsJstAftersalePush.setRetryCount(0);
-            fsJstAftersalePushMapper.insert(fsJstAftersalePush);
+        if(ObjectUtil.isNotNull(byOrderCode)){
+            
         } else {
             // 如果是发货前退款,直接走取消订单流程
             // 如果是发货后退款,走售后流程

+ 3 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreAfterSalesMapper.java

@@ -106,4 +106,7 @@ public interface FsStoreAfterSalesMapper
 
     @Update("update fs_store_after_sales set delivery_sn =#{deliverySn},delivery_name = #{deliveryName},status = #{status} where id = #{id}")
     int updateDeliveryById(FsStoreAfterSales fsStoreAfterSales);
+
+    @Select("select * from fs_store_after_sales where order_code=#{orderCode} and status in (0,1,2,3) and sales_status=0 limit 1")
+    FsStoreAfterSales selectFsStoreAfterSalesByOrderCode(@Param("orderCode") String orderCode);
 }

+ 1 - 1
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderMapper.java

@@ -924,7 +924,7 @@ public interface FsStoreOrderMapper
 
     List<JSONObject> selectTuiMoneyCounts(Map<String, Object> map);
 
-    @Select("select * from fs_store_order where status = 1 and extend_order_id is not null")
+    @Select("select * from fs_store_order where status = 1 and extend_order_id is not null and order_code='1935632146915917824'")
     List<FsStoreOrder> selectUpdateExpress();
     @Select({"<script> " +
             "SELECT ANY_VALUE(json_info) json,SUM(num) num FROM fs_store_order_item   WHERE order_id IN (SELECT id FROM fs_store_order WHERE `status`>0  " +

+ 58 - 34
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreAfterSalesServiceImpl.java

@@ -10,6 +10,7 @@ import java.util.*;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.annotation.DataScope;
@@ -328,9 +329,21 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         // 根据仓库code找erp
         if(StringUtils.isNotBlank(order.getStoreHouseCode())){
             String erp = fsWarehousesMapper.selectErpByCode(order.getStoreHouseCode());
+
+            if(StringUtils.equals(erp,ErpTypeConstant.JST_ERP)){
+                FsJstAftersalePush fsJstAftersalePush = new FsJstAftersalePush();
+                fsJstAftersalePush.setOrderId(order.getOrderCode());
+                fsJstAftersalePush.setType(String.valueOf(AfterSalesOrderStatusEnum.WAIT_SELLER_AGREE.getIndex()));
+                fsJstAftersalePush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
+                fsJstAftersalePush.setRetryCount(0);
+                fsJstAftersalePush.setAfterSaleId(String.valueOf(storeAfterSalesStatus.getId()));
+                fsJstAftersalePushMapper.insert(fsJstAftersalePush);
+            }
             ErpContextHolder.setErpType(erp);
         }
 
+
+
         BaseResponse response=erpOrderService.refundUpdate(request);
         if(response.getSuccess()){
             return R.ok();
@@ -359,10 +372,26 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         if (!storeAfterSales.getOrderStatus().equals(OrderInfoEnum.STATUS_1.getValue()) ) {
             throw new CustomException("只有未发货的订单可以撤销售后");
         }
+        FsStoreOrder order = orderService.selectFsStoreOrderByOrderCode(storeAfterSales.getOrderCode());
+
+        // erp撤销售后单
+        // 如果当前订单是属于jst erp
+        if(StringUtils.isNotBlank(order.getStoreHouseCode())){
+            String erp = fsWarehousesMapper.selectErpByCode(order.getStoreHouseCode());
+            if(StringUtils.equals(erp, ErpTypeConstant.JST_ERP)){
+                FsJstAftersalePush fsJstAftersalePush = new FsJstAftersalePush();
+                fsJstAftersalePush.setOrderId(order.getOrderCode());
+                fsJstAftersalePush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
+                fsJstAftersalePush.setType(String.valueOf(AfterSalesOrderStatusEnum.CLOSED.getIndex()));
+                fsJstAftersalePush.setRetryCount(0);
+                fsJstAftersalePush.setAfterSaleId(String.valueOf(id));
+                fsJstAftersalePushMapper.insert(fsJstAftersalePush);
+            }
+        }
+
 
 
         storeAfterSales.setSalesStatus(1);
-        FsStoreOrder order = orderService.selectFsStoreOrderByOrderCode(storeAfterSales.getOrderCode());
         order.setStatus(storeAfterSales.getOrderStatus());
         order.setRefundStatus(OrderInfoEnum.REFUND_STATUS_0.getValue());
         orderService.updateFsStoreOrder(order);
@@ -392,19 +421,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         }
         fsStoreAfterSalesMapper.updateFsStoreAfterSales(storeAfterSales);
 
-        // erp撤销售后单
-        // 如果当前订单是属于jst erp
-        if(StringUtils.isNotBlank(order.getStoreHouseCode())){
-            String erp = fsWarehousesMapper.selectErpByCode(order.getStoreHouseCode());
-            if(StringUtils.equals(erp, ErpTypeConstant.JST_ERP)){
-                FsJstAftersalePush fsJstAftersalePush = new FsJstAftersalePush();
-                fsJstAftersalePush.setOrderId(order.getOrderCode());
-                fsJstAftersalePush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
-                fsJstAftersalePush.setType(String.valueOf(AfterSalesOrderStatusEnum.CLOSED.getIndex()));
-                fsJstAftersalePush.setRetryCount(0);
-                fsJstAftersalePushMapper.insert(fsJstAftersalePush);
-            }
-        }
+
         return R.ok();
     }
 
@@ -454,6 +471,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
                 fsJstAftersalePush.setOrderId(order.getOrderCode());
                 fsJstAftersalePush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
                 fsJstAftersalePush.setType(String.valueOf(AfterSalesOrderStatusEnum.WAIT_SELLER_CONFIRM_GOODS.getIndex()));
+                fsJstAftersalePush.setAfterSaleId(String.valueOf(param.getSalesId()));
                 fsJstAftersalePush.setRetryCount(0);
                 fsJstAftersalePushMapper.insert(fsJstAftersalePush);
             }
@@ -589,13 +607,37 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         if (!storeAfterSales.getStatus().equals(AfterStatusEnum.STATUS_3.getValue())) {
             throw new CustomException("非法操作");
         }
+        FsStoreOrder order = orderService.selectFsStoreOrderByOrderCode(storeAfterSales.getOrderCode());
+
+        // 财务审核通过,同步到jst erp
+        if(StringUtils.isNotBlank(order.getStoreHouseCode())){
+            String erp = fsWarehousesMapper.selectErpByCode(order.getStoreHouseCode());
+            if(StringUtils.equals(erp, ErpTypeConstant.JST_ERP)){
+                FsJstAftersalePush fsJstAftersalePush = new FsJstAftersalePush();
+                fsJstAftersalePush.setOrderId(order.getOrderCode());
+                fsJstAftersalePush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
+                fsJstAftersalePush.setType(String.valueOf(AfterSalesOrderStatusEnum.SUCCESS.getIndex()));
+                fsJstAftersalePush.setRetryCount(0);
+                fsJstAftersalePush.setAfterSaleId(String.valueOf(param.getSalesId()));
+                fsJstAftersalePushMapper.insert(fsJstAftersalePush);
+
+                // 售后单改成已确认
+                FsJstAftersalePush aftersaleConfirm = new FsJstAftersalePush();
+                aftersaleConfirm.setOrderId(order.getOrderCode());
+                aftersaleConfirm.setTaskStatus(TaskStatusEnum.PENDING.getCode());
+                aftersaleConfirm.setType(String.valueOf(AfterSalesOrderStatusEnum.CONFIRM.getIndex()));
+                aftersaleConfirm.setRetryCount(0);
+                fsJstAftersalePush.setAfterSaleId(String.valueOf(param.getSalesId()));
+                fsJstAftersalePushMapper.insert(aftersaleConfirm);
+            }
+        }
+
         //审核通过
         storeAfterSales.setRefundAmount(param.getRefundAmount());
         storeAfterSales.setStatus(4);
         storeAfterSales.setSalesStatus(3);
         fsStoreAfterSalesMapper.updateFsStoreAfterSales(storeAfterSales);
 
-        FsStoreOrder order = orderService.selectFsStoreOrderByOrderCode(storeAfterSales.getOrderCode());
         order.setStatus(-2);
         order.setRefundPrice(storeAfterSales.getRefundAmount());
         order.setRefundStatus(OrderInfoEnum.REFUND_STATUS_2.getValue());
@@ -709,26 +751,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
             userService.subTuiMoney(order);
         }
 
-        // 财务审核通过,同步到jst erp
-        if(StringUtils.isNotBlank(order.getStoreHouseCode())){
-            String erp = fsWarehousesMapper.selectErpByCode(order.getStoreHouseCode());
-            if(StringUtils.equals(erp, ErpTypeConstant.JST_ERP)){
-                FsJstAftersalePush fsJstAftersalePush = new FsJstAftersalePush();
-                fsJstAftersalePush.setOrderId(order.getOrderCode());
-                fsJstAftersalePush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
-                fsJstAftersalePush.setType(String.valueOf(AfterSalesOrderStatusEnum.SUCCESS.getIndex()));
-                fsJstAftersalePush.setRetryCount(0);
-                fsJstAftersalePushMapper.insert(fsJstAftersalePush);
 
-                // 售后单改成已确认
-                FsJstAftersalePush aftersaleConfirm = new FsJstAftersalePush();
-                aftersaleConfirm.setOrderId(order.getOrderCode());
-                aftersaleConfirm.setTaskStatus(TaskStatusEnum.PENDING.getCode());
-                aftersaleConfirm.setType(String.valueOf(AfterSalesOrderStatusEnum.CONFIRM.getIndex()));
-                aftersaleConfirm.setRetryCount(0);
-                fsJstAftersalePushMapper.insert(aftersaleConfirm);
-            }
-        }
         return R.ok();
     }
 
@@ -765,6 +788,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
                 fsJstAftersalePush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
                 fsJstAftersalePush.setType(String.valueOf(AfterSalesOrderStatusEnum.CLOSED.getIndex()));
                 fsJstAftersalePush.setRetryCount(0);
+                fsJstAftersalePush.setAfterSaleId(String.valueOf(param.getSalesId()));
                 fsJstAftersalePushMapper.insert(fsJstAftersalePush);
             } else {
                 //创建新的OMS订单