فهرست منبع

新增根据订单id查询订单可参与活动接口

codingliang 2 سال پیش
والد
کامیت
429a7d0f20

+ 32 - 0
src/main/java/com/sqx/common/constant/MyConstant.java

@@ -1,5 +1,7 @@
 package com.sqx.common.constant;
 
+import java.time.format.DateTimeFormatter;
+
 /**
  * 常量类
  * @author : codingliang
@@ -21,4 +23,34 @@ public class MyConstant {
      * 每个店铺允许加入的活动数量
      */
     public static final Integer MAX_NUM_OF_SHOP_JOIN = 5;
+
+    /**
+     * 日期格式 yyyy-MM-dd
+     */
+    public static final String DATE_FORMAT = "yyyy-MM-dd";
+
+    /**
+     * 时间格式 HH:mm:ss
+     */
+    public static final String TIME_FORMAT = "HH:mm:ss";
+
+    /**
+     * 时间日期格式 yyyy-MM-dd HH:mm:ss
+     */
+    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+    /**
+     * 默认日期格式化器
+     */
+    public static final DateTimeFormatter DATE_DTF = DateTimeFormatter.ofPattern(DATE_FORMAT);
+
+    /**
+     * 默认时间格式器
+     */
+    public static final DateTimeFormatter TIME_DTF = DateTimeFormatter.ofPattern(TIME_FORMAT);
+
+    /**
+     * 默认时间日期格式器
+     */
+    public static final DateTimeFormatter DATE_TIME_DTF = DateTimeFormatter.ofPattern(DATE_TIME_FORMAT);
 }

+ 22 - 0
src/main/java/com/sqx/modules/activity/bo/GoodsActivityBO.java

@@ -0,0 +1,22 @@
+package com.sqx.modules.activity.bo;
+
+import com.sqx.modules.activity.entity.Activity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 商品活动
+ *
+ * @author : codingliang
+ * @date : 2024-06-22 22:34
+ */
+@Data
+@ApiModel("商品活动")
+public class GoodsActivityBO extends Activity {
+
+    @ApiModelProperty("商品id")
+    private List<Long> goodsIds;
+}

+ 35 - 0
src/main/java/com/sqx/modules/activity/controller/app/AppActivityController.java

@@ -0,0 +1,35 @@
+package com.sqx.modules.activity.controller.app;
+
+import com.sqx.common.utils.Result;
+import com.sqx.modules.activity.service.ActivityService;
+import com.sqx.modules.activity.vo.OrderSuitActivityVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 活动
+ * @author : codingliang
+ * @date : 2024-6-17
+ */
+@Api(tags = "活动-app活动信息")
+@RestController
+@RequestMapping("app/activity")
+@RequiredArgsConstructor
+public class AppActivityController {
+
+    private final ActivityService activityService;
+
+    @GetMapping("suit-activity/{orderId}")
+    @ApiOperation(value = "获取适用的活动列表")
+    public Result getOrderSuitActivity(@PathVariable Long orderId) {
+        List<OrderSuitActivityVO> suitActivityVOList = activityService.getOrderSuitActivity(orderId);
+        return Result.success().put("data", suitActivityVOList);
+    }
+}

+ 4 - 3
src/main/java/com/sqx/modules/activity/controller/app/AppActivityGoodsController.java

@@ -2,7 +2,7 @@ package com.sqx.modules.activity.controller.app;
 
 import com.sqx.common.utils.Result;
 import com.sqx.modules.activity.service.ActivityGoodsService;
-import com.sqx.modules.activity.vo.ActivityVO;
+import com.sqx.modules.activity.vo.GoodsActivityVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -29,7 +30,7 @@ public class AppActivityGoodsController {
    @GetMapping("{goodsId}")
    @ApiOperation("查看商品参与的活动列表")
    public Result getActivityListByGoodsId(@PathVariable Long goodsId) {
-       List<ActivityVO> activityVOList = activityGoodsService.getActivityListByGoodsId(goodsId);
-       return Result.success().put("data", activityVOList);
+       List<GoodsActivityVO> goodsActivityVOS = activityGoodsService.getActivityListByGoodsId(Arrays.asList(goodsId));
+       return Result.success().put("data", goodsActivityVOS);
    }
 }

+ 2 - 2
src/main/java/com/sqx/modules/activity/dao/ActivityGoodsDao.java

@@ -1,7 +1,7 @@
 package com.sqx.modules.activity.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.sqx.modules.activity.entity.Activity;
+import com.sqx.modules.activity.bo.GoodsActivityBO;
 import com.sqx.modules.activity.entity.ActivityGoods;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -16,5 +16,5 @@ import java.util.List;
 @Mapper
 public interface ActivityGoodsDao extends BaseMapper<ActivityGoods> {
 
-     List<Activity> getActivityListByGoodsId(@Param("goodsId") Long goodsId);
+     List<GoodsActivityBO> getActivityListByGoodsId(@Param("goodsIds") List<Long> goodsIds);
  }

+ 4 - 4
src/main/java/com/sqx/modules/activity/service/ActivityGoodsService.java

@@ -3,7 +3,7 @@ package com.sqx.modules.activity.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.sqx.modules.activity.dto.ActivityGoodsDTO;
 import com.sqx.modules.activity.entity.ActivityGoods;
-import com.sqx.modules.activity.vo.ActivityVO;
+import com.sqx.modules.activity.vo.GoodsActivityVO;
 
 import java.util.List;
 
@@ -20,8 +20,8 @@ public interface ActivityGoodsService extends IService<ActivityGoods> {
 
     /**
      * 查询商品参与的活动
-     * @param goodsId 商品id
-     * @return
+     * @param goodsIds 商品id集合
+     * @return 活动信息以及对应的商品id
      */
-    List<ActivityVO> getActivityListByGoodsId(Long goodsId);
+    List<GoodsActivityVO> getActivityListByGoodsId(List<Long> goodsIds);
 }

+ 8 - 0
src/main/java/com/sqx/modules/activity/service/ActivityService.java

@@ -6,6 +6,7 @@ import com.sqx.modules.activity.dto.ActivityDTO;
 import com.sqx.modules.activity.dto.ActivityQueryDTO;
 import com.sqx.modules.activity.entity.Activity;
 import com.sqx.modules.activity.vo.ActivityVO;
+import com.sqx.modules.activity.vo.OrderSuitActivityVO;
 
 import java.util.List;
 
@@ -29,4 +30,11 @@ public interface ActivityService extends IService<Activity> {
     void updateActivityJoinMethod(Long id, String flag);
 
     void deleteActivity(List<Long> ids);
+
+    /**
+     * 获取订单适用活动列表
+     * @param orderId 订单id
+     * @return 活动
+     */
+    List<OrderSuitActivityVO> getOrderSuitActivity(Long orderId);
 }

+ 21 - 4
src/main/java/com/sqx/modules/activity/service/impl/ActivityGoodsServiceImpl.java

@@ -1,20 +1,22 @@
 package com.sqx.modules.activity.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sqx.common.exception.SqxException;
 import com.sqx.common.utils.SpringContextUtils;
+import com.sqx.modules.activity.bo.GoodsActivityBO;
 import com.sqx.modules.activity.dao.ActivityGoodsDao;
 import com.sqx.modules.activity.dto.ActivityGoodsDTO;
-import com.sqx.modules.activity.entity.Activity;
 import com.sqx.modules.activity.entity.ActivityGoods;
 import com.sqx.modules.activity.entity.ActivityShop;
 import com.sqx.modules.activity.service.ActivityGoodsService;
 import com.sqx.modules.activity.service.ActivityShopService;
 import com.sqx.modules.activity.util.ActivityUtil;
 import com.sqx.modules.activity.vo.ActivityVO;
+import com.sqx.modules.activity.vo.GoodsActivityVO;
 import com.sqx.modules.datacentre.entity.SysUserShop;
 import com.sqx.modules.sys.entity.SysUserEntity;
 import com.sqx.modules.sys.service.SysUserShopService;
@@ -23,6 +25,7 @@ import org.apache.shiro.SecurityUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -65,9 +68,23 @@ public class ActivityGoodsServiceImpl extends ServiceImpl<ActivityGoodsDao, Acti
     }
 
     @Override
-    public List<ActivityVO> getActivityListByGoodsId(Long goodsId) {
-        List<Activity> activities = baseMapper.getActivityListByGoodsId(goodsId);
-        return activities.stream().map(ActivityUtil::convertActivityEntityToVO).collect(Collectors.toList());
+    public List<GoodsActivityVO> getActivityListByGoodsId(List<Long> goodsIds) {
+        List<GoodsActivityBO> activities = baseMapper.getActivityListByGoodsId(goodsIds);
+
+        Date currentDate = new Date();
+
+        return activities.stream()
+                .map(e -> {
+                    ActivityVO activityVO = ActivityUtil.convertActivityEntityToVO(e);
+                    GoodsActivityVO goodsActivityVO = new GoodsActivityVO();
+                    BeanUtil.copyProperties(activityVO, goodsActivityVO);
+                    goodsActivityVO.setGoodsIds(e.getGoodsIds());
+
+                    return goodsActivityVO;
+                })
+                .filter(e -> currentDate.after(e.getStartTime()) && currentDate.before(e.getEndTime()))
+                .filter(ActivityUtil::judgeActivitySuitCurTime)
+                .collect(Collectors.toList());
     }
 
     private void checkAuth(ActivityGoodsDTO activityGoodsDTO) {

+ 84 - 8
src/main/java/com/sqx/modules/activity/service/impl/ActivityServiceImpl.java

@@ -22,15 +22,22 @@ import com.sqx.modules.activity.entity.Activity;
 import com.sqx.modules.activity.entity.ActivityShop;
 import com.sqx.modules.activity.enums.ActivityTypeEnum;
 import com.sqx.modules.activity.enums.FullActivityTypeEnum;
+import com.sqx.modules.activity.service.ActivityGoodsService;
 import com.sqx.modules.activity.service.ActivityService;
 import com.sqx.modules.activity.service.ActivityShopService;
 import com.sqx.modules.activity.util.ActivityUtil;
 import com.sqx.modules.activity.vo.ActivityVO;
+import com.sqx.modules.activity.vo.GoodsActivityVO;
+import com.sqx.modules.activity.vo.OrderSuitActivityVO;
+import com.sqx.modules.order.entity.OrderGoods;
+import com.sqx.modules.order.entity.TbOrder;
+import com.sqx.modules.order.service.AppOrderService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
-import java.time.format.DateTimeFormatter;
+import java.math.BigDecimal;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -45,11 +52,8 @@ import java.util.stream.Collectors;
 public class ActivityServiceImpl extends ServiceImpl<ActivityDao, Activity> implements ActivityService {
 
     private final ActivityShopService activityShopService;
-
-    /**
-     * 时间格式 HH:mm
-     */
-    private static final DateTimeFormatter TIME_DTF = DateTimeFormatter.ofPattern("HH:mm");
+    private final ActivityGoodsService activityGoodsService;
+    private final AppOrderService orderService;
 
     @Override
     public ActivityVO getActivityById(Long id) {
@@ -155,6 +159,78 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityDao, Activity> impl
         removeByIds(activityIds);
     }
 
+    @Override
+    public List<OrderSuitActivityVO> getOrderSuitActivity(Long orderId) {
+        TbOrder order = orderService.getById(orderId);
+        if (ObjectUtil.isNull(order)) {
+            throw new SqxException("无效的订单id");
+        }
+
+        List<OrderGoods> orderGoodsList = orderService.getOrderGoods(orderId);
+        if (CollUtil.isEmpty(orderGoodsList)) {
+            throw new SqxException("订单数据异常,请联系管理员");
+        }
+
+        List<Long> goodsIds = orderGoodsList.stream().map(OrderGoods::getGoodsId).collect(Collectors.toList());
+
+        // 获取当前订单内的商品符合的条件的活动
+        List<GoodsActivityVO> goodsActivityVOList = activityGoodsService.getActivityListByGoodsId(goodsIds);
+
+        // 计算各活动优惠价格
+        return goodsActivityVOList.stream()
+                .map(e -> {
+                    String type = e.getType();
+                    List<Long> curGoodsIds = e.getGoodsIds();
+
+                    // 当前商品总价
+                    double curGoodsTotalPrice = orderGoodsList.stream()
+                            .filter(orderGoods -> curGoodsIds.contains(orderGoods.getGoodsId()))
+                            .mapToDouble(orderGoods ->
+                                    orderGoods.getGoodsPrice().multiply(new BigDecimal(orderGoods.getGoodsNum().toString()))
+                            .doubleValue())
+                            .sum();
+
+                    // 优惠金额
+                    double discountAmount = 0.0;
+
+                    // 计算活动优惠金额
+                    if (ActivityTypeEnum.TIME.getTypeCode().equals(type)) {
+                        ActivityOfTimeIntervalDTO curTimeTimeActivity = ActivityUtil.getCurTimeTimeActivity(e.getTimeIntervalInfos());
+                        Double discountContent = curTimeTimeActivity.getDiscountContent();
+
+                        discountAmount = curGoodsTotalPrice - (curGoodsTotalPrice * discountContent);
+                    } else if (ActivityTypeEnum.FULL.getTypeCode().equals(type)) {
+                        ActivityOfFullReductionDTO fullReductionInfo = e.getFullReductionInfo();
+
+                        if (FullActivityTypeEnum.DISCOUNT.getTypeCode().equals(fullReductionInfo.getType())) {
+                            discountAmount = curGoodsTotalPrice - (curGoodsTotalPrice * fullReductionInfo.getDiscountContent());
+                        } else {
+                            Double discountContent = fullReductionInfo.getDiscountContent();
+
+                            // 如果满减金额大于当前商品的总金额,则优惠金额为当前商品的总金额,否则优惠金额为当前配置的金额
+                            if (discountContent > curGoodsTotalPrice) {
+                                discountAmount = curGoodsTotalPrice;
+                            } else {
+                                discountAmount = discountContent;
+                            }
+                        }
+                    } else if (ActivityTypeEnum.GLOBAL.getTypeCode().equals(type)) {
+                        ActivityOfGlobalDiscountDTO globalDiscountsInfo = e.getGlobalDiscountsInfo();
+
+                        discountAmount = curGoodsTotalPrice - (curGoodsTotalPrice * globalDiscountsInfo.getDiscountRate());
+                    }
+
+                    OrderSuitActivityVO vo = new OrderSuitActivityVO();
+                    vo.setActivityId(e.getId());
+                    vo.setActivityTitle(e.getTitle());
+                    vo.setActivityType(type);
+                    vo.setDiscountAmount(discountAmount);
+                    return vo;
+                })
+                .sorted(Comparator.comparing(OrderSuitActivityVO::getDiscountAmount))
+                .collect(Collectors.toList());
+    }
+
     /**
      * 根据id获取活动信息
      *    如id对应记录不存在,则抛出数据不存在异常
@@ -265,8 +341,8 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityDao, Activity> impl
             }
 
             try {
-                TIME_DTF.parse(timeIntervalInfo.getStartTime());
-                TIME_DTF.parse(timeIntervalInfo.getEndTime());
+                MyConstant.TIME_DTF.parse(timeIntervalInfo.getStartTime());
+                MyConstant.TIME_DTF.parse(timeIntervalInfo.getEndTime());
             } catch (Exception e) {
                 throw new SqxException("时间格式有误,startTime和endTime格式应为HH:mm");
             }

+ 51 - 0
src/main/java/com/sqx/modules/activity/util/ActivityUtil.java

@@ -1,5 +1,6 @@
 package com.sqx.modules.activity.util;
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.sqx.modules.activity.dto.ActivityOfFullReductionDTO;
 import com.sqx.modules.activity.dto.ActivityOfGlobalDiscountDTO;
@@ -9,6 +10,11 @@ import com.sqx.modules.activity.enums.ActivityTypeEnum;
 import com.sqx.modules.activity.vo.ActivityVO;
 import org.springframework.beans.BeanUtils;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.List;
+
 /**
  * activity工具集合
  *
@@ -32,4 +38,49 @@ public class ActivityUtil {
         }
         return vo;
     }
+
+    /**
+     * 判断活动是否适用于当前时间段
+     * @param activityVO 活动信息
+     * @return true or false
+     */
+    public static Boolean judgeActivitySuitCurTime(ActivityVO activityVO) {
+        if (ObjectUtil.isNull(activityVO)) return false;
+
+        // 非时段优惠活动直接返回true
+        if (!ActivityTypeEnum.TIME.getTypeCode().equals(activityVO.getType())) return true;
+
+        // 时段优惠根据具体的时间端配置判定
+        return ActivityUtil.getCurTimeTimeActivity(activityVO.getTimeIntervalInfos()) != null;
+    }
+
+    /**
+     * 获取符合当前时间段内的时段优惠活动
+     * @param timeConfigs 时段配置信息
+     * @return 符合的活动或者null
+     */
+    public static ActivityOfTimeIntervalDTO getCurTimeTimeActivity(List<ActivityOfTimeIntervalDTO> timeConfigs) {
+        LocalDate curDate = LocalDate.now();
+        LocalDateTime now = LocalDateTime.now();
+
+        for (ActivityOfTimeIntervalDTO timeIntervalInfo : timeConfigs) {
+            String startTimeStr = timeIntervalInfo.getStartTime();
+            String endTimeStr = timeIntervalInfo.getEndTime();
+
+            LocalDateTime startTime = LocalDateTime.of(curDate, LocalTime.parse(startTimeStr));
+            LocalDateTime endTime;
+            if (startTimeStr.compareTo(endTimeStr) > 0) {
+                // endTime需要加一天
+                endTime = LocalDateTime.of(curDate.plusDays(1), LocalTime.parse(endTimeStr));
+            } else {
+                endTime = LocalDateTime.of(curDate, LocalTime.parse(endTimeStr));
+            }
+
+            if (now.isAfter(startTime) && now.isBefore(endTime)) {
+                return timeIntervalInfo;
+            }
+        }
+
+        return null;
+    }
 }

+ 21 - 0
src/main/java/com/sqx/modules/activity/vo/GoodsActivityVO.java

@@ -0,0 +1,21 @@
+package com.sqx.modules.activity.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 商品活动vo
+ *
+ * @author : codingliang
+ * @date : 2024-06-22 22:34
+ */
+@Data
+@ApiModel("商品活动")
+public class GoodsActivityVO extends ActivityVO {
+
+    @ApiModelProperty("商品id")
+    private List<Long> goodsIds;
+}

+ 33 - 0
src/main/java/com/sqx/modules/activity/vo/OrderSuitActivityVO.java

@@ -0,0 +1,33 @@
+package com.sqx.modules.activity.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 订单适用活动
+ *
+ * @author : codingliang
+ * @date : 2024-06-22 21:37
+ */
+@Data
+@ApiModel("订单适用活动")
+public class OrderSuitActivityVO {
+
+    @ApiModelProperty("活动id")
+    private Long activityId;
+
+    @ApiModelProperty("活动名称")
+    private String activityTitle;
+
+    @ApiModelProperty("活动类型")
+    private String activityType;
+
+    @ApiModelProperty("预计优惠金额")
+    private Double discountAmount;
+
+    @ApiModelProperty("符合该条件的商品id列表")
+    private List<Long> goodsIds;
+}

+ 8 - 0
src/main/java/com/sqx/modules/order/service/AppOrderService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.order.entity.Evaluate;
+import com.sqx.modules.order.entity.OrderGoods;
 import com.sqx.modules.order.entity.TbOrder;
 import com.sqx.modules.utils.excel.ExcelData;
 import org.springframework.transaction.annotation.Transactional;
@@ -113,4 +114,11 @@ public interface AppOrderService extends IService<TbOrder> {
      * @param order 订单信息
      */
     void updateOrderAfterPaySuccess(TbOrder order);
+
+    /**
+     * 查询订单商品
+     * @param orderId 订单id
+     * @return 订单商品列表
+     */
+    List<OrderGoods> getOrderGoods(Long orderId);
 }

+ 5 - 0
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -474,6 +474,11 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
         }
     }
 
+    @Override
+    public List<OrderGoods> getOrderGoods(Long orderId) {
+        return orderGoodsDao.selectList(new QueryWrapper<OrderGoods>().eq("order_id", orderId));
+    }
+
     /**
      * 用户钱包新增消费记录
      * @param order 订单信息

+ 26 - 3
src/main/resources/mapper/activity/ActivityGoodsDao.xml

@@ -2,9 +2,28 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.sqx.modules.activity.dao.ActivityGoodsDao">
 
-    <select id="getActivityListByGoodsId" resultType="com.sqx.modules.activity.entity.Activity">
+    <resultMap id="goodsActivityVo" type="com.sqx.modules.activity.bo.GoodsActivityBO">
+        <id column="id" property="id"/>
+        <result column="title" property="title"/>
+        <result column="content" property="content"/>
+        <result column="image" property="image"/>
+        <result column="enable_flag" property="enableFlag"/>
+        <result column="allow_shop" property="allowShop"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="type" property="type"/>
+        <result column="config" property="config"/>
+        <result column="start_time" property="startTime"/>
+        <result column="end_time" property="endTime"/>
+        <collection property="goodsIds" ofType="long">
+            <result column="goods_id"/>
+        </collection>
+    </resultMap>
+
+    <select id="getActivityListByGoodsId" resultMap="goodsActivityVo">
         select
-            a.*
+            a.*,
+            tmp.goods_id
         from
             (
                 select
@@ -19,6 +38,10 @@
             ) tmp
                 left join activity_shop ach on ach.id = tmp.activity_shop_id
                 left join activity a on ach.activity_id = a.id
-        where tmp.goods_id = #{goodsId} and a.del_flag = '0'
+        where a.del_flag = '0'
+          and tmp.goods_id in
+              <foreach collection="goodsIds" open="(" close=")" separator="," item="item">
+                  #{item}
+              </foreach>
     </select>
 </mapper>