Bladeren bron

申请售后是否检查erp状态,聚水潭批量查询订单状态

yuhongqi 1 week geleden
bovenliggende
commit
2d54b8172b

+ 10 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesScrmController.java

@@ -20,6 +20,7 @@ import com.fs.hisStore.domain.*;
 import com.fs.hisStore.param.FsStoreAfterSalesAudit1Param;
 import com.fs.hisStore.param.FsStoreAfterSalesAudit2Param;
 import com.fs.hisStore.param.FsStoreAfterSalesCancelParam;
+import com.fs.hisStore.param.FsStoreAfterSalesErpStatusParam;
 import com.fs.hisStore.param.FsStoreAfterSalesRefundParam;
 import com.fs.hisStore.service.IFsStoreAfterSalesItemScrmService;
 import com.fs.hisStore.service.IFsStoreAfterSalesScrmService;
@@ -225,6 +226,15 @@ public class FsStoreAfterSalesScrmController extends BaseController
     }
 
 
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:edit')")
+    @PostMapping("/confirmErpStatus")
+    public R confirmErpStatus(@RequestBody FsStoreAfterSalesErpStatusParam param)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setOperator(loginUser.getUser().getNickName());
+        return fsStoreAfterSalesService.updateErpExceptionStatus(param);
+    }
+
     @PreAuthorize("@ss.hasPermi('store:storeAfterSales:audit1')")
     @PostMapping("/audit1")
     //平台审核

+ 76 - 20
fs-admin/src/main/java/com/fs/hisStore/task/MallStoreTask.java

@@ -62,9 +62,11 @@ import java.text.SimpleDateFormat;
 import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
 
 import static com.fs.hisStore.constants.StoreConstants.DELIVERY;
 
@@ -270,36 +272,90 @@ public class MallStoreTask
     }
 
     //每5分钟执行一次
-    public void deliveryOp()
+    public void deliveryOp() throws InterruptedException
     {
         List<FsStoreOrderScrm> list = fsStoreOrderMapper.selectUpdateExpress();
-        Date nowDate = DateUtils.getNowDate();
-        for (FsStoreOrderScrm order : list){
-            order.setUpdateTime(new Date());
-            orderService.updateFsStoreOrderDb(order);
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        IErpOrderService erpOrderService = getErpOrderService();
+        if (erpOrderService == null) {
+            return;
+        }
+
+        // 聚水潭:批量查询物流并同步发货
+        if (erpOrderService == jSTOrderService) {
+            jstErpOrderDeliveryScrm(list);
+            return;
+        }
+        // 其他 ERP:逐单查询
+        if (erpOrderService == dfOrderService) {
+            return;
+        }
+        for (FsStoreOrderScrm order : list) {
+            if (StringUtils.isEmpty(order.getExtendOrderId())) {
+                continue;
+            }
             ErpOrderQueryRequert request = new ErpOrderQueryRequert();
             request.setCode(order.getExtendOrderId());
-            IErpOrderService erpOrderService = getErpOrderService();
             ErpOrderQueryResponse response = erpOrderService.getScrmOrder(request);
-            if (erpOrderService != dfOrderService) {
-                if(response.getOrders()!=null && !response.getOrders().isEmpty()){
-                    for(ErpOrderQuery orderQuery : response.getOrders()){
-                        if (orderQuery.getDeliverys() != null && !orderQuery.getDeliverys().isEmpty()) {
-                            for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
-                                if (delivery.getDelivery() && StringUtils.isNotEmpty(delivery.getMail_no())) {
-                                    //更新商订单状态 删除REDIS
-                                    orderService.deliveryOrder(order.getOrderCode(), delivery.getMail_no(), delivery.getExpress_code(), delivery.getExpress_name());
-                                    redisCache.deleteObject(DELIVERY + ":" + order.getExtendOrderId());
-                                }
-                            }
+            syncScrmDeliveryFromErpResponse(response, buildOrderCodeMap(list));
+        }
+    }
 
-                        }
-                    }
+    /**
+     * 聚水潭批量查询发货状态(参考 ffhx StoreTask#jstErpOrderDelivery)
+     */
+    private void jstErpOrderDeliveryScrm(List<FsStoreOrderScrm> list) throws InterruptedException {
+        List<FsStoreOrderScrm> pendingList = list.stream()
+                .filter(order -> StringUtils.isNotEmpty(order.getExtendOrderId()))
+                .collect(Collectors.toList());
+        if (pendingList.isEmpty()) {
+            return;
+        }
+        Map<String, FsStoreOrderScrm> orderCodeMap = buildOrderCodeMap(pendingList);
+        int batchSize = 100;
+        for (int i = 0; i < pendingList.size(); i += batchSize) {
+            if (i > 0) {
+                Thread.sleep(300);
+            }
+            int end = Math.min(i + batchSize, pendingList.size());
+            List<FsStoreOrderScrm> batchOrders = pendingList.subList(i, end);
+            ErpOrderQueryResponse response = jSTOrderService.batchGetScrmOrder(batchOrders);
+            syncScrmDeliveryFromErpResponse(response, orderCodeMap);
+        }
+    }
 
-                }
+    private Map<String, FsStoreOrderScrm> buildOrderCodeMap(List<FsStoreOrderScrm> list) {
+        Map<String, FsStoreOrderScrm> orderCodeMap = new HashMap<>();
+        for (FsStoreOrderScrm order : list) {
+            if (StringUtils.isNotEmpty(order.getOrderCode())) {
+                orderCodeMap.put(order.getOrderCode(), order);
             }
         }
+        return orderCodeMap;
+    }
 
+    private void syncScrmDeliveryFromErpResponse(ErpOrderQueryResponse response, Map<String, FsStoreOrderScrm> orderCodeMap) {
+        if (response == null || response.getOrders() == null || response.getOrders().isEmpty()) {
+            return;
+        }
+        for (ErpOrderQuery orderQuery : response.getOrders()) {
+            if (orderQuery.getDeliverys() == null || orderQuery.getDeliverys().isEmpty()) {
+                continue;
+            }
+            FsStoreOrderScrm order = orderCodeMap.get(orderQuery.getCode());
+            if (order == null) {
+                continue;
+            }
+            for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
+                if (delivery.getDelivery() && StringUtils.isNotEmpty(delivery.getMail_no())) {
+                    orderService.deliveryOrder(order.getOrderCode(), delivery.getMail_no(),
+                            delivery.getExpress_code(), delivery.getExpress_name());
+                    redisCache.deleteObject(DELIVERY + ":" + order.getExtendOrderId());
+                }
+            }
+        }
     }
 
 

+ 11 - 0
fs-service/src/main/java/com/fs/erp/service/IErpOrderService.java

@@ -7,6 +7,7 @@ import com.fs.his.domain.FsStoreOrder;
 import com.fs.hisStore.domain.FsStoreOrderScrm;
 import com.fs.live.domain.LiveOrder;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -45,6 +46,16 @@ public interface IErpOrderService
      */
     ErpOrderQueryResponse batchGetLiveOrder(List<LiveOrder> orderList);
 
+    /**
+     * 批量查询商城订单(聚水潭等)
+     */
+    default ErpOrderQueryResponse batchGetScrmOrder(List<FsStoreOrderScrm> orderList) {
+        ErpOrderQueryResponse response = new ErpOrderQueryResponse();
+        response.setOrders(Collections.emptyList());
+        response.setSuccess(true);
+        return response;
+    }
+
     //  出库查询接口 目前只实现了 旺店通
     default Map<String, Object> stockOutOrderQueryTrade(ErpOrderQueryRequert param)
     {

+ 105 - 3
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -1006,10 +1006,13 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
     }
 
     private ErpOrderQuery convertToErpOrderQueryScrm(OrderQueryResponseDTO.Order order) {
-        ErpOrderQuery erpOrder = new ErpOrderQuery();
-
         FsStoreOrderScrm fsStoreOrder = fsStoreOrderService.selectFsStoreOrderScrmByOrderCode(order.getSoId());
-        Asserts.notNull(fsStoreOrder,"该订单号没有找到!");
+        Asserts.notNull(fsStoreOrder, "该订单号没有找到!");
+        return convertToErpOrderQueryScrm(order, fsStoreOrder);
+    }
+
+    private ErpOrderQuery convertToErpOrderQueryScrm(OrderQueryResponseDTO.Order order, FsStoreOrderScrm fsStoreOrder) {
+        ErpOrderQuery erpOrder = new ErpOrderQuery();
 
         // 设置基本订单信息
         erpOrder.setCode(order.getSoId());
@@ -1281,6 +1284,105 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
 
     }
 
+    /**
+     * 批量查询商城订单(聚水潭)
+     */
+    @Override
+    public ErpOrderQueryResponse batchGetScrmOrder(List<FsStoreOrderScrm> orderList) {
+        ErpOrderQueryResponse response = new ErpOrderQueryResponse();
+        if (CollectionUtils.isEmpty(orderList)) {
+            response.setOrders(Collections.emptyList());
+            response.setSuccess(true);
+            return response;
+        }
+
+        Map<String, FsStoreOrderScrm> orderByExtendId = orderList.stream()
+                .filter(order -> StringUtils.isNotEmpty(order.getExtendOrderId()))
+                .collect(Collectors.toMap(FsStoreOrderScrm::getExtendOrderId, order -> order, (a, b) -> a));
+        Map<String, FsStoreOrderScrm> orderByOrderCode = orderList.stream()
+                .filter(order -> StringUtils.isNotEmpty(order.getOrderCode()))
+                .collect(Collectors.toMap(FsStoreOrderScrm::getOrderCode, order -> order, (a, b) -> a));
+
+        List<Long> extendOrderIds = orderByExtendId.keySet().stream()
+                .map(Long::valueOf)
+                .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(extendOrderIds)) {
+            response.setOrders(Collections.emptyList());
+            response.setSuccess(true);
+            return response;
+        }
+
+        List<ErpOrderQuery> erpOrders = new ArrayList<>();
+        int batchSize = 100;
+        for (int i = 0; i < extendOrderIds.size(); i += batchSize) {
+            List<Long> batch = extendOrderIds.subList(i, Math.min(i + batchSize, extendOrderIds.size()));
+            try {
+                OrderQueryRequestDTO requestDTO = new OrderQueryRequestDTO();
+                requestDTO.setOIds(batch);
+                OrderQueryResponseDTO query = jstErpHttpService.query(requestDTO);
+                if (query.getOrders() == null || query.getOrders().isEmpty()) {
+                    continue;
+                }
+                for (OrderQueryResponseDTO.Order jstOrder : query.getOrders()) {
+                    appendScrmErpOrderFromJst(jstOrder, orderByExtendId, orderByOrderCode, erpOrders);
+                }
+            } catch (Exception e) {
+                log.error("聚水潭批量查询商城订单失败,batchSize={}", batch.size(), e);
+            }
+        }
+
+        response.setOrders(erpOrders);
+        response.setSuccess(true);
+        return response;
+    }
+
+    private void appendScrmErpOrderFromJst(OrderQueryResponseDTO.Order jstOrder,
+                                           Map<String, FsStoreOrderScrm> orderByExtendId,
+                                           Map<String, FsStoreOrderScrm> orderByOrderCode,
+                                           List<ErpOrderQuery> erpOrders) {
+        if (jstOrder == null) {
+            return;
+        }
+        if (ErpQueryOrderStatusEnum.MERGED.getCode().equals(jstOrder.getStatus())
+                && StringUtils.isNotEmpty(jstOrder.getLinkOId())) {
+            OrderQueryResponseDTO mergedWrapper = new OrderQueryResponseDTO();
+            mergedWrapper.setOrders(Collections.singletonList(jstOrder));
+            OrderQueryResponseDTO mergeQuery = followMergedJstQueryResponse(mergedWrapper, 1);
+            if (mergeQuery != null && !CollectionUtils.isEmpty(mergeQuery.getOrders())) {
+                for (OrderQueryResponseDTO.Order mergedOrder : mergeQuery.getOrders()) {
+                    FsStoreOrderScrm localOrder = resolveScrmOrder(mergedOrder, orderByExtendId, orderByOrderCode);
+                    if (localOrder != null) {
+                        erpOrders.add(convertToErpOrderQueryScrm(mergedOrder, localOrder));
+                    }
+                }
+                persistOuterOiIdFromJstMergedOrder(jstOrder);
+            }
+            return;
+        }
+        FsStoreOrderScrm localOrder = resolveScrmOrder(jstOrder, orderByExtendId, orderByOrderCode);
+        if (localOrder != null) {
+            erpOrders.add(convertToErpOrderQueryScrm(jstOrder, localOrder));
+        }
+    }
+
+    private FsStoreOrderScrm resolveScrmOrder(OrderQueryResponseDTO.Order jstOrder,
+                                              Map<String, FsStoreOrderScrm> orderByExtendId,
+                                              Map<String, FsStoreOrderScrm> orderByOrderCode) {
+        if (jstOrder == null) {
+            return null;
+        }
+        if (StringUtils.isNotEmpty(jstOrder.getSoId())) {
+            FsStoreOrderScrm byCode = orderByOrderCode.get(jstOrder.getSoId());
+            if (byCode != null) {
+                return byCode;
+            }
+        }
+        if (jstOrder.getOId() != null) {
+            return orderByExtendId.get(String.valueOf(jstOrder.getOId()));
+        }
+        return null;
+    }
+
     /**
      * 批量查询直播订单
      * @param orderList 订单列表

+ 15 - 0
fs-service/src/main/java/com/fs/hisStore/config/StoreConfig.java

@@ -69,4 +69,19 @@ public class StoreConfig implements Serializable {
      * 是否开启商城订单归属绑定(开启后,orderType=0的商城订单会自动绑定归属销售)
      */
     private Boolean enableStoreOrderAttribution;
+
+    /**
+     * 商城首页模块一展示
+     */
+    private Boolean enableHomeModuleOneShow;
+
+    /**
+     * 商城首页模块二展示
+     */
+    private Boolean enableHomeModuleTwoShow;
+
+    /**
+     * 取消商城聚水潭订单校验(true=取消校验,ERP失败仍回滚;false=开启校验,失败标记异常不阻断申请)
+     */
+    private Boolean cancelStoreJstOrderCheck;
 }

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

@@ -157,6 +157,9 @@ public class FsStoreAfterSalesScrm extends BaseEntity
 
     private String auditReasonName;
 
+    /** ERP异常状态:1-异常,2-已处理 */
+    private Integer erpExceptionStatus;
+
     /** 列表/详情查询时别名映射:一级原因展示文案 */
     @TableField(exist = false)
     private String reasonValue1;

+ 19 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreAfterSalesErpStatusParam.java

@@ -0,0 +1,19 @@
+package com.fs.hisStore.param;
+
+import lombok.Data;
+
+/**
+ * 售后 ERP 异常状态确认参数
+ */
+@Data
+public class FsStoreAfterSalesErpStatusParam {
+
+    /** 售后单 ID */
+    private Long salesId;
+
+    /** ERP异常状态:1-异常,2-已处理 */
+    private Integer erpExceptionStatus;
+
+    /** 操作人 */
+    private String operator;
+}

+ 2 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreAfterSalesScrmService.java

@@ -95,6 +95,8 @@ public interface IFsStoreAfterSalesScrmService
 
     R audit1(FsStoreAfterSalesAudit1Param param);
 
+    R updateErpExceptionStatus(FsStoreAfterSalesErpStatusParam param);
+
     R audit2(FsStoreAfterSalesAudit2Param param);
 
     List<FsStoreAfterSalesScrm> selectFsStoreAfterSalesByDoAudit();

+ 93 - 5
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreAfterSalesScrmServiceImpl.java

@@ -489,18 +489,73 @@ public class FsStoreAfterSalesScrmServiceImpl implements IFsStoreAfterSalesScrmS
         // 团购订单申请退款时先把占的名额还回去,SQL 内部只对未成团的团生效,已成团的不会动
         releaseGroupSlotIfNeeded(order);
         if (StringUtils.isNotBlank(order.getExtendOrderId())){
-            BaseResponse response=erpOrderService.refundUpdateScrm(request);
-            if(response.getSuccess()){
-                return R.ok();
-            }
-            else{
+            boolean jstCheckEnabled = isStoreJstOrderCheckEnabled();
+            try {
+                BaseResponse response = erpOrderService.refundUpdateScrm(request);
+                if (response.getSuccess()) {
+                    return R.ok();
+                }
+                if (jstCheckEnabled) {
+                    markErpException(storeAfterSales.getId(), userId, response.getErrorDesc());
+                    return R.ok();
+                }
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return R.error(response.getErrorDesc());
+            } catch (Exception e) {
+                logger.error("聚水潭售后同步异常,orderCode={},afterSalesId={}",
+                        order.getOrderCode(), storeAfterSales.getId(), e);
+                if (jstCheckEnabled) {
+                    markErpException(storeAfterSales.getId(), userId, e.getMessage());
+                    return R.ok();
+                }
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return R.error("聚水潭订单同步失败:" + e.getMessage());
             }
         }
         return R.ok();
     }
 
+    /**
+     * 是否开启商城聚水潭订单校验(未取消校验时开启)
+     */
+    private boolean isStoreJstOrderCheckEnabled() {
+        StoreConfig config = loadHisStoreConfig();
+        return Boolean.TRUE.equals(config.getCancelStoreJstOrderCheck());
+    }
+
+    private StoreConfig loadHisStoreConfig() {
+        String json = configService.selectConfigByKey("his.store");
+        if (StringUtils.isBlank(json)) {
+            return new StoreConfig();
+        }
+        return JSONUtil.toBean(json, StoreConfig.class);
+    }
+
+    /**
+     * 标记售后单 ERP 异常并记录操作日志
+     */
+    private void markErpException(Long afterSalesId, Long userId, String errorMsg) {
+        FsStoreAfterSalesScrm update = new FsStoreAfterSalesScrm();
+        update.setId(afterSalesId);
+        update.setErpExceptionStatus(1);
+        fsStoreAfterSalesMapper.updateFsStoreAfterSales(update);
+
+        FsStoreAfterSalesStatusScrm storeAfterSalesStatus = new FsStoreAfterSalesStatusScrm();
+        storeAfterSalesStatus.setStoreAfterSalesId(afterSalesId);
+        storeAfterSalesStatus.setChangeType(0);
+        String message = "聚水潭订单同步异常"
+                + (StringUtils.isNotBlank(errorMsg) ? ":" + errorMsg : "");
+        storeAfterSalesStatus.setChangeMessage(message);
+        storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now()));
+        if (userId != null) {
+            FsUserScrm user = userService.selectFsUserById(userId);
+            if (user != null) {
+                storeAfterSalesStatus.setOperator(user.getNickname());
+            }
+        }
+        afterSalesStatusService.insertFsStoreAfterSalesStatus(storeAfterSalesStatus);
+    }
+
     /**
      * 团购订单申请退款时还回占的名额。
      * <p>仅对 orderType=8 且已有 groupBuyId 的订单生效;
@@ -1284,6 +1339,36 @@ public class FsStoreAfterSalesScrmServiceImpl implements IFsStoreAfterSalesScrmS
         return fsStoreAfterSalesMapper.selectFsStoreAfterSalesVOByOrderCode(orderCode);
     }
 
+    @Override
+    public R updateErpExceptionStatus(FsStoreAfterSalesErpStatusParam param) {
+        if (param.getSalesId() == null) {
+            return R.error("售后单ID不能为空");
+        }
+        if (param.getErpExceptionStatus() == null
+                || (param.getErpExceptionStatus() != 1 && param.getErpExceptionStatus() != 2)) {
+            return R.error("ERP异常状态无效");
+        }
+        FsStoreAfterSalesScrm storeAfterSales = fsStoreAfterSalesMapper.selectFsStoreAfterSalesById(param.getSalesId());
+        if (storeAfterSales == null) {
+            return R.error("未查询到售后订单信息");
+        }
+        FsStoreAfterSalesScrm update = new FsStoreAfterSalesScrm();
+        update.setId(param.getSalesId());
+        update.setErpExceptionStatus(param.getErpExceptionStatus());
+        fsStoreAfterSalesMapper.updateFsStoreAfterSales(update);
+
+        FsStoreAfterSalesStatusScrm storeAfterSalesStatus = new FsStoreAfterSalesStatusScrm();
+        storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId());
+        storeAfterSalesStatus.setChangeType(0);
+        storeAfterSalesStatus.setChangeMessage(param.getErpExceptionStatus() == 2
+                ? "ERP订单状态确认:通过"
+                : "ERP订单状态确认:不通过");
+        storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now()));
+        storeAfterSalesStatus.setOperator(param.getOperator());
+        afterSalesStatusService.insertFsStoreAfterSalesStatus(storeAfterSalesStatus);
+        return R.ok("操作成功");
+    }
+
     @Override
     public R audit1(FsStoreAfterSalesAudit1Param param) {
         FsStoreAfterSalesScrm storeAfterSales = fsStoreAfterSalesMapper.selectFsStoreAfterSalesById(param.getSalesId());
@@ -1293,6 +1378,9 @@ public class FsStoreAfterSalesScrmServiceImpl implements IFsStoreAfterSalesScrmS
         if (!storeAfterSales.getStatus().equals(AfterStatusEnum.STATUS_0.getValue())) {
             throw new CustomException("非法操作");
         }
+        if (storeAfterSales.getErpExceptionStatus() != null && storeAfterSales.getErpExceptionStatus() == 1) {
+            throw new CustomException("订单ERP异常未处理,请先确认ERP订单状态");
+        }
         //仅退款
         if(storeAfterSales.getServiceType().equals(0)){
             //仅退款未发货处理

+ 2 - 1
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductPurchaseLimitScrmServiceImpl.java

@@ -178,8 +178,9 @@ public class FsStoreProductPurchaseLimitScrmServiceImpl implements IFsStoreProdu
                 limit.setProductId(productId);
                 limit.setUserId(userId);
                 limit.setNum(num);
+                int i = insertFsStoreProductPurchaseLimit(limit);
                 redisCacheT.setCacheObject(key, limit);
-                return insertFsStoreProductPurchaseLimit(limit);
+                return i;
             } else {
                 // 更新现有记录
                 limit.setNum(limit.getNum() + num);

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreAfterSalesVO.java

@@ -149,6 +149,9 @@ public class FsStoreAfterSalesVO implements Serializable
 
     private Long reasonId1;
 
+    /** ERP异常状态:1-异常,2-已处理 */
+    private Integer erpExceptionStatus;
+
     private Long reasonId2;
     @Excel(name = "退款类型")
     private String refundType;

+ 1 - 1
fs-service/src/main/resources/mapper/course/FsUserCourseMapper.xml

@@ -411,7 +411,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="q.yxxTag != null and q.yxxTag == 1">
             AND c.cate_id = (select cate_id from fs_user_course_category WHERE cate_name like '%央广原乡行%' AND cate_type = 1 limit 1)
         </if>
-        <if test="q.yxxTag == null">
+        <if test="q.yxxTag == null or q.yxxTag == 0">
             AND c.cate_id != (select cate_id from fs_user_course_category WHERE cate_name like '%央广原乡行%' AND cate_type = 1 limit 1)
         </if>
           AND EXISTS (

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

@@ -34,12 +34,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="reasonLevel2Text"    column="reason_level2_text"    />
         <result property="auditRemark"    column="audit_remark"    />
         <result property="auditReasonName"    column="audit_reason_name"    />
+        <result property="erpExceptionStatus"    column="erp_exception_status"    />
     </resultMap>
 
     <sql id="selectFsStoreAfterSalesVo">
         select id, order_code, refund_amount, service_type, reasons, explains, explain_img, shipper_code, delivery_sn, delivery_name, status, sales_status
                ,order_status, create_time, is_del, user_id, consignee, phone_number, address,company_id,company_user_id,is_package,package_json,reason_id1
-             ,reason_id2,reason_level1_text,reason_level2_text,audit_remark,audit_reason_name
+             ,reason_id2,reason_level1_text,reason_level2_text,audit_remark,audit_reason_name,erp_exception_status
         from fs_store_after_sales_scrm
     </sql>
 
@@ -157,6 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reasonLevel2Text != null">reason_level2_text,</if>
             <if test="auditRemark != null">audit_remark,</if>
             <if test="auditReasonName != null">audit_reason_name,</if>
+            <if test="erpExceptionStatus != null">erp_exception_status,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="orderCode != null">#{orderCode},</if>
@@ -187,6 +189,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reasonLevel2Text != null">#{reasonLevel2Text},</if>
             <if test="auditRemark != null">#{auditRemark},</if>
             <if test="auditReasonName != null">#{auditReasonName},</if>
+            <if test="erpExceptionStatus != null">#{erpExceptionStatus},</if>
          </trim>
     </insert>
 
@@ -221,6 +224,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reasonLevel2Text != null">reason_level2_text = #{reasonLevel2Text},</if>
             <if test="auditRemark != null">audit_remark = #{auditRemark},</if>
             <if test="auditReasonName != null">audit_reason_name = #{auditReasonName},</if>
+            <if test="erpExceptionStatus != null">erp_exception_status = #{erpExceptionStatus},</if>
         </trim>
         where id = #{id}
     </update>

+ 3 - 0
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -626,6 +626,9 @@ public class AppLoginController extends AppBaseController{
         if (CollectionUtil.isEmpty(user)){
             user = userService.selectFsUserListByPhone(encryptPhoneOldKey(phone));
         }
+        if (CollectionUtil.isEmpty(user)){
+            user = userService.selectFsUserListByPhone(phone);
+        }
         if (CollectionUtil.isEmpty(user)){
             return R.error("此电话号码未绑定用户");
         }

+ 25 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/IndexScrmController.java

@@ -12,6 +12,7 @@ import com.fs.common.utils.StringUtils;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.service.IFsCoursePlaySourceConfigService;
 import com.fs.his.config.AgreementConfig;
+import com.fs.hisStore.config.StoreConfig;
 import com.fs.hisStore.domain.*;
 import com.fs.hisStore.param.*;
 import com.fs.hisStore.service.*;
@@ -390,6 +391,30 @@ public class IndexScrmController extends AppBaseController {
 		return R.ok().put("data",data);
 	}
 
+	/**
+	 * 商城配置
+	 * @return
+	 */
+	@GetMapping("/getHisStoreConfig")
+	public R getHisStoreConfig(@RequestParam("name") String name)
+	{
+		String json=configService.selectConfigByKey("his.store");
+		Object moduleOne = null;
+		Object moduleTwo = null;
+		switch (name){
+			case "moduleShow":
+			case "enableHomeModuleTwoShow":
+				StoreConfig storeConfig = JSONUtil.toBean(json, StoreConfig.class);
+				moduleOne = storeConfig.getEnableHomeModuleOneShow();
+				moduleTwo = storeConfig.getEnableHomeModuleTwoShow();
+				break;
+			default:
+				break;
+		}
+
+		return R.ok().put("moduleOneShow",moduleOne).put("moduleTwoShow",moduleTwo);
+	}
+
 	/**
 	 * 获取小程序logo
 	 * @return