Przeglądaj źródła

使用发货人手机号码进行物流订阅和查询

yuhongqi 1 tydzień temu
rodzic
commit
520628faeb

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderScrm.java

@@ -269,6 +269,9 @@ public class FsStoreOrderScrm extends BaseEntity
     @Excel(name = "发货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date deliverySendTime;
 
+    /** 物流订阅成功的发货人手机号 */
+    private String senderPhone;
+
     //凭证
     private String certificates;
 

+ 12 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java

@@ -512,6 +512,18 @@ public interface FsStoreOrderScrmMapper
      */
     @Update("UPDATE fs_store_order_scrm SET outer_oi_id = #{outerOiId} WHERE order_code = #{orderCode}")
     int updateOuterOiIdByOrderCode(@Param("orderCode") String orderCode, @Param("outerOiId") String outerOiId);
+
+    /**
+     * 根据订单号更新物流订阅成功的发货人手机号
+     */
+    @Update("UPDATE fs_store_order_scrm SET sender_phone = #{senderPhone} WHERE order_code = #{orderCode}")
+    int updateSenderPhoneByOrderCode(@Param("orderCode") String orderCode, @Param("senderPhone") String senderPhone);
+
+    /**
+     * 根据订单号查询物流订阅成功的发货人手机号
+     */
+    @Select("SELECT sender_phone FROM fs_store_order_scrm WHERE order_code = #{orderCode} LIMIT 1")
+    String selectSenderPhoneByOrderCode(@Param("orderCode") String orderCode);
     @Update("update fs_store_order_scrm set status=-3 where id=#{orderId}")
     int cancelOrder(Long orderId);
     @Select({"<script> " +

+ 10 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsExpressScrmService.java

@@ -82,6 +82,16 @@ public interface IFsExpressScrmService
 
     void subscribeEspress(String orderCode, String deliverySn, String deliveryId, String userPhone);
 
+    /**
+     * 使用发货人手机号优先订阅物流(最多3个发货人手机号,失败后使用收货人手机号)
+     */
+    void subscribeEspressWithSenderPhones(String orderCode, String deliverySn, String deliveryId, String userPhone, String senderPhones);
+
+    /**
+     * 根据字典配置选择订阅方式
+     */
+    void subscribeExpressSmart(String orderCode, String deliverySn, String deliveryId, String userPhone, String senderPhones);
+
     R parseAddress(String content);
 
 

+ 155 - 13
fs-service/src/main/java/com/fs/hisStore/service/impl/FsExpressScrmServiceImpl.java

@@ -3,9 +3,11 @@ package com.fs.hisStore.service.impl;
 import java.net.URLEncoder;
 import java.security.MessageDigest;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
@@ -29,6 +31,8 @@ import com.fs.hisStore.param.FsStoreOrderExpressParam;
 import com.fs.live.domain.LiveOrder;
 import com.fs.live.mapper.LiveOrderMapper;
 import com.fs.system.service.ISysConfigService;
+import com.fs.system.service.ISysDictTypeService;
+import com.fs.common.core.domain.entity.SysDictData;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -48,6 +52,8 @@ import org.springframework.util.Base64Utils;
 @Service
 public class FsExpressScrmServiceImpl implements IFsExpressScrmService
 {
+    private static final String STORE_EXPRESS_SENDER_PHONE_SUBSCRIBE = "store_express_sender_phone";
+
     Logger logger = LoggerFactory.getLogger(FsExpressScrmServiceImpl.class);
     @Autowired
     private FsExpressScrmMapper fsExpressMapper;
@@ -56,6 +62,9 @@ public class FsExpressScrmServiceImpl implements IFsExpressScrmService
     @Autowired
     private ISysConfigService configService;
 
+    @Autowired
+    private ISysDictTypeService sysDictTypeService;
+
     @Autowired
     private LiveOrderMapper liveOrderMapper;
     /**
@@ -134,11 +143,12 @@ public class FsExpressScrmServiceImpl implements IFsExpressScrmService
 
     @Override
     public ExpressInfoDTO getExpressInfo(String OrderCode, String ShipperCode, String LogisticCode, String lastFourNumber)     {
+        String customerName = resolveExpressQueryPhone(OrderCode, ShipperCode, lastFourNumber);
 
         //处理顺丰查询轨迹需手机号码后4位
         String requestData;
         if (ShipperCode.equals(ShipperCodeEnum.SF.getValue()) || ShipperCode.equals(ShipperCodeEnum.ZTO.getValue())) {
-            requestData = "{'OrderCode':'" + OrderCode + "','ShipperCode':'" + ShipperCode + "','LogisticCode':'" + LogisticCode + "','CustomerName':'" + lastFourNumber + "'}";
+            requestData = "{'OrderCode':'" + OrderCode + "','ShipperCode':'" + ShipperCode + "','LogisticCode':'" + LogisticCode + "','CustomerName':'" + customerName + "'}";
         } else {
             requestData = "{'OrderCode':'" + OrderCode + "','ShipperCode':'" + ShipperCode + "','LogisticCode':'" + LogisticCode + "'}";
         }
@@ -215,7 +225,57 @@ public class FsExpressScrmServiceImpl implements IFsExpressScrmService
 
     @Override
     public void subscribeEspress(String orderCode, String deliverySn, String deliveryId, String userPhone) {
-        //处理顺丰查询轨迹需手机号码后4位
+        ExpressInfoDTO dto = doSubscribeRequest(orderCode, deliverySn, deliveryId, userPhone);
+        if (dto == null || !dto.isSuccess()) {
+            logger.error("订阅物流失败:orderCode={}, deliveryId={}, reason={}",
+                    orderCode, deliveryId, dto != null ? dto.getReason() : "订阅物流返回为空");
+            afterExpressFailure(orderCode, deliveryId, dto != null ? dto.getReason() : "订阅物流返回为空");
+            throw new CustomException(dto != null && StringUtils.isNotBlank(dto.getReason()) ? dto.getReason() : "订阅物流失败");
+        }
+    }
+
+    @Override
+    public void subscribeEspressWithSenderPhones(String orderCode, String deliverySn, String deliveryId, String userPhone, String senderPhones) {
+        List<String> senderPhoneList = parseSenderPhones(senderPhones);
+        if (!senderPhoneList.isEmpty()) {
+            for (String senderPhone : senderPhoneList) {
+                String customerName = resolveCustomerName(deliverySn, senderPhone);
+                ExpressInfoDTO dto = doSubscribeRequest(orderCode, deliverySn, deliveryId, customerName);
+                if (dto != null && dto.isSuccess()) {
+                    logger.info("订阅物流成功(发货人手机号): orderCode={}, phone={}", orderCode, senderPhone);
+                    updateOrderSenderPhoneByOrderCode(orderCode, senderPhone);
+                    return;
+                }
+                if (isPhoneError(dto)) {
+                    logger.warn("发货人手机号订阅失败,尝试下一个: orderCode={}, phone={}, reason={}",
+                            orderCode, senderPhone, dto != null ? dto.getReason() : null);
+                    continue;
+                }
+                logger.warn("订阅物流失败(非手机号错误),改用收货人手机号: orderCode={}, reason={}",
+                        orderCode, dto != null ? dto.getReason() : null);
+                break;
+            }
+        }
+        ExpressInfoDTO receiverDto = doSubscribeRequest(orderCode, deliverySn, deliveryId, userPhone);
+        if (receiverDto == null || !receiverDto.isSuccess()) {
+            logger.error("订阅物流失败(收货人手机号):orderCode={}, deliveryId={}, reason={}",
+                    orderCode, deliveryId, receiverDto != null ? receiverDto.getReason() : "订阅物流返回为空");
+            afterExpressFailure(orderCode, deliveryId, receiverDto != null ? receiverDto.getReason() : "订阅物流返回为空");
+        } else {
+            logger.info("订阅物流成功(收货人手机号): orderCode={}", orderCode);
+        }
+    }
+
+    @Override
+    public void subscribeExpressSmart(String orderCode, String deliverySn, String deliveryId, String userPhone, String senderPhones) {
+        if (isSenderPhoneSubscribeEnabled()) {
+            subscribeEspressWithSenderPhones(orderCode, deliverySn, deliveryId, userPhone, senderPhones);
+        } else {
+            subscribeEspress(orderCode, deliverySn, deliveryId, userPhone);
+        }
+    }
+
+    private ExpressInfoDTO doSubscribeRequest(String orderCode, String deliverySn, String deliveryId, String userPhone) {
         String requestData;
         if (deliverySn.equals(ShipperCodeEnum.SF.getValue()) || deliverySn.equals(ShipperCodeEnum.ZTO.getValue())) {
             requestData = "{'OrderCode':'" + orderCode + "','ShipperCode':'" + deliverySn + "','LogisticCode':'" + deliveryId + "','CustomerName':'" + userPhone + "'}";
@@ -226,25 +286,69 @@ public class FsExpressScrmServiceImpl implements IFsExpressScrmService
         Map<String, Object> params = new HashMap<>();
         try {
             String json = this.configService.selectConfigByKey("his.config");
-            FSSysConfig sysConfig= JSON.parseObject(json,FSSysConfig.class);
+            FSSysConfig sysConfig = JSON.parseObject(json, FSSysConfig.class);
             params.put("RequestData", URLEncoder.encode(requestData, "UTF-8"));
-            params.put("EBusinessID",sysConfig.getKdnId().trim());
-            params.put("RequestType", "8001");
+            params.put("EBusinessID", sysConfig.getKdnId().trim());
+            params.put("RequestType", "8008");
             String dataSign = encrypt(requestData, sysConfig.getKdnKeyId().trim(), "UTF-8");
             params.put("DataSign", URLEncoder.encode(dataSign, "UTF-8"));
             params.put("DataType", "2");
             String result = HttpUtil.post(sysConfig.getKdnSubscribeUrl().trim(), params);
-            logger.info("订阅物流:"+result);
-            ExpressInfoDTO dto = JSONUtil.toBean(result, ExpressInfoDTO.class);
-            if (dto == null || !dto.isSuccess()) {
-                logger.error("订阅物流失败:{}:{}", result, requestData);
-                afterExpressFailure(orderCode, deliveryId, dto != null ? dto.getReason() : "订阅物流返回为空");
+            logger.info("订阅物流:{}", result);
+            return JSONUtil.toBean(result, ExpressInfoDTO.class);
+        } catch (Exception e) {
+            logger.error("订阅物流异常: orderCode={}, deliveryId={}", orderCode, deliveryId, e);
+            return null;
+        }
+    }
+
+    private boolean isSenderPhoneSubscribeEnabled() {
+        List<SysDictData> dictList = sysDictTypeService.selectDictDataByType(STORE_EXPRESS_SENDER_PHONE_SUBSCRIBE);
+        if (dictList == null || dictList.isEmpty()) {
+            return false;
+        }
+        return dictList.stream()
+                .filter(item -> "0".equals(item.getStatus()))
+                .anyMatch(item -> "1".equals(StringUtils.trimToEmpty(item.getDictValue())));
+    }
+
+    private List<String> parseSenderPhones(String senderPhones) {
+        if (StringUtils.isBlank(senderPhones)) {
+            return new ArrayList<>();
+        }
+        return Arrays.stream(senderPhones.split("[,,]"))
+                .map(String::trim)
+                .filter(StringUtils::isNotBlank)
+                .limit(3)
+                .collect(Collectors.toList());
+    }
+
+    private String resolveCustomerName(String deliverySn, String phone) {
+        if (StringUtils.isBlank(phone)) {
+            return "";
+        }
+        if (deliverySn.equals(ShipperCodeEnum.SF.getValue()) || deliverySn.equals(ShipperCodeEnum.ZTO.getValue())) {
+            if (phone.length() == 11) {
+                return StrUtil.sub(phone, phone.length(), -4);
             }
+        }
+        return phone;
+    }
 
-        } catch (Exception e) {
-            afterExpressFailure(orderCode, deliveryId, e.getMessage());
-            throw  new CustomException(e.getMessage());
+    private boolean isPhoneError(ExpressInfoDTO dto) {
+        if (dto == null || dto.isSuccess()) {
+            return false;
         }
+        String reason = StringUtils.trimToEmpty(dto.getReason());
+        if (StringUtils.isBlank(reason)) {
+            return false;
+        }
+        return reason.contains("手机尾号不正确")
+                || reason.contains("手机尾号")
+                || reason.contains("手机")
+                || reason.contains("电话")
+                || reason.contains("CustomerName")
+                || reason.contains("号码");
     }
 
     @Override
@@ -376,6 +480,44 @@ public class FsExpressScrmServiceImpl implements IFsExpressScrmService
         return lastFourNumber;
     }
 
+    /**
+     * 根据订单号查询物流订阅成功的发货人手机号
+     */
+    private String getOrderSenderPhoneByOrderCode(String orderCode) {
+        if (StringUtils.isBlank(orderCode)) {
+            return null;
+        }
+        return fsStoreOrderMapper.selectSenderPhoneByOrderCode(orderCode);
+    }
+
+    /**
+     * 解析物流查询使用的手机号:字典开启且订单有发货人手机号时优先使用,否则使用收货人手机尾号
+     */
+    private String resolveExpressQueryPhone(String orderCode, String shipperCode, String lastFourNumber) {
+        if (!isSenderPhoneSubscribeEnabled() || StringUtils.isBlank(orderCode)) {
+            return lastFourNumber;
+        }
+        String senderPhone = getOrderSenderPhoneByOrderCode(orderCode);
+        if (StringUtils.isBlank(senderPhone)) {
+            return lastFourNumber;
+        }
+        return resolveCustomerName(shipperCode, senderPhone);
+    }
+
+    /**
+     * 根据订单号更新物流订阅成功的发货人手机号
+     */
+    private void updateOrderSenderPhoneByOrderCode(String orderCode, String senderPhone) {
+        if (StringUtils.isBlank(orderCode) || StringUtils.isBlank(senderPhone)) {
+            return;
+        }
+        try {
+            fsStoreOrderMapper.updateSenderPhoneByOrderCode(orderCode, senderPhone);
+        } catch (Exception e) {
+            logger.error("更新订单发货人手机号异常: orderCode={}, senderPhone={}", orderCode, senderPhone, e);
+        }
+    }
+
     /**
      * 快递查询/订阅失败或异常时更新订单物流状态为问题件
      */

+ 35 - 6
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -2287,7 +2287,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                     lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
                 }
             }
-            expressService.subscribeEspress(order.getOrderCode(), order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
+            subscribeOrderExpress(order, order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
 
             TemplateBean templateBean = TemplateBean.builder()
                     .orderId(order.getId().toString())
@@ -2316,6 +2316,35 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         }
     }
 
+    private String resolveSenderPhonesByOrder(FsStoreOrderScrm order) {
+        if (order == null || StringUtils.isBlank(order.getItemJson())) {
+            return null;
+        }
+        try {
+            com.alibaba.fastjson.JSONArray itemArray = JSON.parseArray(order.getItemJson());
+            if (itemArray == null || itemArray.isEmpty()) {
+                return null;
+            }
+            Long productId = itemArray.getJSONObject(0).getLong("productId");
+            if (productId == null) {
+                return null;
+            }
+            FsStoreProductScrm product = productService.selectFsStoreProductById(productId);
+            return product != null ? product.getSenderPhones() : null;
+        } catch (Exception e) {
+            log.warn("解析订单itemJson获取发货人手机号失败: orderCode={}, error={}", order.getOrderCode(), e.getMessage());
+            return null;
+        }
+    }
+
+    private void subscribeOrderExpress(FsStoreOrderScrm order, String deliverySn, String deliveryId, String lastFourNumber) {
+        if (order == null || StringUtils.isBlank(deliverySn) || StringUtils.isBlank(deliveryId)) {
+            return;
+        }
+        String senderPhones = resolveSenderPhonesByOrder(order);
+        expressService.subscribeExpressSmart(order.getOrderCode(), deliverySn, deliveryId, lastFourNumber, senderPhones);
+    }
+
     @Override
     public void updateDeliveryOrder(Long id, String deliveryId, String deliverCode, String deliverName) {
         FsStoreOrderScrm order = fsStoreOrderMapper.selectFsStoreOrderById(id);
@@ -2346,7 +2375,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                         lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
                     }
                 }
-                expressService.subscribeEspress(order.getOrderCode(), express.getCode(), deliveryId, lastFourNumber);
+                subscribeOrderExpress(order, express.getCode(), deliveryId, lastFourNumber);
             }
         }
     }
@@ -4823,7 +4852,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                                     }
                                 }
                                 logger.info("物流重新订阅:{}", order.getDeliveryId());
-                                expressService.subscribeEspress(order.getOrderCode(), order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
+                                subscribeOrderExpress(order, order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
                             }
 
                         }
@@ -5215,7 +5244,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                         lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
                     }
                 }
-                expressService.subscribeEspress(o.getOrderCode(), fsStoreOrder.getDeliveryCode(), fsStoreOrder.getDeliverySn(), lastFourNumber);
+                subscribeOrderExpress(o, fsStoreOrder.getDeliveryCode(), fsStoreOrder.getDeliverySn(), lastFourNumber);
 
                 try {
                     String s = fsPrescribeService.PrescribeImg(o.getPrescribeId());
@@ -5311,7 +5340,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
             }
         }
-        expressService.subscribeEspress(order.getOrderCode(), fsStoreOrder.getDeliveryCode(), fsStoreOrder.getDeliverySn(), lastFourNumber);
+        subscribeOrderExpress(order, fsStoreOrder.getDeliveryCode(), fsStoreOrder.getDeliverySn(), lastFourNumber);
         return i;
     }
 
@@ -5640,7 +5669,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                             lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
                         }
                     }
-                    expressService.subscribeEspress(order.getOrderCode(), order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
+                    subscribeOrderExpress(order, order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
 
                     TemplateBean templateBean = TemplateBean.builder()
                             .orderId(order.getId().toString())

+ 28 - 2
fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java

@@ -2079,7 +2079,7 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
                 }
             }
             try {
-                expressService.subscribeEspress(order.getOrderCode(), order.getDeliveryCode(), order.getDeliverySn(), lastFourNumber);
+                subscribeLiveOrderExpress(order, order.getDeliveryCode(), order.getDeliverySn(), lastFourNumber);
                 TemplateBean templateBean = TemplateBean.builder()
                         .orderId(order.getOrderId().toString())
                         .orderCode(order.getOrderCode())
@@ -3174,11 +3174,37 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
                         lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
                     }
                 }
-                expressService.subscribeEspress(existOrder.getOrderCode(), fsExpress.getCode(), deliveryId, lastFourNumber);
+                subscribeLiveOrderExpress(existOrder, fsExpress.getCode(), deliveryId, lastFourNumber);
             }
         }
     }
 
+    private String resolveSenderPhonesByLiveOrder(LiveOrder order) {
+        if (order == null) {
+            return null;
+        }
+        Long productId = order.getProductId();
+        if (productId == null) {
+            List<LiveOrderItem> items = liveOrderItemMapper.selectLiveOrderItemByOrderId(order.getOrderId());
+            if (items != null && !items.isEmpty() && items.get(0).getProductId() != null) {
+                productId = items.get(0).getProductId();
+            }
+        }
+        if (productId == null) {
+            return null;
+        }
+        FsStoreProductScrm product = fsStoreProductService.selectFsStoreProductById(productId);
+        return product != null ? product.getSenderPhones() : null;
+    }
+
+    private void subscribeLiveOrderExpress(LiveOrder order, String deliverySn, String deliveryId, String lastFourNumber) {
+        if (order == null || StringUtils.isBlank(deliverySn) || StringUtils.isBlank(deliveryId)) {
+            return;
+        }
+        String senderPhones = resolveSenderPhonesByLiveOrder(order);
+        expressService.subscribeExpressSmart(order.getOrderCode(), deliverySn, deliveryId, lastFourNumber, senderPhones);
+    }
+
     //    @Autowired
 //    private FsStoreProductMapper fsStoreProductMapper;
     @Override

+ 8 - 0
fs-service/src/main/resources/db/changelog/changes/20260613-live-user-add-is-del.sql

@@ -83,3 +83,11 @@ ALTER TABLE `fs_integral_order`
 ALTER TABLE fs_store_product_scrm
     ADD COLUMN sender_phones VARCHAR(128) NULL DEFAULT NULL COMMENT '发货人手机号,多个逗号分隔,最多3个';
 --rollback ALTER TABLE fs_store_product_scrm DROP COLUMN sender_phones;
+
+--changeset yhq:20260624-fs-store-order-sender-phone
+--preconditions onFail:MARK_RAN
+--precondition-sql-check expectedResult:1 SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'fs_store_order_scrm'
+--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'fs_store_order_scrm' AND column_name = 'sender_phone'
+ALTER TABLE fs_store_order_scrm
+    ADD COLUMN sender_phone VARCHAR(20) NULL DEFAULT NULL COMMENT '物流订阅成功的发货人手机号';
+--rollback ALTER TABLE fs_store_order_scrm DROP COLUMN sender_phone;

+ 1 - 0
fs-service/src/main/resources/db/changelog/db.changelog-master.xml

@@ -11,5 +11,6 @@
     <include file="baseline/baseline.sql" relativeToChangelogFile="true"/>
     <include file="changes/20260613-live-user-add-is-del.sql" relativeToChangelogFile="true"/>
     <include file="table/live_group_type.sql" relativeToChangelogFile="true"/>
+    <include file="dictData/dict_data_update.sql" relativeToChangelogFile="true"/>
 
 </databaseChangeLog>

+ 17 - 0
fs-service/src/main/resources/db/changelog/dictData/dict_data_update.sql

@@ -0,0 +1,17 @@
+--liquibase formatted sql
+
+--changeset yhq:20260624-store-express-sender-phone-dict
+--preconditions onFail:MARK_RAN
+--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sys_dict_type WHERE dict_type = 'store_express_sender_phone'
+--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sys_dict_data WHERE dict_type = 'store_express_sender_phone'
+INSERT INTO `sys_dict_type`
+(`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
+VALUES
+    ('发货人手机号订阅物流', 'store_express_sender_phone', '0', 'admin', NOW(), '', NULL, '值为1时启用发货人手机号优先订阅物流');
+
+INSERT INTO `sys_dict_data`
+(`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
+VALUES
+    (1, '启用', '0', 'store_express_sender_phone', '', 'success', 'Y', '0', 'admin', NOW(), '', NULL, '启用发货人手机号优先订阅物流');
+--rollback DELETE FROM sys_dict_data WHERE dict_type = 'store_express_sender_phone';
+--rollback DELETE FROM sys_dict_type WHERE dict_type = 'store_express_sender_phone';

+ 5 - 1
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -87,6 +87,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="customerId"    column="customer_id"    />
         <result property="isPayRemain"    column="is_pay_remain"    />
         <result property="deliverySendTime"    column="delivery_send_time"    />
+        <result property="senderPhone"    column="sender_phone"    />
         <result property="certificates"    column="certificates"    />
         <result property="scheduleId"    column="schedule_id"    />
         <result property="orderVisit"    column="order_visit"    />
@@ -171,7 +172,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectShoppingPointsPendingOrders" resultMap="FsStoreOrderResult">
         <include refid="selectFsStoreOrderVo"/>
         WHERE  paid = 1
-          AND status = 4
+          AND status = 3
           AND (shopping_points_claimed IS NULL OR shopping_points_claimed = 0)
           AND create_time &gt;= #{cutoffDate}
           AND finish_time &lt;= #{sevenDaysAgo}
@@ -280,6 +281,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="customerId != null">customer_id,</if>
             <if test="isPayRemain != null">is_pay_remain,</if>
             <if test="deliverySendTime != null">delivery_send_time,</if>
+            <if test="senderPhone != null">sender_phone,</if>
             <if test="orderVisit != null">order_visit,</if>
             <if test="serviceFee != null">service_fee,</if>
             <if test="orderMedium != null">order_medium,</if>
@@ -373,6 +375,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="customerId != null">#{customerId},</if>
             <if test="isPayRemain != null">#{isPayRemain},</if>
             <if test="deliverySendTime != null">#{deliverySendTime},</if>
+            <if test="senderPhone != null">#{senderPhone},</if>
             <if test="orderVisit != null">#{orderVisit},</if>
             <if test="serviceFee != null">#{serviceFee},</if>
             <if test="orderMedium != null">#{orderMedium},</if>
@@ -473,6 +476,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="customerId != null">customer_id = #{customerId},</if>
             <if test="isPayRemain != null">is_pay_remain = #{isPayRemain},</if>
             <if test="deliverySendTime != null">delivery_send_time = #{deliverySendTime},</if>
+            <if test="senderPhone != null">sender_phone = #{senderPhone},</if>
             <if test="scheduleId != null">schedule_id = #{scheduleId},</if>
             <if test="orderVisit != null">order_visit = #{orderVisit},</if>
             <if test="serviceFee != null">service_fee = #{serviceFee},</if>