diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/activity/service/impl/ShopActivityCutpriceServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/activity/service/impl/ShopActivityCutpriceServiceImpl.java index 9b9ec778..4b4913ed 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/activity/service/impl/ShopActivityCutpriceServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/activity/service/impl/ShopActivityCutpriceServiceImpl.java @@ -34,6 +34,7 @@ import com.suisung.mall.shop.activity.service.ShopActivityCutpriceService; import com.suisung.mall.shop.activity.service.ShopActivityGroupbookingHistoryService; import com.suisung.mall.shop.activity.service.ShopActivityGroupbookingService; import com.suisung.mall.shop.base.service.AccountBaseConfigService; +import com.suisung.mall.shop.order.service.ShopOrderInfoService; import com.suisung.mall.shop.store.service.ShopStoreActivityBaseService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -74,6 +75,10 @@ public class ShopActivityCutpriceServiceImpl extends BaseServiceImpl check_result = checkCutPriceExpiredAndStock(activityBase); if (!check_result.getFirst()) { + // 库存不够,立即更改活动状态为已结束 + shopStoreActivityBaseService.updateActivityState(activity_id, StateCode.ACTIVITY_STATE_FINISHED); throw new ApiException(check_result.getSecond()); } @@ -441,6 +449,15 @@ public class ShopActivityCutpriceServiceImpl extends BaseServiceImpl check_result = checkCutPriceExpiredAndStock(activityBase); + if (!check_result.getFirst()) { + // 库存不够,立即更改活动状态为已结束 + shopStoreActivityBaseService.updateActivityState(cutprice.getActivity_id(), StateCode.ACTIVITY_STATE_FINISHED); + throw new ApiException(check_result.getSecond()); + } + } catch (Exception e) { return CommonResult.failed(I18nUtil._("系统繁忙,请稍后再试!")); } @@ -651,6 +668,16 @@ public class ShopActivityCutpriceServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("activity_id", shopStoreActivityBase.getActivity_id()) - .in("state", Arrays.asList( - CommonConstant.CutPrice_Order_State_Finished, - CommonConstant.CutPrice_Order_State_CutFinished, - CommonConstant.CutPrice_Order_State_ING - )); - long recordCount = count(queryWrapper); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.eq("activity_id", shopStoreActivityBase.getActivity_id()) +// .isNotNull("order_id").likeRight("order_id", "DD_") +// .eq("state", CommonConstant.CutPrice_Order_State_Finished); +// long recordCount = count(queryWrapper); + + // 实时查询活动的订单数量 + long recordCount = shopOrderInfoService.fetchActivityOrderSuccessCount(Convert.toStr(shopStoreActivityBase.getActivity_id()), Convert.toStr(StateCode.ACTIVITY_TYPE_CUTPRICE)); // 判断库存是否充足(当已占用库存大于等于总库存时,表示库存不足) if (recordCount >= productCount) { - return Pair.of(false, I18nUtil._("活动商品库存不足,请稍后再来。")); + return Pair.of(false, I18nUtil._("活动商品库存不足,请稍后再参与!")); } // 所有检查通过 diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java index b0027f30..968209fd 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java @@ -143,4 +143,13 @@ public interface ShopOrderInfoService extends IBaseService { * @return */ List genBookingOrderArgList(String storeId); + + /** + * 获取某个活动订单成功数量 + * + * @param activityId 活动ID + * @param activityTypeId 活动类型ID, 可选参数 + * @return + */ + long fetchActivityOrderSuccessCount(String activityId, String activityTypeId); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java index 46dc2bb2..b0b770f7 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.suisung.mall.common.api.CommonResult; @@ -1231,6 +1232,49 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ShopOrderInfo::getActivity_id, activityId); + + // 如果activityTypeId不为空,则添加条件 + if (StrUtil.isNotBlank(activityTypeId)) { + queryWrapper.eq(ShopOrderInfo::getActivity_type_id, activityTypeId); + } + + // 添加订单状态条件 + List successOrderStates = Arrays.asList( + StateCode.ORDER_STATE_WAIT_PAID, + StateCode.ORDER_STATE_PICKING, + StateCode.ORDER_STATE_WAIT_SHIPPING, + StateCode.ORDER_STATE_SHIPPED, + StateCode.ORDER_STATE_RECEIVED, + StateCode.ORDER_STATE_FINISH); + + queryWrapper.in(ShopOrderInfo::getOrder_state_id, successOrderStates); + + try { + return count(queryWrapper); + } catch (Exception e) { + logger.error("获取活动订单出错, activityId: {}, activityTypeId: {}", + activityId, activityTypeId, e); + return 0L; + } + } + /** * 根据一个或多个店铺id获取有效店铺的有效营业时间段 diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreActivityBaseService.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreActivityBaseService.java index c457c7fe..a4e13842 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreActivityBaseService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreActivityBaseService.java @@ -199,4 +199,14 @@ public interface ShopStoreActivityBaseService extends IBaseService