Commit 14a1d70cbbd4e99366b3abaccfa02ef834abf282
1 parent
8d08d593
【促销活动】-代码生成
Showing
21 changed files
with
948 additions
and
0 deletions
sql/mall.sql
| ... | ... | @@ -85,3 +85,28 @@ INSERT INTO `system_menu`(`name`, `permission`, `menu_type`, `sort`, `parent_id` |
| 85 | 85 | INSERT INTO `system_menu`(`name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`) VALUES ('品牌更新', 'product:brand:update', 3, 3, @parentId, '', '', '', 0); |
| 86 | 86 | INSERT INTO `system_menu`(`name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`) VALUES ('品牌删除', 'product:brand:delete', 3, 4, @parentId, '', '', '', 0); |
| 87 | 87 | INSERT INTO `system_menu`(`name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`) VALUES ('品牌导出', 'product:brand:export', 3, 5, @parentId, '', '', '', 0); |
| 88 | + | |
| 89 | + | |
| 90 | +-- ---------------------------- | |
| 91 | +-- Table structure for market_activity | |
| 92 | +-- ---------------------------- | |
| 93 | +DROP TABLE IF EXISTS `market_activity`; | |
| 94 | +CREATE TABLE `market_activity` ( | |
| 95 | + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '活动编号', | |
| 96 | + `title` varchar(50) NOT NULL DEFAULT '' COMMENT '活动标题', | |
| 97 | + `activity_type` tinyint(4) NOT NULL COMMENT '活动类型', | |
| 98 | + `status` tinyint(4) NOT NULL DEFAULT '-1' COMMENT '活动状态', | |
| 99 | + `start_time` datetime NOT NULL COMMENT '开始时间', | |
| 100 | + `end_time` datetime NOT NULL COMMENT '结束时间', | |
| 101 | + `invalid_time` datetime DEFAULT NULL COMMENT '失效时间', | |
| 102 | + `delete_time` datetime DEFAULT NULL COMMENT '删除时间', | |
| 103 | + `time_limited_discount` varchar(2000) DEFAULT NULL COMMENT '限制折扣字符串,使用 JSON 序列化成字符串存储', | |
| 104 | + `full_privilege` varchar(2000) DEFAULT NULL COMMENT '限制折扣字符串,使用 JSON 序列化成字符串存储', | |
| 105 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', | |
| 106 | + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | |
| 107 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', | |
| 108 | + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | |
| 109 | + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', | |
| 110 | + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', | |
| 111 | + PRIMARY KEY (`id`) USING BTREE | |
| 112 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='促销活动'; | |
| 88 | 113 | \ No newline at end of file | ... | ... |
yudao-module-mall/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/api/package-info.java
0 → 100644
yudao-module-mall/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/enums/ErrorCodeConstants.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.enums; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.exception.ErrorCode; | |
| 4 | + | |
| 5 | +/** | |
| 6 | + * market 错误码枚举类 | |
| 7 | + * <p> | |
| 8 | + * market 系统,使用 1-003-000-000 段 | |
| 9 | + */ | |
| 10 | +public interface ErrorCodeConstants { | |
| 11 | + | |
| 12 | + | |
| 13 | + // ========== 促销活动相关 1003001000============ | |
| 14 | + ErrorCode ACTIVITY_NOT_EXISTS = new ErrorCode(1003001000, "促销活动不存在"); | |
| 15 | +} | ... | ... |
yudao-module-mall/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/enums/activity/MarketActivityStatusEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.enums.activity; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.core.IntArrayValuable; | |
| 4 | + | |
| 5 | +import java.util.Arrays; | |
| 6 | + | |
| 7 | +/** | |
| 8 | + * 促销活动状态枚举 | |
| 9 | + */ | |
| 10 | +public enum MarketActivityStatusEnum implements IntArrayValuable { | |
| 11 | + | |
| 12 | + WAIT(10, "未开始"), | |
| 13 | + RUN(20, "进行中"), | |
| 14 | + END(30, "已结束"), | |
| 15 | + /** | |
| 16 | + * 1. WAIT、RUN、END 可以转换成 INVALID 状态。 | |
| 17 | + * 2. INVALID 只可以转换成 DELETED 状态。 | |
| 18 | + */ | |
| 19 | + INVALID(40, "已撤销"), | |
| 20 | + DELETED(50, "已删除"), | |
| 21 | + ; | |
| 22 | + | |
| 23 | + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(MarketActivityStatusEnum::getValue).toArray(); | |
| 24 | + | |
| 25 | + /** | |
| 26 | + * 状态值 | |
| 27 | + */ | |
| 28 | + private final Integer value; | |
| 29 | + /** | |
| 30 | + * 状态名 | |
| 31 | + */ | |
| 32 | + private final String name; | |
| 33 | + | |
| 34 | + MarketActivityStatusEnum(Integer value, String name) { | |
| 35 | + this.value = value; | |
| 36 | + this.name = name; | |
| 37 | + } | |
| 38 | + | |
| 39 | + public Integer getValue() { | |
| 40 | + return value; | |
| 41 | + } | |
| 42 | + | |
| 43 | + public String getName() { | |
| 44 | + return name; | |
| 45 | + } | |
| 46 | + | |
| 47 | + @Override | |
| 48 | + public int[] array() { | |
| 49 | + return ARRAYS; | |
| 50 | + } | |
| 51 | +} | ... | ... |
yudao-module-mall/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/enums/activity/MarketActivityTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.enums.activity; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.core.IntArrayValuable; | |
| 4 | + | |
| 5 | +import java.util.Arrays; | |
| 6 | + | |
| 7 | +/** | |
| 8 | + * 促销活动类型枚举 | |
| 9 | + */ | |
| 10 | +public enum MarketActivityTypeEnum implements IntArrayValuable { | |
| 11 | + | |
| 12 | + TIME_LIMITED_DISCOUNT(1, "限时折扣"), | |
| 13 | + FULL_PRIVILEGE(2, "满减送"), | |
| 14 | + ; | |
| 15 | + | |
| 16 | + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(MarketActivityTypeEnum::getValue).toArray(); | |
| 17 | + | |
| 18 | + /** | |
| 19 | + * 类型值 | |
| 20 | + */ | |
| 21 | + private final Integer value; | |
| 22 | + /** | |
| 23 | + * 类型名 | |
| 24 | + */ | |
| 25 | + private final String name; | |
| 26 | + | |
| 27 | + MarketActivityTypeEnum(Integer value, String name) { | |
| 28 | + this.value = value; | |
| 29 | + this.name = name; | |
| 30 | + } | |
| 31 | + | |
| 32 | + public Integer getValue() { | |
| 33 | + return value; | |
| 34 | + } | |
| 35 | + | |
| 36 | + public String getName() { | |
| 37 | + return name; | |
| 38 | + } | |
| 39 | + | |
| 40 | + @Override | |
| 41 | + public int[] array() { | |
| 42 | + return ARRAYS; | |
| 43 | + } | |
| 44 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/activity/ActivityController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.controller.admin.activity; | |
| 2 | + | |
| 3 | +import org.springframework.web.bind.annotation.*; | |
| 4 | +import javax.annotation.Resource; | |
| 5 | +import org.springframework.validation.annotation.Validated; | |
| 6 | +import org.springframework.security.access.prepost.PreAuthorize; | |
| 7 | +import io.swagger.annotations.*; | |
| 8 | +import javax.validation.*; | |
| 9 | +import java.util.*; | |
| 10 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 11 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 12 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 13 | +import cn.iocoder.yudao.module.market.controller.admin.activity.vo.*; | |
| 14 | +import cn.iocoder.yudao.module.market.dal.dataobject.activity.ActivityDO; | |
| 15 | +import cn.iocoder.yudao.module.market.convert.activity.ActivityConvert; | |
| 16 | +import cn.iocoder.yudao.module.market.service.activity.ActivityService; | |
| 17 | + | |
| 18 | +@Api(tags = "管理后台 - 促销活动") | |
| 19 | +@RestController | |
| 20 | +@RequestMapping("/market/activity") | |
| 21 | +@Validated | |
| 22 | +public class ActivityController { | |
| 23 | + | |
| 24 | + @Resource | |
| 25 | + private ActivityService activityService; | |
| 26 | + | |
| 27 | + @PostMapping("/create") | |
| 28 | + @ApiOperation("创建促销活动") | |
| 29 | + @PreAuthorize("@ss.hasPermission('market:activity:create')") | |
| 30 | + public CommonResult<Long> createActivity(@Valid @RequestBody ActivityCreateReqVO createReqVO) { | |
| 31 | + return success(activityService.createActivity(createReqVO)); | |
| 32 | + } | |
| 33 | + | |
| 34 | + @PutMapping("/update") | |
| 35 | + @ApiOperation("更新促销活动") | |
| 36 | + @PreAuthorize("@ss.hasPermission('market:activity:update')") | |
| 37 | + public CommonResult<Boolean> updateActivity(@Valid @RequestBody ActivityUpdateReqVO updateReqVO) { | |
| 38 | + activityService.updateActivity(updateReqVO); | |
| 39 | + return success(true); | |
| 40 | + } | |
| 41 | + | |
| 42 | + @DeleteMapping("/delete") | |
| 43 | + @ApiOperation("删除促销活动") | |
| 44 | + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) | |
| 45 | + @PreAuthorize("@ss.hasPermission('market:activity:delete')") | |
| 46 | + public CommonResult<Boolean> deleteActivity(@RequestParam("id") Long id) { | |
| 47 | + activityService.deleteActivity(id); | |
| 48 | + return success(true); | |
| 49 | + } | |
| 50 | + | |
| 51 | + @GetMapping("/get") | |
| 52 | + @ApiOperation("获得促销活动") | |
| 53 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | |
| 54 | + @PreAuthorize("@ss.hasPermission('market:activity:query')") | |
| 55 | + public CommonResult<ActivityRespVO> getActivity(@RequestParam("id") Long id) { | |
| 56 | + ActivityDO activity = activityService.getActivity(id); | |
| 57 | + return success(ActivityConvert.INSTANCE.convert(activity)); | |
| 58 | + } | |
| 59 | + | |
| 60 | + @GetMapping("/list") | |
| 61 | + @ApiOperation("获得促销活动列表") | |
| 62 | + @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | |
| 63 | + @PreAuthorize("@ss.hasPermission('market:activity:query')") | |
| 64 | + public CommonResult<List<ActivityRespVO>> getActivityList(@RequestParam("ids") Collection<Long> ids) { | |
| 65 | + List<ActivityDO> list = activityService.getActivityList(ids); | |
| 66 | + return success(ActivityConvert.INSTANCE.convertList(list)); | |
| 67 | + } | |
| 68 | + | |
| 69 | + @GetMapping("/page") | |
| 70 | + @ApiOperation("获得促销活动分页") | |
| 71 | + @PreAuthorize("@ss.hasPermission('market:activity:query')") | |
| 72 | + public CommonResult<PageResult<ActivityRespVO>> getActivityPage(@Valid ActivityPageReqVO pageVO) { | |
| 73 | + PageResult<ActivityDO> pageResult = activityService.getActivityPage(pageVO); | |
| 74 | + return success(ActivityConvert.INSTANCE.convertPage(pageResult)); | |
| 75 | + } | |
| 76 | + | |
| 77 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/activity/vo/ActivityBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.controller.admin.activity.vo; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | |
| 4 | +import cn.iocoder.yudao.module.market.enums.activity.MarketActivityStatusEnum; | |
| 5 | +import cn.iocoder.yudao.module.market.enums.activity.MarketActivityTypeEnum; | |
| 6 | +import lombok.*; | |
| 7 | +import java.util.*; | |
| 8 | +import io.swagger.annotations.*; | |
| 9 | +import javax.validation.constraints.*; | |
| 10 | +import org.springframework.format.annotation.DateTimeFormat; | |
| 11 | + | |
| 12 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | |
| 13 | + | |
| 14 | +/** | |
| 15 | +* 促销活动 Base VO,提供给添加、修改、详细的子 VO 使用 | |
| 16 | +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | |
| 17 | +*/ | |
| 18 | +@Data | |
| 19 | +public class ActivityBaseVO { | |
| 20 | + | |
| 21 | + @ApiModelProperty(value = "活动标题", required = true) | |
| 22 | + @NotNull(message = "活动标题不能为空") | |
| 23 | + private String title; | |
| 24 | + | |
| 25 | + @ApiModelProperty(value = "活动类型", required = true) | |
| 26 | + @NotNull(message = "活动类型不能为空") | |
| 27 | + @InEnum(MarketActivityTypeEnum.class) | |
| 28 | + private Integer activityType; | |
| 29 | + | |
| 30 | + @ApiModelProperty(value = "活动状态", required = true) | |
| 31 | + @NotNull(message = "活动状态不能为空") | |
| 32 | + @InEnum(MarketActivityStatusEnum.class) | |
| 33 | + private Integer status; | |
| 34 | + | |
| 35 | + @ApiModelProperty(value = "开始时间", required = true) | |
| 36 | + @NotNull(message = "开始时间不能为空") | |
| 37 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 38 | + private Date startTime; | |
| 39 | + | |
| 40 | + @ApiModelProperty(value = "结束时间", required = true) | |
| 41 | + @NotNull(message = "结束时间不能为空") | |
| 42 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 43 | + private Date endTime; | |
| 44 | + | |
| 45 | + @ApiModelProperty(value = "失效时间") | |
| 46 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 47 | + private Date invalidTime; | |
| 48 | + | |
| 49 | + @ApiModelProperty(value = "删除时间") | |
| 50 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 51 | + private Date deleteTime; | |
| 52 | + | |
| 53 | + @ApiModelProperty(value = "限制折扣字符串,使用 JSON 序列化成字符串存储") | |
| 54 | + private String timeLimitedDiscount; | |
| 55 | + | |
| 56 | + @ApiModelProperty(value = "限制折扣字符串,使用 JSON 序列化成字符串存储") | |
| 57 | + private String fullPrivilege; | |
| 58 | + | |
| 59 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/activity/vo/ActivityCreateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.controller.admin.activity.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.annotations.*; | |
| 6 | +import javax.validation.constraints.*; | |
| 7 | + | |
| 8 | +@ApiModel("管理后台 - 促销活动创建 Request VO") | |
| 9 | +@Data | |
| 10 | +@EqualsAndHashCode(callSuper = true) | |
| 11 | +@ToString(callSuper = true) | |
| 12 | +public class ActivityCreateReqVO extends ActivityBaseVO { | |
| 13 | + | |
| 14 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/activity/vo/ActivityPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.controller.admin.activity.vo; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | |
| 4 | +import cn.iocoder.yudao.module.market.enums.activity.MarketActivityStatusEnum; | |
| 5 | +import cn.iocoder.yudao.module.market.enums.activity.MarketActivityTypeEnum; | |
| 6 | +import lombok.*; | |
| 7 | +import java.util.*; | |
| 8 | +import io.swagger.annotations.*; | |
| 9 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 10 | +import org.springframework.format.annotation.DateTimeFormat; | |
| 11 | + | |
| 12 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | |
| 13 | + | |
| 14 | +@ApiModel("管理后台 - 促销活动分页 Request VO") | |
| 15 | +@Data | |
| 16 | +@EqualsAndHashCode(callSuper = true) | |
| 17 | +@ToString(callSuper = true) | |
| 18 | +public class ActivityPageReqVO extends PageParam { | |
| 19 | + | |
| 20 | + @ApiModelProperty(value = "活动标题") | |
| 21 | + private String title; | |
| 22 | + | |
| 23 | + @ApiModelProperty(value = "活动类型") | |
| 24 | + @InEnum(MarketActivityTypeEnum.class) | |
| 25 | + private Integer activityType; | |
| 26 | + | |
| 27 | + @ApiModelProperty(value = "活动状态") | |
| 28 | + @InEnum(MarketActivityStatusEnum.class) | |
| 29 | + private Integer status; | |
| 30 | + | |
| 31 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 32 | + @ApiModelProperty(value = "开始开始时间") | |
| 33 | + private Date beginStartTime; | |
| 34 | + | |
| 35 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 36 | + @ApiModelProperty(value = "结束开始时间") | |
| 37 | + private Date endStartTime; | |
| 38 | + | |
| 39 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 40 | + @ApiModelProperty(value = "开始结束时间") | |
| 41 | + private Date beginEndTime; | |
| 42 | + | |
| 43 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 44 | + @ApiModelProperty(value = "结束结束时间") | |
| 45 | + private Date endEndTime; | |
| 46 | + | |
| 47 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 48 | + @ApiModelProperty(value = "开始失效时间") | |
| 49 | + private Date beginInvalidTime; | |
| 50 | + | |
| 51 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 52 | + @ApiModelProperty(value = "结束失效时间") | |
| 53 | + private Date endInvalidTime; | |
| 54 | + | |
| 55 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 56 | + @ApiModelProperty(value = "开始删除时间") | |
| 57 | + private Date beginDeleteTime; | |
| 58 | + | |
| 59 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 60 | + @ApiModelProperty(value = "结束删除时间") | |
| 61 | + private Date endDeleteTime; | |
| 62 | + | |
| 63 | + @ApiModelProperty(value = "限制折扣字符串,使用 JSON 序列化成字符串存储") | |
| 64 | + private String timeLimitedDiscount; | |
| 65 | + | |
| 66 | + @ApiModelProperty(value = "限制折扣字符串,使用 JSON 序列化成字符串存储") | |
| 67 | + private String fullPrivilege; | |
| 68 | + | |
| 69 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 70 | + @ApiModelProperty(value = "开始创建时间") | |
| 71 | + private Date beginCreateTime; | |
| 72 | + | |
| 73 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 74 | + @ApiModelProperty(value = "结束创建时间") | |
| 75 | + private Date endCreateTime; | |
| 76 | + | |
| 77 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/activity/vo/ActivityRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.controller.admin.activity.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.annotations.*; | |
| 6 | + | |
| 7 | +@ApiModel("管理后台 - 促销活动 Response VO") | |
| 8 | +@Data | |
| 9 | +@EqualsAndHashCode(callSuper = true) | |
| 10 | +@ToString(callSuper = true) | |
| 11 | +public class ActivityRespVO extends ActivityBaseVO { | |
| 12 | + | |
| 13 | + @ApiModelProperty(value = "活动编号", required = true) | |
| 14 | + private Long id; | |
| 15 | + | |
| 16 | + @ApiModelProperty(value = "创建时间", required = true) | |
| 17 | + private Date createTime; | |
| 18 | + | |
| 19 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/activity/vo/ActivityUpdateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.controller.admin.activity.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.annotations.*; | |
| 6 | +import javax.validation.constraints.*; | |
| 7 | + | |
| 8 | +@ApiModel("管理后台 - 促销活动更新 Request VO") | |
| 9 | +@Data | |
| 10 | +@EqualsAndHashCode(callSuper = true) | |
| 11 | +@ToString(callSuper = true) | |
| 12 | +public class ActivityUpdateReqVO extends ActivityBaseVO { | |
| 13 | + | |
| 14 | + @ApiModelProperty(value = "活动编号", required = true) | |
| 15 | + @NotNull(message = "活动编号不能为空") | |
| 16 | + private Long id; | |
| 17 | + | |
| 18 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/convert/activity/ActivityConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.convert.activity; | |
| 2 | + | |
| 3 | +import java.util.*; | |
| 4 | + | |
| 5 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 6 | + | |
| 7 | +import org.mapstruct.Mapper; | |
| 8 | +import org.mapstruct.factory.Mappers; | |
| 9 | +import cn.iocoder.yudao.module.market.controller.admin.activity.vo.*; | |
| 10 | +import cn.iocoder.yudao.module.market.dal.dataobject.activity.ActivityDO; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * 促销活动 Convert | |
| 14 | + * | |
| 15 | + * @author 芋道源码 | |
| 16 | + */ | |
| 17 | +@Mapper | |
| 18 | +public interface ActivityConvert { | |
| 19 | + | |
| 20 | + ActivityConvert INSTANCE = Mappers.getMapper(ActivityConvert.class); | |
| 21 | + | |
| 22 | + ActivityDO convert(ActivityCreateReqVO bean); | |
| 23 | + | |
| 24 | + ActivityDO convert(ActivityUpdateReqVO bean); | |
| 25 | + | |
| 26 | + ActivityRespVO convert(ActivityDO bean); | |
| 27 | + | |
| 28 | + List<ActivityRespVO> convertList(List<ActivityDO> list); | |
| 29 | + | |
| 30 | + PageResult<ActivityRespVO> convertPage(PageResult<ActivityDO> page); | |
| 31 | + | |
| 32 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/dataobject/activity/ActivityDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.dal.dataobject.activity; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import com.baomidou.mybatisplus.annotation.*; | |
| 6 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 促销活动 DO | |
| 10 | + * | |
| 11 | + * @author 芋道源码 | |
| 12 | + */ | |
| 13 | +@TableName("market_activity") | |
| 14 | +@Data | |
| 15 | +@EqualsAndHashCode(callSuper = true) | |
| 16 | +@ToString(callSuper = true) | |
| 17 | +@Builder | |
| 18 | +@NoArgsConstructor | |
| 19 | +@AllArgsConstructor | |
| 20 | +public class ActivityDO extends BaseDO { | |
| 21 | + | |
| 22 | + /** | |
| 23 | + * 活动编号 | |
| 24 | + */ | |
| 25 | + @TableId | |
| 26 | + private Long id; | |
| 27 | + /** | |
| 28 | + * 活动标题 | |
| 29 | + */ | |
| 30 | + private String title; | |
| 31 | + /** | |
| 32 | + * 活动类型MarketActivityTypeEnum | |
| 33 | + */ | |
| 34 | + private Integer activityType; | |
| 35 | + /** | |
| 36 | + * 活动状态MarketActivityStatusEnum | |
| 37 | + */ | |
| 38 | + private Integer status; | |
| 39 | + /** | |
| 40 | + * 开始时间 | |
| 41 | + */ | |
| 42 | + private Date startTime; | |
| 43 | + /** | |
| 44 | + * 结束时间 | |
| 45 | + */ | |
| 46 | + private Date endTime; | |
| 47 | + /** | |
| 48 | + * 失效时间 | |
| 49 | + */ | |
| 50 | + private Date invalidTime; | |
| 51 | + /** | |
| 52 | + * 删除时间 | |
| 53 | + */ | |
| 54 | + private Date deleteTime; | |
| 55 | + /** | |
| 56 | + * 限制折扣字符串,使用 JSON 序列化成字符串存储 | |
| 57 | + */ | |
| 58 | + private String timeLimitedDiscount; | |
| 59 | + /** | |
| 60 | + * 限制折扣字符串,使用 JSON 序列化成字符串存储 | |
| 61 | + */ | |
| 62 | + private String fullPrivilege; | |
| 63 | + | |
| 64 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/mysql/activity/ActivityMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.dal.mysql.activity; | |
| 2 | + | |
| 3 | +import java.util.*; | |
| 4 | + | |
| 5 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 6 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 7 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 8 | +import cn.iocoder.yudao.module.market.dal.dataobject.activity.ActivityDO; | |
| 9 | +import org.apache.ibatis.annotations.Mapper; | |
| 10 | +import cn.iocoder.yudao.module.market.controller.admin.activity.vo.*; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * 促销活动 Mapper | |
| 14 | + * | |
| 15 | + * @author 芋道源码 | |
| 16 | + */ | |
| 17 | +@Mapper | |
| 18 | +public interface ActivityMapper extends BaseMapperX<ActivityDO> { | |
| 19 | + | |
| 20 | + default PageResult<ActivityDO> selectPage(ActivityPageReqVO reqVO) { | |
| 21 | + return selectPage(reqVO, new LambdaQueryWrapperX<ActivityDO>() | |
| 22 | + .eqIfPresent(ActivityDO::getTitle, reqVO.getTitle()) | |
| 23 | + .eqIfPresent(ActivityDO::getActivityType, reqVO.getActivityType()) | |
| 24 | + .eqIfPresent(ActivityDO::getStatus, reqVO.getStatus()) | |
| 25 | + .betweenIfPresent(ActivityDO::getStartTime, reqVO.getBeginStartTime(), reqVO.getEndStartTime()) | |
| 26 | + .betweenIfPresent(ActivityDO::getEndTime, reqVO.getBeginEndTime(), reqVO.getEndEndTime()) | |
| 27 | + .betweenIfPresent(ActivityDO::getInvalidTime, reqVO.getBeginInvalidTime(), reqVO.getEndInvalidTime()) | |
| 28 | + .betweenIfPresent(ActivityDO::getDeleteTime, reqVO.getBeginDeleteTime(), reqVO.getEndDeleteTime()) | |
| 29 | + .eqIfPresent(ActivityDO::getTimeLimitedDiscount, reqVO.getTimeLimitedDiscount()) | |
| 30 | + .eqIfPresent(ActivityDO::getFullPrivilege, reqVO.getFullPrivilege()) | |
| 31 | + .betweenIfPresent(ActivityDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | |
| 32 | + .orderByDesc(ActivityDO::getId)); | |
| 33 | + } | |
| 34 | + | |
| 35 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/activity/ActivityService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.service.activity; | |
| 2 | + | |
| 3 | +import java.util.*; | |
| 4 | +import javax.validation.*; | |
| 5 | +import cn.iocoder.yudao.module.market.controller.admin.activity.vo.*; | |
| 6 | +import cn.iocoder.yudao.module.market.dal.dataobject.activity.ActivityDO; | |
| 7 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * 促销活动 Service 接口 | |
| 11 | + * | |
| 12 | + * @author 芋道源码 | |
| 13 | + */ | |
| 14 | +public interface ActivityService { | |
| 15 | + | |
| 16 | + /** | |
| 17 | + * 创建促销活动 | |
| 18 | + * | |
| 19 | + * @param createReqVO 创建信息 | |
| 20 | + * @return 编号 | |
| 21 | + */ | |
| 22 | + Long createActivity(@Valid ActivityCreateReqVO createReqVO); | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * 更新促销活动 | |
| 26 | + * | |
| 27 | + * @param updateReqVO 更新信息 | |
| 28 | + */ | |
| 29 | + void updateActivity(@Valid ActivityUpdateReqVO updateReqVO); | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 删除促销活动 | |
| 33 | + * | |
| 34 | + * @param id 编号 | |
| 35 | + */ | |
| 36 | + void deleteActivity(Long id); | |
| 37 | + | |
| 38 | + /** | |
| 39 | + * 获得促销活动 | |
| 40 | + * | |
| 41 | + * @param id 编号 | |
| 42 | + * @return 促销活动 | |
| 43 | + */ | |
| 44 | + ActivityDO getActivity(Long id); | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * 获得促销活动列表 | |
| 48 | + * | |
| 49 | + * @param ids 编号 | |
| 50 | + * @return 促销活动列表 | |
| 51 | + */ | |
| 52 | + List<ActivityDO> getActivityList(Collection<Long> ids); | |
| 53 | + | |
| 54 | + /** | |
| 55 | + * 获得促销活动分页 | |
| 56 | + * | |
| 57 | + * @param pageReqVO 分页查询 | |
| 58 | + * @return 促销活动分页 | |
| 59 | + */ | |
| 60 | + PageResult<ActivityDO> getActivityPage(ActivityPageReqVO pageReqVO); | |
| 61 | + | |
| 62 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/activity/ActivityServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.service.activity; | |
| 2 | + | |
| 3 | +import org.springframework.stereotype.Service; | |
| 4 | +import javax.annotation.Resource; | |
| 5 | +import org.springframework.validation.annotation.Validated; | |
| 6 | + | |
| 7 | +import java.util.*; | |
| 8 | +import cn.iocoder.yudao.module.market.controller.admin.activity.vo.*; | |
| 9 | +import cn.iocoder.yudao.module.market.dal.dataobject.activity.ActivityDO; | |
| 10 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 11 | + | |
| 12 | +import cn.iocoder.yudao.module.market.convert.activity.ActivityConvert; | |
| 13 | +import cn.iocoder.yudao.module.market.dal.mysql.activity.ActivityMapper; | |
| 14 | + | |
| 15 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | |
| 16 | +import static cn.iocoder.yudao.module.market.enums.ErrorCodeConstants.*; | |
| 17 | + | |
| 18 | +/** | |
| 19 | + * 促销活动 Service 实现类 | |
| 20 | + * | |
| 21 | + * @author 芋道源码 | |
| 22 | + */ | |
| 23 | +@Service | |
| 24 | +@Validated | |
| 25 | +public class ActivityServiceImpl implements ActivityService { | |
| 26 | + | |
| 27 | + @Resource | |
| 28 | + private ActivityMapper activityMapper; | |
| 29 | + | |
| 30 | + @Override | |
| 31 | + public Long createActivity(ActivityCreateReqVO createReqVO) { | |
| 32 | + // 插入 | |
| 33 | + ActivityDO activity = ActivityConvert.INSTANCE.convert(createReqVO); | |
| 34 | + activityMapper.insert(activity); | |
| 35 | + // 返回 | |
| 36 | + return activity.getId(); | |
| 37 | + } | |
| 38 | + | |
| 39 | + @Override | |
| 40 | + public void updateActivity(ActivityUpdateReqVO updateReqVO) { | |
| 41 | + // 校验存在 | |
| 42 | + this.validateActivityExists(updateReqVO.getId()); | |
| 43 | + // 更新 | |
| 44 | + ActivityDO updateObj = ActivityConvert.INSTANCE.convert(updateReqVO); | |
| 45 | + activityMapper.updateById(updateObj); | |
| 46 | + } | |
| 47 | + | |
| 48 | + @Override | |
| 49 | + public void deleteActivity(Long id) { | |
| 50 | + // 校验存在 | |
| 51 | + this.validateActivityExists(id); | |
| 52 | + // 删除 | |
| 53 | + activityMapper.deleteById(id); | |
| 54 | + } | |
| 55 | + | |
| 56 | + private void validateActivityExists(Long id) { | |
| 57 | + if (activityMapper.selectById(id) == null) { | |
| 58 | + throw exception(ACTIVITY_NOT_EXISTS); | |
| 59 | + } | |
| 60 | + } | |
| 61 | + | |
| 62 | + @Override | |
| 63 | + public ActivityDO getActivity(Long id) { | |
| 64 | + return activityMapper.selectById(id); | |
| 65 | + } | |
| 66 | + | |
| 67 | + @Override | |
| 68 | + public List<ActivityDO> getActivityList(Collection<Long> ids) { | |
| 69 | + return activityMapper.selectBatchIds(ids); | |
| 70 | + } | |
| 71 | + | |
| 72 | + @Override | |
| 73 | + public PageResult<ActivityDO> getActivityPage(ActivityPageReqVO pageReqVO) { | |
| 74 | + return activityMapper.selectPage(pageReqVO); | |
| 75 | + } | |
| 76 | + | |
| 77 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/test/java/cn/iocoder/yudao/module/market/service/activity/ActivityServiceImplTest.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.market.service.activity; | |
| 2 | + | |
| 3 | +import org.junit.jupiter.api.Disabled; | |
| 4 | +import org.junit.jupiter.api.Test; | |
| 5 | + | |
| 6 | +import javax.annotation.Resource; | |
| 7 | + | |
| 8 | +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | |
| 9 | + | |
| 10 | +import cn.iocoder.yudao.module.market.controller.admin.activity.vo.*; | |
| 11 | +import cn.iocoder.yudao.module.market.dal.dataobject.activity.ActivityDO; | |
| 12 | +import cn.iocoder.yudao.module.market.dal.mysql.activity.ActivityMapper; | |
| 13 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 14 | + | |
| 15 | +import org.springframework.context.annotation.Import; | |
| 16 | + | |
| 17 | +import static cn.iocoder.yudao.module.market.enums.ErrorCodeConstants.*; | |
| 18 | +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; | |
| 19 | +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; | |
| 20 | +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; | |
| 21 | +import static org.junit.jupiter.api.Assertions.*; | |
| 22 | + | |
| 23 | +/** | |
| 24 | +* {@link ActivityServiceImpl} 的单元测试类 | |
| 25 | +* | |
| 26 | +* @author 芋道源码 | |
| 27 | +*/ | |
| 28 | +@Import(ActivityServiceImpl.class) | |
| 29 | +public class ActivityServiceImplTest extends BaseDbUnitTest { | |
| 30 | + | |
| 31 | + @Resource | |
| 32 | + private ActivityServiceImpl activityService; | |
| 33 | + | |
| 34 | + @Resource | |
| 35 | + private ActivityMapper activityMapper; | |
| 36 | + | |
| 37 | + @Test | |
| 38 | + public void testCreateActivity_success() { | |
| 39 | + // 准备参数 | |
| 40 | + ActivityCreateReqVO reqVO = randomPojo(ActivityCreateReqVO.class); | |
| 41 | + | |
| 42 | + // 调用 | |
| 43 | + Long activityId = activityService.createActivity(reqVO); | |
| 44 | + // 断言 | |
| 45 | + assertNotNull(activityId); | |
| 46 | + // 校验记录的属性是否正确 | |
| 47 | + ActivityDO activity = activityMapper.selectById(activityId); | |
| 48 | + assertPojoEquals(reqVO, activity); | |
| 49 | + } | |
| 50 | + | |
| 51 | + @Test | |
| 52 | + public void testUpdateActivity_success() { | |
| 53 | + // mock 数据 | |
| 54 | + ActivityDO dbActivity = randomPojo(ActivityDO.class); | |
| 55 | + activityMapper.insert(dbActivity);// @Sql: 先插入出一条存在的数据 | |
| 56 | + // 准备参数 | |
| 57 | + ActivityUpdateReqVO reqVO = randomPojo(ActivityUpdateReqVO.class, o -> { | |
| 58 | + o.setId(dbActivity.getId()); // 设置更新的 ID | |
| 59 | + }); | |
| 60 | + | |
| 61 | + // 调用 | |
| 62 | + activityService.updateActivity(reqVO); | |
| 63 | + // 校验是否更新正确 | |
| 64 | + ActivityDO activity = activityMapper.selectById(reqVO.getId()); // 获取最新的 | |
| 65 | + assertPojoEquals(reqVO, activity); | |
| 66 | + } | |
| 67 | + | |
| 68 | + @Test | |
| 69 | + public void testUpdateActivity_notExists() { | |
| 70 | + // 准备参数 | |
| 71 | + ActivityUpdateReqVO reqVO = randomPojo(ActivityUpdateReqVO.class); | |
| 72 | + | |
| 73 | + // 调用, 并断言异常 | |
| 74 | + assertServiceException(() -> activityService.updateActivity(reqVO), ACTIVITY_NOT_EXISTS); | |
| 75 | + } | |
| 76 | + | |
| 77 | + @Test | |
| 78 | + public void testDeleteActivity_success() { | |
| 79 | + // mock 数据 | |
| 80 | + ActivityDO dbActivity = randomPojo(ActivityDO.class); | |
| 81 | + activityMapper.insert(dbActivity);// @Sql: 先插入出一条存在的数据 | |
| 82 | + // 准备参数 | |
| 83 | + Long id = dbActivity.getId(); | |
| 84 | + | |
| 85 | + // 调用 | |
| 86 | + activityService.deleteActivity(id); | |
| 87 | + // 校验数据不存在了 | |
| 88 | + assertNull(activityMapper.selectById(id)); | |
| 89 | + } | |
| 90 | + | |
| 91 | + @Test | |
| 92 | + public void testDeleteActivity_notExists() { | |
| 93 | + // 准备参数 | |
| 94 | + Long id = randomLongId(); | |
| 95 | + | |
| 96 | + // 调用, 并断言异常 | |
| 97 | + assertServiceException(() -> activityService.deleteActivity(id), ACTIVITY_NOT_EXISTS); | |
| 98 | + } | |
| 99 | + | |
| 100 | + @Test | |
| 101 | + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | |
| 102 | + public void testGetActivityPage() { | |
| 103 | + // mock 数据 | |
| 104 | + ActivityDO dbActivity = randomPojo(ActivityDO.class, o -> { // 等会查询到 | |
| 105 | + o.setTitle(null); | |
| 106 | + o.setActivityType(null); | |
| 107 | + o.setStatus(null); | |
| 108 | + o.setStartTime(null); | |
| 109 | + o.setEndTime(null); | |
| 110 | + o.setInvalidTime(null); | |
| 111 | + o.setDeleteTime(null); | |
| 112 | + o.setTimeLimitedDiscount(null); | |
| 113 | + o.setFullPrivilege(null); | |
| 114 | + o.setCreateTime(null); | |
| 115 | + }); | |
| 116 | + activityMapper.insert(dbActivity); | |
| 117 | + // 测试 title 不匹配 | |
| 118 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setTitle(null))); | |
| 119 | + // 测试 activityType 不匹配 | |
| 120 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setActivityType(null))); | |
| 121 | + // 测试 status 不匹配 | |
| 122 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setStatus(null))); | |
| 123 | + // 测试 startTime 不匹配 | |
| 124 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setStartTime(null))); | |
| 125 | + // 测试 endTime 不匹配 | |
| 126 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setEndTime(null))); | |
| 127 | + // 测试 invalidTime 不匹配 | |
| 128 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setInvalidTime(null))); | |
| 129 | + // 测试 deleteTime 不匹配 | |
| 130 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setDeleteTime(null))); | |
| 131 | + // 测试 timeLimitedDiscount 不匹配 | |
| 132 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setTimeLimitedDiscount(null))); | |
| 133 | + // 测试 fullPrivilege 不匹配 | |
| 134 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setFullPrivilege(null))); | |
| 135 | + // 测试 createTime 不匹配 | |
| 136 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setCreateTime(null))); | |
| 137 | + // 准备参数 | |
| 138 | + ActivityPageReqVO reqVO = new ActivityPageReqVO(); | |
| 139 | + reqVO.setTitle(null); | |
| 140 | + reqVO.setActivityType(null); | |
| 141 | + reqVO.setStatus(null); | |
| 142 | + reqVO.setBeginStartTime(null); | |
| 143 | + reqVO.setEndStartTime(null); | |
| 144 | + reqVO.setBeginEndTime(null); | |
| 145 | + reqVO.setEndEndTime(null); | |
| 146 | + reqVO.setBeginInvalidTime(null); | |
| 147 | + reqVO.setEndInvalidTime(null); | |
| 148 | + reqVO.setBeginDeleteTime(null); | |
| 149 | + reqVO.setEndDeleteTime(null); | |
| 150 | + reqVO.setTimeLimitedDiscount(null); | |
| 151 | + reqVO.setFullPrivilege(null); | |
| 152 | + reqVO.setBeginCreateTime(null); | |
| 153 | + reqVO.setEndCreateTime(null); | |
| 154 | + | |
| 155 | + // 调用 | |
| 156 | + PageResult<ActivityDO> pageResult = activityService.getActivityPage(reqVO); | |
| 157 | + // 断言 | |
| 158 | + assertEquals(1, pageResult.getTotal()); | |
| 159 | + assertEquals(1, pageResult.getList().size()); | |
| 160 | + assertPojoEquals(dbActivity, pageResult.getList().get(0)); | |
| 161 | + } | |
| 162 | + | |
| 163 | + @Test | |
| 164 | + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | |
| 165 | + public void testGetActivityList() { | |
| 166 | + // mock 数据 | |
| 167 | + ActivityDO dbActivity = randomPojo(ActivityDO.class, o -> { // 等会查询到 | |
| 168 | + o.setTitle(null); | |
| 169 | + o.setActivityType(null); | |
| 170 | + o.setStatus(null); | |
| 171 | + o.setStartTime(null); | |
| 172 | + o.setEndTime(null); | |
| 173 | + o.setInvalidTime(null); | |
| 174 | + o.setDeleteTime(null); | |
| 175 | + o.setTimeLimitedDiscount(null); | |
| 176 | + o.setFullPrivilege(null); | |
| 177 | + o.setCreateTime(null); | |
| 178 | + }); | |
| 179 | + activityMapper.insert(dbActivity); | |
| 180 | + // 测试 title 不匹配 | |
| 181 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setTitle(null))); | |
| 182 | + // 测试 activityType 不匹配 | |
| 183 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setActivityType(null))); | |
| 184 | + // 测试 status 不匹配 | |
| 185 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setStatus(null))); | |
| 186 | + // 测试 startTime 不匹配 | |
| 187 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setStartTime(null))); | |
| 188 | + // 测试 endTime 不匹配 | |
| 189 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setEndTime(null))); | |
| 190 | + // 测试 invalidTime 不匹配 | |
| 191 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setInvalidTime(null))); | |
| 192 | + // 测试 deleteTime 不匹配 | |
| 193 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setDeleteTime(null))); | |
| 194 | + // 测试 timeLimitedDiscount 不匹配 | |
| 195 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setTimeLimitedDiscount(null))); | |
| 196 | + // 测试 fullPrivilege 不匹配 | |
| 197 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setFullPrivilege(null))); | |
| 198 | + // 测试 createTime 不匹配 | |
| 199 | + activityMapper.insert(cloneIgnoreId(dbActivity, o -> o.setCreateTime(null))); | |
| 200 | + } | |
| 201 | + | |
| 202 | +} | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/test/resources/application-unit-test.yaml
0 → 100644
| 1 | +spring: | |
| 2 | + main: | |
| 3 | + lazy-initialization: true # 开启懒加载,加快速度 | |
| 4 | + banner-mode: off # 单元测试,禁用 Banner | |
| 5 | + | |
| 6 | +--- #################### 数据库相关配置 #################### | |
| 7 | + | |
| 8 | +spring: | |
| 9 | + # 数据源配置项 | |
| 10 | + datasource: | |
| 11 | + name: ruoyi-vue-pro | |
| 12 | + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 | |
| 13 | + driver-class-name: org.h2.Driver | |
| 14 | + username: sa | |
| 15 | + password: | |
| 16 | + druid: | |
| 17 | + async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度 | |
| 18 | + initial-size: 1 # 单元测试,配置为 1,提升启动速度 | |
| 19 | + sql: | |
| 20 | + init: | |
| 21 | + schema-locations: classpath:/sql/create_tables.sql | |
| 22 | + | |
| 23 | + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 | |
| 24 | + redis: | |
| 25 | + host: 127.0.0.1 # 地址 | |
| 26 | + port: 16379 # 端口(单元测试,使用 16379 端口) | |
| 27 | + database: 0 # 数据库索引 | |
| 28 | + | |
| 29 | +mybatis: | |
| 30 | + lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 | |
| 31 | + | |
| 32 | +--- #################### 定时任务相关配置 #################### | |
| 33 | + | |
| 34 | +--- #################### 配置中心相关配置 #################### | |
| 35 | + | |
| 36 | +--- #################### 服务保障相关配置 #################### | |
| 37 | + | |
| 38 | +# Lock4j 配置项(单元测试,禁用 Lock4j) | |
| 39 | + | |
| 40 | +# Resilience4j 配置项 | |
| 41 | + | |
| 42 | +--- #################### 监控相关配置 #################### | |
| 43 | + | |
| 44 | +--- #################### 芋道相关配置 #################### | |
| 45 | + | |
| 46 | +# 芋道配置项,设置当前项目所有自定义的配置 | |
| 47 | +yudao: | |
| 48 | + info: | |
| 49 | + base-package: cn.iocoder.yudao.module | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/test/resources/logback.xml
0 → 100644
yudao-module-mall/yudao-module-market-biz/src/test/resources/sql/clean.sql
0 → 100644
| 1 | +DELETE FROM "market_activity"; | ... | ... |
yudao-module-mall/yudao-module-market-biz/src/test/resources/sql/create_tables.sql
0 → 100644
| 1 | +CREATE TABLE IF NOT EXISTS "market_activity" ( | |
| 2 | + "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, | |
| 3 | + "title" varchar(50) NOT NULL, | |
| 4 | + "activity_type" tinyint(4) NOT NULL, | |
| 5 | + "status" tinyint(4) NOT NULL, | |
| 6 | + "start_time" datetime NOT NULL, | |
| 7 | + "end_time" datetime NOT NULL, | |
| 8 | + "invalid_time" datetime, | |
| 9 | + "delete_time" datetime, | |
| 10 | + "time_limited_discount" varchar(2000), | |
| 11 | + "full_privilege" varchar(2000), | |
| 12 | + "creator" varchar(64) DEFAULT '', | |
| 13 | + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 14 | + "updater" varchar(64) DEFAULT '', | |
| 15 | + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| 16 | + "deleted" bit NOT NULL DEFAULT FALSE, | |
| 17 | + "tenant_id" bigint(20) NOT NULL, | |
| 18 | + PRIMARY KEY ("id") | |
| 19 | + ) COMMENT '促销活动'; | |
| 0 | 20 | \ No newline at end of file | ... | ... |