Forráskód Böngészése

秒杀时段相关

halfninety 2 éve
szülő
commit
cd62c4d220
22 módosított fájl, 1119 hozzáadás és 1 törlés
  1. 2 0
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
  2. 16 0
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/jackson/core/databind/LocalTimeDeserializable.java
  3. 17 0
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/jackson/core/databind/LocalTimeSerializable.java
  4. 1 1
      yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java
  5. 99 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/SeckillTimeController.java
  6. 32 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeBaseVO.java
  7. 14 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeCreateReqVO.java
  8. 37 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeExcelVO.java
  9. 30 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeExportReqVO.java
  10. 40 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimePageReqVO.java
  11. 22 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeRespVO.java
  12. 4 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeSimpleRespVO.java
  13. 21 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeUpdateReqVO.java
  14. 33 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckilltime/SeckillTimeConvert.java
  15. 47 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/seckilltime/SeckillTimeDO.java
  16. 40 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckilltime/SeckillTimeMapper.java
  17. 69 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckilltime/SeckillTimeService.java
  18. 82 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckilltime/SeckillTimeServiceImpl.java
  19. 12 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/seckilltime/SeckillTimeMapper.xml
  20. 196 0
      yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/seckilltime/SeckillTimeServiceImplTest.java
  21. 62 0
      yudao-ui-admin/src/api/promotion/seckillTime.js
  22. 243 0
      yudao-ui-admin/src/views/promotion/seckillTime/index.vue

+ 2 - 0
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java

@@ -25,6 +25,8 @@ public class DateUtils {
 
     public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
 
+    public static final String FORMAT_HOUR_MINUTE_SECOND = "HH:mm:ss";
+
     /**
      * 将 LocalDateTime 转换成 Date
      *

+ 16 - 0
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/jackson/core/databind/LocalTimeDeserializable.java

@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.framework.jackson.core.databind;
+
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
+
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_HOUR_MINUTE_SECOND;
+
+public class LocalTimeDeserializable {
+    // TODO: 2022/11/15 修改名字
+    public static final LocalTimeDeserializer INSTANCE = new LocalTimeDeserializer(DateTimeFormatter
+            .ofPattern(FORMAT_HOUR_MINUTE_SECOND)
+            .withZone(ZoneId.systemDefault()));
+
+}

+ 17 - 0
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/jackson/core/databind/LocalTimeSerializable.java

@@ -0,0 +1,17 @@
+package cn.iocoder.yudao.framework.jackson.core.databind;
+
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
+
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_HOUR_MINUTE_SECOND;
+
+public class LocalTimeSerializable {
+    // TODO: 2022/11/15 修改名称
+
+    public static final LocalTimeSerializer INSTANCE = new LocalTimeSerializer(DateTimeFormatter
+            .ofPattern(FORMAT_HOUR_MINUTE_SECOND)
+            .withZone(ZoneId.systemDefault()));
+
+}

+ 1 - 1
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java

@@ -47,5 +47,5 @@ public interface ErrorCodeConstants {
 
     // ========== 秒杀活动 1003008000 ==========
     ErrorCode SECKILL_ACTIVITY_NOT_EXISTS = new ErrorCode(1003008000, "秒杀活动不存在");
-
+    ErrorCode SECKILL_TIME_NOT_EXISTS = new ErrorCode(1003008001, "秒杀时段不存在");
 }

+ 99 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/SeckillTimeController.java

@@ -0,0 +1,99 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.annotations.*;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo.*;
+import cn.iocoder.yudao.module.promotion.dal.dataobject.seckilltime.SeckillTimeDO;
+import cn.iocoder.yudao.module.promotion.convert.seckilltime.SeckillTimeConvert;
+import cn.iocoder.yudao.module.promotion.service.seckilltime.SeckillTimeService;
+
+@Api(tags = "管理后台 - 秒杀时段")
+@RestController
+@RequestMapping("/promotion/seckill-time")
+@Validated
+public class SeckillTimeController {
+
+    @Resource
+    private SeckillTimeService seckillTimeService;
+
+    @PostMapping("/create")
+    @ApiOperation("创建秒杀时段")
+    @PreAuthorize("@ss.hasPermission('promotion:seckill-time:create')")
+    public CommonResult<Long> createSeckillTime(@Valid @RequestBody SeckillTimeCreateReqVO createReqVO) {
+        return success(seckillTimeService.createSeckillTime(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @ApiOperation("更新秒杀时段")
+    @PreAuthorize("@ss.hasPermission('promotion:seckill-time:update')")
+    public CommonResult<Boolean> updateSeckillTime(@Valid @RequestBody SeckillTimeUpdateReqVO updateReqVO) {
+        seckillTimeService.updateSeckillTime(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation("删除秒杀时段")
+    @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
+    @PreAuthorize("@ss.hasPermission('promotion:seckill-time:delete')")
+    public CommonResult<Boolean> deleteSeckillTime(@RequestParam("id") Long id) {
+        seckillTimeService.deleteSeckillTime(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @ApiOperation("获得秒杀时段")
+    @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
+    @PreAuthorize("@ss.hasPermission('promotion:seckill-time:query')")
+    public CommonResult<SeckillTimeRespVO> getSeckillTime(@RequestParam("id") Long id) {
+        SeckillTimeDO seckillTime = seckillTimeService.getSeckillTime(id);
+        return success(SeckillTimeConvert.INSTANCE.convert(seckillTime));
+    }
+
+    @GetMapping("/list")
+    @ApiOperation("获得所有秒杀时段列表")
+//    @PreAuthorize("@ss.hasPermission('promotion:seckill-time:query')")
+    public CommonResult<List<SeckillTimeRespVO>> getSeckillTimeList() {
+        List<SeckillTimeDO> list = seckillTimeService.getSeckillTimeList();
+        return success(SeckillTimeConvert.INSTANCE.convertList(list));
+    }
+
+//    @GetMapping("/page")
+//    @ApiOperation("获得秒杀时段分页")
+//    @PreAuthorize("@ss.hasPermission('promotion:seckill-time:query')")
+//    public CommonResult<PageResult<SeckillTimeRespVO>> getSeckillTimePage(@Valid SeckillTimePageReqVO pageVO) {
+//        PageResult<SeckillTimeDO> pageResult = seckillTimeService.getSeckillTimePage(pageVO);
+//        return success(SeckillTimeConvert.INSTANCE.convertPage(pageResult));
+//    }
+
+    @GetMapping("/export-excel")
+    @ApiOperation("导出秒杀时段 Excel")
+    @PreAuthorize("@ss.hasPermission('promotion:seckill-time:export')")
+    @OperateLog(type = EXPORT)
+    public void exportSeckillTimeExcel(@Valid SeckillTimeExportReqVO exportReqVO,
+              HttpServletResponse response) throws IOException {
+        List<SeckillTimeDO> list = seckillTimeService.getSeckillTimeList(exportReqVO);
+        // 导出 Excel
+        List<SeckillTimeExcelVO> datas = SeckillTimeConvert.INSTANCE.convertList02(list);
+        ExcelUtils.write(response, "秒杀时段.xls", "数据", SeckillTimeExcelVO.class, datas);
+    }
+
+}

+ 32 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeBaseVO.java

@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
+
+import lombok.*;
+
+import java.time.LocalTime;
+import java.util.*;
+import io.swagger.annotations.*;
+import javax.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+* 秒杀时段 Base VO,提供给添加、修改、详细的子 VO 使用
+* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
+*/
+@Data
+public class SeckillTimeBaseVO {
+
+    @ApiModelProperty(value = "秒杀时段名称", required = true)
+    @NotNull(message = "秒杀时段名称不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "开始时间点", required = true)
+    @NotNull(message = "开始时间点不能为空")
+    private LocalTime startTime;
+
+    @ApiModelProperty(value = "结束时间点", required = true)
+    @NotNull(message = "结束时间点不能为空")
+    private LocalTime endTime;
+
+}

+ 14 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeCreateReqVO.java

@@ -0,0 +1,14 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.annotations.*;
+import javax.validation.constraints.*;
+
+@ApiModel("管理后台 - 秒杀时段创建 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class SeckillTimeCreateReqVO extends SeckillTimeBaseVO {
+
+}

+ 37 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeExcelVO.java

@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
+
+import lombok.*;
+
+import java.time.LocalTime;
+import java.util.*;
+import io.swagger.annotations.*;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+
+/**
+ * 秒杀时段 Excel VO
+ *
+ * @author 芋道源码
+ */
+@Data
+public class SeckillTimeExcelVO {
+
+    @ExcelProperty("编号")
+    private Long id;
+
+    @ExcelProperty("秒杀时段名称")
+    private String name;
+
+    @ExcelProperty("开始时间点")
+    private LocalTime startTime;
+
+    @ExcelProperty("结束时间点")
+    private LocalTime endTime;
+
+    @ExcelProperty("商品数量")
+    private Integer productCount;
+
+    @ExcelProperty("创建时间")
+    private Date createTime;
+
+}

+ 30 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeExportReqVO.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
+
+import lombok.*;
+
+import java.time.LocalTime;
+import java.util.*;
+import io.swagger.annotations.*;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@ApiModel(value = "管理后台 - 秒杀时段 Excel 导出 Request VO", description = "参数和 SeckillTimePageReqVO 是一致的")
+@Data
+public class SeckillTimeExportReqVO {
+
+    @ApiModelProperty(value = "秒杀时段名称")
+    private String name;
+
+    @ApiModelProperty(value = "开始时间点")
+    private LocalTime[] startTime;
+
+    @ApiModelProperty(value = "结束时间点")
+    private LocalTime[] endTime;
+
+    @ApiModelProperty(value = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private Date[] createTime;
+
+}

+ 40 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimePageReqVO.java

@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+
+@ApiModel("管理后台 - 秒杀时段分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class SeckillTimePageReqVO extends PageParam {
+
+    @ApiModelProperty(value = "秒杀时段名称")
+    private String name;
+
+    @ApiModelProperty(value = "开始时间点")
+    @DateTimeFormat(pattern = "HH:mm:ss")
+    private LocalTime startTime;
+
+    @ApiModelProperty(value = "结束时间点")
+    @DateTimeFormat(pattern = "HH:mm:ss")
+    private LocalTime endTime;
+
+
+
+
+
+
+
+//    @ApiModelProperty(value = "创建时间")
+//    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+//    private Date[] createTime;
+
+}

+ 22 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeRespVO.java

@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.annotations.*;
+
+@ApiModel("管理后台 - 秒杀时段 Response VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class SeckillTimeRespVO extends SeckillTimeBaseVO {
+
+    @ApiModelProperty(value = "编号", required = true)
+    private Long id;
+
+    @ApiModelProperty(value = "商品数量", required = true)
+    private Integer productCount;
+
+    @ApiModelProperty(value = "创建时间", required = true)
+    private Date createTime;
+
+}

+ 4 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeSimpleRespVO.java

@@ -0,0 +1,4 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
+
+public class SeckillTimeSimpleRespVO {
+}

+ 21 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckilltime/vo/SeckillTimeUpdateReqVO.java

@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@ApiModel("管理后台 - 秒杀时段更新 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class SeckillTimeUpdateReqVO extends SeckillTimeBaseVO {
+
+    @ApiModelProperty(value = "编号", required = true)
+    @NotNull(message = "编号不能为空")
+    private Long id;
+
+}

+ 33 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckilltime/SeckillTimeConvert.java

@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.promotion.convert.seckilltime;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+import cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo.*;
+import cn.iocoder.yudao.module.promotion.dal.dataobject.seckilltime.SeckillTimeDO;
+
+/**
+ * 秒杀时段 Convert
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface SeckillTimeConvert {
+
+    SeckillTimeConvert INSTANCE = Mappers.getMapper(SeckillTimeConvert.class);
+
+    SeckillTimeDO convert(SeckillTimeCreateReqVO bean);
+
+    SeckillTimeDO convert(SeckillTimeUpdateReqVO bean);
+
+    SeckillTimeRespVO convert(SeckillTimeDO bean);
+
+    List<SeckillTimeRespVO> convertList(List<SeckillTimeDO> list);
+
+    PageResult<SeckillTimeRespVO> convertPage(PageResult<SeckillTimeDO> page);
+
+    List<SeckillTimeExcelVO> convertList02(List<SeckillTimeDO> list);
+}

+ 47 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/seckilltime/SeckillTimeDO.java

@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.promotion.dal.dataobject.seckilltime;
+
+import lombok.*;
+
+import java.time.LocalTime;
+import java.util.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 秒杀时段 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("promotion_seckill_time")
+@KeySequence("promotion_seckill_time_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SeckillTimeDO extends BaseDO {
+
+    /**
+     * 编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 秒杀时段名称
+     */
+    private String name;
+    /**
+     * 开始时间点
+     */
+    private LocalTime startTime;
+    /**
+     * 结束时间点
+     */
+    private LocalTime endTime;
+    /**
+     * 商品数量
+     */
+    private Integer productCount;
+
+}

+ 40 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckilltime/SeckillTimeMapper.java

@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.promotion.dal.mysql.seckilltime;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.promotion.dal.dataobject.seckilltime.SeckillTimeDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo.*;
+
+/**
+ * 秒杀时段 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface SeckillTimeMapper extends BaseMapperX<SeckillTimeDO> {
+
+//    default PageResult<SeckillTimeDO> selectPage(SeckillTimePageReqVO reqVO) {
+//        return selectPage(reqVO, new LambdaQueryWrapperX<SeckillTimeDO>()
+//                .likeIfPresent(SeckillTimeDO::getName, reqVO.getName())
+//                .geIfPresent(SeckillTimeDO::getStartTime, reqVO.getStartTime())
+//                .leIfPresent(SeckillTimeDO::getEndTime, reqVO.getEndTime())
+////                .betweenIfPresent(SeckillTimeDO::getStartTime, reqVO.getStartTime())
+////                .betweenIfPresent(SeckillTimeDO::getEndTime, reqVO.getEndTime())
+////                .betweenIfPresent(SeckillTimeDO::getCreateTime, reqVO.getCreateTime())
+//                .orderByDesc(SeckillTimeDO::getId));
+//    }
+
+    default List<SeckillTimeDO> selectList(SeckillTimeExportReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<SeckillTimeDO>()
+                .likeIfPresent(SeckillTimeDO::getName, reqVO.getName())
+                .betweenIfPresent(SeckillTimeDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(SeckillTimeDO::getEndTime, reqVO.getEndTime())
+                .betweenIfPresent(SeckillTimeDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(SeckillTimeDO::getId));
+    }
+
+}

+ 69 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckilltime/SeckillTimeService.java

@@ -0,0 +1,69 @@
+package cn.iocoder.yudao.module.promotion.service.seckilltime;
+
+import java.util.*;
+import javax.validation.*;
+import cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo.*;
+import cn.iocoder.yudao.module.promotion.dal.dataobject.seckilltime.SeckillTimeDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+
+/**
+ * 秒杀时段 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface SeckillTimeService {
+
+    /**
+     * 创建秒杀时段
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createSeckillTime(@Valid SeckillTimeCreateReqVO createReqVO);
+
+    /**
+     * 更新秒杀时段
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSeckillTime(@Valid SeckillTimeUpdateReqVO updateReqVO);
+
+    /**
+     * 删除秒杀时段
+     *
+     * @param id 编号
+     */
+    void deleteSeckillTime(Long id);
+
+    /**
+     * 获得秒杀时段
+     *
+     * @param id 编号
+     * @return 秒杀时段
+     */
+    SeckillTimeDO getSeckillTime(Long id);
+
+    /**
+     * 获得所有秒杀时段列表
+     *
+     * @return 所有秒杀时段列表
+     */
+    List<SeckillTimeDO> getSeckillTimeList();
+
+//    /**
+//     * 获得秒杀时段分页
+//     *
+//     * @param pageReqVO 分页查询
+//     * @return 秒杀时段分页
+//     */
+//    PageResult<SeckillTimeDO> getSeckillTimePage(SeckillTimePageReqVO pageReqVO);
+
+    /**
+     * 获得秒杀时段列表, 用于 Excel 导出
+     *
+     * @param exportReqVO 查询条件
+     * @return 秒杀时段列表
+     */
+    List<SeckillTimeDO> getSeckillTimeList(SeckillTimeExportReqVO exportReqVO);
+
+}

+ 82 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckilltime/SeckillTimeServiceImpl.java

@@ -0,0 +1,82 @@
+package cn.iocoder.yudao.module.promotion.service.seckilltime;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.*;
+import cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo.*;
+import cn.iocoder.yudao.module.promotion.dal.dataobject.seckilltime.SeckillTimeDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+
+import cn.iocoder.yudao.module.promotion.convert.seckilltime.SeckillTimeConvert;
+import cn.iocoder.yudao.module.promotion.dal.mysql.seckilltime.SeckillTimeMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
+
+/**
+ * 秒杀时段 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class SeckillTimeServiceImpl implements SeckillTimeService {
+
+    @Resource
+    private SeckillTimeMapper seckillTimeMapper;
+
+    @Override
+    public Long createSeckillTime(SeckillTimeCreateReqVO createReqVO) {
+        // 插入
+        SeckillTimeDO seckillTime = SeckillTimeConvert.INSTANCE.convert(createReqVO);
+        seckillTimeMapper.insert(seckillTime);
+        // 返回
+        return seckillTime.getId();
+    }
+
+    @Override
+    public void updateSeckillTime(SeckillTimeUpdateReqVO updateReqVO) {
+        // 校验存在
+        this.validateSeckillTimeExists(updateReqVO.getId());
+        // 更新
+        SeckillTimeDO updateObj = SeckillTimeConvert.INSTANCE.convert(updateReqVO);
+        seckillTimeMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteSeckillTime(Long id) {
+        // 校验存在
+        this.validateSeckillTimeExists(id);
+        // 删除
+        seckillTimeMapper.deleteById(id);
+    }
+
+    private void validateSeckillTimeExists(Long id) {
+        if (seckillTimeMapper.selectById(id) == null) {
+            throw exception(SECKILL_TIME_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public SeckillTimeDO getSeckillTime(Long id) {
+        return seckillTimeMapper.selectById(id);
+    }
+
+    @Override
+    public List<SeckillTimeDO> getSeckillTimeList() {
+        return seckillTimeMapper.selectList();
+    }
+
+//    @Override
+//    public PageResult<SeckillTimeDO> getSeckillTimePage(SeckillTimePageReqVO pageReqVO) {
+//        return seckillTimeMapper.selectPage(pageReqVO);
+//    }
+
+    @Override
+    public List<SeckillTimeDO> getSeckillTimeList(SeckillTimeExportReqVO exportReqVO) {
+        return seckillTimeMapper.selectList(exportReqVO);
+    }
+
+}

+ 12 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/seckilltime/SeckillTimeMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.promotion.dal.mysql.seckilltime.SeckillTimeMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 196 - 0
yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/seckilltime/SeckillTimeServiceImplTest.java

@@ -0,0 +1,196 @@
+package cn.iocoder.yudao.module.promotion.service.seckilltime;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+import javax.annotation.Resource;
+
+import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
+
+import cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo.*;
+import cn.iocoder.yudao.module.promotion.dal.dataobject.seckilltime.SeckillTimeDO;
+import cn.iocoder.yudao.module.promotion.dal.mysql.seckilltime.SeckillTimeMapper;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+
+import javax.annotation.Resource;
+import org.springframework.context.annotation.Import;
+
+import java.time.LocalTime;
+import java.util.*;
+
+import static cn.hutool.core.util.RandomUtil.*;
+import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
+import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
+import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+/**
+* {@link SeckillTimeServiceImpl} 的单元测试类
+*
+* @author 芋道源码
+*/
+@Import(SeckillTimeServiceImpl.class)
+public class SeckillTimeServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private SeckillTimeServiceImpl seckillTimeService;
+
+    @Resource
+    private SeckillTimeMapper seckillTimeMapper;
+
+    @Resource
+    private ObjectMapper objectMapper;
+
+    @Test
+    public void testJacksonSerializ(){
+
+        // 准备参数
+        SeckillTimeCreateReqVO reqVO = randomPojo(SeckillTimeCreateReqVO.class);
+//        ObjectMapper objectMapper = new ObjectMapper();
+        try {
+            String string = objectMapper.writeValueAsString(reqVO);
+            System.out.println(string);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+
+
+    }
+
+    @Test
+    public void testCreateSeckillTime_success() {
+        // 准备参数
+        SeckillTimeCreateReqVO reqVO = randomPojo(SeckillTimeCreateReqVO.class);
+
+        // 调用
+        Long seckillTimeId = seckillTimeService.createSeckillTime(reqVO);
+        // 断言
+        assertNotNull(seckillTimeId);
+        // 校验记录的属性是否正确
+        SeckillTimeDO seckillTime = seckillTimeMapper.selectById(seckillTimeId);
+        assertPojoEquals(reqVO, seckillTime);
+    }
+
+    @Test
+    public void testUpdateSeckillTime_success() {
+        // mock 数据
+        SeckillTimeDO dbSeckillTime = randomPojo(SeckillTimeDO.class);
+        seckillTimeMapper.insert(dbSeckillTime);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        SeckillTimeUpdateReqVO reqVO = randomPojo(SeckillTimeUpdateReqVO.class, o -> {
+            o.setId(dbSeckillTime.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        seckillTimeService.updateSeckillTime(reqVO);
+        // 校验是否更新正确
+        SeckillTimeDO seckillTime = seckillTimeMapper.selectById(reqVO.getId()); // 获取最新的
+        assertPojoEquals(reqVO, seckillTime);
+    }
+
+    @Test
+    public void testUpdateSeckillTime_notExists() {
+        // 准备参数
+        SeckillTimeUpdateReqVO reqVO = randomPojo(SeckillTimeUpdateReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> seckillTimeService.updateSeckillTime(reqVO), SECKILL_TIME_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteSeckillTime_success() {
+        // mock 数据
+        SeckillTimeDO dbSeckillTime = randomPojo(SeckillTimeDO.class);
+        seckillTimeMapper.insert(dbSeckillTime);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbSeckillTime.getId();
+
+        // 调用
+        seckillTimeService.deleteSeckillTime(id);
+       // 校验数据不存在了
+       assertNull(seckillTimeMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteSeckillTime_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> seckillTimeService.deleteSeckillTime(id), SECKILL_TIME_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetSeckillTimePage() {
+       // mock 数据
+//       SeckillTimeDO dbSeckillTime = randomPojo(SeckillTimeDO.class, o -> { // 等会查询到
+//           o.setName(null);
+//           o.setStartTime(null);
+//           o.setEndTime(null);
+//           o.setCreateTime(null);
+//       });
+//       seckillTimeMapper.insert(dbSeckillTime);
+//       // 测试 name 不匹配
+//       seckillTimeMapper.insert(cloneIgnoreId(dbSeckillTime, o -> o.setName(null)));
+//       // 测试 startTime 不匹配
+//       seckillTimeMapper.insert(cloneIgnoreId(dbSeckillTime, o -> o.setStartTime(null)));
+//       // 测试 endTime 不匹配
+//       seckillTimeMapper.insert(cloneIgnoreId(dbSeckillTime, o -> o.setEndTime(null)));
+//       // 测试 createTime 不匹配
+//       seckillTimeMapper.insert(cloneIgnoreId(dbSeckillTime, o -> o.setCreateTime(null)));
+//       // 准备参数
+//       SeckillTimePageReqVO reqVO = new SeckillTimePageReqVO();
+//       reqVO.setName(null);
+////       reqVO.setStartTime((new LocalTime()));
+////       reqVO.setEndTime((new LocalTime[]{}));
+////       reqVO.setCreateTime((new Date[]{}));
+//
+//       // 调用
+//       PageResult<SeckillTimeDO> pageResult = seckillTimeService.getSeckillTimePage(reqVO);
+//       // 断言
+//       assertEquals(1, pageResult.getTotal());
+//       assertEquals(1, pageResult.getList().size());
+//       assertPojoEquals(dbSeckillTime, pageResult.getList().get(0));
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetSeckillTimeList() {
+       // mock 数据
+       SeckillTimeDO dbSeckillTime = randomPojo(SeckillTimeDO.class, o -> { // 等会查询到
+           o.setName(null);
+           o.setStartTime(null);
+           o.setEndTime(null);
+           o.setCreateTime(null);
+       });
+       seckillTimeMapper.insert(dbSeckillTime);
+       // 测试 name 不匹配
+       seckillTimeMapper.insert(cloneIgnoreId(dbSeckillTime, o -> o.setName(null)));
+       // 测试 startTime 不匹配
+       seckillTimeMapper.insert(cloneIgnoreId(dbSeckillTime, o -> o.setStartTime(null)));
+       // 测试 endTime 不匹配
+       seckillTimeMapper.insert(cloneIgnoreId(dbSeckillTime, o -> o.setEndTime(null)));
+       // 测试 createTime 不匹配
+       seckillTimeMapper.insert(cloneIgnoreId(dbSeckillTime, o -> o.setCreateTime(null)));
+       // 准备参数
+       SeckillTimeExportReqVO reqVO = new SeckillTimeExportReqVO();
+       reqVO.setName(null);
+       reqVO.setStartTime((new LocalTime[]{}));
+       reqVO.setEndTime((new LocalTime[]{}));
+       reqVO.setCreateTime((new Date[]{}));
+
+       // 调用
+       List<SeckillTimeDO> list = seckillTimeService.getSeckillTimeList(reqVO);
+       // 断言
+       assertEquals(1, list.size());
+       assertPojoEquals(dbSeckillTime, list.get(0));
+    }
+
+}

+ 62 - 0
yudao-ui-admin/src/api/promotion/seckillTime.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 创建秒杀时段
+export function createSeckillTime(data) {
+  return request({
+    url: '/promotion/seckill-time/create',
+    method: 'post',
+    data: data
+  })
+}
+
+// 更新秒杀时段
+export function updateSeckillTime(data) {
+  return request({
+    url: '/promotion/seckill-time/update',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除秒杀时段
+export function deleteSeckillTime(id) {
+  return request({
+    url: '/promotion/seckill-time/delete?id=' + id,
+    method: 'delete'
+  })
+}
+
+// 获得秒杀时段
+export function getSeckillTime(id) {
+  return request({
+    url: '/promotion/seckill-time/get?id=' + id,
+    method: 'get'
+  })
+}
+
+// 获得秒杀时段分页
+export function getSeckillTimePage(query) {
+  return request({
+    url: '/promotion/seckill-time/page',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取所有的秒杀时段
+export function getSeckillTimeList() {
+  return request({
+    url: '/promotion/seckill-time/list',
+    method: 'get'
+  })
+}
+
+// 导出秒杀时段 Excel
+export function exportSeckillTimeExcel(query) {
+  return request({
+    url: '/promotion/seckill-time/export-excel',
+    method: 'get',
+    params: query,
+    responseType: 'blob'
+  })
+}

+ 243 - 0
yudao-ui-admin/src/views/promotion/seckillTime/index.vue

@@ -0,0 +1,243 @@
+<template>
+  <div class="app-container">
+
+    <!-- 搜索工作栏 -->
+    <!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
+      <el-form-item label="秒杀时段名称" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入秒杀时段名称" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+
+      <el-form-item label="开始时间点" prop="startTime">
+        <el-time-picker v-model="queryParams.startTime" placeholder="选择开始时间" value-format="HH:mm:ss" />
+      </el-form-item>
+
+      <el-form-item label="结束时间点" prop="endTime">
+        <el-time-picker v-model="queryParams.endTime" placeholder="选择结束时间" value-format="HH:mm:ss" />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form> -->
+
+    <!-- 操作工具栏 -->
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['promotion:seckill-time:create']">新增</el-button>
+      </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          :loading="exportLoading" v-hasPermi="['promotion:seckill-time:export']">导出</el-button>
+      </el-col> -->
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <!-- 列表 -->
+    <el-table v-loading="loading" :data="list">
+      <el-table-column label="秒杀时段名称" align="center" prop="name" />
+      <el-table-column label="开始时间点" align="center" prop="startTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ scope.row.startTime }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结束时间点" align="center" prop="endTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ scope.row.endTime }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="商品数量" align="center" prop="productCount" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['promotion:seckill-time:update']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['promotion:seckill-time:delete']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页组件 -->
+    <!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
+      @pagination="getList" /> -->
+
+    <!-- 对话框(添加 / 修改) -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" v-dialogDrag append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="140px">
+        <el-form-item label="秒杀场次名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入秒杀时段名称" clearable />
+        </el-form-item>
+        <el-form-item label="秒杀时间段" prop="startAndEndTime">
+          <el-time-picker is-range v-model="form.startAndEndTime" range-separator="至" start-placeholder="开始时间"
+            end-placeholder="结束时间" placeholder="选择时间范围" value-format="HH:mm:ss">
+          </el-time-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { createSeckillTime, updateSeckillTime, deleteSeckillTime, getSeckillTime, getSeckillTimePage, exportSeckillTimeExcel, getSeckillTimeList } from "@/api/promotion/seckillTime";
+import { deepClone } from "@/utils";
+
+export default {
+  name: "SeckillTime",
+  components: {
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      // total: 0,
+      // 秒杀时段列表
+      list: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      // queryParams: {
+      //   pageNo: 1,
+      //   pageSize: 10,
+      //   name: null,
+      //   startTime: null,
+      //   endTime: null,
+      // },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [{ required: true, message: "秒杀时段名称不能为空", trigger: "blur" }],
+        startAndEndTime: [{ required: true, message: "秒杀时间段不能为空", trigger: "blur" }],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询列表 */
+    getList() {
+      this.loading = true;
+      // 执行查询
+      getSeckillTimeList().then(response => {
+        console.log(response, "返回的数据")
+        this.list = response.data;
+        // this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+    /** 取消按钮 */
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 表单重置 */
+    reset() {
+      this.form = {
+        id: undefined,
+        name: undefined,
+        startAndEndTime: undefined,
+        startTime: undefined,
+        endTime: undefined,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      // this.queryParams.pageNo = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      console.log(this.form, "点击新增时的form");
+      this.open = true;
+      this.title = "添加秒杀时段";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id;
+      getSeckillTime(id).then(response => {
+        response.data.startAndEndTime = [response.data.startTime, response.data.endTime]
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改秒杀时段";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        console.log(valid, "是否通过");
+        if (!valid) {
+          return;
+        }
+        // 处理数据
+        const data = deepClone(this.form);
+        data.startTime = this.form.startAndEndTime[0];
+        data.endTime = this.form.startAndEndTime[1];
+        // 修改的提交
+        if (this.form.id != null) {
+          updateSeckillTime(data).then(response => {
+            this.$modal.msgSuccess("修改成功");
+            this.open = false;
+            this.getList();
+          });
+          return;
+        }
+        // 添加的提交
+        createSeckillTime(data).then(response => {
+          this.$modal.msgSuccess("新增成功");
+          this.open = false;
+          this.getList();
+        });
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const id = row.id;
+      this.$modal.confirm('是否确认删除秒杀时段编号为"' + id + '"的数据项?').then(function () {
+        return deleteSeckillTime(id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => { });
+    },
+    /** 导出按钮操作 */
+    // handleExport() {
+    //   // 处理查询参数
+    //   let params = { ...this.queryParams };
+    //   params.pageNo = undefined;
+    //   params.pageSize = undefined;
+    //   this.$modal.confirm('是否确认导出所有秒杀时段数据项?').then(() => {
+    //     this.exportLoading = true;
+    //     return exportSeckillTimeExcel(params);
+    //   }).then(response => {
+    //     this.$download.excel(response, '秒杀时段.xls');
+    //     this.exportLoading = false;
+    //   }).catch(() => { });
+    // }
+  }
+};
+</script>