yuhongqi преди 3 седмици
родител
ревизия
3deec5d562

+ 49 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -226,6 +226,8 @@ import static com.fs.hisStore.constants.UserAppsLockConstant.LOCK_KEY_PAY;
 @Slf4j
 public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 
+    private static final String STORE_ORDER_CREATE_STATUS_CHECK = "store_order_create_status_check";
+
     Logger logger = LoggerFactory.getLogger(getClass());
     @Autowired
     private CompanyMoneyLogsMapper moneyLogsMapper;
@@ -1095,6 +1097,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
     @Override
     @Transactional
     public R createOrder(long userId, FsStoreOrderCreateParam param) {
+        boolean orderCreateStatusCheck = isOrderCreateStatusCheckEnabled();
 
         FsUserCompanyUser fsUserCompanyUser = fsUserCompanyUserMapper.selectFsUserCompanyUserByUserId(userId);
         if (ObjectUtil.isNotEmpty(fsUserCompanyUser) && param.getVideoId()!=null && param.getCompanyId() == null){
@@ -1132,6 +1135,13 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             //获取购物车列表
             List<FsStoreCartQueryVO> carts = redisCache.getCacheObject("orderCarts:" + param.getOrderKey());
 
+            if (orderCreateStatusCheck && carts != null) {
+                R offShelfError = validateOrderProductOnShelf(carts);
+                if (offShelfError != null) {
+                    return offShelfError;
+                }
+            }
+
             // 校验:购物车商品是否在活动期间,活动期间不允许走普通下单
             if (carts != null) {
                 long now = System.currentTimeMillis();
@@ -7900,4 +7910,43 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return R.ok();
     }
 
+    private boolean isOrderCreateStatusCheckEnabled() {
+        List<SysDictData> dictList = sysDictTypeService.selectDictDataByType(STORE_ORDER_CREATE_STATUS_CHECK);
+        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 R validateOrderProductOnShelf(List<FsStoreCartQueryVO> carts) {
+        List<String> offShelfNames = new ArrayList<>();
+        for (FsStoreCartQueryVO cart : carts) {
+            FsStoreProductScrm product = productService.selectFsStoreRedisProductById(cart.getProductId());
+            if (isProductOffShelf(product)) {
+                String productName = product != null && StrUtil.isNotBlank(product.getProductName())
+                        ? product.getProductName() : cart.getProductName();
+                if (StrUtil.isNotBlank(productName)) {
+                    offShelfNames.add(productName);
+                }
+            }
+        }
+        if (offShelfNames.isEmpty()) {
+            return null;
+        }
+        String names = offShelfNames.stream().map(name -> "【" + name + "】").collect(Collectors.joining(""));
+        return R.error("商品已下架");
+    }
+
+    private boolean isProductOffShelf(FsStoreProductScrm product) {
+        if (product == null) {
+            return true;
+        }
+        if (product.getIsShow() == null || product.getIsShow() != 1) {
+            return true;
+        }
+        return !"1".equals(product.getIsAudit());
+    }
+
 }

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

@@ -15,3 +15,19 @@ 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';
+
+--changeset yhq:20260625-store-order-create-status-check-dict
+--preconditions onFail:MARK_RAN
+--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sys_dict_type WHERE dict_type = 'store_order_create_status_check'
+--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sys_dict_data WHERE dict_type = 'store_order_create_status_check'
+INSERT INTO `sys_dict_type`
+(`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
+VALUES
+    ('开启订单创建状态校验', 'store_order_create_status_check', '0', 'admin', NOW(), '', NULL, '值为1时开启订单创建商品状态校验,默认0关闭不校验');
+
+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_order_create_status_check', '', 'info', 'Y', '0', 'admin', NOW(), '', NULL, '关闭订单创建商品状态校验');
+--rollback DELETE FROM sys_dict_data WHERE dict_type = 'store_order_create_status_check';
+--rollback DELETE FROM sys_dict_type WHERE dict_type = 'store_order_create_status_check';