|
@@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.Ba
|
|
|
import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import org.apache.ibatis.annotations.Mapper;
|
|
|
+import org.apache.ibatis.annotations.Param;
|
|
|
import org.apache.ibatis.annotations.Select;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
@@ -87,6 +88,7 @@ public interface BargainActivityMapper extends BaseMapperX<BargainActivityDO> {
|
|
|
|
|
|
// TODO @puhui999:一个商品,在统一时间,不会参与多个活动;so 是不是不用 inner join 哈?
|
|
|
// PS:如果可以参与多个,其实可以这样写 select * from promotion_bargain_activity group by spu_id ORDER BY create_time DESC;通过 group 来过滤
|
|
|
+
|
|
|
/**
|
|
|
* 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录
|
|
|
*
|
|
@@ -94,16 +96,20 @@ public interface BargainActivityMapper extends BaseMapperX<BargainActivityDO> {
|
|
|
* @param status 状态
|
|
|
* @return 砍价活动列表
|
|
|
*/
|
|
|
- @Select("SELECT p1.* " +
|
|
|
+ @Select("<script> " + "SELECT p1.* " +
|
|
|
"FROM promotion_bargain_activity p1 " +
|
|
|
"INNER JOIN ( " +
|
|
|
- " SELECT spu_id, MAX(DISTINCT(create_time)) AS max_create_time " +
|
|
|
+ " SELECT spu_id, MAX(DISTINCT create_time) AS max_create_time " +
|
|
|
" FROM promotion_bargain_activity " +
|
|
|
- " WHERE spu_id IN #{spuIds} " +
|
|
|
+ " WHERE spu_id IN " +
|
|
|
+ "<foreach collection='spuIds' item='spuId' open='(' separator=',' close=')'>" +
|
|
|
+ " #{spuId}" +
|
|
|
+ "</foreach>" +
|
|
|
" GROUP BY spu_id " +
|
|
|
") p2 " +
|
|
|
"ON p1.spu_id = p2.spu_id AND p1.create_time = p2.max_create_time AND p1.status = #{status} " +
|
|
|
- "ORDER BY p1.create_time DESC;")
|
|
|
- List<BargainActivityDO> selectListBySpuIds(Collection<Long> spuIds, Integer status);
|
|
|
+ "ORDER BY p1.create_time DESC;" +
|
|
|
+ " </script>")
|
|
|
+ List<BargainActivityDO> selectListBySpuIdsAndStatus(@Param("spuIds") Collection<Long> spuIds, @Param("status") Integer status);
|
|
|
|
|
|
}
|