|  | @@ -7,6 +7,7 @@ import cn.hutool.json.JSONObject;
 | 
	
		
			
				|  |  |  import cn.hutool.json.JSONUtil;
 | 
	
		
			
				|  |  |  import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 | 
	
		
			
				|  |  | +import com.fs.common.core.redis.RedisCache;
 | 
	
		
			
				|  |  |  import com.fs.common.event.TemplateBean;
 | 
	
		
			
				|  |  |  import com.fs.common.event.TemplateEvent;
 | 
	
		
			
				|  |  |  import com.fs.common.event.TemplateListenEnum;
 | 
	
	
		
			
				|  | @@ -40,6 +41,7 @@ import com.fs.hisStore.enums.ShipperCodeEnum;
 | 
	
		
			
				|  |  |  import com.fs.hisStore.mapper.FsStoreOrderItemScrmMapper;
 | 
	
		
			
				|  |  |  import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 | 
	
		
			
				|  |  |  import com.fs.hisStore.mapper.FsStoreProductScrmMapper;
 | 
	
		
			
				|  |  | +import com.fs.hisStore.param.FsStoreAfterSalesParam;
 | 
	
		
			
				|  |  |  import com.fs.hisStore.service.IFsExpressScrmService;
 | 
	
		
			
				|  |  |  import com.fs.hisStore.service.IFsStoreOrderScrmService;
 | 
	
		
			
				|  |  |  import com.fs.hisStore.vo.FsStoreOrderItemVO;
 | 
	
	
		
			
				|  | @@ -58,6 +60,8 @@ import java.math.BigDecimal;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.concurrent.atomic.AtomicBoolean;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import static com.fs.hisStore.constants.StoreConstants.DELIVERY;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  @Slf4j
 | 
	
		
			
				|  |  |  public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
	
		
			
				|  | @@ -115,9 +119,15 @@ public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private IFsStoreOrderService fsStoreOrderService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private IFsStoreOrderScrmService fsStoreOrderScrmService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private SysConfigMapper sysConfigMapper;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private RedisCache redisCache;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public ErpOrderResponse addOrder(ErpOrder order) {
 | 
	
	
		
			
				|  | @@ -184,6 +194,61 @@ public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
		
			
				|  |  |          return new ErpOrderResponse();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 退款 取消订单
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param order
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public ErpOrderResponse refundOrderScrm(ErpRefundOrder order) {
 | 
	
		
			
				|  |  | +        //获取代服账户
 | 
	
		
			
				|  |  | +        String orderCode = order.getOrderCode();
 | 
	
		
			
				|  |  | +        FsStoreOrderScrm fsStoreOrder = fsStoreOrderScrmMapper.selectFsStoreOrderByOrderCode(orderCode);
 | 
	
		
			
				|  |  | +        FsStoreOrderDf df = fsStoreOrderDfMapper.selectFsStoreOrderDfByOrderId(fsStoreOrder.getId());
 | 
	
		
			
				|  |  | +        if (df == null) {
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Long dfAccountId = getSFAccountIndex(fsStoreOrder.getId());
 | 
	
		
			
				|  |  | +        HashMap<String, Object> map = new HashMap<>();
 | 
	
		
			
				|  |  | +        map.put("loginAccount", df.getLoginAccount());
 | 
	
		
			
				|  |  | +        FsDfAccount dfAccount = fsDfAccountMapper.selectFsDfAccountById(dfAccountId);
 | 
	
		
			
				|  |  | +        if (dfAccount != null && StringUtils.isNotBlank(dfAccount.getCallBackUrl())) {
 | 
	
		
			
				|  |  | +            map.put("callBackUrl", dfAccount.getCallBackUrl());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        map.put("orderNumber", orderCode);
 | 
	
		
			
				|  |  | +        map.put("mailNumber", fsStoreOrder.getDeliveryId());
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            //2.请求
 | 
	
		
			
				|  |  | +            log.info("开始取消订单,参数: {}", JSON.toJSONString(map));
 | 
	
		
			
				|  |  | +            String response = client.execute(RequestUrlEnum.ORDER_CANCEL, map, dfAccountId);
 | 
	
		
			
				|  |  | +            DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
 | 
	
		
			
				|  |  | +            //3.处理请求结果
 | 
	
		
			
				|  |  | +            if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
 | 
	
		
			
				|  |  | +                //存储订单推送用的哪个账户
 | 
	
		
			
				|  |  | +                log.info("订单取消成功: {}", response);
 | 
	
		
			
				|  |  | +                //修改df表
 | 
	
		
			
				|  |  | +                df.setStatus(2);
 | 
	
		
			
				|  |  | +                df.setUpdateTime(DateUtils.getNowDate());
 | 
	
		
			
				|  |  | +                fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
 | 
	
		
			
				|  |  | +                //可以回调 也可以查询订单
 | 
	
		
			
				|  |  | +                Map<String, Object> orderResultQueryParam = new HashMap<>();
 | 
	
		
			
				|  |  | +                orderResultQueryParam.put("orderNumber", orderCode);
 | 
	
		
			
				|  |  | +                orderResultQueryParam.put("exInterfaceType", 2); //2为查询取消订单结果
 | 
	
		
			
				|  |  | +//                    getOrderResult(orderResultQueryParam,sfAccountIndex);
 | 
	
		
			
				|  |  | +                ErpOrderResponse erpOrderResponse = new ErpOrderResponse();
 | 
	
		
			
				|  |  | +                erpOrderResponse.setCode(orderCode);
 | 
	
		
			
				|  |  | +                erpOrderResponse.setSuccess(true);
 | 
	
		
			
				|  |  | +                return erpOrderResponse;
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                throw new RuntimeException(String.format("订单取消失败,原因: %s", dfApiResponse.getMsg()));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        } catch (IOException e) {
 | 
	
		
			
				|  |  | +            e.printStackTrace();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return new ErpOrderResponse();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public ErpDeliverysResponse getDeliver(ErpDeliverysRequest request) {
 | 
	
		
			
				|  |  |          ErpDeliverysResponse erpDeliverysResponse = new ErpDeliverysResponse();
 | 
	
	
		
			
				|  | @@ -310,8 +375,10 @@ public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    public BaseResponse refundUpdateScrm(ErpRefundUpdateRequest param) {
 | 
	
		
			
				|  |  | -        return null;
 | 
	
		
			
				|  |  | +    public BaseResponse refundUpdateScrm(ErpRefundUpdateRequest request) {
 | 
	
		
			
				|  |  | +        ErpRefundOrder erpRefundOrder = new ErpRefundOrder();
 | 
	
		
			
				|  |  | +        erpRefundOrder.setOrderCode(request.getTid());
 | 
	
		
			
				|  |  | +        return refundOrderScrm(erpRefundOrder);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
	
		
			
				|  | @@ -414,6 +481,101 @@ public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public void getOrderScrmDeliveryStatus(FsStoreOrderScrm order) {
 | 
	
		
			
				|  |  | +        Map<String, Object> map = new HashMap<>();
 | 
	
		
			
				|  |  | +        Long dfAccountId = getSFAccountIndex(order.getId());
 | 
	
		
			
				|  |  | +        map.put("orderNumber", order.getOrderCode());
 | 
	
		
			
				|  |  | +        map.put("mailNumber", order.getDeliveryId());
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            String response = client.execute(RequestUrlEnum.ORDER_DELIVERY_STATUS, map, dfAccountId);
 | 
	
		
			
				|  |  | +            DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
 | 
	
		
			
				|  |  | +            if ("运单不存在".equals(dfApiResponse.getMsg())) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //查看原来物流状态
 | 
	
		
			
				|  |  | +                cancelOrderScrm(order);
 | 
	
		
			
				|  |  | +                log.info("代服管家 getOrderDeliveryStatus: {}", response);
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //3.处理请求结果
 | 
	
		
			
				|  |  | +            if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
 | 
	
		
			
				|  |  | +                String jsonString = JSON.toJSONString(dfApiResponse.getResult());
 | 
	
		
			
				|  |  | +//                List<DFOrderStatusResultRequest> requestList = JSON.parseArray(jsonString, DFOrderStatusResultRequest.class);
 | 
	
		
			
				|  |  | +                DFOrderStatusResultRequest temp = JSON.parseObject(jsonString, DFOrderStatusResultRequest.class);
 | 
	
		
			
				|  |  | +                //0待揽收 1已揽收 2运输中 3派送中 4异常件 5退回件 6退回签收 7转寄件 8作废件 9已签收 10 已取消
 | 
	
		
			
				|  |  | +                Integer deliveryStatus = 0;
 | 
	
		
			
				|  |  | +                String stateEx = "0";
 | 
	
		
			
				|  |  | +                FsStoreOrderScrm fsStoreOrderMap = new FsStoreOrderScrm();
 | 
	
		
			
				|  |  | +                fsStoreOrderMap.setId(order.getId());
 | 
	
		
			
				|  |  | +                Integer status = temp.getStatus();
 | 
	
		
			
				|  |  | +                switch (status) {
 | 
	
		
			
				|  |  | +                    case 0:
 | 
	
		
			
				|  |  | +                        //0待揽收 1已揽收 2运输中
 | 
	
		
			
				|  |  | +                        deliveryStatus = status;
 | 
	
		
			
				|  |  | +                        stateEx = status.toString();
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case 1:
 | 
	
		
			
				|  |  | +                        //0待揽收 1已揽收 2运输中
 | 
	
		
			
				|  |  | +                        deliveryStatus = status;
 | 
	
		
			
				|  |  | +                        stateEx = status.toString();
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case 2:
 | 
	
		
			
				|  |  | +                        //0待揽收 1已揽收 2运输中
 | 
	
		
			
				|  |  | +                        deliveryStatus = status;
 | 
	
		
			
				|  |  | +                        stateEx = status.toString();
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case 3:
 | 
	
		
			
				|  |  | +                        //3派送中
 | 
	
		
			
				|  |  | +                        deliveryStatus = 2;
 | 
	
		
			
				|  |  | +                        stateEx = "202";
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case 4:
 | 
	
		
			
				|  |  | +                        // 4异常件
 | 
	
		
			
				|  |  | +                        deliveryStatus = status;
 | 
	
		
			
				|  |  | +                        stateEx = status.toString();
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case 5:
 | 
	
		
			
				|  |  | +                        //5退回件
 | 
	
		
			
				|  |  | +                        deliveryStatus = 4;
 | 
	
		
			
				|  |  | +                        stateEx = "407"; //退货未签收
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case 6:
 | 
	
		
			
				|  |  | +                        // 6退回签收 7转寄件 8作废件 9已签收 10 已取消
 | 
	
		
			
				|  |  | +                        deliveryStatus = status;
 | 
	
		
			
				|  |  | +                        stateEx = "406"; //退货签收
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case 9:
 | 
	
		
			
				|  |  | +                        //已签收
 | 
	
		
			
				|  |  | +                        deliveryStatus = 3;
 | 
	
		
			
				|  |  | +                        stateEx = "301"; //退货签收
 | 
	
		
			
				|  |  | +//                        SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.store");
 | 
	
		
			
				|  |  | +//                        Map<String, Object> config = (Map<String, Object>) JSON.parse(sysConfig.getConfigValue());
 | 
	
		
			
				|  |  | +//                        Object isUpdateOrder = config.get("isUpdateOrder");
 | 
	
		
			
				|  |  | +//                        if (isUpdateOrder == null || "1".equals(isUpdateOrder.toString())) {
 | 
	
		
			
				|  |  | +//                            fsStoreOrderService.getGoods(order.getId(), "物流自动");
 | 
	
		
			
				|  |  | +//                        }
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case 10:
 | 
	
		
			
				|  |  | +                        //取消订单
 | 
	
		
			
				|  |  | +                        String mailNumber = temp.getMailNumber();
 | 
	
		
			
				|  |  | +                        List<FsStoreOrderScrm> fsStoreOrders = fsStoreOrderScrmMapper.selectFsStoreOrderListByDeliveryId(mailNumber);
 | 
	
		
			
				|  |  | +                        if (fsStoreOrders != null && !fsStoreOrders.isEmpty()) {
 | 
	
		
			
				|  |  | +                            fsStoreOrders.forEach(tempOrder -> {
 | 
	
		
			
				|  |  | +                                cancelOrderScrm(order);
 | 
	
		
			
				|  |  | +                                log.info("代服管家 订单取消成功: {}", response);
 | 
	
		
			
				|  |  | +                            });
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                fsStoreOrderMap.setDeliveryStatus(deliveryStatus); //物流状态:0-暂无轨迹信息 1-已揽收 2-在途中,3-签收,4-问题件
 | 
	
		
			
				|  |  | +                fsStoreOrderMap.setDeliveryType(stateEx);
 | 
	
		
			
				|  |  | +                fsStoreOrderScrmMapper.updateFsStoreOrder(fsStoreOrderMap);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        } catch (IOException e) {
 | 
	
		
			
				|  |  | +            e.printStackTrace();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      private void cancelOrder(FsStoreOrder order) {
 | 
	
		
			
				|  |  |          Integer deliveryStatus = order.getDeliveryStatus();
 | 
	
		
			
				|  |  |          if (deliveryStatus == null || deliveryStatus == 0) {
 | 
	
	
		
			
				|  | @@ -443,6 +605,37 @@ public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
		
			
				|  |  |          fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private void cancelOrderScrm(FsStoreOrderScrm order) {
 | 
	
		
			
				|  |  | +        Integer deliveryStatus = order.getDeliveryStatus();
 | 
	
		
			
				|  |  | +        if (deliveryStatus == null || deliveryStatus == 0) {
 | 
	
		
			
				|  |  | +            //没有物流信息
 | 
	
		
			
				|  |  | +            //修改订单状态 方便后续重新发货
 | 
	
		
			
				|  |  | +            order.setStatus(OrderInfoEnum.STATUS_1.getValue());
 | 
	
		
			
				|  |  | +            order.setExtendOrderId("");
 | 
	
		
			
				|  |  | +            order.setDeliveryId("");
 | 
	
		
			
				|  |  | +            fsStoreOrderScrmMapper.updateFsStoreOrder(order);
 | 
	
		
			
				|  |  | +            fsStoreOrderScrmLogsService.create(order.getId(), OrderLogEnum.UPDATE_ORDER_DF.getValue(),
 | 
	
		
			
				|  |  | +                    "运单不存在," + OrderLogEnum.UPDATE_ORDER_DF.getDesc());
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            //有物流信息->售后处理
 | 
	
		
			
				|  |  | +            //取消订单
 | 
	
		
			
				|  |  | +            FsStoreAfterSalesParam afterSalesParam = new FsStoreAfterSalesParam();
 | 
	
		
			
				|  |  | +//            afterSalesParam.setOrderId(order.getId());
 | 
	
		
			
				|  |  | +//            afterSalesParam.setOrderCode(order.getOrderCode());
 | 
	
		
			
				|  |  | +//            afterSalesParam.setReasons("代服管家取消订单");
 | 
	
		
			
				|  |  | +//            afterSalesParam.setOperator("代服管家");
 | 
	
		
			
				|  |  | +//            fsStoreOrderScrmService.afterSales(afterSalesParam);
 | 
	
		
			
				|  |  | +            fsStoreOrderScrmService.refundOrderMoney(order.getId());
 | 
	
		
			
				|  |  | +            fsStoreOrderScrmLogsService.create(order.getId(), OrderLogEnum.REFUND_ORDER_DF.getValue(),
 | 
	
		
			
				|  |  | +                    "运单不存在," + OrderLogEnum.REFUND_ORDER_DF.getDesc());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        FsStoreOrderDf df = new FsStoreOrderDf();
 | 
	
		
			
				|  |  | +        df.setOrderId(order.getId());
 | 
	
		
			
				|  |  | +        df.setStatus(2);
 | 
	
		
			
				|  |  | +        df.setUpdateTime(new Date());
 | 
	
		
			
				|  |  | +        fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 获取erp推送参数
 | 
	
		
			
				|  |  |       *
 | 
	
	
		
			
				|  | @@ -632,7 +825,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
		
			
				|  |  |              couponPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (ObjectUtil.equal(1, fsStoreOrder.getPayType())) {
 | 
	
		
			
				|  |  | +        if ("1".equals(fsStoreOrder.getPayType())) {
 | 
	
		
			
				|  |  |              //在线支付
 | 
	
		
			
				|  |  |              orderPayMethod = 1;
 | 
	
		
			
				|  |  |          } else { // 如果是线上付款
 | 
	
	
		
			
				|  | @@ -1011,6 +1204,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
		
			
				|  |  |                                              order.setDeliverySendTime(DateUtils.getNowDate()); //更新发货时间
 | 
	
		
			
				|  |  |                                              fsStoreOrderMapper.updateFsStoreOrder(order);
 | 
	
		
			
				|  |  |                                              fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
 | 
	
		
			
				|  |  | +                                            redisCache.deleteObject(DELIVERY+":"+order.getExtendOrderId());
 | 
	
		
			
				|  |  |                                              if (order.getCompanyId() != null && order.getCompanyId() > 0) {
 | 
	
		
			
				|  |  |                                                  companyService.subtractCompanyMoney(order);
 | 
	
		
			
				|  |  |                                              }
 | 
	
	
		
			
				|  | @@ -1087,6 +1281,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                              fsStoreOrderScrmMapper.updateFsStoreOrder(order);
 | 
	
		
			
				|  |  |                                              fsStoreOrderScrmLogsService.create(order.getId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
 | 
	
		
			
				|  |  | +                                            redisCache.deleteObject(DELIVERY+":"+order.getExtendOrderId());
 | 
	
		
			
				|  |  |                                              //订阅物流回调
 | 
	
		
			
				|  |  |  //                                            String lastFourNumber = "";
 | 
	
		
			
				|  |  |  //                                            if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
 |