diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java index 3f79ceea6..88ba22d87 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java @@ -3,7 +3,10 @@ package cn.iocoder.yudao.framework.common.util.string; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; +import java.util.Arrays; import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; /** * 字符串工具类 @@ -37,4 +40,9 @@ public class StrUtils { return false; } + public static List splitToLong(String value, CharSequence separator) { + long[] longs = StrUtil.splitToLong(value, separator); + return Arrays.stream(longs).boxed().collect(Collectors.toList()); + } + } diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/LongListTypeHandler.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/LongListTypeHandler.java new file mode 100644 index 000000000..8c30f3df8 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/LongListTypeHandler.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.framework.mybatis.core.type; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.util.string.StrUtils; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.apache.ibatis.type.TypeHandler; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +/** + * List 的类型转换器实现类,对应数据库的 varchar 类型 + * + * @author 芋道源码 + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +@MappedTypes(List.class) +public class LongListTypeHandler implements TypeHandler> { + + private static final String COMMA = ","; + + @Override + public void setParameter(PreparedStatement ps, int i, List strings, JdbcType jdbcType) throws SQLException { + // 设置占位符 + ps.setString(i, CollUtil.join(strings, COMMA)); + } + + @Override + public List getResult(ResultSet rs, String columnName) throws SQLException { + String value = rs.getString(columnName); + return getResult(value); + } + + @Override + public List getResult(ResultSet rs, int columnIndex) throws SQLException { + String value = rs.getString(columnIndex); + return getResult(value); + } + + @Override + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + String value = cs.getString(columnIndex); + return getResult(value); + } + + private List getResult(String value) { + if (value == null) { + return null; + } + return StrUtils.splitToLong(value, COMMA); + } +} diff --git a/yudao-module-mall/yudao-module-coupon-api/pom.xml b/yudao-module-mall/yudao-module-coupon-api/pom.xml deleted file mode 100644 index 6dab80613..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - cn.iocoder.boot - yudao-module-mall - ${revision} - - - 4.0.0 - yudao-module-coupon-api - jar - - - ${project.artifactId} - - coupon 模块 API,暴露给其它模块调用 - - - - - cn.iocoder.boot - yudao-common - - - - - org.springframework.boot - spring-boot-starter-validation - true - - - - \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponExpireTimeTypeEnum.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponExpireTimeTypeEnum.java deleted file mode 100644 index 0e1e17ece..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponExpireTimeTypeEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - - -/** - * 优惠券 - 是否开启过期提醒 - * - * @author Sin - */ -@RequiredArgsConstructor -@Getter -public enum CouponExpireTimeTypeEnum { - - OPEN(1,"不开启"), - CLOSE(0,"开启"),; - - /** - * 是否开启过期提醒 - */ - private final Integer type; - /** - * 是否开启过期提醒 - */ - private final String name; - -} diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponFetchTypeEnum.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponFetchTypeEnum.java deleted file mode 100644 index 66a86bc84..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponFetchTypeEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - - -/** - * 优惠券 - 领取是否无限制 0 - * - * @author Sin - */ -@RequiredArgsConstructor -@Getter -public enum CouponFetchTypeEnum { - - LIMIT(1,"限制"), - NOT_LIMIT(0,"不限制"),; - - /** - * 是否开启过期提醒 - */ - private final Integer type; - /** - * 是否开启过期提醒 - */ - private final String name; - -} diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponForbidPreferenceEnum.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponForbidPreferenceEnum.java deleted file mode 100644 index 1ac9e9f68..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponForbidPreferenceEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - - -/** - * 优惠券 - 优惠叠加类型 - * - * @author Sin - */ -@RequiredArgsConstructor -@Getter -public enum CouponForbidPreferenceEnum { - - UN_FORBID(0,"不限制"), - FORBID(1,"优惠券仅原价购买商品时可用"); - - /** - * 优惠券类型 - */ - private final Integer type; - /** - * 优惠券类型名 - */ - private final String name; - -} diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponGoodsTypeEnum.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponGoodsTypeEnum.java deleted file mode 100644 index e0946b7a0..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponGoodsTypeEnum.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - - -/** - * 优惠券 - 优惠券商品使用类型 - * - * @author Sin - */ -@RequiredArgsConstructor -@Getter -public enum CouponGoodsTypeEnum { - - ALL(1,"全部商品可用"), - POINT_PRODUCT(2,"指定商品可用"), - POINT_PRODUCT_NOT(3,"指定商品不可用"),; - - /** - * 优惠券商品使用类型 - */ - private final Integer type; - /** - * 优惠券商品使用类型名 - */ - private final String name; - -} diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponStatusTypeEnum.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponStatusTypeEnum.java deleted file mode 100644 index 813084731..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponStatusTypeEnum.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - - -/** - * 优惠券 - 优惠券状态类型 - * - * @author Sin - */ -@RequiredArgsConstructor -@Getter -public enum CouponStatusTypeEnum { - - PROCESSING(1,"进行中"), - END(2,"已结束"), - CLOSE(3,"已关闭"),; - - /** - * 优惠券类型 - */ - private final Integer type; - /** - * 优惠券类型名 - */ - private final String name; - -} diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponTypeEnum.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponTypeEnum.java deleted file mode 100644 index 639d5080d..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponTypeEnum.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - - -/** - * 优惠券 - 优惠券类型 - * - * @author Sin - */ -@RequiredArgsConstructor -@Getter -public enum CouponTypeEnum { - - REWARD(1,"满减"), - DISCOUNT(2,"折扣"), - RANDOW(3,"随机"),; - - /** - * 优惠券类型 - */ - private final Integer type; - /** - * 优惠券类型名 - */ - private final String name; - -} diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponUseLimitEnum.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponUseLimitEnum.java deleted file mode 100644 index beb530f0c..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponUseLimitEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - - -/** - * 优惠券使用类型 - 优惠券使用类型类型 - * - * @author Sin - */ -@RequiredArgsConstructor -@Getter -public enum CouponUseLimitEnum { - - HAS_LIMIT(1,"无门槛"), - NO_LIMIT(2,"有门槛"),; - - /** - * 优惠券使用类型 - */ - private final Integer type; - /** - * 优惠券使用类型名 - */ - private final String name; - -} diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponValidityTypeEnum.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponValidityTypeEnum.java deleted file mode 100644 index 798cf1e0f..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponValidityTypeEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -/** - * 过期类型 - 状态 - * - * @author Sin - */ -@RequiredArgsConstructor -@Getter -public enum CouponValidityTypeEnum { - - TIME_RANGE_EXPIRTED(1,"时间范围过期"), - EXPIRES_AFTER_FIXED_DATE(2,"领取之日固定日期后过期"), - EXPIRES_DATE_NEXT_FIEXD_DATE(3,"领取次日固定日期后过期"),; - - - /** - * 状态值 - */ - private final Integer status; - /** - * 状态名 - */ - private final String name; - -} diff --git a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/ErrorCodeConstants.java deleted file mode 100644 index fced9d140..000000000 --- a/yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/ErrorCodeConstants.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.CouponTemplete.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -/** - * coupon 优惠券错误码枚举类 - * - * coupon 优惠券系统,使用 1-010-000-000 段 - */ -public interface ErrorCodeConstants { - // ========== COUPON分类相关 1010001000 ============ - - ErrorCode COUPON_TEMPLETE_NOT_EXISTS = new ErrorCode(1010001000, "优惠券模板不存在"); - ErrorCode MONEY_NOT_NULL = new ErrorCode(1010001001, "当type为reward时需要添加发放面额不能为空"); - ErrorCode DISCOUNT_NOT_NULL = new ErrorCode(1010001001, "当type为discount时需要添加折扣不能为空"); - ErrorCode DISCOUNT_LIMIT_NOT_NULL = new ErrorCode(1010001001, "当type为discount时可选择性添加最多折扣金额不能为空"); - ErrorCode MIN_MAX_NOT_NULL = new ErrorCode(1010001001, "当type为radom时需要添加最低金额"); - ErrorCode START_END_TIME_NOT_NULL = new ErrorCode(1010001001, "使用开始日期,使用结束日期不能为空"); - ErrorCode FIXED_TERM_NOT_NULL = new ErrorCode(1010001001, "领取之日起或者次日N天内有效不能为空"); - - - // ========== COUPON分类相关 1010002000 ============ - ErrorCode COUPON_NOT_EXISTS = new ErrorCode(1010001000, "优惠券模板不存在"); - - -} - diff --git a/yudao-module-mall/yudao-module-coupon-biz/pom.xml b/yudao-module-mall/yudao-module-coupon-biz/pom.xml deleted file mode 100644 index 225c24d4e..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - cn.iocoder.boot - yudao-module-mall - ${revision} - - 4.0.0 - jar - yudao-module-coupon-biz - - ${project.artifactId} - - - coupon模块,主要负责优惠券的一些业务,含发布优惠券模板,分发优惠券等 - - - - - - cn.iocoder.boot - yudao-module-coupon-api - ${revision} - - - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-operatelog - - - - - cn.iocoder.boot - yudao-spring-boot-starter-web - - - cn.iocoder.boot - yudao-spring-boot-starter-security - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mybatis - - - - - cn.iocoder.boot - yudao-spring-boot-starter-test - - - - - cn.iocoder.boot - yudao-spring-boot-starter-excel - - - - - diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/CouponController.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/CouponController.java deleted file mode 100644 index 8ee02c366..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/CouponController.java +++ /dev/null @@ -1,88 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.coupon; - -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.*; -import java.util.*; - -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.module.coupon.controller.admin.coupon.vo.*; -import cn.iocoder.yudao.module.coupon.dal.dataobject.coupon.CouponDO; -import cn.iocoder.yudao.module.coupon.convert.coupon.CouponConvert; -import cn.iocoder.yudao.module.coupon.service.coupon.CouponService; - -@Api(tags = "管理后台 - 优惠券") -@RestController -@RequestMapping("/coupon/item") -@Validated -public class CouponController { - - @Resource - private CouponService couponService; - - - //todo 用户优惠券 - @PostMapping("/create") - @ApiOperation("用户领取优惠券") - @PreAuthorize("@ss.hasPermission('coupon::create')") - public CommonResult create(@RequestParam("couponTemplateId") Long couponTemplateId) { - - return success(couponService.create(couponTemplateId)); - } - - - @PutMapping("/update") - @ApiOperation("更新优惠券") - @PreAuthorize("@ss.hasPermission('coupon::update')") - public CommonResult update(@Valid @RequestBody CouponUpdateReqVO updateReqVO) { - couponService.update(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @ApiOperation("删除优惠券") - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('coupon::delete')") - public CommonResult delete(@RequestParam("id") Long id) { - couponService.delete(id); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得优惠券") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('coupon::query')") - public CommonResult get(@RequestParam("id") Long id) { - CouponDO couponDO = couponService.get(id); - return success(CouponConvert.INSTANCE.convert(couponDO)); - } - - - - @GetMapping("/list") - @ApiOperation("获得优惠券列表") - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) - @PreAuthorize("@ss.hasPermission('coupon::query')") - public CommonResult> getList(@RequestParam("ids") Collection ids) { - List list = couponService.getList(ids); - return success(CouponConvert.INSTANCE.convertList(list)); - } - - @GetMapping("/page") - @ApiOperation("获得优惠券分页") - @PreAuthorize("@ss.hasPermission('coupon::query')") - public CommonResult> getPage(@Valid CouponPageReqVO pageVO) { - PageResult pageResult = couponService.getPage(pageVO); - return success(CouponConvert.INSTANCE.convertPage(pageResult)); - } - - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponBaseVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponBaseVO.java deleted file mode 100644 index 31cc828f7..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponBaseVO.java +++ /dev/null @@ -1,110 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo; - -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -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 CouponBaseVO { - - @ApiModelProperty(value = "优惠券类型 reward-满减 discount-折扣 random-随机", required = true) - @NotNull(message = "优惠券类型 reward-满减 discount-折扣 random-随机不能为空") - private String type; - - @ApiModelProperty(value = "优惠券名称", required = true) - @NotNull(message = "优惠券名称不能为空") - private String name; - - @ApiModelProperty(value = "优惠券类型id") - private Long couponTypeId; - - @ApiModelProperty(value = "优惠券编码", required = true) - @NotNull(message = "优惠券编码不能为空") - private String couponCode; - - @ApiModelProperty(value = "领用人", required = true) - @NotNull(message = "领用人不能为空") - private Long memberId; - - @ApiModelProperty(value = "优惠券使用订单id", required = true) - @NotNull(message = "优惠券使用订单id不能为空") - private Long useOrderId; - - @ApiModelProperty(value = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用", required = true) - @NotNull(message = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用不能为空") - private Boolean goodsType; - - @ApiModelProperty(value = "适用商品id", required = true) - @NotNull(message = "适用商品id不能为空") - private String goodsIds; - - @ApiModelProperty(value = "最小金额", required = true) - @NotNull(message = "最小金额不能为空") - private BigDecimal atLeast; - - @ApiModelProperty(value = "面额", required = true) - @NotNull(message = "面额不能为空") - private BigDecimal money; - - @ApiModelProperty(value = "1 =< 折扣 <= 9.9 当type为discount时需要添加", required = true) - @NotNull(message = "1 =< 折扣 <= 9.9 当type为discount时需要添加不能为空") - private BigDecimal discount; - - @ApiModelProperty(value = "最多折扣金额 当type为discount时可选择性添加", required = true) - @NotNull(message = "最多折扣金额 当type为discount时可选择性添加不能为空") - private BigDecimal discountLimit; - - @ApiModelProperty(value = "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用", required = true) - @NotNull(message = "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用不能为空") - private Boolean whetherForbidPreference; - - @ApiModelProperty(value = "是否开启过期提醒0-不开启 1-开启", required = true) - @NotNull(message = "是否开启过期提醒0-不开启 1-开启") - private Boolean whetherExpireNotice; - - @ApiModelProperty(value = "过期前N天提醒", required = true) - @NotNull(message = "过期前N天提醒不能为空") - private Integer expireNoticeFixedTerm; - - @ApiModelProperty(value = "是否已提醒", required = true) - @NotNull(message = "是否已提醒不能为空") - private Boolean whetherNoticed; - - @ApiModelProperty(value = "优惠券状态 1已领用(未使用) 2已使用 3已过期", required = true) - @NotNull(message = "优惠券状态 1已领用(未使用) 2已使用 3已过期不能为空") - private Integer state; - - @ApiModelProperty(value = "获取方式1订单2.直接领取3.活动领取 4转赠 5分享获取", required = true) - @NotNull(message = "获取方式1订单2.直接领取3.活动领取 4转赠 5分享获取不能为空") - private Boolean getType; - - @ApiModelProperty(value = "领取时间", required = true) - @NotNull(message = "领取时间不能为空") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date fetchTime; - - @ApiModelProperty(value = "使用时间", required = true) - @NotNull(message = "使用时间不能为空") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date useTime; - - @ApiModelProperty(value = "可使用的开始时间", required = true) - @NotNull(message = "可使用的开始时间不能为空") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date startTime; - - @ApiModelProperty(value = "有效期结束时间", required = true) - @NotNull(message = "有效期结束时间不能为空") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date endTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponCreateReqVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponCreateReqVO.java deleted file mode 100644 index 2cd3cb419..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponCreateReqVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.coupon.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 CouponCreateReqVO extends CouponBaseVO { - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponExcelVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponExcelVO.java deleted file mode 100644 index f7d1d1d6f..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponExcelVO.java +++ /dev/null @@ -1,90 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo; - -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import io.swagger.annotations.*; - -import com.alibaba.excel.annotation.ExcelProperty; - -/** - * 优惠券 Excel VO - * - * @author wxr - */ -@Data -public class CouponExcelVO { - - @ExcelProperty("用户ID") - private Long id; - - @ExcelProperty("优惠券类型 reward-满减 discount-折扣 random-随机") - private String type; - - @ExcelProperty("优惠券名称") - private String name; - - @ExcelProperty("优惠券类型id") - private Long couponTypeId; - - @ExcelProperty("优惠券编码") - private String couponCode; - - @ExcelProperty("领用人") - private Long memberId; - - @ExcelProperty("优惠券使用订单id") - private Long useOrderId; - - @ExcelProperty("适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用") - private Boolean goodsType; - - @ExcelProperty("适用商品id") - private String goodsIds; - - @ExcelProperty("最小金额") - private BigDecimal atLeast; - - @ExcelProperty("面额") - private BigDecimal money; - - @ExcelProperty("1 =< 折扣 <= 9.9 当type为discount时需要添加") - private BigDecimal discount; - - @ExcelProperty("最多折扣金额 当type为discount时可选择性添加") - private BigDecimal discountLimit; - - @ExcelProperty("优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用") - private Boolean whetherForbidPreference; - - @ExcelProperty("是否开启过期提醒0-不开启 1-开启") - private Boolean whetherExpireNotice; - - @ExcelProperty("过期前N天提醒") - private Integer expireNoticeFixedTerm; - - @ExcelProperty("是否已提醒") - private Boolean whetherNoticed; - - @ExcelProperty("优惠券状态 1已领用(未使用) 2已使用 3已过期") - private Integer state; - - @ExcelProperty("获取方式1订单2.直接领取3.活动领取 4转赠 5分享获取") - private Boolean getType; - - @ExcelProperty("领取时间") - private Date fetchTime; - - @ExcelProperty("使用时间") - private Date useTime; - - @ExcelProperty("可使用的开始时间") - private Date startTime; - - @ExcelProperty("有效期结束时间") - private Date endTime; - - @ExcelProperty("创建时间") - private Date createTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponExportReqVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponExportReqVO.java deleted file mode 100644 index a195a61de..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponExportReqVO.java +++ /dev/null @@ -1,91 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo; - -import lombok.*; - -import java.math.BigDecimal; -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 = "参数和 CouponPageReqVO 是一致的") -@Data -public class CouponExportReqVO { - - @ApiModelProperty(value = "优惠券类型 reward-满减 discount-折扣 random-随机") - private String type; - - @ApiModelProperty(value = "优惠券名称") - private String name; - - @ApiModelProperty(value = "优惠券类型id") - private Long couponTypeId; - - @ApiModelProperty(value = "优惠券编码") - private String couponCode; - - @ApiModelProperty(value = "领用人") - private Long memberId; - - @ApiModelProperty(value = "优惠券使用订单id") - private Long useOrderId; - - @ApiModelProperty(value = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用") - private Boolean goodsType; - - @ApiModelProperty(value = "适用商品id") - private String goodsIds; - - @ApiModelProperty(value = "最小金额") - private BigDecimal atLeast; - - @ApiModelProperty(value = "面额") - private BigDecimal money; - - @ApiModelProperty(value = "1 =< 折扣 <= 9.9 当type为discount时需要添加") - private BigDecimal discount; - - @ApiModelProperty(value = "最多折扣金额 当type为discount时可选择性添加") - private BigDecimal discountLimit; - - @ApiModelProperty(value = "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用") - private Boolean whetherForbidPreference; - - @ApiModelProperty(value = "是否开启过期提醒0-不开启 1-开启") - private Boolean whetherExpireNotice; - - @ApiModelProperty(value = "过期前N天提醒") - private Integer expireNoticeFixedTerm; - - @ApiModelProperty(value = "是否已提醒") - private Boolean whetherNoticed; - - @ApiModelProperty(value = "优惠券状态 1已领用(未使用) 2已使用 3已过期") - private Integer state; - - @ApiModelProperty(value = "获取方式1订单2.直接领取3.活动领取 4转赠 5分享获取") - private Boolean getType; - - @ApiModelProperty(value = "领取时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] fetchTime; - - @ApiModelProperty(value = "使用时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] useTime; - - @ApiModelProperty(value = "可使用的开始时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] startTime; - - @ApiModelProperty(value = "有效期结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] endTime; - - @ApiModelProperty(value = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] createTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponPageReqVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponPageReqVO.java deleted file mode 100644 index 9573200a5..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponPageReqVO.java +++ /dev/null @@ -1,93 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo; - -import lombok.*; - -import java.math.BigDecimal; -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("管理后台 - 优惠券分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CouponPageReqVO extends PageParam { - - @ApiModelProperty(value = "优惠券类型 reward-满减 discount-折扣 random-随机") - private String type; - - @ApiModelProperty(value = "优惠券名称") - private String name; - - @ApiModelProperty(value = "优惠券类型id") - private Long couponTypeId; - - @ApiModelProperty(value = "优惠券编码") - private String couponCode; - - @ApiModelProperty(value = "领用人") - private Long memberId; - - @ApiModelProperty(value = "优惠券使用订单id") - private Long useOrderId; - - @ApiModelProperty(value = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用") - private Boolean goodsType; - - @ApiModelProperty(value = "适用商品id") - private String goodsIds; - - @ApiModelProperty(value = "最小金额") - private BigDecimal atLeast; - - @ApiModelProperty(value = "面额") - private BigDecimal money; - - @ApiModelProperty(value = "1 =< 折扣 <= 9.9 当type为discount时需要添加") - private BigDecimal discount; - - @ApiModelProperty(value = "最多折扣金额 当type为discount时可选择性添加") - private BigDecimal discountLimit; - - @ApiModelProperty(value = "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用") - private Boolean whetherForbidPreference; - - @ApiModelProperty(value = "是否开启过期提醒0-不开启 1-开启") - private Boolean whetherExpireNotice; - - @ApiModelProperty(value = "过期前N天提醒") - private Integer expireNoticeFixedTerm; - - @ApiModelProperty(value = "是否已提醒") - private Boolean whetherNoticed; - - @ApiModelProperty(value = "优惠券状态 1已领用(未使用) 2已使用 3已过期") - private Integer state; - - @ApiModelProperty(value = "获取方式1订单2.直接领取3.活动领取 4转赠 5分享获取") - private Boolean getType; - - @ApiModelProperty(value = "领取时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] fetchTime; - - @ApiModelProperty(value = "使用时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] useTime; - - @ApiModelProperty(value = "可使用的开始时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] startTime; - - @ApiModelProperty(value = "有效期结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] endTime; - - @ApiModelProperty(value = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] createTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponRespVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponRespVO.java deleted file mode 100644 index 9055a36a0..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponRespVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -@ApiModel("管理后台 - 优惠券 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CouponRespVO extends CouponBaseVO { - - @ApiModelProperty(value = "用户ID", required = true) - private Long id; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponUpdateReqVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponUpdateReqVO.java deleted file mode 100644 index 0c1a741ca..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/vo/CouponUpdateReqVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.coupon.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 CouponUpdateReqVO extends CouponBaseVO { - - @ApiModelProperty(value = "用户ID", required = true) - @NotNull(message = "用户ID不能为空") - private Long id; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/CouponTempleteController.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/CouponTempleteController.java deleted file mode 100644 index a81f53c09..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/CouponTempleteController.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.templete; - -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.*; -import cn.iocoder.yudao.module.coupon.convert.CouponTemplete.CouponTempleteConvert; -import cn.iocoder.yudao.module.coupon.dal.dataobject.CouponTemplete.CouponTempleteDO; -import cn.iocoder.yudao.module.coupon.service.CouponTemplete.CouponTempleteService; -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.*; -import java.util.*; - -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; - -@Api(tags = "管理后台 - 优惠券模板") -@RestController -@RequestMapping("/coupon/template") -@Validated -public class CouponTempleteController { - - @Resource - private CouponTempleteService couponTempleteServiceService; - - @PostMapping("/create") - @ApiOperation("创建优惠券模板") - @PreAuthorize("@ss.hasPermission('CouponTemplete::create')") - public CommonResult create(@Valid @RequestBody CouponTempleteCreateReqVO createReqVO) { - return success(couponTempleteServiceService.create(createReqVO)); - } - -// @PutMapping("/update") -// @ApiOperation("更新优惠券模板") -// @PreAuthorize("@ss.hasPermission('CouponTemplete::update')") -// public CommonResult update(@Valid @RequestBody CouponTempleteUpdateReqVO updateReqVO) { -// couponTempleteServiceService.update(updateReqVO); -// return success(true); -// } -// -// @DeleteMapping("/delete") -// @ApiOperation("删除优惠券模板") -// @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) -// @PreAuthorize("@ss.hasPermission('CouponTemplete::delete')") -// public CommonResult delete(@RequestParam("id") Long id) { -// couponTempleteServiceService.delete(id); -// return success(true); -// } -// -// @GetMapping("/get") -// @ApiOperation("获得优惠券模板") -// @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) -// @PreAuthorize("@ss.hasPermission('CouponTemplete::query')") -// public CommonResult get(@RequestParam("id") Long id) { -// CouponTempleteDO couponTempleteDO = couponTempleteServiceService.get(id); -// return success(CouponTempleteConvert.INSTANCE.convert(couponTempleteDO)); -// } -// -// @GetMapping("/list") -// @ApiOperation("获得优惠券模板列表") -// @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) -// @PreAuthorize("@ss.hasPermission('CouponTemplete::query')") -// public CommonResult> getList(@RequestParam("ids") Collection ids) { -// List list = couponTempleteServiceService.getList(ids); -// return success(CouponTempleteConvert.INSTANCE.convertList(list)); -// } -// - @GetMapping("/page") - @ApiOperation("获得优惠券模板分页") - @PreAuthorize("@ss.hasPermission('CouponTemplete::query')") - public CommonResult> getPage(@Valid CouponTempletePageReqVO pageVO) { - PageResult pageResult = couponTempleteServiceService.getPage(pageVO); - return success(CouponTempleteConvert.INSTANCE.convertPage(pageResult)); - } - - - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteBaseVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteBaseVO.java deleted file mode 100644 index 942abe896..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteBaseVO.java +++ /dev/null @@ -1,172 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.templete.vo; - -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -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 CouponTempleteBaseVO { - - - //基本信息 - - @ApiModelProperty(value = "优惠券名称", required = true) - @NotNull(message = "优惠券名称不能为空") - private String name; - - @ApiModelProperty(value = "名称备注") - private String couponNameRemark; - - @ApiModelProperty(value = "优惠券图片") - private String image; - - /* ============判断适用商品——开始============= */ - - - @ApiModelProperty(value = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用", required = true) - @NotNull(message = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用不能为空") - private Integer goodsType; - - @ApiModelProperty(value = "适用商品id") - private String productIds; - - @ApiModelProperty(value = "使用门槛0-无门槛 1-有门槛", required = true) - @NotNull(message = "使用门槛0-无门槛 1-有门槛不能为空") - private Boolean hasUseLimit; - - @ApiModelProperty(value = "满多少元使用 0代表无限制", required = true) - @NotNull(message = "满多少元使用 0代表无限制不能为空") - private BigDecimal atLeast; - - - /* ============折扣类型——开始============= */ - - @ApiModelProperty(value = "优惠券类型 reward-满减 discount-折扣 random-随机", required = true) - @NotNull(message = "优惠券类型 reward-满减 discount-折扣 random-随机不能为空") - private String type; - - @ApiModelProperty(value = "发放面额 当type为reward时需要添加") - @NotNull(message = "发放面额 当type为reward时需要添加不能为空") - private BigDecimal money; - - @ApiModelProperty(value = "1 =< 折扣 <= 9.9 当type为discount时需要添加") - @NotNull(message = "1 =< 折扣 <= 9.9 当type为discount时需要添加不能为空") - private BigDecimal discount; - - @ApiModelProperty(value = "最多折扣金额 当type为discount时可选择性添加") - @NotNull(message = "最多折扣金额 当type为discount时可选择性添加不能为空") - private BigDecimal discountLimit; - - @ApiModelProperty(value = "最低金额 当type为radom时需要添加", required = true) - @NotNull(message = "最低金额 当type为radom时需要添加不能为空") - private BigDecimal minMoney; - - @ApiModelProperty(value = "最大金额 当type为radom时需要添加", required = true) - @NotNull(message = "最大金额 当type为radom时需要添加不能为空") - private BigDecimal maxMoney; - - /* ============折扣类型——结束============= */ - - - /* ============过期类型——开始============= */ - - - @ApiModelProperty(value = "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期", required = true) - @NotNull(message = "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期 不能为空") - private Integer validityType; - - @ApiModelProperty(value = "使用开始日期 过期类型1时必填") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date startUseTime; - - @ApiModelProperty(value = "使用结束日期 过期类型1时必填") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date endUseTime; - - @ApiModelProperty(value = "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效") - @NotNull(message = "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效不能为空") - private Integer fixedTerm; - - @ApiModelProperty(value = "有效日期结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date endTime; - - /* ============过期类型——结束============= */ - - - @ApiModelProperty(value = "领取是否无限制0-否 1是", required = true) - @NotNull(message = "是否无限制0-否 1是") - private Boolean whetherLimitless; - - @ApiModelProperty(value = "每人最大领取个数", required = true) - @NotNull(message = "每人最大领取个数不能为空") - private Integer maxFetch; - - @ApiModelProperty(value = "是否开启过期提醒 0-不开启 1-开启", required = true) - @NotNull(message = "是否开启过期提醒0-不开启 1-开启不能为空") - private Boolean whetherExpireNotice; - - @ApiModelProperty(value = "过期前N天提醒", required = true) - @NotNull(message = "过期前N天提醒不能为空") - private Integer expireNoticeFixedTerm; - - @ApiModelProperty(value = "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用", required = true) - @NotNull(message = "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用不能为空") - private Boolean whetherForbidPreference; - - @ApiModelProperty(value = "是否显示", required = true) - @NotNull(message = "是否显示不能为空") - private Integer whetherShow; - - @ApiModelProperty(value = "是否禁止发放0-否 1-是", required = true) - @NotNull(message = "是否禁止发放0-否 1-是不能为空") - private Boolean whetherForbidden; - - /* ============汇总计算——开始============= */ - - - - @ApiModelProperty(value = "使用优惠券购买的商品数量", required = true) - @NotNull(message = "使用优惠券购买的商品数量不能为空") - private Integer orderGoodsNum; - - @ApiModelProperty(value = "订单的优惠总金额", required = true) - @NotNull(message = "订单的优惠总金额不能为空") - private BigDecimal discountOrderMoney; - - @ApiModelProperty(value = "用券总成交额", required = true) - @NotNull(message = "用券总成交额不能为空") - private BigDecimal orderMoney; - - @ApiModelProperty(value = "发放数量", required = true) - @NotNull(message = "发放数量不能为空") - private Integer count; - - @ApiModelProperty(value = "已领取数量", required = true) - @NotNull(message = "已领取数量不能为空") - private Integer leadCount; - - @ApiModelProperty(value = "已使用数量", required = true) - @NotNull(message = "已使用数量不能为空") - private Integer usedCount; - - - /* ============汇总计算——结束============= */ - - - @ApiModelProperty(value = "状态(1进行中2已结束3已关闭)", required = true) - @NotNull(message = "状态(1进行中2已结束-1已关闭)不能为空") - private Integer status; - - - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteCreateReqVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteCreateReqVO.java deleted file mode 100644 index 8e1d9a51a..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteCreateReqVO.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.templete.vo; - -import lombok.*; -import io.swagger.annotations.*; - -@ApiModel("管理后台 - 优惠券模板创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CouponTempleteCreateReqVO extends CouponTempleteBaseVO { - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteExcelVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteExcelVO.java deleted file mode 100644 index 1101f9b61..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteExcelVO.java +++ /dev/null @@ -1,119 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.templete.vo; - -import lombok.*; -import java.util.*; -import java.math.BigDecimal; - -import com.alibaba.excel.annotation.ExcelProperty; - -/** - * 优惠券模板 Excel VO - * - * @author wxr - */ -@Data -public class CouponTempleteExcelVO { - - @ExcelProperty("用户ID") - private Long id; - - @ExcelProperty("优惠券类型 reward-满减 discount-折扣 random-随机") - private String type; - - @ExcelProperty("优惠券名称") - private String name; - - @ExcelProperty("名称备注") - private String couponNameRemark; - - @ExcelProperty("优惠券图片") - private String image; - - @ExcelProperty("发放数量") - private Integer count; - - @ExcelProperty("已领取数量") - private Integer leadCount; - - @ExcelProperty("已使用数量") - private Integer usedCount; - - @ExcelProperty("适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用") - private Integer goodsType; - - @ExcelProperty("适用商品id") - private String productIds; - - @ExcelProperty("使用门槛0-无门槛 1-有门槛") - private Boolean hasUseLimit; - - @ExcelProperty("满多少元使用 0代表无限制") - private BigDecimal atLeast; - - @ExcelProperty("发放面额 当type为reward时需要添加") - private BigDecimal money; - - @ExcelProperty("1 =< 折扣 <= 9.9 当type为discount时需要添加") - private BigDecimal discount; - - @ExcelProperty("最多折扣金额 当type为discount时可选择性添加") - private BigDecimal discountLimit; - - @ExcelProperty("最低金额 当type为radom时需要添加") - private BigDecimal minMoney; - - @ExcelProperty("最大金额 当type为radom时需要添加") - private BigDecimal maxMoney; - - @ExcelProperty("过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期") - private Integer validityType; - - @ExcelProperty("使用开始日期 过期类型1时必填") - private Date startUseTime; - - @ExcelProperty("使用结束日期 过期类型1时必填") - private Date endUseTime; - - @ExcelProperty("当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效") - private Integer fixedTerm; - - @ExcelProperty("是否无限制0-否 1是") - private Boolean whetherLimitless; - - @ExcelProperty("每人最大领取个数") - private Integer maxFetch; - - @ExcelProperty("是否开启过期提醒0-不开启 1-开启") - private Boolean whetherExpireNotice; - - @ExcelProperty("过期前N天提醒") - private Integer expireNoticeFixedTerm; - - @ExcelProperty("优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用") - private Boolean whetherForbidPreference; - - @ExcelProperty("是否显示") - private Integer whetherShow; - - @ExcelProperty("订单的优惠总金额") - private BigDecimal discountOrderMoney; - - @ExcelProperty("用券总成交额") - private BigDecimal orderMoney; - - @ExcelProperty("是否禁止发放0-否 1-是") - private Boolean whetherForbidden; - - @ExcelProperty("使用优惠券购买的商品数量") - private Integer orderGoodsNum; - - @ExcelProperty("状态(1进行中2已结束-1已关闭)") - private Integer status; - - @ExcelProperty("有效日期结束时间") - private Date endTime; - - @ExcelProperty("创建时间") - private Date createTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteExportReqVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteExportReqVO.java deleted file mode 100644 index 0420e3d9e..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteExportReqVO.java +++ /dev/null @@ -1,119 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.templete.vo; - -import lombok.*; - -import java.math.BigDecimal; -import java.util.*; -import io.swagger.annotations.*; -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 = "参数和 CouponTempletePageReqVO 是一致的") -@Data -public class CouponTempleteExportReqVO { - - @ApiModelProperty(value = "优惠券类型 reward-满减 discount-折扣 random-随机") - private String type; - - @ApiModelProperty(value = "优惠券名称") - private String name; - - @ApiModelProperty(value = "名称备注") - private String couponNameRemark; - - @ApiModelProperty(value = "优惠券图片") - private String image; - - @ApiModelProperty(value = "发放数量") - private Integer count; - - @ApiModelProperty(value = "已领取数量") - private Integer leadCount; - - @ApiModelProperty(value = "已使用数量") - private Integer usedCount; - - @ApiModelProperty(value = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用") - private Boolean goodsType; - - @ApiModelProperty(value = "适用商品id") - private String productIds; - - @ApiModelProperty(value = "使用门槛0-无门槛 1-有门槛") - private Boolean hasUseLimit; - - @ApiModelProperty(value = "满多少元使用 0代表无限制") - private BigDecimal atLeast; - - @ApiModelProperty(value = "发放面额 当type为reward时需要添加") - private BigDecimal money; - - @ApiModelProperty(value = "1 =< 折扣 <= 9.9 当type为discount时需要添加") - private BigDecimal discount; - - @ApiModelProperty(value = "最多折扣金额 当type为discount时可选择性添加") - private BigDecimal discountLimit; - - @ApiModelProperty(value = "最低金额 当type为radom时需要添加") - private BigDecimal minMoney; - - @ApiModelProperty(value = "最大金额 当type为radom时需要添加") - private BigDecimal maxMoney; - - @ApiModelProperty(value = "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期") - private Boolean validityType; - - @ApiModelProperty(value = "使用开始日期 过期类型1时必填") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] startUseTime; - - @ApiModelProperty(value = "使用结束日期 过期类型1时必填") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] endUseTime; - - @ApiModelProperty(value = "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效") - private Integer fixedTerm; - - @ApiModelProperty(value = "是否无限制0-否 1是") - private Boolean whetherLimitless; - - @ApiModelProperty(value = "每人最大领取个数") - private Integer maxFetch; - - @ApiModelProperty(value = "是否开启过期提醒0-不开启 1-开启") - private Boolean whetherExpireNotice; - - @ApiModelProperty(value = "过期前N天提醒") - private Integer expireNoticeFixedTerm; - - @ApiModelProperty(value = "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用") - private Boolean whetherForbidPreference; - - @ApiModelProperty(value = "是否显示") - private Integer whetherShow; - - @ApiModelProperty(value = "订单的优惠总金额") - private BigDecimal discountOrderMoney; - - @ApiModelProperty(value = "用券总成交额") - private BigDecimal orderMoney; - - @ApiModelProperty(value = "是否禁止发放0-否 1-是") - private Boolean whetherForbidden; - - @ApiModelProperty(value = "使用优惠券购买的商品数量") - private Integer orderGoodsNum; - - @ApiModelProperty(value = "状态(1进行中2已结束-1已关闭)") - private Integer status; - - @ApiModelProperty(value = "有效日期结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] endTime; - - @ApiModelProperty(value = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] createTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempletePageReqVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempletePageReqVO.java deleted file mode 100644 index 3ff5710c7..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempletePageReqVO.java +++ /dev/null @@ -1,122 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.templete.vo; - -import lombok.*; - -import java.math.BigDecimal; -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("管理后台 - 优惠券模板分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CouponTempletePageReqVO extends PageParam { - - @ApiModelProperty(value = "优惠券类型 reward-满减 discount-折扣 random-随机") - private String type; - - @ApiModelProperty(value = "优惠券名称") - private String name; - - @ApiModelProperty(value = "名称备注") - private String couponNameRemark; - - @ApiModelProperty(value = "优惠券图片") - private String image; - - @ApiModelProperty(value = "发放数量") - private Integer count; - - @ApiModelProperty(value = "已领取数量") - private Integer leadCount; - - @ApiModelProperty(value = "已使用数量") - private Integer usedCount; - - @ApiModelProperty(value = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用") - private Boolean goodsType; - - @ApiModelProperty(value = "适用商品id") - private String productIds; - - @ApiModelProperty(value = "使用门槛0-无门槛 1-有门槛") - private Boolean hasUseLimit; - - @ApiModelProperty(value = "满多少元使用 0代表无限制") - private BigDecimal atLeast; - - @ApiModelProperty(value = "发放面额 当type为reward时需要添加") - private BigDecimal money; - - @ApiModelProperty(value = "1 =< 折扣 <= 9.9 当type为discount时需要添加") - private BigDecimal discount; - - @ApiModelProperty(value = "最多折扣金额 当type为discount时可选择性添加") - private BigDecimal discountLimit; - - @ApiModelProperty(value = "最低金额 当type为radom时需要添加") - private BigDecimal minMoney; - - @ApiModelProperty(value = "最大金额 当type为radom时需要添加") - private BigDecimal maxMoney; - - @ApiModelProperty(value = "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期") - private Boolean validityType; - - @ApiModelProperty(value = "使用开始日期 过期类型1时必填") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] startUseTime; - - @ApiModelProperty(value = "使用结束日期 过期类型1时必填") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] endUseTime; - - @ApiModelProperty(value = "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效") - private Integer fixedTerm; - - @ApiModelProperty(value = "是否无限制0-否 1是") - private Boolean whetherLimitless; - - @ApiModelProperty(value = "每人最大领取个数") - private Integer maxFetch; - - @ApiModelProperty(value = "是否开启过期提醒0-不开启 1-开启") - private Boolean whetherExpireNotice; - - @ApiModelProperty(value = "过期前N天提醒") - private Integer expireNoticeFixedTerm; - - @ApiModelProperty(value = "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用") - private Boolean whetherForbidPreference; - - @ApiModelProperty(value = "是否显示") - private Integer whetherShow; - - @ApiModelProperty(value = "订单的优惠总金额") - private BigDecimal discountOrderMoney; - - @ApiModelProperty(value = "用券总成交额") - private BigDecimal orderMoney; - - @ApiModelProperty(value = "是否禁止发放0-否 1-是") - private Boolean whetherForbidden; - - @ApiModelProperty(value = "使用优惠券购买的商品数量") - private Integer orderGoodsNum; - - @ApiModelProperty(value = "状态(1进行中2已结束-1已关闭)") - private Integer status; - - @ApiModelProperty(value = "有效日期结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] endTime; - - @ApiModelProperty(value = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date[] createTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteRespVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteRespVO.java deleted file mode 100644 index b65f7c259..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteRespVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.templete.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -@ApiModel("管理后台 - 优惠券模板 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CouponTempleteRespVO extends CouponTempleteBaseVO { - - @ApiModelProperty(value = "用户ID", required = true) - private Long id; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteUpdateReqVO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteUpdateReqVO.java deleted file mode 100644 index 1ee8b539d..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/templete/vo/CouponTempleteUpdateReqVO.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.module.coupon.controller.admin.templete.vo; - -import lombok.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -@ApiModel("管理后台 - 优惠券模板更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CouponTempleteUpdateReqVO extends CouponTempleteBaseVO { - - @ApiModelProperty(value = "用户ID", required = true) - @NotNull(message = "用户ID不能为空") - private Long id; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/convert/CouponTemplete/CouponTempleteConvert.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/convert/CouponTemplete/CouponTempleteConvert.java deleted file mode 100644 index a7f37919d..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/convert/CouponTemplete/CouponTempleteConvert.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.coupon.convert.CouponTemplete; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempleteCreateReqVO; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempleteExcelVO; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempleteRespVO; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempleteUpdateReqVO; -import cn.iocoder.yudao.module.coupon.dal.dataobject.CouponTemplete.CouponTempleteDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - - -/** - * 优惠券模板 Convert - * - * @author wxr - */ -@Mapper -public interface CouponTempleteConvert { - - CouponTempleteConvert INSTANCE = Mappers.getMapper(CouponTempleteConvert.class); - - CouponTempleteDO convert(CouponTempleteCreateReqVO bean); - - CouponTempleteDO convert(CouponTempleteUpdateReqVO bean); - - CouponTempleteRespVO convert(CouponTempleteDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/convert/coupon/CouponConvert.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/convert/coupon/CouponConvert.java deleted file mode 100644 index e4dab938b..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/convert/coupon/CouponConvert.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.coupon.convert.coupon; - -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.coupon.controller.admin.coupon.vo.*; -import cn.iocoder.yudao.module.coupon.dal.dataobject.coupon.CouponDO; - -/** - * 优惠券 Convert - * - * @author wxr - */ -@Mapper -public interface CouponConvert { - - CouponConvert INSTANCE = Mappers.getMapper(CouponConvert.class); - - CouponDO convert(CouponCreateReqVO bean); - - CouponDO convert(CouponUpdateReqVO bean); - - CouponRespVO convert(CouponDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/dataobject/CouponTemplete/CouponTempleteDO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/dataobject/CouponTemplete/CouponTempleteDO.java deleted file mode 100644 index e33771808..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/dataobject/CouponTemplete/CouponTempleteDO.java +++ /dev/null @@ -1,158 +0,0 @@ -package cn.iocoder.yudao.module.coupon.dal.dataobject.CouponTemplete; - -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 优惠券模板 DO - * - * @author wxr - */ -@TableName("coupon_templete") -@KeySequence("coupon_templete_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class CouponTempleteDO extends BaseDO { - - /** - * 用户ID - */ - @TableId - private Long id; - /** - * 优惠券类型 reward-满减 discount-折扣 random-随机 - */ - private String type; - /** - * 优惠券名称 - */ - private String name; - /** - * 名称备注 - */ - private String couponNameRemark; - /** - * 优惠券图片 - */ - private String image; - /** - * 发放数量 - */ - private Integer count; - /** - * 已领取数量 - */ - private Integer leadCount; - /** - * 已使用数量 - */ - private Integer usedCount; - /** - * 适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用 - */ - private Integer goodsType; - /** - * 适用商品id - */ - private String productIds; - /** - * 使用门槛0-无门槛 1-有门槛 - */ - private Boolean hasUseLimit; - /** - * 满多少元使用 0代表无限制 - */ - private BigDecimal atLeast; - /** - * 发放面额 当type为reward时需要添加 - */ - private BigDecimal money; - /** - * 1 =< 折扣 <= 9.9 当type为discount时需要添加 - */ - private BigDecimal discount; - /** - * 最多折扣金额 当type为discount时可选择性添加 - */ - private BigDecimal discountLimit; - /** - * 最低金额 当type为radom时需要添加 - */ - private BigDecimal minMoney; - /** - * 最大金额 当type为radom时需要添加 - */ - private BigDecimal maxMoney; - /** - * 过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期 - */ - private Integer validityType; - /** - * 使用开始日期 过期类型1时必填 - */ - private Date startUseTime; - /** - * 使用结束日期 过期类型1时必填 - */ - private Date endUseTime; - /** - * 当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效 - */ - private Integer fixedTerm; - /** - * 是否无限制0-否 1是 - */ - private Boolean whetherLimitless; - /** - * 每人最大领取个数 - */ - private Integer maxFetch; - /** - * 是否开启过期提醒0-不开启 1-开启 - */ - private Boolean whetherExpireNotice; - /** - * 过期前N天提醒 - */ - private Integer expireNoticeFixedTerm; - /** - * 优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用 - */ - private Boolean whetherForbidPreference; - /** - * 是否显示 - */ - private Integer whetherShow; - /** - * 订单的优惠总金额 - */ - private BigDecimal discountOrderMoney; - /** - * 用券总成交额 - */ - private BigDecimal orderMoney; - /** - * 是否禁止发放0-否 1-是 - */ - private Boolean whetherForbidden; - /** - * 使用优惠券购买的商品数量 - */ - private Integer orderGoodsNum; - /** - * 状态(1进行中2已结束-1已关闭) - */ - private Integer status; - /** - * 有效日期结束时间 - */ - private Date endTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/dataobject/coupon/CouponDO.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/dataobject/coupon/CouponDO.java deleted file mode 100644 index 70e3aae20..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/dataobject/coupon/CouponDO.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.yudao.module.coupon.dal.dataobject.coupon; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import com.baomidou.mybatisplus.annotation.*; - -/** - * 优惠券 DO - * - * @author wxr - */ -@TableName("coupon") -@KeySequence("coupon_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class CouponDO extends BaseDO { - - /** - * 用户ID - */ - @TableId - private Long id; - /** - * 优惠券类型 reward-满减 discount-折扣 random-随机 - */ - private String type; - /** - * 优惠券名称 - */ - private String name; - /** - * 优惠券类型id - */ - private Long couponTypeId; - /** - * 优惠券编码 - */ - private String couponCode; - /** - * 领用人 - */ - private Long memberId; - /** - * 优惠券使用订单id - */ - private Long useOrderId; - /** - * 适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用 - */ - private Boolean goodsType; - /** - * 适用商品id - */ - private String goodsIds; - /** - * 最小金额 - */ - private BigDecimal atLeast; - /** - * 面额 - */ - private BigDecimal money; - /** - * 1 =< 折扣 <= 9.9 当type为discount时需要添加 - */ - private BigDecimal discount; - /** - * 最多折扣金额 当type为discount时可选择性添加 - */ - private BigDecimal discountLimit; - /** - * 优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用 - */ - private Boolean whetherForbidPreference; - /** - * 是否开启过期提醒0-不开启 1-开启 - */ - private Boolean whetherExpireNotice; - /** - * 过期前N天提醒 - */ - private Integer expireNoticeFixedTerm; - /** - * 是否已提醒 - */ - private Boolean whetherNoticed; - /** - * 优惠券状态 1已领用(未使用) 2已使用 3已过期 - */ - private Integer state; - /** - * 获取方式1订单2.直接领取3.活动领取 4转赠 5分享获取 - */ - private Boolean getType; - /** - * 领取时间 - */ - private Date fetchTime; - /** - * 使用时间 - */ - private Date useTime; - /** - * 可使用的开始时间 - */ - private Date startTime; - /** - * 有效期结束时间 - */ - private Date endTime; - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/mysql/CouponTemplete/CouponTempleteMapper.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/mysql/CouponTemplete/CouponTempleteMapper.java deleted file mode 100644 index 3243ce17a..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/mysql/CouponTemplete/CouponTempleteMapper.java +++ /dev/null @@ -1,98 +0,0 @@ -package cn.iocoder.yudao.module.coupon.dal.mysql.CouponTemplete; - -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.coupon.controller.admin.templete.vo.CouponTempleteExportReqVO; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempletePageReqVO; -import cn.iocoder.yudao.module.coupon.dal.dataobject.CouponTemplete.CouponTempleteDO; -import org.apache.ibatis.annotations.Mapper; - - -/** - * 优惠券模板 Mapper - * - * @author wxr - */ -@Mapper -public interface CouponTempleteMapper extends BaseMapperX { - - default PageResult selectPage(CouponTempletePageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(CouponTempleteDO::getType, reqVO.getType()) - .likeIfPresent(CouponTempleteDO::getName, reqVO.getName()) - .eqIfPresent(CouponTempleteDO::getCouponNameRemark, reqVO.getCouponNameRemark()) - .eqIfPresent(CouponTempleteDO::getImage, reqVO.getImage()) - .eqIfPresent(CouponTempleteDO::getCount, reqVO.getCount()) - .eqIfPresent(CouponTempleteDO::getLeadCount, reqVO.getLeadCount()) - .eqIfPresent(CouponTempleteDO::getUsedCount, reqVO.getUsedCount()) - .eqIfPresent(CouponTempleteDO::getGoodsType, reqVO.getGoodsType()) - .eqIfPresent(CouponTempleteDO::getProductIds, reqVO.getProductIds()) - .eqIfPresent(CouponTempleteDO::getHasUseLimit, reqVO.getHasUseLimit()) - .eqIfPresent(CouponTempleteDO::getAtLeast, reqVO.getAtLeast()) - .eqIfPresent(CouponTempleteDO::getMoney, reqVO.getMoney()) - .eqIfPresent(CouponTempleteDO::getDiscount, reqVO.getDiscount()) - .eqIfPresent(CouponTempleteDO::getDiscountLimit, reqVO.getDiscountLimit()) - .eqIfPresent(CouponTempleteDO::getMinMoney, reqVO.getMinMoney()) - .eqIfPresent(CouponTempleteDO::getMaxMoney, reqVO.getMaxMoney()) - .eqIfPresent(CouponTempleteDO::getValidityType, reqVO.getValidityType()) - .betweenIfPresent(CouponTempleteDO::getStartUseTime, reqVO.getStartUseTime()) - .betweenIfPresent(CouponTempleteDO::getEndUseTime, reqVO.getEndUseTime()) - .eqIfPresent(CouponTempleteDO::getFixedTerm, reqVO.getFixedTerm()) - .eqIfPresent(CouponTempleteDO::getWhetherLimitless, reqVO.getWhetherLimitless()) - .eqIfPresent(CouponTempleteDO::getMaxFetch, reqVO.getMaxFetch()) - .eqIfPresent(CouponTempleteDO::getWhetherExpireNotice, reqVO.getWhetherExpireNotice()) - .eqIfPresent(CouponTempleteDO::getExpireNoticeFixedTerm, reqVO.getExpireNoticeFixedTerm()) - .eqIfPresent(CouponTempleteDO::getWhetherForbidPreference, reqVO.getWhetherForbidPreference()) - .eqIfPresent(CouponTempleteDO::getWhetherShow, reqVO.getWhetherShow()) - .eqIfPresent(CouponTempleteDO::getDiscountOrderMoney, reqVO.getDiscountOrderMoney()) - .eqIfPresent(CouponTempleteDO::getOrderMoney, reqVO.getOrderMoney()) - .eqIfPresent(CouponTempleteDO::getWhetherForbidden, reqVO.getWhetherForbidden()) - .eqIfPresent(CouponTempleteDO::getOrderGoodsNum, reqVO.getOrderGoodsNum()) - .eqIfPresent(CouponTempleteDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(CouponTempleteDO::getEndTime, reqVO.getEndTime()) - .betweenIfPresent(CouponTempleteDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(CouponTempleteDO::getId)); - } - - default List selectList(CouponTempleteExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .eqIfPresent(CouponTempleteDO::getType, reqVO.getType()) - .likeIfPresent(CouponTempleteDO::getName, reqVO.getName()) - .eqIfPresent(CouponTempleteDO::getCouponNameRemark, reqVO.getCouponNameRemark()) - .eqIfPresent(CouponTempleteDO::getImage, reqVO.getImage()) - .eqIfPresent(CouponTempleteDO::getCount, reqVO.getCount()) - .eqIfPresent(CouponTempleteDO::getLeadCount, reqVO.getLeadCount()) - .eqIfPresent(CouponTempleteDO::getUsedCount, reqVO.getUsedCount()) - .eqIfPresent(CouponTempleteDO::getGoodsType, reqVO.getGoodsType()) - .eqIfPresent(CouponTempleteDO::getProductIds, reqVO.getProductIds()) - .eqIfPresent(CouponTempleteDO::getHasUseLimit, reqVO.getHasUseLimit()) - .eqIfPresent(CouponTempleteDO::getAtLeast, reqVO.getAtLeast()) - .eqIfPresent(CouponTempleteDO::getMoney, reqVO.getMoney()) - .eqIfPresent(CouponTempleteDO::getDiscount, reqVO.getDiscount()) - .eqIfPresent(CouponTempleteDO::getDiscountLimit, reqVO.getDiscountLimit()) - .eqIfPresent(CouponTempleteDO::getMinMoney, reqVO.getMinMoney()) - .eqIfPresent(CouponTempleteDO::getMaxMoney, reqVO.getMaxMoney()) - .eqIfPresent(CouponTempleteDO::getValidityType, reqVO.getValidityType()) - .betweenIfPresent(CouponTempleteDO::getStartUseTime, reqVO.getStartUseTime()) - .betweenIfPresent(CouponTempleteDO::getEndUseTime, reqVO.getEndUseTime()) - .eqIfPresent(CouponTempleteDO::getFixedTerm, reqVO.getFixedTerm()) - .eqIfPresent(CouponTempleteDO::getWhetherLimitless, reqVO.getWhetherLimitless()) - .eqIfPresent(CouponTempleteDO::getMaxFetch, reqVO.getMaxFetch()) - .eqIfPresent(CouponTempleteDO::getWhetherExpireNotice, reqVO.getWhetherExpireNotice()) - .eqIfPresent(CouponTempleteDO::getExpireNoticeFixedTerm, reqVO.getExpireNoticeFixedTerm()) - .eqIfPresent(CouponTempleteDO::getWhetherForbidPreference, reqVO.getWhetherForbidPreference()) - .eqIfPresent(CouponTempleteDO::getWhetherShow, reqVO.getWhetherShow()) - .eqIfPresent(CouponTempleteDO::getDiscountOrderMoney, reqVO.getDiscountOrderMoney()) - .eqIfPresent(CouponTempleteDO::getOrderMoney, reqVO.getOrderMoney()) - .eqIfPresent(CouponTempleteDO::getWhetherForbidden, reqVO.getWhetherForbidden()) - .eqIfPresent(CouponTempleteDO::getOrderGoodsNum, reqVO.getOrderGoodsNum()) - .eqIfPresent(CouponTempleteDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(CouponTempleteDO::getEndTime, reqVO.getEndTime()) - .betweenIfPresent(CouponTempleteDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(CouponTempleteDO::getId)); - } - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/mysql/coupon/CouponMapper.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/mysql/coupon/CouponMapper.java deleted file mode 100644 index 8c9014694..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/dal/mysql/coupon/CouponMapper.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.iocoder.yudao.module.coupon.dal.mysql.coupon; - -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.coupon.dal.dataobject.coupon.CouponDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo.*; - -/** - * 优惠券 Mapper - * - * @author wxr - */ -@Mapper -public interface CouponMapper extends BaseMapperX { - - default PageResult selectPage(CouponPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(CouponDO::getType, reqVO.getType()) - .likeIfPresent(CouponDO::getName, reqVO.getName()) - .eqIfPresent(CouponDO::getCouponTypeId, reqVO.getCouponTypeId()) - .eqIfPresent(CouponDO::getCouponCode, reqVO.getCouponCode()) - .eqIfPresent(CouponDO::getMemberId, reqVO.getMemberId()) - .eqIfPresent(CouponDO::getUseOrderId, reqVO.getUseOrderId()) - .eqIfPresent(CouponDO::getGoodsType, reqVO.getGoodsType()) - .eqIfPresent(CouponDO::getGoodsIds, reqVO.getGoodsIds()) - .eqIfPresent(CouponDO::getAtLeast, reqVO.getAtLeast()) - .eqIfPresent(CouponDO::getMoney, reqVO.getMoney()) - .eqIfPresent(CouponDO::getDiscount, reqVO.getDiscount()) - .eqIfPresent(CouponDO::getDiscountLimit, reqVO.getDiscountLimit()) - .eqIfPresent(CouponDO::getWhetherForbidPreference, reqVO.getWhetherForbidPreference()) - .eqIfPresent(CouponDO::getWhetherExpireNotice, reqVO.getWhetherExpireNotice()) - .eqIfPresent(CouponDO::getExpireNoticeFixedTerm, reqVO.getExpireNoticeFixedTerm()) - .eqIfPresent(CouponDO::getWhetherNoticed, reqVO.getWhetherNoticed()) - .eqIfPresent(CouponDO::getState, reqVO.getState()) - .eqIfPresent(CouponDO::getGetType, reqVO.getGetType()) - .betweenIfPresent(CouponDO::getFetchTime, reqVO.getFetchTime()) - .betweenIfPresent(CouponDO::getUseTime, reqVO.getUseTime()) - .betweenIfPresent(CouponDO::getStartTime, reqVO.getStartTime()) - .betweenIfPresent(CouponDO::getEndTime, reqVO.getEndTime()) - .betweenIfPresent(CouponDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(CouponDO::getId)); - } - - default List selectList(CouponExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .eqIfPresent(CouponDO::getType, reqVO.getType()) - .likeIfPresent(CouponDO::getName, reqVO.getName()) - .eqIfPresent(CouponDO::getCouponTypeId, reqVO.getCouponTypeId()) - .eqIfPresent(CouponDO::getCouponCode, reqVO.getCouponCode()) - .eqIfPresent(CouponDO::getMemberId, reqVO.getMemberId()) - .eqIfPresent(CouponDO::getUseOrderId, reqVO.getUseOrderId()) - .eqIfPresent(CouponDO::getGoodsType, reqVO.getGoodsType()) - .eqIfPresent(CouponDO::getGoodsIds, reqVO.getGoodsIds()) - .eqIfPresent(CouponDO::getAtLeast, reqVO.getAtLeast()) - .eqIfPresent(CouponDO::getMoney, reqVO.getMoney()) - .eqIfPresent(CouponDO::getDiscount, reqVO.getDiscount()) - .eqIfPresent(CouponDO::getDiscountLimit, reqVO.getDiscountLimit()) - .eqIfPresent(CouponDO::getWhetherForbidPreference, reqVO.getWhetherForbidPreference()) - .eqIfPresent(CouponDO::getWhetherExpireNotice, reqVO.getWhetherExpireNotice()) - .eqIfPresent(CouponDO::getExpireNoticeFixedTerm, reqVO.getExpireNoticeFixedTerm()) - .eqIfPresent(CouponDO::getWhetherNoticed, reqVO.getWhetherNoticed()) - .eqIfPresent(CouponDO::getState, reqVO.getState()) - .eqIfPresent(CouponDO::getGetType, reqVO.getGetType()) - .betweenIfPresent(CouponDO::getFetchTime, reqVO.getFetchTime()) - .betweenIfPresent(CouponDO::getUseTime, reqVO.getUseTime()) - .betweenIfPresent(CouponDO::getStartTime, reqVO.getStartTime()) - .betweenIfPresent(CouponDO::getEndTime, reqVO.getEndTime()) - .betweenIfPresent(CouponDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(CouponDO::getId)); - } - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/package-info.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/package-info.java deleted file mode 100644 index 6743fd141..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * coupon模块,主要负责麦一些优惠券的额增删 - * - * 1. Controller URL:以 /coumon/ 开头,避免和其它 Module 冲突 - */ -package cn.iocoder.yudao.module.coupon; diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/CouponTemplete/CouponTempleteService.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/CouponTemplete/CouponTempleteService.java deleted file mode 100644 index 0527d11b7..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/CouponTemplete/CouponTempleteService.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.iocoder.yudao.module.coupon.service.CouponTemplete; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.*; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.coupon.dal.dataobject.CouponTemplete.CouponTempleteDO; - -/** - * 优惠券模板 Service 接口 - * - * @author wxr - */ -public interface CouponTempleteService { - - /** - * 创建优惠券模板 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long create(@Valid CouponTempleteCreateReqVO createReqVO); - - /** - * 更新优惠券模板 - * - * @param updateReqVO 更新信息 - */ - void update(@Valid CouponTempleteUpdateReqVO updateReqVO); - - /** - * 删除优惠券模板 - * - * @param id 编号 - */ - void delete(Long id); - - /** - * 获得优惠券模板 - * - * @param id 编号 - * @return 优惠券模板 - */ - CouponTempleteDO get(Long id); - - /** - * 获得优惠券模板列表 - * - * @param ids 编号 - * @return 优惠券模板列表 - */ - List getList(Collection ids); - - /** - * 获得优惠券模板分页 - * - * @param pageReqVO 分页查询 - * @return 优惠券模板分页 - */ - PageResult getPage(CouponTempletePageReqVO pageReqVO); - - /** - * 获得优惠券模板列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return 优惠券模板列表 - */ - List getList(CouponTempleteExportReqVO exportReqVO); - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/CouponTemplete/CouponTempleteServiceImpl.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/CouponTemplete/CouponTempleteServiceImpl.java deleted file mode 100644 index 6f07c4b2a..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/CouponTemplete/CouponTempleteServiceImpl.java +++ /dev/null @@ -1,134 +0,0 @@ -package cn.iocoder.yudao.module.coupon.service.CouponTemplete; - -import cn.iocoder.yudao.module.CouponTemplete.enums.CouponTypeEnum; -import cn.iocoder.yudao.module.CouponTemplete.enums.CouponValidityTypeEnum; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempleteCreateReqVO; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempleteExportReqVO; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempletePageReqVO; -import cn.iocoder.yudao.module.coupon.controller.admin.templete.vo.CouponTempleteUpdateReqVO; -import cn.iocoder.yudao.module.coupon.convert.CouponTemplete.CouponTempleteConvert; -import cn.iocoder.yudao.module.coupon.dal.dataobject.CouponTemplete.CouponTempleteDO; -import cn.iocoder.yudao.module.coupon.dal.mysql.CouponTemplete.CouponTempleteMapper; -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; - -import java.util.*; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - - - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.CouponTemplete.enums.ErrorCodeConstants.*; - -/** - * 优惠券模板 Service 实现类 - * - * @author wxr - */ -@Service -@Validated -public class CouponTempleteServiceImpl implements CouponTempleteService { - - @Resource - private CouponTempleteMapper couponTempleteMapper; - - @Override - public Long create(CouponTempleteCreateReqVO createReqVO) { - // 插入 - CouponTempleteDO couponTempleteDO = CouponTempleteConvert.INSTANCE.convert(createReqVO); - /* 验证类型、判断必填*/ - checkCouponType(createReqVO); - - /*验证过期类型、判断必填*/ - checkValidityType(createReqVO); - - - - couponTempleteMapper.insert(couponTempleteDO); - // 返回 - return couponTempleteDO.getId(); - } - - /*确认优惠券类型*/ - private void checkValidityType(CouponTempleteCreateReqVO createReqVO) { - Integer validtyType = createReqVO.getValidityType(); - - if(CouponValidityTypeEnum.TIME_RANGE_EXPIRTED.getStatus().equals(validtyType)){ - if(createReqVO.getStartUseTime() == null||createReqVO.getEndUseTime() == null){ - throw exception(START_END_TIME_NOT_NULL); - } - }else{ - if(createReqVO.getFixedTerm() == null){ - throw exception(FIXED_TERM_NOT_NULL); - } - } - } - - private void checkCouponType(CouponTempleteCreateReqVO createReqVO) { - - String couponType = createReqVO.getType(); - //当type=reward时候,需要添加 - if(couponType.equals(CouponTypeEnum.REWARD.getName())){ - if(createReqVO.getMoney()==null){ - throw exception(MONEY_NOT_NULL); - } - }else if(couponType.equals(CouponTypeEnum.DISCOUNT.getName())){ - if(createReqVO.getDiscount()==null){ - throw exception(DISCOUNT_NOT_NULL); - } - if(createReqVO.getDiscountLimit()==null){ - throw exception(DISCOUNT_LIMIT_NOT_NULL); - } - }else if (couponType.equals(CouponTypeEnum.RANDOW.getName())){ - //当type为radom时需要添加不能为空 - if(createReqVO.getMinMoney()==null||createReqVO.getMaxMoney()==null){ - throw exception(MIN_MAX_NOT_NULL); - } - } - } - - @Override - public void update(CouponTempleteUpdateReqVO updateReqVO) { - // 校验存在 - this.validateExists(updateReqVO.getId()); - // 更新 - CouponTempleteDO updateObj = CouponTempleteConvert.INSTANCE.convert(updateReqVO); - couponTempleteMapper.updateById(updateObj); - } - - @Override - public void delete(Long id) { - // 校验存在 - this.validateExists(id); - // 删除 - couponTempleteMapper.deleteById(id); - } - - private void validateExists(Long id) { - if (couponTempleteMapper.selectById(id) == null) { - throw exception(COUPON_TEMPLETE_NOT_EXISTS); - } - } - - @Override - public CouponTempleteDO get(Long id) { - return couponTempleteMapper.selectById(id); - } - - @Override - public List getList(Collection ids) { - return couponTempleteMapper.selectBatchIds(ids); - } - - @Override - public PageResult getPage(CouponTempletePageReqVO pageReqVO) { - return couponTempleteMapper.selectPage(pageReqVO); - } - - @Override - public List getList(CouponTempleteExportReqVO exportReqVO) { - return couponTempleteMapper.selectList(exportReqVO); - } - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/coupon/CouponService.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/coupon/CouponService.java deleted file mode 100644 index 6a9d31520..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/coupon/CouponService.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.iocoder.yudao.module.coupon.service.coupon; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo.*; -import cn.iocoder.yudao.module.coupon.dal.dataobject.coupon.CouponDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -/** - * 优惠券 Service 接口 - * - * @author wxr - */ -public interface CouponService { - - /** - * 创建优惠券 - * - * @param templateId 优惠券模板id - * @return 编号 - */ - Long create(Long templateId); - - /** - * 更新优惠券 - * - * @param updateReqVO 更新信息 - */ - void update(@Valid CouponUpdateReqVO updateReqVO); - - /** - * 删除优惠券 - * - * @param id 编号 - */ - void delete(Long id); - - /** - * 获得优惠券 - * - * @param id 编号 - * @return 优惠券 - */ - CouponDO get(Long id); - - /** - * 获得优惠券列表 - * - * @param ids 编号 - * @return 优惠券列表 - */ - List getList(Collection ids); - - /** - * 获得优惠券分页 - * - * @param pageReqVO 分页查询 - * @return 优惠券分页 - */ - PageResult getPage(CouponPageReqVO pageReqVO); - - /** - * 获得优惠券列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return 优惠券列表 - */ - List getList(CouponExportReqVO exportReqVO); - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/coupon/CouponServiceImpl.java b/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/coupon/CouponServiceImpl.java deleted file mode 100644 index 14f3cacc4..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/coupon/CouponServiceImpl.java +++ /dev/null @@ -1,106 +0,0 @@ -package cn.iocoder.yudao.module.coupon.service.coupon; - -import cn.hutool.core.bean.BeanUtil; -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; -import cn.iocoder.yudao.module.coupon.dal.dataobject.CouponTemplete.CouponTempleteDO; -import cn.iocoder.yudao.module.coupon.dal.mysql.CouponTemplete.CouponTempleteMapper; -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; - -import java.util.*; -import cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo.*; -import cn.iocoder.yudao.module.coupon.dal.dataobject.coupon.CouponDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import cn.iocoder.yudao.module.coupon.convert.coupon.CouponConvert; -import cn.iocoder.yudao.module.coupon.dal.mysql.coupon.CouponMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.CouponTemplete.enums.ErrorCodeConstants.COUPON_NOT_EXISTS; - -/** - * 优惠券 Service 实现类 - * - * @author wxr - */ -@Service -@Validated -public class CouponServiceImpl implements CouponService { - - @Resource - private CouponMapper couponMapper; - - @Resource - private CouponTempleteMapper couponTempleteMapper; - - public Long create(CouponCreateReqVO createReqVO) { - // 插入 - CouponDO couponDO = CouponConvert.INSTANCE.convert(createReqVO); - couponMapper.insert(couponDO); - // 返回 - return couponDO.getId(); - } - - - /** - *todo 获取用户id收获优惠券 - *@author:wxr - *@date:2022-08-13 3:11 - *@Description - */ - @Override - public Long create(Long templateId) { - Long userid = SecurityFrameworkUtils.getLoginUserId(); - CouponDO couponDO = CouponDO.builder().memberId(userid).build(); - CouponTempleteDO couponTempleteDO = couponTempleteMapper.selectById(templateId); - //todo 缺少判空 - BeanUtil.copyProperties(couponTempleteDO,couponTempleteDO); - couponMapper.insert(couponDO); - return couponDO.getId(); - } - - @Override - public void update(CouponUpdateReqVO updateReqVO) { - // 校验存在 - this.validateExists(updateReqVO.getId()); - // 更新 - CouponDO updateObj = CouponConvert.INSTANCE.convert(updateReqVO); - couponMapper.updateById(updateObj); - } - - @Override - public void delete(Long id) { - // 校验存在 - this.validateExists(id); - // 删除 - couponMapper.deleteById(id); - } - - private void validateExists(Long id) { - if (couponMapper.selectById(id) == null) { - throw exception(COUPON_NOT_EXISTS); - } - } - - @Override - public CouponDO get(Long id) { - return couponMapper.selectById(id); - } - - @Override - public List getList(Collection ids) { - return couponMapper.selectBatchIds(ids); - } - - @Override - public PageResult getPage(CouponPageReqVO pageReqVO) { - return couponMapper.selectPage(pageReqVO); - } - - @Override - public List getList(CouponExportReqVO exportReqVO) { - return couponMapper.selectList(exportReqVO); - } - -} diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/resources/mapper/CouponTemplete/CouponTempleteMapper.xml b/yudao-module-mall/yudao-module-coupon-biz/src/main/resources/mapper/CouponTemplete/CouponTempleteMapper.xml deleted file mode 100644 index b7db75a77..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/resources/mapper/CouponTemplete/CouponTempleteMapper.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/yudao-module-mall/yudao-module-coupon-biz/src/main/resources/mapper/coupon/CouponMapper.xml b/yudao-module-mall/yudao-module-coupon-biz/src/main/resources/mapper/coupon/CouponMapper.xml deleted file mode 100644 index a5e70cf5d..000000000 --- a/yudao-module-mall/yudao-module-coupon-biz/src/main/resources/mapper/coupon/CouponMapper.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java index 0976f846d..4b6cb8ca6 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java @@ -19,4 +19,8 @@ public interface ErrorCodeConstants { ErrorCode COUPON_NO_MATCH_SPU = new ErrorCode(1003003000, "优惠劵没有可使用的商品!"); ErrorCode COUPON_NO_MATCH_MIN_PRICE = new ErrorCode(1003003000, "不满足优惠劵使用的最低金额"); + // ========== 优惠劵模板 1003004000 ========== + ErrorCode COUPON_TEMPLATE_NOT_EXISTS = new ErrorCode(1003004000, "优惠劵模板不存在"); + ErrorCode COUPON_TEMPLATE_TOTAL_COUNT_TOO_SMALL = new ErrorCode(1003004001, "发放数量不能小于已领取数量({})"); + } diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionDiscountTypeEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionDiscountTypeEnum.java new file mode 100644 index 000000000..7da6b4b08 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionDiscountTypeEnum.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.promotion.enums.common; + +import cn.iocoder.yudao.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 优惠类型枚举 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum PromotionDiscountTypeEnum implements IntArrayValuable { + + PRICE(1, "满减"), // 具体金额 + PERCENT(2, "折扣"), // 百分比 + ; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(PromotionDiscountTypeEnum::getType).toArray(); + + /** + * 优惠类型 + */ + private final Integer type; + /** + * 名字 + */ + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTakeTypeEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTakeTypeEnum.java new file mode 100644 index 000000000..e1c13634f --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTakeTypeEnum.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.promotion.enums.coupon; + +import cn.iocoder.yudao.framework.common.core.IntArrayValuable; + +import java.util.Arrays; + +/** + * 优惠劵领取方式 + * + * @author 芋道源码 + */ +public enum CouponTakeTypeEnum implements IntArrayValuable { + + BY_USER(1, "直接领取"), // 用户可在首页、每日领劵直接领取 + BY_ADMIN(2, "指定发放"), // 后台指定会员赠送优惠劵 + ; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CouponTakeTypeEnum::getValue).toArray(); + + /** + * 值 + */ + private final Integer value; + /** + * 名字 + */ + private final String name; + + CouponTakeTypeEnum(Integer value, String name) { + this.value = value; + this.name = name; + } + + public Integer getValue() { + return value; + } + + public String getName() { + return name; + } + + @Override + public int[] array() { + return ARRAYS; + } +} diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTemplateValidityTypeEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTemplateValidityTypeEnum.java new file mode 100644 index 000000000..391515de3 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTemplateValidityTypeEnum.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.promotion.enums.coupon; + +import cn.iocoder.yudao.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 优惠劵模板的有限期类型的枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum CouponTemplateValidityTypeEnum implements IntArrayValuable { + + DATE(1, "固定日期"), + TERM(2, "领取之后"), + ; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CouponTemplateValidityTypeEnum::getType).toArray(); + + /** + * 值 + */ + private final Integer type; + /** + * 名字 + */ + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/CouponTemplateController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/CouponTemplateController.java new file mode 100755 index 000000000..4f1d51c61 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/CouponTemplateController.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.coupon; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateCreateReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplatePageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateRespVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateUpdateReqVO; +import cn.iocoder.yudao.module.promotion.convert.coupon.CouponTemplateConvert; +import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponTemplateDO; +import cn.iocoder.yudao.module.promotion.service.coupon.CouponTemplateService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Api(tags = "管理后台 - 优惠劵模板") +@RestController +@RequestMapping("/promotion/coupon-template") +@Validated +public class CouponTemplateController { + + @Resource + private CouponTemplateService couponTemplateService; + + @PostMapping("/create") + @ApiOperation("创建优惠劵模板") + @PreAuthorize("@ss.hasPermission('promotion:coupon-template:create')") + public CommonResult createCouponTemplate(@Valid @RequestBody CouponTemplateCreateReqVO createReqVO) { + return success(couponTemplateService.createCouponTemplate(createReqVO)); + } + + @PutMapping("/update") + @ApiOperation("更新优惠劵模板") + @PreAuthorize("@ss.hasPermission('promotion:coupon-template:update')") + public CommonResult updateCouponTemplate(@Valid @RequestBody CouponTemplateUpdateReqVO updateReqVO) { + couponTemplateService.updateCouponTemplate(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除优惠劵模板") + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('promotion:coupon-template:delete')") + public CommonResult deleteCouponTemplate(@RequestParam("id") Long id) { + couponTemplateService.deleteCouponTemplate(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得优惠劵模板") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('promotion:coupon-template:query')") + public CommonResult getCouponTemplate(@RequestParam("id") Long id) { + CouponTemplateDO couponTemplate = couponTemplateService.getCouponTemplate(id); + return success(CouponTemplateConvert.INSTANCE.convert(couponTemplate)); + } + + @GetMapping("/page") + @ApiOperation("获得优惠劵模板分页") + @PreAuthorize("@ss.hasPermission('promotion:coupon-template:query')") + public CommonResult> getCouponTemplatePage(@Valid CouponTemplatePageReqVO pageVO) { + PageResult pageResult = couponTemplateService.getCouponTemplatePage(pageVO); + return success(CouponTemplateConvert.INSTANCE.convertPage(pageResult)); + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateBaseVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateBaseVO.java new file mode 100755 index 000000000..f41b8181b --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateBaseVO.java @@ -0,0 +1,151 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; +import cn.iocoder.yudao.module.promotion.enums.coupon.CouponTemplateValidityTypeEnum; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.AssertTrue; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +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 CouponTemplateBaseVO { + + @ApiModelProperty(value = "优惠劵名", required = true, example = "春节送送送") + @NotNull(message = "优惠劵名不能为空") + private String name; + + @ApiModelProperty(value = "发行总量", required = true, example = "1024", notes = "-1 - 则表示不限制发放数量") + @NotNull(message = "发行总量不能为空") + private Integer totalCount; + + @ApiModelProperty(value = "每人限领个数", required = true, example = "66", notes = "-1 - 则表示不限制") + @NotNull(message = "每人限领个数不能为空") + private Integer takeLimitCount; + + @ApiModelProperty(value = "领取方式", required = true, example = "1", notes = "参见 CouponTakeTypeEnum 枚举类") + @NotNull(message = "领取方式不能为空") + private Integer takeType; + + @ApiModelProperty(value = "是否设置满多少金额可用", required = true, example = "100", notes = "单位:分;0 - 不限制") + @NotNull(message = "是否设置满多少金额可用不能为空") + private Integer usePrice; + + @ApiModelProperty(value = "商品范围", required = true, example = "1", notes = "参见 PromotionProductScopeEnum 枚举类") + @NotNull(message = "商品范围不能为空") + @InEnum(PromotionProductScopeEnum.class) + private Integer productScope; + + @ApiModelProperty(value = "商品 SPU 编号的数组", example = "1,3") + private List productSpuIds; + + @ApiModelProperty(value = "生效日期类型", required = true, example = "1") + @NotNull(message = "生效日期类型不能为空") + @InEnum(CouponTemplateValidityTypeEnum.class) + private Integer validityType; + + @ApiModelProperty(value = "固定日期 - 生效开始时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date validStartTime; + + @ApiModelProperty(value = "固定日期 - 生效结束时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date validEndTime; + + @ApiModelProperty(value = "领取日期 - 开始天数") + @Min(value = 0L, message = "开始天数必须大于 0") + private Integer fixedStartTerm; + + @ApiModelProperty(value = "领取日期 - 结束天数") + @Min(value = 1L, message = "开始天数必须大于 1") + private Integer fixedEndTerm; + + @ApiModelProperty(value = "优惠类型", required = true, example = "1", notes = "参见 PromotionDiscountTypeEnum 枚举") + @NotNull(message = "优惠类型不能为空") + @InEnum(PromotionDiscountTypeEnum.class) + private Integer discountType; + + @ApiModelProperty(value = "折扣百分比", example = "80", notes = "例如说,80% 为 80") + @Min(value = 1) + private Integer discountPercent; + + @ApiModelProperty(value = "优惠金额", example = "10", notes = "单位:分") + @Min(value = 1) + private Integer discountPrice; + + @ApiModelProperty(value = "折扣上限", example = "100", notes = "单位:分,仅在 discountType 为 PERCENT 使用") + private Integer discountPriceLimit; + + @AssertTrue(message = "商品 SPU 编号的数组不能为空") + @JsonIgnore + public boolean isProductSpuIdsValid() { + return Objects.equals(productScope, PromotionProductScopeEnum.ALL.getScope()) // 全部范围时,可以为空 + || CollUtil.isNotEmpty(productSpuIds); + } + + @AssertTrue(message = "生效开始时间不能为空") + @JsonIgnore + public boolean isValidStartTimeValid() { + return ObjectUtil.notEqual(validityType, CouponTemplateValidityTypeEnum.DATE.getType()) + || validStartTime != null; + } + + @AssertTrue(message = "生效结束时间不能为空") + @JsonIgnore + public boolean isValidEndTimeValid() { + return ObjectUtil.notEqual(validityType, CouponTemplateValidityTypeEnum.DATE.getType()) + || validEndTime != null; + } + + @AssertTrue(message = "开始天数不能为空") + @JsonIgnore + public boolean isFixedStartTermValid() { + return ObjectUtil.notEqual(validityType, CouponTemplateValidityTypeEnum.TERM.getType()) + || fixedStartTerm != null; + } + + @AssertTrue(message = "结束天数不能为空") + @JsonIgnore + public boolean isFixedEndTermValid() { + return ObjectUtil.notEqual(validityType, CouponTemplateValidityTypeEnum.TERM.getType()) + || fixedEndTerm != null; + } + + @AssertTrue(message = "折扣百分比不能为空") + @JsonIgnore + public boolean isDiscountPercentValid() { + return ObjectUtil.notEqual(discountType, PromotionDiscountTypeEnum.PERCENT.getType()) + || discountPercent != null; + } + + @AssertTrue(message = "优惠金额不能为空") + @JsonIgnore + public boolean isDiscountPriceValid() { + return ObjectUtil.notEqual(discountType, PromotionDiscountTypeEnum.PRICE.getType()) + || discountPrice != null; + } + + @AssertTrue(message = "折扣上限不能为空") + @JsonIgnore + public boolean isDiscountPriceLimit() { + return ObjectUtil.notEqual(discountType, PromotionDiscountTypeEnum.PERCENT.getType()) + || discountPriceLimit != null; + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateCreateReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateCreateReqVO.java new file mode 100755 index 000000000..60f658b90 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateCreateReqVO.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@ApiModel("管理后台 - 优惠劵模板创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CouponTemplateCreateReqVO extends CouponTemplateBaseVO { + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplatePageReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplatePageReqVO.java new file mode 100755 index 000000000..2092112c3 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplatePageReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; +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 javax.validation.constraints.NotNull; +import java.util.Date; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("管理后台 - 优惠劵模板分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CouponTemplatePageReqVO extends PageParam { + + @ApiModelProperty(value = "优惠劵名", example = "你好") + private String name; + + @ApiModelProperty(value = "状态", example = "1", notes = "参见 CommonStatusEnum 枚举类") + private Integer status; + + @ApiModelProperty(value = "优惠类型", example = "1", notes = "参见 PromotionDiscountTypeEnum 枚举") + private Integer discountType; + + @ApiModelProperty(value = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date[] createTime; + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateRespVO.java new file mode 100755 index 000000000..835149027 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateRespVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + +@ApiModel("管理后台 - 优惠劵模板 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CouponTemplateRespVO extends CouponTemplateBaseVO { + + @ApiModelProperty(value = "模板编号", required = true, example = "1024") + private Long id; + + @ApiModelProperty(value = "状态", required = true, example = "1") + @InEnum(CommonStatusEnum.class) + private Integer status; + + @ApiModelProperty(value = "领取优惠券的数量", required = true, example = "1024") + private Integer takeCount; + + @ApiModelProperty(value = "使用优惠券的次数", required = true, example = "2048") + private Integer useCount; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateUpdateReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateUpdateReqVO.java new file mode 100755 index 000000000..afa62ce6c --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateUpdateReqVO.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.coupon.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 CouponTemplateUpdateReqVO extends CouponTemplateBaseVO { + + @ApiModelProperty(value = "模板编号", required = true, example = "1024") + @NotNull(message = "模板编号不能为空") + private Long id; + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/coupon/CouponTemplateConvert.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/coupon/CouponTemplateConvert.java new file mode 100755 index 000000000..5fedd9678 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/coupon/CouponTemplateConvert.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.promotion.convert.coupon; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateCreateReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateRespVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateUpdateReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponTemplateDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 优惠劵模板 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface CouponTemplateConvert { + + CouponTemplateConvert INSTANCE = Mappers.getMapper(CouponTemplateConvert.class); + + CouponTemplateDO convert(CouponTemplateCreateReqVO bean); + + CouponTemplateDO convert(CouponTemplateUpdateReqVO bean); + + CouponTemplateRespVO convert(CouponTemplateDO bean); + + PageResult convertPage(PageResult page); + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/coupon/CouponDO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/coupon/CouponDO.java index 2e37c5839..9bf41f317 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/coupon/CouponDO.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/coupon/CouponDO.java @@ -2,24 +2,23 @@ package cn.iocoder.yudao.module.promotion.dal.dataobject.coupon; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; import java.util.Date; import java.util.List; -// TODO 芋艿:待完善该实体 /** * 优惠劵 DO */ -@TableName("coupon") +@TableName(value = "promotion_coupon", autoResultMap = true) +@KeySequence("promotion_coupo_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @EqualsAndHashCode(callSuper = true) -@Accessors(chain = true) public class CouponDO extends BaseDO { // ========== 基本信息 BEGIN ========== @@ -28,7 +27,9 @@ public class CouponDO extends BaseDO { */ private Long id; /** - * 优惠劵(码)分组编号,{@link CouponTemplateDO} 的 id + * 优惠劵模板编号 + * + * 关联 {@link CouponTemplateDO#getId()} */ private Integer templateId; /** diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/coupon/CouponTemplateDO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/coupon/CouponTemplateDO.java new file mode 100644 index 000000000..543289c63 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/coupon/CouponTemplateDO.java @@ -0,0 +1,160 @@ +package cn.iocoder.yudao.module.promotion.dal.dataobject.coupon; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; +import cn.iocoder.yudao.module.promotion.enums.coupon.CouponTakeTypeEnum; +import cn.iocoder.yudao.module.promotion.enums.coupon.CouponTemplateValidityTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; +import java.util.List; + +/** + * 优惠劵模板 DO + * + * 当用户领取时,会生成 {@link CouponDO} 优惠劵 + */ +@TableName(value = "promotion_coupon_template", autoResultMap = true) +@KeySequence("promotion_coupon_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class CouponTemplateDO extends BaseDO { + + // ========== 基本信息 BEGIN ========== + /** + * 模板编号,自增唯一 + */ + @TableId + private Long id; + /** + * 优惠劵名 + */ + private String name; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + + // ========== 基本信息 END ========== + + // ========== 领取规则 BEGIN ========== + /** + * 发放数量 + * + * -1 - 则表示不限制发放数量 + */ + private Integer totalCount; + /** + * 每人限领个数 + * + * -1 - 则表示不限制 + */ + private Integer takeLimitCount; + /** + * 领取方式 + * + * 枚举 {@link CouponTakeTypeEnum} + */ + private Integer takeType; + // ========== 领取规则 END ========== + + // ========== 使用规则 BEGIN ========== + /** + * 是否设置满多少金额可用,单位:分 + * + * 0 - 不限制 + * 大于 0 - 多少金额可用 + */ + private Integer usePrice; + /** + * 商品范围 + * + * 枚举 {@link PromotionProductScopeEnum} + */ + private Integer productScope; + /** + * 商品 SPU 编号的数组 + */ + @TableField(typeHandler = LongListTypeHandler.class) + private List productSpuIds; + /** + * 生效日期类型 + * + * 枚举 {@link CouponTemplateValidityTypeEnum} + */ + private Integer validityType; + /** + * 固定日期 - 生效开始时间 + * + * 当 {@link #validityType} 为 {@link CouponTemplateValidityTypeEnum#DATE} + */ + private Date validStartTime; + /** + * 固定日期 - 生效结束时间 + * + * 当 {@link #validityType} 为 {@link CouponTemplateValidityTypeEnum#DATE} + */ + private Date validEndTime; + /** + * 领取日期 - 开始天数 + * + * 当 {@link #validityType} 为 {@link CouponTemplateValidityTypeEnum#TERM} + */ + private Integer fixedStartTerm; + /** + * 领取日期 - 结束天数 + * + * 当 {@link #validityType} 为 {@link CouponTemplateValidityTypeEnum#TERM} + */ + private Integer fixedEndTerm; + // ========== 使用规则 END ========== + + // ========== 使用效果 BEGIN ========== + /** + * 折扣类型 + * + * 枚举 {@link PromotionDiscountTypeEnum} + */ + private Integer discountType; + /** + * 折扣百分比 + * + * 例如,80% 为 80 + */ + private Integer discountPercent; + /** + * 优惠金额,单位:分 + * + * 当 {@link #discountType} 为 {@link PromotionDiscountTypeEnum#PRICE} 生效 + */ + private Integer discountPrice; + /** + * 折扣上限,仅在 {@link #discountType} 等于 {@link PromotionDiscountTypeEnum#PERCENT} 时生效 + * + * 例如,折扣上限为 20 元,当使用 8 折优惠券,订单金额为 1000 元时,最高只可折扣 20 元,而非 80 元。 + */ + private Integer discountLimitPrice; + // ========== 使用效果 END ========== + + // ========== 统计信息 BEGIN ========== + /** + * 领取优惠券的数量 + */ + private Integer takeCount; + /** + * 使用优惠券的次数 + */ + private Integer useCount; + // ========== 统计信息 END ========== + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/reward/RewardActivityDO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/reward/RewardActivityDO.java index e63f40ff4..b284bc939 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/reward/RewardActivityDO.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/reward/RewardActivityDO.java @@ -69,7 +69,7 @@ public class RewardActivityDO extends BaseDO { * 商品 SPU 编号的数组 */ @TableField(typeHandler = JacksonTypeHandler.class) - private List spuIds; + private List productSpuIds; /** * 优惠规则的数组 */ diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/coupon/CouponTemplateMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/coupon/CouponTemplateMapper.java new file mode 100755 index 000000000..f99e658fb --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/coupon/CouponTemplateMapper.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.promotion.dal.mysql.coupon; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplatePageReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponTemplateDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 优惠劵模板 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface CouponTemplateMapper extends BaseMapperX { + + default PageResult selectPage(CouponTemplatePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(CouponTemplateDO::getName, reqVO.getName()) + .eqIfPresent(CouponTemplateDO::getStatus, reqVO.getStatus()) + .eqIfPresent(CouponTemplateDO::getDiscountType, reqVO.getDiscountType()) + .betweenIfPresent(CouponTemplateDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(CouponTemplateDO::getId)); + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateService.java new file mode 100755 index 000000000..a1fc14d13 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.promotion.service.coupon; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateCreateReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplatePageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateUpdateReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponTemplateDO; + +import javax.validation.Valid; + +/** + * 优惠劵模板 Service 接口 + * + * @author 芋道源码 + */ +public interface CouponTemplateService { + + /** + * 创建优惠劵模板 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createCouponTemplate(@Valid CouponTemplateCreateReqVO createReqVO); + + /** + * 更新优惠劵模板 + * + * @param updateReqVO 更新信息 + */ + void updateCouponTemplate(@Valid CouponTemplateUpdateReqVO updateReqVO); + + /** + * 删除优惠劵模板 + * + * @param id 编号 + */ + void deleteCouponTemplate(Long id); + + /** + * 获得优惠劵模板 + * + * @param id 编号 + * @return 优惠劵模板 + */ + CouponTemplateDO getCouponTemplate(Long id); + + /** + * 获得优惠劵模板分页 + * + * @param pageReqVO 分页查询 + * @return 优惠劵模板分页 + */ + PageResult getCouponTemplatePage(CouponTemplatePageReqVO pageReqVO); + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java new file mode 100755 index 000000000..ef7c93db6 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java @@ -0,0 +1,79 @@ +package cn.iocoder.yudao.module.promotion.service.coupon; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateCreateReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplatePageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateUpdateReqVO; +import cn.iocoder.yudao.module.promotion.convert.coupon.CouponTemplateConvert; +import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponTemplateDO; +import cn.iocoder.yudao.module.promotion.dal.mysql.coupon.CouponTemplateMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +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 CouponTemplateServiceImpl implements CouponTemplateService { + + @Resource + private CouponTemplateMapper couponTemplateMapper; + + @Override + public Long createCouponTemplate(CouponTemplateCreateReqVO createReqVO) { + // 插入 + CouponTemplateDO couponTemplate = CouponTemplateConvert.INSTANCE.convert(createReqVO); + couponTemplateMapper.insert(couponTemplate); + // 返回 + return couponTemplate.getId(); + } + + @Override + public void updateCouponTemplate(CouponTemplateUpdateReqVO updateReqVO) { + // 校验存在 + CouponTemplateDO couponTemplate = validateCouponTemplateExists(updateReqVO.getId()); + // 校验发放数量不能过小 + if (updateReqVO.getTotalCount() < couponTemplate.getTakeCount()) { + throw exception(COUPON_TEMPLATE_TOTAL_COUNT_TOO_SMALL, couponTemplate.getTakeCount()); + } + + // 更新 + CouponTemplateDO updateObj = CouponTemplateConvert.INSTANCE.convert(updateReqVO); + couponTemplateMapper.updateById(updateObj); + } + + @Override + public void deleteCouponTemplate(Long id) { + // 校验存在 + validateCouponTemplateExists(id); + // 删除 + couponTemplateMapper.deleteById(id); + } + + private CouponTemplateDO validateCouponTemplateExists(Long id) { + CouponTemplateDO couponTemplate = couponTemplateMapper.selectById(id); + if (couponTemplate == null) { + throw exception(COUPON_TEMPLATE_NOT_EXISTS); + } + return couponTemplate; + } + + @Override + public CouponTemplateDO getCouponTemplate(Long id) { + return couponTemplateMapper.selectById(id); + } + + @Override + public PageResult getCouponTemplatePage(CouponTemplatePageReqVO pageReqVO) { + return couponTemplateMapper.selectPage(pageReqVO); + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceImpl.java index 8a57fa0bc..7fa111d26 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceImpl.java @@ -114,24 +114,24 @@ public class PriceServiceImpl implements PriceService { */ private void calculatePriceForSkuLevel(Long userId, PriceCalculateRespDTO priceCalculate) { // 获取 SKU 级别的所有优惠信息 - Supplier memberDiscountSupplier = getMemberDiscountSupplier(userId); + Supplier memberDiscountPercentSupplier = getMemberDiscountPercentSupplier(userId); Map discountProducts = discountService.getMatchDiscountProducts( convertSet(priceCalculate.getOrder().getItems(), PriceCalculateRespDTO.OrderItem::getSkuId)); // 处理每个 SKU 的优惠 priceCalculate.getOrder().getItems().forEach(orderItem -> { // 获取该 SKU 的优惠信息 - Double memberDiscount = memberDiscountSupplier.get(); + Double memberDiscountPercent = memberDiscountPercentSupplier.get(); DiscountProductDO discountProduct = discountProducts.get(orderItem.getSkuId()); if (discountProduct != null // 假设优惠价格更贵,则认为没优惠 && discountProduct.getPromotionPrice() >= orderItem.getOriginalUnitPrice()) { discountProduct = null; } - if (memberDiscount == null && discountProduct == null) { + if (memberDiscountPercent == null && discountProduct == null) { return; } // 计算价格,判断选择哪个折扣 - Integer memberPrice = memberDiscount != null ? (int) (orderItem.getPayPrice() * memberDiscount / 100) : null; + Integer memberPrice = memberDiscountPercent != null ? (int) (orderItem.getPayPrice() * memberDiscountPercent / 100) : null; Integer promotionPrice = discountProduct != null ? discountProduct.getPromotionPrice() * orderItem.getCount() : null; if (memberPrice == null) { calculatePriceByDiscountActivity(priceCalculate, orderItem, discountProduct, promotionPrice); @@ -166,7 +166,7 @@ public class PriceServiceImpl implements PriceService { } // TODO 芋艿:提前实现 - private Supplier getMemberDiscountSupplier(Long userId) { + private Supplier getMemberDiscountPercentSupplier(Long userId) { return Suppliers.memoize(() -> { if (userId == 1) { return 90d; diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java new file mode 100755 index 000000000..8a87fb584 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImplTest.java @@ -0,0 +1,136 @@ +package cn.iocoder.yudao.module.promotion.service.coupon; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateCreateReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplatePageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateUpdateReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponTemplateDO; +import cn.iocoder.yudao.module.promotion.dal.mysql.coupon.CouponTemplateMapper; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import java.util.Date; + +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COUPON_TEMPLATE_NOT_EXISTS; +import static org.junit.jupiter.api.Assertions.*; + +/** +* {@link CouponTemplateServiceImpl} 的单元测试类 +* +* @author 芋道源码 +*/ +@Import(CouponTemplateServiceImpl.class) +public class CouponTemplateServiceImplTest extends BaseDbUnitTest { + + @Resource + private CouponTemplateServiceImpl couponTemplateService; + + @Resource + private CouponTemplateMapper couponTemplateMapper; + + @Test + public void testCreateCouponTemplate_success() { + // 准备参数 + CouponTemplateCreateReqVO reqVO = randomPojo(CouponTemplateCreateReqVO.class); + + // 调用 + Long couponTemplateId = couponTemplateService.createCouponTemplate(reqVO); + // 断言 + assertNotNull(couponTemplateId); + // 校验记录的属性是否正确 + CouponTemplateDO couponTemplate = couponTemplateMapper.selectById(couponTemplateId); + assertPojoEquals(reqVO, couponTemplate); + } + + @Test + public void testUpdateCouponTemplate_success() { + // mock 数据 + CouponTemplateDO dbCouponTemplate = randomPojo(CouponTemplateDO.class); + couponTemplateMapper.insert(dbCouponTemplate);// @Sql: 先插入出一条存在的数据 + // 准备参数 + CouponTemplateUpdateReqVO reqVO = randomPojo(CouponTemplateUpdateReqVO.class, o -> { + o.setId(dbCouponTemplate.getId()); // 设置更新的 ID + }); + + // 调用 + couponTemplateService.updateCouponTemplate(reqVO); + // 校验是否更新正确 + CouponTemplateDO couponTemplate = couponTemplateMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, couponTemplate); + } + + @Test + public void testUpdateCouponTemplate_notExists() { + // 准备参数 + CouponTemplateUpdateReqVO reqVO = randomPojo(CouponTemplateUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> couponTemplateService.updateCouponTemplate(reqVO), COUPON_TEMPLATE_NOT_EXISTS); + } + + @Test + public void testDeleteCouponTemplate_success() { + // mock 数据 + CouponTemplateDO dbCouponTemplate = randomPojo(CouponTemplateDO.class); + couponTemplateMapper.insert(dbCouponTemplate);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbCouponTemplate.getId(); + + // 调用 + couponTemplateService.deleteCouponTemplate(id); + // 校验数据不存在了 + assertNull(couponTemplateMapper.selectById(id)); + } + + @Test + public void testDeleteCouponTemplate_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> couponTemplateService.deleteCouponTemplate(id), COUPON_TEMPLATE_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetCouponTemplatePage() { + // mock 数据 + CouponTemplateDO dbCouponTemplate = randomPojo(CouponTemplateDO.class, o -> { // 等会查询到 + o.setName(null); + o.setStatus(null); + o.setDiscountType(null); + o.setCreateTime(null); + }); + couponTemplateMapper.insert(dbCouponTemplate); + // 测试 name 不匹配 + couponTemplateMapper.insert(cloneIgnoreId(dbCouponTemplate, o -> o.setName(null))); + // 测试 status 不匹配 + couponTemplateMapper.insert(cloneIgnoreId(dbCouponTemplate, o -> o.setStatus(null))); + // 测试 type 不匹配 + couponTemplateMapper.insert(cloneIgnoreId(dbCouponTemplate, o -> o.setDiscountType(null))); + // 测试 createTime 不匹配 + couponTemplateMapper.insert(cloneIgnoreId(dbCouponTemplate, o -> o.setCreateTime(null))); + // 准备参数 + CouponTemplatePageReqVO reqVO = new CouponTemplatePageReqVO(); + reqVO.setName(null); + reqVO.setStatus(null); + reqVO.setDiscountType(null); + reqVO.setCreateTime((new Date[]{})); + + // 调用 + PageResult pageResult = couponTemplateService.getCouponTemplatePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbCouponTemplate, pageResult.getList().get(0)); + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceTest.java b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceTest.java index c5bb54052..4e4a72738 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceTest.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/price/PriceServiceTest.java @@ -198,10 +198,10 @@ public class PriceServiceTest extends BaseMockitoUnitTest { when(productSkuApi.getSkuList(eq(asSet(10L, 20L, 30L)))).thenReturn(asList(productSku01, productSku02, productSku03)); // mock 方法(限时折扣 DiscountActivity 信息) RewardActivityDO rewardActivity01 = randomPojo(RewardActivityDO.class, o -> o.setId(1000L).setName("活动 1000 号") - .setSpuIds(asList(10L, 20L)).setConditionType(PromotionConditionTypeEnum.PRICE.getType()) + .setProductSpuIds(asList(10L, 20L)).setConditionType(PromotionConditionTypeEnum.PRICE.getType()) .setRules(singletonList(new RewardActivityDO.Rule().setLimit(200).setDiscountPrice(70)))); RewardActivityDO rewardActivity02 = randomPojo(RewardActivityDO.class, o -> o.setId(2000L).setName("活动 2000 号") - .setSpuIds(singletonList(30L)).setConditionType(PromotionConditionTypeEnum.COUNT.getType()) + .setProductSpuIds(singletonList(30L)).setConditionType(PromotionConditionTypeEnum.COUNT.getType()) .setRules(asList(new RewardActivityDO.Rule().setLimit(1).setDiscountPrice(10), new RewardActivityDO.Rule().setLimit(2).setDiscountPrice(60), // 最大可满足,因为是 4 个 new RewardActivityDO.Rule().setLimit(10).setDiscountPrice(100)))); @@ -301,7 +301,7 @@ public class PriceServiceTest extends BaseMockitoUnitTest { when(productSkuApi.getSkuList(eq(asSet(10L, 20L)))).thenReturn(asList(productSku01, productSku02)); // mock 方法(限时折扣 DiscountActivity 信息) RewardActivityDO rewardActivity01 = randomPojo(RewardActivityDO.class, o -> o.setId(1000L).setName("活动 1000 号") - .setSpuIds(asList(10L, 20L)).setConditionType(PromotionConditionTypeEnum.PRICE.getType()) + .setProductSpuIds(asList(10L, 20L)).setConditionType(PromotionConditionTypeEnum.PRICE.getType()) .setRules(singletonList(new RewardActivityDO.Rule().setLimit(351).setDiscountPrice(70)))); Map> matchRewardActivities = new LinkedHashMap<>(); matchRewardActivities.put(rewardActivity01, asSet(1L, 2L)); diff --git a/yudao-ui-admin/src/api/promotion/couponTemplate.js b/yudao-ui-admin/src/api/promotion/couponTemplate.js new file mode 100755 index 000000000..67d821cf0 --- /dev/null +++ b/yudao-ui-admin/src/api/promotion/couponTemplate.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' + +// 创建优惠劵模板 +export function createCouponTemplate(data) { + return request({ + url: '/promotion/coupon-template/create', + method: 'post', + data: data + }) +} + +// 更新优惠劵模板 +export function updateCouponTemplate(data) { + return request({ + url: '/promotion/coupon-template/update', + method: 'put', + data: data + }) +} + +// 删除优惠劵模板 +export function deleteCouponTemplate(id) { + return request({ + url: '/promotion/coupon-template/delete?id=' + id, + method: 'delete' + }) +} + +// 获得优惠劵模板 +export function getCouponTemplate(id) { + return request({ + url: '/promotion/coupon-template/get?id=' + id, + method: 'get' + }) +} + +// 获得优惠劵模板分页 +export function getCouponTemplatePage(query) { + return request({ + url: '/promotion/coupon-template/page', + method: 'get', + params: query + }) +} + +// 导出优惠劵模板 Excel +export function exportCouponTemplateExcel(query) { + return request({ + url: '/promotion/coupon-template/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/yudao-ui-admin/src/utils/constants.js b/yudao-ui-admin/src/utils/constants.js index 9f5d796ed..1480c6f26 100644 --- a/yudao-ui-admin/src/utils/constants.js +++ b/yudao-ui-admin/src/utils/constants.js @@ -236,3 +236,45 @@ export const ProductSpuStatusEnum = { name: '上架' }, } + +/** + * 优惠类型枚举 + */ +export const PromotionDiscountTypeEnum = { + PRICE: { + type: 1, + name: '满减' + }, + PERCENT: { + type: 2, + name: '折扣' + } +} + +/** + * 优惠劵模板的有限期类型的枚举 + */ +export const CouponTemplateValidityTypeEnum = { + DATE: { + type: 1, + name: '固定日期可用' + }, + TERM: { + type: 2, + name: '领取之后可用' + } +} + +/** + * 营销的商品范围枚举 + */ +export const PromotionProductScopeEnum = { + ALL: { + scope: 1, + name: '全部商品参与' + }, + SPU: { + scope: 2, + name: '指定商品参与' + } +} diff --git a/yudao-ui-admin/src/utils/dict.js b/yudao-ui-admin/src/utils/dict.js index 8c5b4bbca..786e41cfb 100644 --- a/yudao-ui-admin/src/utils/dict.js +++ b/yudao-ui-admin/src/utils/dict.js @@ -59,6 +59,11 @@ export const DICT_TYPE = { // ========== MALL - PRODUCT 模块 ========== PRODUCT_SPU_STATUS: 'product_spu_status', // 商品 SPU 状态 + + // ========== MALL - PROMOTION 模块 ========== + PROMOTION_DISCOUNT_TYPE: 'promotion_discount_type', // 优惠类型 + PROMOTION_PRODUCT_SCOPE: 'promotion_product_scope', // 营销的商品范围 + COUPON_TEMPLATE_VALIDITY_TYPE: 'coupon_template_validity_type', // 优惠劵模板的有限期类型 } /** diff --git a/yudao-ui-admin/src/views/mall/product/brand/index.vue b/yudao-ui-admin/src/views/mall/product/brand/index.vue index 106080406..b37189bf9 100644 --- a/yudao-ui-admin/src/views/mall/product/brand/index.vue +++ b/yudao-ui-admin/src/views/mall/product/brand/index.vue @@ -1,8 +1,7 @@