Commit 6808d3c163fca5c699d21b50ec0c4d112b319df3
1 parent
abbb0768
完成秒杀时段todo,秒杀时段商品添加timeIds
Showing
12 changed files
with
74 additions
and
85 deletions
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/activity/SeckillActivityCreateReqVO.java
| @@ -7,7 +7,6 @@ import lombok.EqualsAndHashCode; | @@ -7,7 +7,6 @@ import lombok.EqualsAndHashCode; | ||
| 7 | import lombok.ToString; | 7 | import lombok.ToString; |
| 8 | 8 | ||
| 9 | import javax.validation.Valid; | 9 | import javax.validation.Valid; |
| 10 | -import javax.validation.constraints.NotBlank; | ||
| 11 | import javax.validation.constraints.NotEmpty; | 10 | import javax.validation.constraints.NotEmpty; |
| 12 | import javax.validation.constraints.NotNull; | 11 | import javax.validation.constraints.NotNull; |
| 13 | import java.util.List; | 12 | import java.util.List; |
| @@ -26,7 +25,6 @@ public class SeckillActivityCreateReqVO extends SeckillActivityBaseVO { | @@ -26,7 +25,6 @@ public class SeckillActivityCreateReqVO extends SeckillActivityBaseVO { | ||
| 26 | @NotNull(message = "排序不能为空") | 25 | @NotNull(message = "排序不能为空") |
| 27 | private Integer sort; | 26 | private Integer sort; |
| 28 | 27 | ||
| 29 | - // TODO halfninety:直接使用数组接口。timeIds, | ||
| 30 | @ApiModelProperty(value = "秒杀时段id", required = true) | 28 | @ApiModelProperty(value = "秒杀时段id", required = true) |
| 31 | @NotEmpty(message = "参与场次不能为空") | 29 | @NotEmpty(message = "参与场次不能为空") |
| 32 | private List<Long> timeIds; | 30 | private List<Long> timeIds; |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckill/seckillactivity/SeckillActivityConvert.java
| @@ -75,8 +75,9 @@ public interface SeckillActivityConvert { | @@ -75,8 +75,9 @@ public interface SeckillActivityConvert { | ||
| 75 | 75 | ||
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | - default List<SeckillProductDO> convertList(List<SeckillActivityBaseVO.Product> products, Long seckillActivityId, List<Long> timeIds) { | 78 | + default List<SeckillProductDO> convertList(List<SeckillActivityBaseVO.Product> products, SeckillActivityDO seckillActivity) { |
| 79 | return CollectionUtils.convertList(products, product -> convert(product) | 79 | return CollectionUtils.convertList(products, product -> convert(product) |
| 80 | - .setActivityId(seckillActivityId).setTimeIds(timeIds)); | 80 | + .setActivityId(seckillActivity.getId()).setTimeIds(seckillActivity.getTimeIds())); |
| 81 | } | 81 | } |
| 82 | + | ||
| 82 | } | 83 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/seckill/seckillactivity/SeckillActivityDO.java
| 1 | package cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity; | 1 | package cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; | ||
| 5 | +import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum; | ||
| 4 | import com.baomidou.mybatisplus.annotation.KeySequence; | 6 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 7 | +import com.baomidou.mybatisplus.annotation.TableField; | ||
| 5 | import com.baomidou.mybatisplus.annotation.TableId; | 8 | import com.baomidou.mybatisplus.annotation.TableId; |
| 6 | import com.baomidou.mybatisplus.annotation.TableName; | 9 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | -import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum; | ||
| 8 | -import lombok.*; | 10 | +import lombok.Data; |
| 11 | +import lombok.EqualsAndHashCode; | ||
| 12 | +import lombok.ToString; | ||
| 9 | 13 | ||
| 10 | -import java.math.BigDecimal; | ||
| 11 | import java.time.LocalDateTime; | 14 | import java.time.LocalDateTime; |
| 12 | import java.util.List; | 15 | import java.util.List; |
| 13 | 16 | ||
| @@ -16,14 +19,11 @@ import java.util.List; | @@ -16,14 +19,11 @@ import java.util.List; | ||
| 16 | * | 19 | * |
| 17 | * @author halfninety | 20 | * @author halfninety |
| 18 | */ | 21 | */ |
| 19 | -@TableName("promotion_seckill_activity") | 22 | +@TableName(value = "promotion_seckill_activity", autoResultMap = true) |
| 20 | @KeySequence("promotion_seckill_activity_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | 23 | @KeySequence("promotion_seckill_activity_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 |
| 21 | @Data | 24 | @Data |
| 22 | @EqualsAndHashCode(callSuper = true) | 25 | @EqualsAndHashCode(callSuper = true) |
| 23 | @ToString(callSuper = true) | 26 | @ToString(callSuper = true) |
| 24 | -@Builder | ||
| 25 | -@NoArgsConstructor | ||
| 26 | -@AllArgsConstructor | ||
| 27 | public class SeckillActivityDO extends BaseDO { | 27 | public class SeckillActivityDO extends BaseDO { |
| 28 | 28 | ||
| 29 | /** | 29 | /** |
| @@ -37,7 +37,7 @@ public class SeckillActivityDO extends BaseDO { | @@ -37,7 +37,7 @@ public class SeckillActivityDO extends BaseDO { | ||
| 37 | private String name; | 37 | private String name; |
| 38 | /** | 38 | /** |
| 39 | * 活动状态 | 39 | * 活动状态 |
| 40 | - * | 40 | + * <p> |
| 41 | * 枚举 {@link PromotionActivityStatusEnum 对应的类} | 41 | * 枚举 {@link PromotionActivityStatusEnum 对应的类} |
| 42 | */ | 42 | */ |
| 43 | private Integer status; | 43 | private Integer status; |
| @@ -60,6 +60,7 @@ public class SeckillActivityDO extends BaseDO { | @@ -60,6 +60,7 @@ public class SeckillActivityDO extends BaseDO { | ||
| 60 | /** | 60 | /** |
| 61 | * 秒杀时段 id | 61 | * 秒杀时段 id |
| 62 | */ | 62 | */ |
| 63 | + @TableField(typeHandler = LongListTypeHandler.class) | ||
| 63 | private List<Long> timeIds; | 64 | private List<Long> timeIds; |
| 64 | /** | 65 | /** |
| 65 | * 付款订单数 | 66 | * 付款订单数 |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/seckill/seckillactivity/SeckillProductDO.java
| 1 | package cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity; | 1 | package cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | -import com.baomidou.mybatisplus.annotation.IdType; | ||
| 5 | -import com.baomidou.mybatisplus.annotation.TableField; | ||
| 6 | -import com.baomidou.mybatisplus.annotation.TableId; | ||
| 7 | -import com.baomidou.mybatisplus.annotation.TableName; | 4 | +import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; |
| 5 | +import com.baomidou.mybatisplus.annotation.*; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 8 | 9 | ||
| 9 | -import java.io.Serializable; | ||
| 10 | -import java.math.BigDecimal; | ||
| 11 | -import java.util.Date; | ||
| 12 | import java.util.List; | 10 | import java.util.List; |
| 13 | 11 | ||
| 14 | -import lombok.Data; | ||
| 15 | - | ||
| 16 | /** | 12 | /** |
| 17 | * 秒杀参与商品 | 13 | * 秒杀参与商品 |
| 18 | * | 14 | * |
| 19 | * @author halfninety | 15 | * @author halfninety |
| 20 | * @TableName promotion_seckill_product | 16 | * @TableName promotion_seckill_product |
| 21 | */ | 17 | */ |
| 22 | -@TableName(value = "promotion_seckill_product") | 18 | +@TableName(value = "promotion_seckill_product", autoResultMap = true) |
| 19 | +@KeySequence("promotion_seckill_product_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||
| 23 | @Data | 20 | @Data |
| 21 | +@EqualsAndHashCode(callSuper = true) | ||
| 22 | +@ToString(callSuper = true) | ||
| 24 | public class SeckillProductDO extends BaseDO { | 23 | public class SeckillProductDO extends BaseDO { |
| 25 | /** | 24 | /** |
| 26 | * 秒杀参与商品编号 | 25 | * 秒杀参与商品编号 |
| @@ -36,6 +35,7 @@ public class SeckillProductDO extends BaseDO { | @@ -36,6 +35,7 @@ public class SeckillProductDO extends BaseDO { | ||
| 36 | /** | 35 | /** |
| 37 | * 秒杀时段id | 36 | * 秒杀时段id |
| 38 | */ | 37 | */ |
| 38 | + @TableField(typeHandler = LongListTypeHandler.class) | ||
| 39 | private List<Long> timeIds; | 39 | private List<Long> timeIds; |
| 40 | 40 | ||
| 41 | /** | 41 | /** |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/seckill/seckilltime/SeckillTimeDO.java
| @@ -4,7 +4,9 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | @@ -4,7 +4,9 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | import com.baomidou.mybatisplus.annotation.KeySequence; | 4 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 5 | import com.baomidou.mybatisplus.annotation.TableId; | 5 | import com.baomidou.mybatisplus.annotation.TableId; |
| 6 | import com.baomidou.mybatisplus.annotation.TableName; | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | -import lombok.*; | 7 | +import lombok.Data; |
| 8 | +import lombok.EqualsAndHashCode; | ||
| 9 | +import lombok.ToString; | ||
| 8 | 10 | ||
| 9 | import java.time.LocalTime; | 11 | import java.time.LocalTime; |
| 10 | 12 | ||
| @@ -18,9 +20,6 @@ import java.time.LocalTime; | @@ -18,9 +20,6 @@ import java.time.LocalTime; | ||
| 18 | @Data | 20 | @Data |
| 19 | @EqualsAndHashCode(callSuper = true) | 21 | @EqualsAndHashCode(callSuper = true) |
| 20 | @ToString(callSuper = true) | 22 | @ToString(callSuper = true) |
| 21 | -@Builder | ||
| 22 | -@NoArgsConstructor | ||
| 23 | -@AllArgsConstructor | ||
| 24 | public class SeckillTimeDO extends BaseDO { | 23 | public class SeckillTimeDO extends BaseDO { |
| 25 | 24 | ||
| 26 | /** | 25 | /** |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillActivityMapper.java
| 1 | package cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity; | 1 | package cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.ObjectUtil; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 6 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| @@ -19,8 +20,7 @@ public interface SeckillActivityMapper extends BaseMapperX<SeckillActivityDO> { | @@ -19,8 +20,7 @@ public interface SeckillActivityMapper extends BaseMapperX<SeckillActivityDO> { | ||
| 19 | .likeIfPresent(SeckillActivityDO::getName, reqVO.getName()) | 20 | .likeIfPresent(SeckillActivityDO::getName, reqVO.getName()) |
| 20 | .eqIfPresent(SeckillActivityDO::getStatus, reqVO.getStatus()) | 21 | .eqIfPresent(SeckillActivityDO::getStatus, reqVO.getStatus()) |
| 21 | .betweenIfPresent(SeckillActivityDO::getCreateTime, reqVO.getCreateTime()) | 22 | .betweenIfPresent(SeckillActivityDO::getCreateTime, reqVO.getCreateTime()) |
| 22 | - .apply("FIND_IN_SET(" + reqVO.getTimeId() + ",time_id) > 0") | 23 | + .apply(ObjectUtil.isNotNull(reqVO.getTimeId()),"FIND_IN_SET(" + reqVO.getTimeId() + ",time_ids) > 0") |
| 23 | .orderByDesc(SeckillActivityDO::getId)); | 24 | .orderByDesc(SeckillActivityDO::getId)); |
| 24 | } | 25 | } |
| 25 | - | ||
| 26 | } | 26 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillProductMapper.java
| 1 | package cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity; | 1 | package cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillProductDO; | 5 | import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillProductDO; |
| 6 | +import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; | ||
| 5 | import org.apache.ibatis.annotations.Mapper; | 7 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 8 | ||
| 7 | import java.util.Collection; | 9 | import java.util.Collection; |
| @@ -23,4 +25,11 @@ public interface SeckillProductMapper extends BaseMapperX<SeckillProductDO> { | @@ -23,4 +25,11 @@ public interface SeckillProductMapper extends BaseMapperX<SeckillProductDO> { | ||
| 23 | return selectList(SeckillProductDO::getSkuId, skuIds); | 25 | return selectList(SeckillProductDO::getSkuId, skuIds); |
| 24 | } | 26 | } |
| 25 | 27 | ||
| 28 | + default void updateTimeIdsByActivityId(Long id, List<Long> timeIds) { | ||
| 29 | + new LambdaUpdateChainWrapper<>(this) | ||
| 30 | + .set(SeckillProductDO::getTimeIds, CollUtil.join(timeIds, ",")) | ||
| 31 | + .eq(SeckillProductDO::getActivityId, id) | ||
| 32 | + .update(); | ||
| 33 | + } | ||
| 34 | + | ||
| 26 | } | 35 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckilltime/SeckillTimeMapper.java
| 1 | package cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckilltime; | 1 | package cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckilltime; |
| 2 | 2 | ||
| 3 | -import cn.hutool.core.collection.CollUtil; | ||
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckilltime.SeckillTimeDO; | 4 | import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckilltime.SeckillTimeDO; |
| 6 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 5 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| @@ -20,7 +19,7 @@ import java.util.List; | @@ -20,7 +19,7 @@ import java.util.List; | ||
| 20 | public interface SeckillTimeMapper extends BaseMapperX<SeckillTimeDO> { | 19 | public interface SeckillTimeMapper extends BaseMapperX<SeckillTimeDO> { |
| 21 | 20 | ||
| 22 | default List<SeckillTimeDO> selectListByTime(LocalTime time) { | 21 | default List<SeckillTimeDO> selectListByTime(LocalTime time) { |
| 23 | - return selectList(SeckillTimeDO::getStartTime,SeckillTimeDO::getEndTime,time); | 22 | + return selectList(SeckillTimeDO::getStartTime, SeckillTimeDO::getEndTime, time); |
| 24 | } | 23 | } |
| 25 | 24 | ||
| 26 | default List<SeckillTimeDO> selectListByTime(LocalTime startTime, LocalTime endTime) { | 25 | default List<SeckillTimeDO> selectListByTime(LocalTime startTime, LocalTime endTime) { |
| @@ -29,25 +28,10 @@ public interface SeckillTimeMapper extends BaseMapperX<SeckillTimeDO> { | @@ -29,25 +28,10 @@ public interface SeckillTimeMapper extends BaseMapperX<SeckillTimeDO> { | ||
| 29 | .le(SeckillTimeDO::getEndTime, endTime)); | 28 | .le(SeckillTimeDO::getEndTime, endTime)); |
| 30 | } | 29 | } |
| 31 | 30 | ||
| 32 | - // TODO @halfninety:updateActivityCount + 和 -,可以执使用一个方法实现哈。多传递一个参数 | ||
| 33 | - default void sekillActivityCountAdd(Collection<Long> ids) { | ||
| 34 | - if (CollUtil.isEmpty(ids)) { | ||
| 35 | - return; | ||
| 36 | - } | ||
| 37 | - new LambdaUpdateChainWrapper<SeckillTimeDO>(this) | 31 | + default void updateActivityCount(Collection<Long> ids, String type, Integer count) { |
| 32 | + new LambdaUpdateChainWrapper<>(this) | ||
| 38 | .in(SeckillTimeDO::getId, ids) | 33 | .in(SeckillTimeDO::getId, ids) |
| 39 | - .setSql("`seckill_activity_count` = `seckill_activity_count` + 1 ") | 34 | + .setSql("`seckill_activity_count` = `seckill_activity_count` " + type + count) |
| 40 | .update(); | 35 | .update(); |
| 41 | } | 36 | } |
| 42 | - | ||
| 43 | - default void sekillActivityCountReduce(Collection<Long> ids) { | ||
| 44 | - if (CollUtil.isEmpty(ids)) { | ||
| 45 | - return; | ||
| 46 | - } | ||
| 47 | - new LambdaUpdateChainWrapper<SeckillTimeDO>(this) | ||
| 48 | - .in(SeckillTimeDO::getId, ids) | ||
| 49 | - .setSql("`seckill_activity_count` = `seckill_activity_count` - 1 ") | ||
| 50 | - .update(); | ||
| 51 | - } | ||
| 52 | - | ||
| 53 | } | 37 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckillactivity/SeckillActivityServiceImpl.java
| @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.promotion.service.seckill.seckillactivity; | @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.promotion.service.seckill.seckillactivity; | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 5 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 6 | -import cn.iocoder.yudao.framework.common.util.string.StrUtils; | ||
| 7 | import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityBaseVO; | 6 | import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityBaseVO; |
| 8 | import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO; | 7 | import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO; |
| 9 | import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO; | 8 | import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO; |
| @@ -35,13 +34,10 @@ import static java.util.Arrays.asList; | @@ -35,13 +34,10 @@ import static java.util.Arrays.asList; | ||
| 35 | @Service | 34 | @Service |
| 36 | @Validated | 35 | @Validated |
| 37 | public class SeckillActivityServiceImpl implements SeckillActivityService { | 36 | public class SeckillActivityServiceImpl implements SeckillActivityService { |
| 38 | - // TODO: 2022/12/2 halfninety 当前修改时忘记秒杀商品中的秒杀时段id的设置了;需要全部修改 | ||
| 39 | - // TODO: 2022/12/2 halfninety 将活动数量改为原来的商品数量 | ||
| 40 | @Resource | 37 | @Resource |
| 41 | private SeckillActivityMapper seckillActivityMapper; | 38 | private SeckillActivityMapper seckillActivityMapper; |
| 42 | @Resource | 39 | @Resource |
| 43 | private SeckillProductMapper seckillProductMapper; | 40 | private SeckillProductMapper seckillProductMapper; |
| 44 | - | ||
| 45 | @Resource | 41 | @Resource |
| 46 | private SeckillTimeService seckillTimeService; | 42 | private SeckillTimeService seckillTimeService; |
| 47 | 43 | ||
| @@ -49,20 +45,18 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | @@ -49,20 +45,18 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | ||
| 49 | public Long createSeckillActivity(SeckillActivityCreateReqVO createReqVO) { | 45 | public Long createSeckillActivity(SeckillActivityCreateReqVO createReqVO) { |
| 50 | // 校验商品是否冲突 | 46 | // 校验商品是否冲突 |
| 51 | validateSeckillActivityProductConflicts(null, createReqVO.getProducts()); | 47 | validateSeckillActivityProductConflicts(null, createReqVO.getProducts()); |
| 52 | - | ||
| 53 | // 校验秒杀时段是否存在 | 48 | // 校验秒杀时段是否存在 |
| 54 | seckillTimeService.validateSeckillTimeExists(createReqVO.getTimeIds()); | 49 | seckillTimeService.validateSeckillTimeExists(createReqVO.getTimeIds()); |
| 50 | + | ||
| 55 | // 插入秒杀活动 | 51 | // 插入秒杀活动 |
| 56 | SeckillActivityDO seckillActivity = SeckillActivityConvert.INSTANCE.convert(createReqVO) | 52 | SeckillActivityDO seckillActivity = SeckillActivityConvert.INSTANCE.convert(createReqVO) |
| 57 | .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getStartTime(), createReqVO.getEndTime())); | 53 | .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getStartTime(), createReqVO.getEndTime())); |
| 58 | seckillActivityMapper.insert(seckillActivity); | 54 | seckillActivityMapper.insert(seckillActivity); |
| 59 | // 插入商品 | 55 | // 插入商品 |
| 60 | - List<SeckillProductDO> productDOS = SeckillActivityConvert.INSTANCE | ||
| 61 | - .convertList(createReqVO.getProducts(),seckillActivity.getId(),seckillActivity.getTimeIds()); | 56 | + List<SeckillProductDO> productDOS = SeckillActivityConvert.INSTANCE.convertList(createReqVO.getProducts(), seckillActivity); |
| 62 | seckillProductMapper.insertBatch(productDOS); | 57 | seckillProductMapper.insertBatch(productDOS); |
| 63 | - | ||
| 64 | // 更新秒杀时段的秒杀活动数量 | 58 | // 更新秒杀时段的秒杀活动数量 |
| 65 | - seckillTimeService.sekillActivityCountAdd(createReqVO.getTimeIds()); | 59 | + seckillTimeService.sekillActivityCountIncr(createReqVO.getTimeIds()); |
| 66 | return seckillActivity.getId(); | 60 | return seckillActivity.getId(); |
| 67 | } | 61 | } |
| 68 | 62 | ||
| @@ -76,38 +70,36 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | @@ -76,38 +70,36 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | ||
| 76 | // 校验商品是否冲突 | 70 | // 校验商品是否冲突 |
| 77 | validateSeckillActivityProductConflicts(updateReqVO.getId(), updateReqVO.getProducts()); | 71 | validateSeckillActivityProductConflicts(updateReqVO.getId(), updateReqVO.getProducts()); |
| 78 | 72 | ||
| 79 | - // 更新秒杀时段的秒杀活动数量 | ||
| 80 | - updateSeckillTimeActivityCount(seckillActivity, updateReqVO.getTimeIds()); | ||
| 81 | // 更新活动 | 73 | // 更新活动 |
| 82 | SeckillActivityDO updateObj = SeckillActivityConvert.INSTANCE.convert(updateReqVO) | 74 | SeckillActivityDO updateObj = SeckillActivityConvert.INSTANCE.convert(updateReqVO) |
| 83 | .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getStartTime(), updateReqVO.getEndTime())); | 75 | .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getStartTime(), updateReqVO.getEndTime())); |
| 84 | seckillActivityMapper.updateById(updateObj); | 76 | seckillActivityMapper.updateById(updateObj); |
| 85 | // 更新商品 | 77 | // 更新商品 |
| 86 | updateSeckillProduct(updateReqVO); | 78 | updateSeckillProduct(updateReqVO); |
| 79 | + // 更新秒杀时段的秒杀活动数量 | ||
| 80 | + updateSeckillTimeActivityCount(seckillActivity, updateReqVO.getTimeIds()); | ||
| 87 | } | 81 | } |
| 88 | 82 | ||
| 89 | - // TODO @halfninety:注释写全哈; | ||
| 90 | 83 | ||
| 91 | /** | 84 | /** |
| 92 | * 更新秒杀时段的秒杀活动数量 | 85 | * 更新秒杀时段的秒杀活动数量 |
| 93 | * | 86 | * |
| 94 | * @param seckillActivity 查询出的秒杀活动 | 87 | * @param seckillActivity 查询出的秒杀活动 |
| 95 | - * @param updateTimeIds 更新后的秒杀时段id列表 | 88 | + * @param updateTimeIds 更新后的秒杀时段id列表 |
| 96 | */ | 89 | */ |
| 97 | private void updateSeckillTimeActivityCount(SeckillActivityDO seckillActivity, List<Long> updateTimeIds) { | 90 | private void updateSeckillTimeActivityCount(SeckillActivityDO seckillActivity, List<Long> updateTimeIds) { |
| 98 | // 查询出 timeIds | 91 | // 查询出 timeIds |
| 99 | List<Long> existsTimeIds = seckillActivity.getTimeIds(); | 92 | List<Long> existsTimeIds = seckillActivity.getTimeIds(); |
| 100 | // 需要减少的时间段 | 93 | // 需要减少的时间段 |
| 101 | - // TODO @halfninety:可以使用 CollUtil.filterNew() | ||
| 102 | Collection<Long> reduceIds = CollUtil.filterNew(existsTimeIds, existsTimeId -> !updateTimeIds.contains(existsTimeId)); | 94 | Collection<Long> reduceIds = CollUtil.filterNew(existsTimeIds, existsTimeId -> !updateTimeIds.contains(existsTimeId)); |
| 103 | // 需要添加的时间段 | 95 | // 需要添加的时间段 |
| 104 | updateTimeIds.removeIf(existsTimeIds::contains); | 96 | updateTimeIds.removeIf(existsTimeIds::contains); |
| 105 | // 更新减少时间段和增加时间段 | 97 | // 更新减少时间段和增加时间段 |
| 106 | if (CollUtil.isNotEmpty(updateTimeIds)) { | 98 | if (CollUtil.isNotEmpty(updateTimeIds)) { |
| 107 | - seckillTimeService.sekillActivityCountAdd(updateTimeIds); | 99 | + seckillTimeService.sekillActivityCountIncr(updateTimeIds); |
| 108 | } | 100 | } |
| 109 | if (CollUtil.isNotEmpty(reduceIds)) { | 101 | if (CollUtil.isNotEmpty(reduceIds)) { |
| 110 | - seckillTimeService.sekillActivityCountReduce(reduceIds); | 102 | + seckillTimeService.sekillActivityCountDecr(reduceIds); |
| 111 | } | 103 | } |
| 112 | } | 104 | } |
| 113 | 105 | ||
| @@ -116,6 +108,9 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | @@ -116,6 +108,9 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | ||
| 116 | * 后台查出的数据和前台查出的数据进行遍历, | 108 | * 后台查出的数据和前台查出的数据进行遍历, |
| 117 | * 1. 对前台数据进行遍历:如果不存在于后台的 sku 中需要新增 | 109 | * 1. 对前台数据进行遍历:如果不存在于后台的 sku 中需要新增 |
| 118 | * 2. 对后台数据进行遍历:如果不存在于前台的 sku 中需要删除 | 110 | * 2. 对后台数据进行遍历:如果不存在于前台的 sku 中需要删除 |
| 111 | + * 3. 最后对当前活动商品全部更新,更新秒杀时段id列表 | ||
| 112 | + * | ||
| 113 | + * @param updateReqVO 更新的请求VO | ||
| 119 | */ | 114 | */ |
| 120 | private void updateSeckillProduct(SeckillActivityUpdateReqVO updateReqVO) { | 115 | private void updateSeckillProduct(SeckillActivityUpdateReqVO updateReqVO) { |
| 121 | List<SeckillProductDO> seckillProductDOS = seckillProductMapper.selectListByActivityId(updateReqVO.getId()); | 116 | List<SeckillProductDO> seckillProductDOS = seckillProductMapper.selectListByActivityId(updateReqVO.getId()); |
| @@ -137,6 +132,9 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | @@ -137,6 +132,9 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | ||
| 137 | if (CollUtil.isNotEmpty(newSeckillProductDOs)) { | 132 | if (CollUtil.isNotEmpty(newSeckillProductDOs)) { |
| 138 | seckillProductMapper.insertBatch(newSeckillProductDOs); | 133 | seckillProductMapper.insertBatch(newSeckillProductDOs); |
| 139 | } | 134 | } |
| 135 | + | ||
| 136 | + //全量更新当前活动商品的秒杀时段id列表(timeIds) | ||
| 137 | + seckillProductMapper.updateTimeIdsByActivityId(updateReqVO.getId(), updateReqVO.getTimeIds()); | ||
| 140 | } | 138 | } |
| 141 | 139 | ||
| 142 | /** | 140 | /** |
| @@ -192,7 +190,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | @@ -192,7 +190,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { | ||
| 192 | throw exception(SECKILL_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END); | 190 | throw exception(SECKILL_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END); |
| 193 | } | 191 | } |
| 194 | // 更新秒杀时段的秒杀活动数量 | 192 | // 更新秒杀时段的秒杀活动数量 |
| 195 | - seckillTimeService.sekillActivityCountReduce(seckillActivity.getTimeIds()); | 193 | + seckillTimeService.sekillActivityCountDecr(seckillActivity.getTimeIds()); |
| 196 | // 删除 | 194 | // 删除 |
| 197 | seckillActivityMapper.deleteById(id); | 195 | seckillActivityMapper.deleteById(id); |
| 198 | } | 196 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckilltime/SeckillTimeService.java
| @@ -64,7 +64,7 @@ public interface SeckillTimeService { | @@ -64,7 +64,7 @@ public interface SeckillTimeService { | ||
| 64 | * | 64 | * |
| 65 | * @param ids 秒杀时段id列表 | 65 | * @param ids 秒杀时段id列表 |
| 66 | */ | 66 | */ |
| 67 | - void sekillActivityCountAdd(Collection<Long> ids); | 67 | + void sekillActivityCountIncr(Collection<Long> ids); |
| 68 | 68 | ||
| 69 | 69 | ||
| 70 | /** | 70 | /** |
| @@ -72,5 +72,5 @@ public interface SeckillTimeService { | @@ -72,5 +72,5 @@ public interface SeckillTimeService { | ||
| 72 | * | 72 | * |
| 73 | * @param ids 秒杀时段id列表 | 73 | * @param ids 秒杀时段id列表 |
| 74 | */ | 74 | */ |
| 75 | - void sekillActivityCountReduce(Collection<Long> ids); | 75 | + void sekillActivityCountDecr(Collection<Long> ids); |
| 76 | } | 76 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckilltime/SeckillTimeServiceImpl.java
| @@ -104,22 +104,21 @@ public class SeckillTimeServiceImpl implements SeckillTimeService { | @@ -104,22 +104,21 @@ public class SeckillTimeServiceImpl implements SeckillTimeService { | ||
| 104 | @Override | 104 | @Override |
| 105 | public void validateSeckillTimeExists(Collection<Long> timeIds) { | 105 | public void validateSeckillTimeExists(Collection<Long> timeIds) { |
| 106 | if (CollUtil.isEmpty(timeIds)) { | 106 | if (CollUtil.isEmpty(timeIds)) { |
| 107 | - return; | 107 | + throw exception(SECKILL_TIME_NOT_EXISTS); |
| 108 | } | 108 | } |
| 109 | if (seckillTimeMapper.selectBatchIds(timeIds).size() != timeIds.size()) { | 109 | if (seckillTimeMapper.selectBatchIds(timeIds).size() != timeIds.size()) { |
| 110 | throw exception(SECKILL_TIME_NOT_EXISTS); | 110 | throw exception(SECKILL_TIME_NOT_EXISTS); |
| 111 | } | 111 | } |
| 112 | } | 112 | } |
| 113 | 113 | ||
| 114 | - // TODO @halfninety:updateActivityCount + 和 -,可以执使用一个方法实现哈。多传递一个参数 | ||
| 115 | @Override | 114 | @Override |
| 116 | - public void sekillActivityCountAdd(Collection<Long> ids) { | ||
| 117 | - seckillTimeMapper.sekillActivityCountAdd(ids); | 115 | + public void sekillActivityCountIncr(Collection<Long> ids) { |
| 116 | + seckillTimeMapper.updateActivityCount(ids, "+", 1); | ||
| 118 | } | 117 | } |
| 119 | 118 | ||
| 120 | @Override | 119 | @Override |
| 121 | - public void sekillActivityCountReduce(Collection<Long> ids) { | ||
| 122 | - seckillTimeMapper.sekillActivityCountReduce(ids); | 120 | + public void sekillActivityCountDecr(Collection<Long> ids) { |
| 121 | + seckillTimeMapper.updateActivityCount(ids, "-", 1); | ||
| 123 | } | 122 | } |
| 124 | 123 | ||
| 125 | } | 124 | } |
yudao-ui-admin/src/views/mall/promotion/seckill/seckillActivity/index.vue
| @@ -51,10 +51,10 @@ | @@ -51,10 +51,10 @@ | ||
| 51 | <dict-tag :type="DICT_TYPE.PROMOTION_ACTIVITY_STATUS" :value="scope.row.status" /> | 51 | <dict-tag :type="DICT_TYPE.PROMOTION_ACTIVITY_STATUS" :value="scope.row.status" /> |
| 52 | </template> | 52 | </template> |
| 53 | </el-table-column> | 53 | </el-table-column> |
| 54 | - <el-table-column label="参与场次" prop="timeId" width="250"> | 54 | + <el-table-column label="参与场次" prop="timeIds" width="250"> |
| 55 | <template slot-scope="scope"> | 55 | <template slot-scope="scope"> |
| 56 | <span v-for="item in seckillTimeList" :key="item.id" | 56 | <span v-for="item in seckillTimeList" :key="item.id" |
| 57 | - v-if="scope.row.timeId.indexOf(item.id) !== -1"> | 57 | + v-if="scope.row.timeIds.includes(item.id)"> |
| 58 | <el-tag style="margin:4px;" size="small">{{ item.name }}</el-tag> | 58 | <el-tag style="margin:4px;" size="small">{{ item.name }}</el-tag> |
| 59 | </span> | 59 | </span> |
| 60 | </template> | 60 | </template> |
| @@ -107,7 +107,7 @@ | @@ -107,7 +107,7 @@ | ||
| 107 | <el-input type="textarea" v-model="form.remark" placeholder="请输入备注" /> | 107 | <el-input type="textarea" v-model="form.remark" placeholder="请输入备注" /> |
| 108 | </el-form-item> | 108 | </el-form-item> |
| 109 | <el-form-item label="场次选择"> | 109 | <el-form-item label="场次选择"> |
| 110 | - <el-select v-model="form.timeId" placeholder="请选择参与场次" clearable size="small" multiple filterable | 110 | + <el-select v-model="form.timeIds" placeholder="请选择参与场次" clearable size="small" multiple filterable |
| 111 | style="width: 880px"> | 111 | style="width: 880px"> |
| 112 | <el-option v-for="item in seckillTimeList" :key="item.id" :label="item.name" :value="item.id"> | 112 | <el-option v-for="item in seckillTimeList" :key="item.id" :label="item.name" :value="item.id"> |
| 113 | <span style="float: left">{{ item.name + ': { ' }} {{ item.startTime }} -- {{ item.endTime + | 113 | <span style="float: left">{{ item.name + ': { ' }} {{ item.startTime }} -- {{ item.endTime + |
| @@ -186,7 +186,7 @@ | @@ -186,7 +186,7 @@ | ||
| 186 | 186 | ||
| 187 | <script> | 187 | <script> |
| 188 | import { getSkuOptionList } from "@/api/mall/product/sku"; | 188 | import { getSkuOptionList } from "@/api/mall/product/sku"; |
| 189 | -import { createSeckillActivity, updateSeckillActivity, closeSeckillActivity,deleteSeckillActivity, getSeckillActivity, getSeckillActivityPage, exportSeckillActivityExcel } from "@/api/mall/promotion/seckillActivity"; | 189 | +import { createSeckillActivity, updateSeckillActivity, closeSeckillActivity, deleteSeckillActivity, getSeckillActivity, getSeckillActivityPage, exportSeckillActivityExcel } from "@/api/mall/promotion/seckillActivity"; |
| 190 | import { getSeckillTimeList } from "@/api/mall/promotion/seckillTime"; | 190 | import { getSeckillTimeList } from "@/api/mall/promotion/seckillTime"; |
| 191 | import { deepClone } from "@/utils"; | 191 | import { deepClone } from "@/utils"; |
| 192 | 192 | ||
| @@ -223,7 +223,7 @@ export default { | @@ -223,7 +223,7 @@ export default { | ||
| 223 | form: { | 223 | form: { |
| 224 | skuIds: [], // 选中的 SKU | 224 | skuIds: [], // 选中的 SKU |
| 225 | products: [], // 商品信息 | 225 | products: [], // 商品信息 |
| 226 | - timeId: [], //选中的秒杀场次id | 226 | + timeIds: [], //选中的秒杀场次id |
| 227 | }, | 227 | }, |
| 228 | // 商品 SKU 列表 | 228 | // 商品 SKU 列表 |
| 229 | productSkus: [], | 229 | productSkus: [], |
| @@ -233,7 +233,7 @@ export default { | @@ -233,7 +233,7 @@ export default { | ||
| 233 | status: [{ required: true, message: "活动状态不能为空", trigger: "blur" }], | 233 | status: [{ required: true, message: "活动状态不能为空", trigger: "blur" }], |
| 234 | startAndEndTime: [{ required: true, message: "活动时间不能为空", trigger: "blur" }], | 234 | startAndEndTime: [{ required: true, message: "活动时间不能为空", trigger: "blur" }], |
| 235 | sort: [{ required: true, message: "排序不能为空", trigger: "blur" }], | 235 | sort: [{ required: true, message: "排序不能为空", trigger: "blur" }], |
| 236 | - timeId: [{ required: true, message: "秒杀场次不能为空", trigger: "blur" }], | 236 | + timeIds: [{ required: true, message: "秒杀场次不能为空", trigger: "blur" }], |
| 237 | totalPrice: [{ required: true, message: "订单实付金额,单位:分不能为空", trigger: "blur" }], | 237 | totalPrice: [{ required: true, message: "订单实付金额,单位:分不能为空", trigger: "blur" }], |
| 238 | } | 238 | } |
| 239 | }; | 239 | }; |
| @@ -241,12 +241,13 @@ export default { | @@ -241,12 +241,13 @@ export default { | ||
| 241 | created() { | 241 | created() { |
| 242 | this.getList(); | 242 | this.getList(); |
| 243 | }, | 243 | }, |
| 244 | - watch:{ | 244 | + watch: { |
| 245 | $route: 'getList' | 245 | $route: 'getList' |
| 246 | }, | 246 | }, |
| 247 | methods: { | 247 | methods: { |
| 248 | /** 查询列表 */ | 248 | /** 查询列表 */ |
| 249 | getList() { | 249 | getList() { |
| 250 | + // 从秒杀时段跳转过来并鞋带timeId参数进行查询 | ||
| 250 | const timeId = this.$route.params && this.$route.params.timeId; | 251 | const timeId = this.$route.params && this.$route.params.timeId; |
| 251 | if (timeId) { | 252 | if (timeId) { |
| 252 | this.queryParams.timeId = timeId | 253 | this.queryParams.timeId = timeId |
| @@ -254,11 +255,13 @@ export default { | @@ -254,11 +255,13 @@ export default { | ||
| 254 | this.loading = true; | 255 | this.loading = true; |
| 255 | // 执行查询 | 256 | // 执行查询 |
| 256 | getSeckillActivityPage(this.queryParams).then(response => { | 257 | getSeckillActivityPage(this.queryParams).then(response => { |
| 258 | + console.log(response.data.list, "查询出的值"); | ||
| 257 | this.list = response.data.list; | 259 | this.list = response.data.list; |
| 258 | this.total = response.data.total; | 260 | this.total = response.data.total; |
| 259 | this.loading = false; | 261 | this.loading = false; |
| 260 | }); | 262 | }); |
| 261 | if (timeId) { | 263 | if (timeId) { |
| 264 | + //查询完成后设置为空 | ||
| 262 | this.$route.params.timeId = undefined | 265 | this.$route.params.timeId = undefined |
| 263 | } | 266 | } |
| 264 | // 获得 SKU 商品列表 | 267 | // 获得 SKU 商品列表 |
| @@ -285,7 +288,7 @@ export default { | @@ -285,7 +288,7 @@ export default { | ||
| 285 | startTime: undefined, | 288 | startTime: undefined, |
| 286 | endTime: undefined, | 289 | endTime: undefined, |
| 287 | sort: undefined, | 290 | sort: undefined, |
| 288 | - timeId: [], | 291 | + timeIds: [], |
| 289 | totalPrice: undefined, | 292 | totalPrice: undefined, |
| 290 | skuIds: [], | 293 | skuIds: [], |
| 291 | products: [], | 294 | products: [], |
| @@ -317,11 +320,9 @@ export default { | @@ -317,11 +320,9 @@ export default { | ||
| 317 | this.reset(); | 320 | this.reset(); |
| 318 | const id = row.id; | 321 | const id = row.id; |
| 319 | getSeckillActivity(id).then(response => { | 322 | getSeckillActivity(id).then(response => { |
| 320 | - var timeIdList = response.data.timeId.split(',') | ||
| 321 | this.form = response.data; | 323 | this.form = response.data; |
| 322 | // 修改数据 | 324 | // 修改数据 |
| 323 | this.form.startAndEndTime = [response.data.startTime, response.data.endTime]; | 325 | this.form.startAndEndTime = [response.data.startTime, response.data.endTime]; |
| 324 | - this.form.timeId = timeIdList.map(item => parseInt(item)) | ||
| 325 | this.form.skuIds = response.data.products.map(item => item.skuId); | 326 | this.form.skuIds = response.data.products.map(item => item.skuId); |
| 326 | this.form.products.forEach(product => { | 327 | this.form.products.forEach(product => { |
| 327 | // 获得对应的 SKU 信息 | 328 | // 获得对应的 SKU 信息 |
| @@ -334,7 +335,7 @@ export default { | @@ -334,7 +335,7 @@ export default { | ||
| 334 | product.spuName = sku.spuName; | 335 | product.spuName = sku.spuName; |
| 335 | product.price = sku.price; | 336 | product.price = sku.price; |
| 336 | product.productStock = sku.stock; | 337 | product.productStock = sku.stock; |
| 337 | - this.$set(product,'seckillStock',product.stock); | 338 | + this.$set(product, 'seckillStock', product.stock); |
| 338 | product.seckillPrice = product.seckillPrice !== undefined ? product.seckillPrice / 100 : undefined; | 339 | product.seckillPrice = product.seckillPrice !== undefined ? product.seckillPrice / 100 : undefined; |
| 339 | 340 | ||
| 340 | }); | 341 | }); |
| @@ -353,7 +354,6 @@ export default { | @@ -353,7 +354,6 @@ export default { | ||
| 353 | const data = deepClone(this.form); | 354 | const data = deepClone(this.form); |
| 354 | data.startTime = this.form.startAndEndTime[0]; | 355 | data.startTime = this.form.startAndEndTime[0]; |
| 355 | data.endTime = this.form.startAndEndTime[1]; | 356 | data.endTime = this.form.startAndEndTime[1]; |
| 356 | - data.timeId = data.timeId.toString(); | ||
| 357 | data.products.forEach(product => { | 357 | data.products.forEach(product => { |
| 358 | product.stock = product.seckillStock; | 358 | product.stock = product.seckillStock; |
| 359 | product.seckillPrice = product.seckillPrice !== undefined ? product.seckillPrice * 100 : undefined; | 359 | product.seckillPrice = product.seckillPrice !== undefined ? product.seckillPrice * 100 : undefined; |