mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-12-02 04:01:52 +08:00
秒杀时段相关
This commit is contained in:
parent
ea2a57f0a0
commit
cd62c4d220
@ -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_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
|
* 将 LocalDateTime 转换成 Date
|
||||||
*
|
*
|
||||||
|
@ -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()));
|
||||||
|
|
||||||
|
}
|
@ -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()));
|
||||||
|
|
||||||
|
}
|
@ -47,5 +47,5 @@ public interface ErrorCodeConstants {
|
|||||||
|
|
||||||
// ========== 秒杀活动 1003008000 ==========
|
// ========== 秒杀活动 1003008000 ==========
|
||||||
ErrorCode SECKILL_ACTIVITY_NOT_EXISTS = new ErrorCode(1003008000, "秒杀活动不存在");
|
ErrorCode SECKILL_ACTIVITY_NOT_EXISTS = new ErrorCode(1003008000, "秒杀活动不存在");
|
||||||
|
ErrorCode SECKILL_TIME_NOT_EXISTS = new ErrorCode(1003008001, "秒杀时段不存在");
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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 {
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package cn.iocoder.yudao.module.promotion.controller.admin.seckilltime.vo;
|
||||||
|
|
||||||
|
public class SeckillTimeSimpleRespVO {
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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>
|
@ -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
yudao-ui-admin/src/api/promotion/seckillTime.js
Normal file
62
yudao-ui-admin/src/api/promotion/seckillTime.js
Normal file
@ -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
yudao-ui-admin/src/views/promotion/seckillTime/index.vue
Normal file
243
yudao-ui-admin/src/views/promotion/seckillTime/index.vue
Normal file
@ -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>
|
Loading…
Reference in New Issue
Block a user