Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
989259de
提交
989259de
authored
4月 06, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
后端:优惠劵领取相关接口
上级
6c502864
隐藏空白字符变更
内嵌
并排
正在显示
19 个修改的文件
包含
620 行增加
和
47 行删除
+620
-47
DateUtil.java
.../main/java/cn/iocoder/common/framework/util/DateUtil.java
+3
-0
AdminsCouponController.java
...application/controller/admins/AdminsCouponController.java
+32
-32
UsersBannerController.java
...n/application/controller/users/UsersBannerController.java
+2
-3
UsersCouponController.java
...n/application/controller/users/UsersCouponController.java
+52
-0
CouponCardConvert.java
...mall/promotion/application/convert/CouponCardConvert.java
+21
-0
CouponTemplateConvert.java
.../promotion/application/convert/CouponTemplateConvert.java
+4
-0
AdminsCouponTemplateVO.java
...omotion/application/vo/admins/AdminsCouponTemplateVO.java
+3
-3
UsersCouponCardVO.java
...all/promotion/application/vo/users/UsersCouponCardVO.java
+55
-0
UsersCouponTemplateVO.java
...promotion/application/vo/users/UsersCouponTemplateVO.java
+54
-0
CouponService.java
...ain/java/cn/iocoder/mall/promotion/api/CouponService.java
+2
-0
CouponCardBO.java
...n/java/cn/iocoder/mall/promotion/api/bo/CouponCardBO.java
+103
-0
CouponCardStatusEnum.java
...der/mall/promotion/api/constant/CouponCardStatusEnum.java
+45
-0
CouponCardTakeTypeEnum.java
...r/mall/promotion/api/constant/CouponCardTakeTypeEnum.java
+44
-0
PromotionErrorCodeEnum.java
...r/mall/promotion/api/constant/PromotionErrorCodeEnum.java
+1
-0
CouponCardConvert.java
...iocoder/mall/promotion/biz/convert/CouponCardConvert.java
+25
-0
CouponCardMapper.java
...a/cn/iocoder/mall/promotion/biz/dao/CouponCardMapper.java
+22
-0
CouponCardDO.java
...n/iocoder/mall/promotion/biz/dataobject/CouponCardDO.java
+4
-8
CouponServiceImpl.java
...iocoder/mall/promotion/biz/service/CouponServiceImpl.java
+56
-1
CouponCardMapper.xml
...rvice-impl/src/main/resources/mapper/CouponCardMapper.xml
+92
-0
没有找到文件。
common/common-framework/src/main/java/cn/iocoder/common/framework/util/DateUtil.java
浏览文件 @
989259de
...
...
@@ -26,6 +26,9 @@ public class DateUtil {
* @return 计算后的日志
*/
public
static
Date
addDate
(
Date
date
,
int
field
,
int
amount
)
{
if
(
amount
==
0
)
{
return
date
;
}
Calendar
c
=
Calendar
.
getInstance
();
if
(
date
!=
null
)
{
c
.
setTime
(
date
);
...
...
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsCoupon
Template
Controller.java
→
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsCouponController.java
浏览文件 @
989259de
...
...
@@ -25,7 +25,7 @@ import java.util.Date;
@RestController
@RequestMapping
(
"admins/coupon"
)
@Api
(
"优惠劵(码)模块"
)
public
class
AdminsCoupon
Template
Controller
{
public
class
AdminsCouponController
{
@Reference
(
validation
=
"true"
)
private
CouponService
couponService
;
...
...
@@ -39,12 +39,12 @@ public class AdminsCouponTemplateController {
@ApiImplicitParam
(
name
=
"pageNo"
,
value
=
"页码,从 1 开始"
,
example
=
"1"
),
@ApiImplicitParam
(
name
=
"pageSize"
,
value
=
"每页条数"
,
required
=
true
,
example
=
"10"
),
})
public
CommonResult
<
AdminsCouponTemplatePageVO
>
p
age
(
@RequestParam
(
value
=
"type"
,
required
=
false
)
Integer
type
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
String
title
,
@RequestParam
(
value
=
"status"
,
required
=
false
)
Integer
status
,
@RequestParam
(
value
=
"preferentialType"
,
required
=
false
)
Integer
preferentialType
,
@RequestParam
(
value
=
"pageNo"
,
defaultValue
=
"0"
)
Integer
pageNo
,
@RequestParam
(
value
=
"pageSize"
,
defaultValue
=
"10"
)
Integer
pageSize
)
{
public
CommonResult
<
AdminsCouponTemplatePageVO
>
templateP
age
(
@RequestParam
(
value
=
"type"
,
required
=
false
)
Integer
type
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
String
title
,
@RequestParam
(
value
=
"status"
,
required
=
false
)
Integer
status
,
@RequestParam
(
value
=
"preferentialType"
,
required
=
false
)
Integer
preferentialType
,
@RequestParam
(
value
=
"pageNo"
,
defaultValue
=
"0"
)
Integer
pageNo
,
@RequestParam
(
value
=
"pageSize"
,
defaultValue
=
"10"
)
Integer
pageSize
)
{
CommonResult
<
CouponTemplatePageBO
>
result
=
couponService
.
getCouponTemplatePage
(
new
CouponTemplatePageDTO
()
.
setType
(
type
).
setTitle
(
title
).
setStatus
(
status
).
setPreferentialType
(
preferentialType
)
.
setPageNo
(
pageNo
).
setPageSize
(
pageSize
));
...
...
@@ -71,24 +71,24 @@ public class AdminsCouponTemplateController {
@ApiImplicitParam
(
name
=
"percentOff"
,
value
=
"折扣百分比"
,
example
=
"当 preferentialType 为折扣卷时,非空"
),
@ApiImplicitParam
(
name
=
"discountPriceLimit"
,
value
=
"折扣上限"
,
example
=
"当 preferentialType 为折扣卷时,非空"
),
})
public
CommonResult
<
AdminsCouponTemplateVO
>
a
dd
(
@RequestParam
(
value
=
"title"
)
String
title
,
@RequestParam
(
value
=
"description"
,
required
=
false
)
String
description
,
@RequestParam
(
value
=
"quota"
)
Integer
quota
,
@RequestParam
(
value
=
"total"
,
required
=
false
)
Integer
total
,
@RequestParam
(
value
=
"priceAvailable"
)
Integer
priceAvailable
,
@RequestParam
(
value
=
"rangeType"
)
Integer
rangeType
,
@RequestParam
(
value
=
"rangeValues"
,
required
=
false
)
String
rangeValues
,
@RequestParam
(
value
=
"dateType"
)
Integer
dateType
,
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
public
CommonResult
<
AdminsCouponTemplateVO
>
templateCardA
dd
(
@RequestParam
(
value
=
"title"
)
String
title
,
@RequestParam
(
value
=
"description"
,
required
=
false
)
String
description
,
@RequestParam
(
value
=
"quota"
)
Integer
quota
,
@RequestParam
(
value
=
"total"
,
required
=
false
)
Integer
total
,
@RequestParam
(
value
=
"priceAvailable"
)
Integer
priceAvailable
,
@RequestParam
(
value
=
"rangeType"
)
Integer
rangeType
,
@RequestParam
(
value
=
"rangeValues"
,
required
=
false
)
String
rangeValues
,
@RequestParam
(
value
=
"dateType"
)
Integer
dateType
,
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
@RequestParam
(
value
=
"validStartTime"
,
required
=
false
)
Date
validStartTime
,
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
@RequestParam
(
value
=
"validEndTime"
,
required
=
false
)
Date
validEndTime
,
@RequestParam
(
value
=
"fixedBeginTerm"
,
required
=
false
)
Integer
fixedBeginTerm
,
@RequestParam
(
value
=
"fixedEndTerm"
,
required
=
false
)
Integer
fixedEndTerm
,
@RequestParam
(
value
=
"preferentialType"
)
Integer
preferentialType
,
@RequestParam
(
value
=
"priceOff"
,
required
=
false
)
Integer
priceOff
,
@RequestParam
(
value
=
"percentOff"
,
required
=
false
)
Integer
percentOff
,
@RequestParam
(
value
=
"discountPriceLimit"
,
required
=
false
)
Integer
discountPriceLimit
)
{
@RequestParam
(
value
=
"fixedBeginTerm"
,
required
=
false
)
Integer
fixedBeginTerm
,
@RequestParam
(
value
=
"fixedEndTerm"
,
required
=
false
)
Integer
fixedEndTerm
,
@RequestParam
(
value
=
"preferentialType"
)
Integer
preferentialType
,
@RequestParam
(
value
=
"priceOff"
,
required
=
false
)
Integer
priceOff
,
@RequestParam
(
value
=
"percentOff"
,
required
=
false
)
Integer
percentOff
,
@RequestParam
(
value
=
"discountPriceLimit"
,
required
=
false
)
Integer
discountPriceLimit
)
{
// 创建 CouponCardTemplateAddDTO 对象
validStartTime
=
DateUtil
.
getDayBegin
(
validStartTime
);
// 开始时间,以当前 00:00:00 为准
validEndTime
=
DateUtil
.
getDayBegin
(
validEndTime
);
// 结束时间,以当前 25:59:59 为准
...
...
@@ -116,13 +116,13 @@ public class AdminsCouponTemplateController {
@ApiImplicitParam
(
name
=
"rangeType"
,
value
=
"可用范围的类型"
,
required
=
true
,
example
=
"参见 CouponTemplateRangeTypeEnum 枚举"
),
@ApiImplicitParam
(
name
=
"rangeValues"
,
value
=
"指定商品 / 分类列表,使用逗号分隔商品编号"
),
})
public
CommonResult
<
Boolean
>
u
pdate
(
@RequestParam
(
value
=
"id"
)
Integer
id
,
@RequestParam
(
value
=
"title"
)
String
title
,
@RequestParam
(
value
=
"description"
,
required
=
false
)
String
description
,
@RequestParam
(
value
=
"quota"
)
Integer
quota
,
@RequestParam
(
value
=
"total"
,
required
=
false
)
Integer
total
,
@RequestParam
(
value
=
"rangeType"
)
Integer
rangeType
,
@RequestParam
(
value
=
"rangeValues"
,
required
=
false
)
String
rangeValues
)
{
public
CommonResult
<
Boolean
>
templateCardU
pdate
(
@RequestParam
(
value
=
"id"
)
Integer
id
,
@RequestParam
(
value
=
"title"
)
String
title
,
@RequestParam
(
value
=
"description"
,
required
=
false
)
String
description
,
@RequestParam
(
value
=
"quota"
)
Integer
quota
,
@RequestParam
(
value
=
"total"
,
required
=
false
)
Integer
total
,
@RequestParam
(
value
=
"rangeType"
)
Integer
rangeType
,
@RequestParam
(
value
=
"rangeValues"
,
required
=
false
)
String
rangeValues
)
{
// 创建 CouponCardTemplateAddDTO 对象
CouponCardTemplateUpdateDTO
couponCardTemplateUpdateDTO
=
new
CouponCardTemplateUpdateDTO
()
.
setId
(
id
)
...
...
@@ -138,8 +138,8 @@ public class AdminsCouponTemplateController {
@ApiImplicitParam
(
name
=
"id"
,
value
=
"Banner 编号"
,
required
=
true
,
example
=
"1"
),
@ApiImplicitParam
(
name
=
"status"
,
value
=
"状态。1 - 开启;2 - 禁用"
,
required
=
true
,
example
=
"1"
),
})
public
CommonResult
<
Boolean
>
u
pdateStatus
(
@RequestParam
(
"id"
)
Integer
id
,
@RequestParam
(
"status"
)
Integer
status
)
{
public
CommonResult
<
Boolean
>
templateU
pdateStatus
(
@RequestParam
(
"id"
)
Integer
id
,
@RequestParam
(
"status"
)
Integer
status
)
{
return
couponService
.
updateCouponTemplateStatus
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
id
,
status
);
}
...
...
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/users/Users
ProductCategory
Controller.java
→
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/users/Users
Banner
Controller.java
浏览文件 @
989259de
...
...
@@ -19,7 +19,7 @@ import java.util.List;
@RestController
@RequestMapping
(
"users/banner"
)
@Api
(
"Banner 模块"
)
public
class
Users
ProductCategory
Controller
{
public
class
Users
Banner
Controller
{
@Reference
(
validation
=
"true"
)
private
BannerService
bannerService
;
...
...
@@ -35,4 +35,4 @@ public class UsersProductCategoryController {
return
CommonResult
.
success
(
BannerConvert
.
INSTANCE
.
convertList
(
result
));
}
}
\ No newline at end of file
}
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/users/UsersCouponController.java
0 → 100644
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
application
.
controller
.
users
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.promotion.api.CouponService
;
import
cn.iocoder.mall.promotion.api.bo.CouponCardBO
;
import
cn.iocoder.mall.promotion.api.bo.CouponTemplateBO
;
import
cn.iocoder.mall.promotion.application.convert.CouponCardConvert
;
import
cn.iocoder.mall.promotion.application.convert.CouponTemplateConvert
;
import
cn.iocoder.mall.promotion.application.vo.users.UsersCouponCardVO
;
import
cn.iocoder.mall.promotion.application.vo.users.UsersCouponTemplateVO
;
import
cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder
;
import
com.alibaba.dubbo.config.annotation.Reference
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
@RequestMapping
(
"admins/coupon"
)
@Api
(
"优惠劵(码)模块"
)
public
class
UsersCouponController
{
@Reference
(
validation
=
"true"
)
private
CouponService
couponService
;
// ========== 优惠劵(码)模板 ==========
@GetMapping
(
"/template/get"
)
@ApiOperation
(
value
=
"优惠劵(码)模板信息"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"优惠劵(码)模板编号"
,
required
=
true
,
example
=
"10"
)
public
CommonResult
<
UsersCouponTemplateVO
>
templateGet
(
@RequestParam
(
"id"
)
Integer
id
)
{
CouponTemplateBO
template
=
couponService
.
getCouponTemplate
(
id
).
getData
();
return
CommonResult
.
success
(
CouponTemplateConvert
.
INSTANCE
.
convert2
(
template
));
}
// ========== 优惠劵 ==========
@GetMapping
(
"/card/add"
)
@ApiOperation
(
value
=
"领取优惠劵"
)
@ApiImplicitParam
(
name
=
"templateId"
,
value
=
"优惠劵(码)模板编号"
,
required
=
true
,
example
=
"10"
)
public
CommonResult
<
UsersCouponCardVO
>
cardAdd
(
@RequestParam
(
"templateId"
)
Integer
templateId
)
{
CommonResult
<
CouponCardBO
>
result
=
couponService
.
addCouponCard
(
UserSecurityContextHolder
.
getContext
().
getUserId
(),
templateId
);
return
CouponCardConvert
.
INSTANCE
.
convert
(
result
);
}
// ========== 优惠码 ==========
}
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/convert/CouponCardConvert.java
0 → 100644
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
application
.
convert
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.promotion.api.bo.CouponCardBO
;
import
cn.iocoder.mall.promotion.application.vo.users.UsersCouponCardVO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
@Mapper
public
interface
CouponCardConvert
{
CouponCardConvert
INSTANCE
=
Mappers
.
getMapper
(
CouponCardConvert
.
class
);
@Mappings
({})
CommonResult
<
UsersCouponCardVO
>
convert
(
CommonResult
<
CouponCardBO
>
result
);
//
// @Mappings({})
// List<UsersCouponTemplateVO> convertList2(List<CouponTemplateBO> banners);
}
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/convert/CouponTemplateConvert.java
浏览文件 @
989259de
...
...
@@ -5,6 +5,7 @@ import cn.iocoder.mall.promotion.api.bo.CouponTemplateBO;
import
cn.iocoder.mall.promotion.api.bo.CouponTemplatePageBO
;
import
cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplatePageVO
;
import
cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplateVO
;
import
cn.iocoder.mall.promotion.application.vo.users.UsersCouponTemplateVO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
...
...
@@ -28,6 +29,9 @@ public interface CouponTemplateConvert {
@Mappings
({})
List
<
AdminsCouponTemplateVO
>
convertList
(
List
<
CouponTemplateBO
>
templates
);
@Mappings
({})
UsersCouponTemplateVO
convert2
(
CouponTemplateBO
template
);
//
// @Mappings({})
// List<UsersCouponTemplateVO> convertList2(List<CouponTemplateBO> banners);
...
...
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/vo/admins/AdminsCouponTemplateVO.java
浏览文件 @
989259de
...
...
@@ -59,7 +59,7 @@ public class AdminsCouponTemplateVO {
// ========== 使用规则 END ==========
// ========== 使用效果 BEGIN ==========
@ApiModelProperty
(
value
=
"优惠类型"
,
example
=
"参见 CouponTemplatePreferentialTypeEnum 枚举"
)
@ApiModelProperty
(
value
=
"优惠类型"
,
required
=
true
,
example
=
"参见 CouponTemplatePreferentialTypeEnum 枚举"
)
private
Integer
preferentialType
;
@ApiModelProperty
(
value
=
"折扣百分比"
)
private
Integer
percentOff
;
...
...
@@ -70,11 +70,11 @@ public class AdminsCouponTemplateVO {
// ========== 使用效果 END ==========
// ========== 统计信息 BEGIN ==========
@ApiModelProperty
(
value
=
"
折扣上限
"
,
required
=
true
)
@ApiModelProperty
(
value
=
"
领取优惠券的次数
"
,
required
=
true
)
private
Integer
statFetchNum
;
// ========== 统计信息 END ==========
@ApiModelProperty
(
value
=
"
折扣上限
"
,
required
=
true
)
@ApiModelProperty
(
value
=
"
创建时间
"
,
required
=
true
)
private
Date
createTime
;
}
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/vo/users/UsersCouponCardVO.java
0 → 100644
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
application
.
vo
.
users
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* 优惠劵 VO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
UsersCouponCardVO
{
// ========== 基本信息 BEGIN ==========
@ApiModelProperty
(
value
=
"优惠劵编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"模板编号,自增唯一"
,
required
=
true
,
example
=
"1"
)
private
Integer
templateId
;
@ApiModelProperty
(
value
=
"优惠码状态"
,
required
=
true
,
example
=
"参见 CouponCardStatusEnum 枚举"
)
private
Integer
status
;
// ========== 基本信息 END ==========
// ========== 使用规则 BEGIN ==========
@ApiModelProperty
(
value
=
"固定日期-生效开始时间"
,
required
=
true
)
private
Date
validStartTime
;
@ApiModelProperty
(
value
=
"固定日期-生效结束时间"
,
required
=
true
)
private
Date
validEndTime
;
// ========== 使用规则 END ==========
// ========== 使用效果 BEGIN ==========
@ApiModelProperty
(
value
=
"优惠类型"
,
required
=
true
,
example
=
"参见 CouponTemplatePreferentialTypeEnum 枚举"
)
private
Integer
preferentialType
;
@ApiModelProperty
(
value
=
"折扣百分比"
)
private
Integer
percentOff
;
@ApiModelProperty
(
value
=
"优惠金额,单位:分"
)
private
Integer
priceOff
;
@ApiModelProperty
(
value
=
"折扣上限"
)
private
Integer
discountPriceLimit
;
// ========== 使用效果 END ==========
// ========== 使用情况 BEGIN ==========
/**
* 是否使用
*/
@ApiModelProperty
(
value
=
"是否使用"
,
required
=
true
)
private
Boolean
used
;
// TODO 芋艿,后续要加优惠劵的使用日志,因为下单后,可能会取消。
// ========== 使用情况 END ==========
}
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/vo/users/UsersCouponTemplateVO.java
0 → 100644
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
application
.
vo
.
users
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
@ApiModel
(
"CouponTemplate VO"
)
@Data
@Accessors
(
chain
=
true
)
public
class
UsersCouponTemplateVO
{
// ========== 基本信息 BEGIN ==========
@ApiModelProperty
(
value
=
"模板编号,自增唯一"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"标题"
,
required
=
true
,
example
=
"优惠劵牛逼"
)
private
String
title
;
@ApiModelProperty
(
value
=
"优惠码状态"
,
required
=
true
,
example
=
"参见 CouponTemplateStatusEnum 枚举"
)
private
Integer
status
;
// ========== 领取规则 END ==========
// ========== 使用规则 BEGIN ==========
@ApiModelProperty
(
value
=
"是否设置满多少金额可用,单位:分"
,
required
=
true
,
example
=
"0-不限制;大于0-多少金额可用"
)
private
Integer
priceAvailable
;
@ApiModelProperty
(
value
=
"可用范围的类型"
,
required
=
true
,
example
=
"参见 CouponTemplateRangeTypeEnum 枚举"
)
private
Integer
rangeType
;
@ApiModelProperty
(
value
=
"指定商品 / 分类列表,使用逗号分隔商品编号"
,
example
=
"参见 CouponTemplateRangeTypeEnum 枚举"
)
private
String
rangeValues
;
@ApiModelProperty
(
value
=
"生效日期类型"
,
example
=
"参见 CouponTemplateDateTypeEnum 枚举"
)
private
Integer
dateType
;
@ApiModelProperty
(
value
=
"固定日期-生效开始时间"
)
private
Date
validStartTime
;
@ApiModelProperty
(
value
=
"固定日期-生效结束时间"
)
private
Date
validEndTime
;
@ApiModelProperty
(
value
=
"领取日期-开始天数"
,
example
=
"例如,0-当天;1-次天"
)
private
Integer
fixedStartTerm
;
@ApiModelProperty
(
value
=
"领取日期-结束天数"
)
private
Integer
fixedEndTerm
;
// ========== 使用规则 END ==========
// ========== 使用效果 BEGIN ==========
@ApiModelProperty
(
value
=
"优惠类型"
,
required
=
true
,
example
=
"参见 CouponTemplatePreferentialTypeEnum 枚举"
)
private
Integer
preferentialType
;
@ApiModelProperty
(
value
=
"折扣百分比"
)
private
Integer
percentOff
;
@ApiModelProperty
(
value
=
"优惠金额,单位:分"
)
private
Integer
priceOff
;
@ApiModelProperty
(
value
=
"折扣上限"
)
private
Integer
discountPriceLimit
;
// ========== 使用效果 END ==========
}
promotion/promotion-service-api/src/main/java/cn/iocoder/mall/promotion/api/CouponService.java
浏览文件 @
989259de
...
...
@@ -12,6 +12,8 @@ public interface CouponService {
// ========== 优惠劵(码)模板 ==========
CommonResult
<
CouponTemplateBO
>
getCouponTemplate
(
Integer
couponTemplateId
);
CommonResult
<
CouponTemplatePageBO
>
getCouponTemplatePage
(
CouponTemplatePageDTO
couponTemplatePageDTO
);
/**
...
...
promotion/promotion-service-api/src/main/java/cn/iocoder/mall/promotion/api/bo/CouponCardBO.java
浏览文件 @
989259de
...
...
@@ -3,10 +3,113 @@ package cn.iocoder.mall.promotion.api.bo;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* 优惠劵 BO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
CouponCardBO
{
// ========== 基本信息 BEGIN ==========
/**
* 优惠劵编号
*/
private
Integer
id
;
/**
* 优惠劵(码)分组编号
*/
private
Integer
templateId
;
// /**
// * 核销码
// */
// private String verifyCode;
/**
* 优惠码状态
*
* 1-未使用
* 2-已使用
* 3-已失效
*/
private
Integer
status
;
// ========== 基本信息 END ==========
// ========== 领取情况 BEGIN ==========
/**
* 用户编号
*/
private
Integer
userId
;
/**
* 领取类型
*
* 1 - 用户主动领取
* 2 - 后台自动发放
*/
private
Integer
takeType
;
// ========== 领取情况 END ==========
// ========== 使用规则 BEGIN ==========
/**
* 生效开始时间
*/
private
Date
validStartTime
;
/**
* 生效结束时间
*/
private
Date
validEndTime
;
// ========== 使用规则 END ==========
// ========== 使用效果 BEGIN ==========
/**
* 优惠类型
*
* 1-代金卷
* 2-折扣卷
*/
private
Integer
preferentialType
;
/**
* 折扣
*/
private
Integer
percentOff
;
/**
* 优惠金额,单位:分。
*/
private
Integer
priceOff
;
/**
* 折扣上限,仅在 {@link #preferentialType} 等于 2 时生效。
*
* 例如,折扣上限为 20 元,当使用 8 折优惠券,订单金额为 1000 元时,最高只可折扣 20 元,而非 80 元。
*/
private
Integer
discountPriceLimit
;
// ========== 使用效果 END ==========
// ========== 使用情况 BEGIN ==========
/**
* 是否使用
*/
private
Boolean
used
;
/**
* 使用订单号
*/
private
Integer
usedOrderId
;
/**
* 订单中优惠面值,单位:分
*/
private
Integer
usedPrice
;
/**
* 使用时间
*/
private
Date
usedTime
;
// TODO 芋艿,后续要加优惠劵的使用日志,因为下单后,可能会取消。
// ========== 使用情况 END ==========
/**
* 创建时间
*/
private
Date
createTime
;
}
promotion/promotion-service-api/src/main/java/cn/iocoder/mall/promotion/api/constant/CouponCardStatusEnum.java
0 → 100644
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
api
.
constant
;
import
cn.iocoder.common.framework.core.IntArrayValuable
;
import
java.util.Arrays
;
/**
* 优惠劵状态枚举
*/
public
enum
CouponCardStatusEnum
implements
IntArrayValuable
{
UNUSED
(
1
,
"未使用"
),
USED
(
2
,
"已使用"
),
EXPIRE
(
3
,
"已过期"
),
;
public
static
final
int
[]
ARRAYS
=
Arrays
.
stream
(
values
()).
mapToInt
(
CouponCardStatusEnum:
:
getValue
).
toArray
();
/**
* 值
*/
private
final
Integer
value
;
/**
* 名字
*/
private
final
String
name
;
CouponCardStatusEnum
(
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
;
}
}
promotion/promotion-service-api/src/main/java/cn/iocoder/mall/promotion/api/constant/CouponCardTakeTypeEnum.java
0 → 100644
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
api
.
constant
;
import
cn.iocoder.common.framework.core.IntArrayValuable
;
import
java.util.Arrays
;
/**
* 优惠劵领取方式
*/
public
enum
CouponCardTakeTypeEnum
implements
IntArrayValuable
{
BY_USER
(
1
,
"用户主动领取"
),
BY_ADMIN
(
2
,
"已使用"
),
;
public
static
final
int
[]
ARRAYS
=
Arrays
.
stream
(
values
()).
mapToInt
(
CouponCardTakeTypeEnum:
:
getValue
).
toArray
();
/**
* 值
*/
private
final
Integer
value
;
/**
* 名字
*/
private
final
String
name
;
CouponCardTakeTypeEnum
(
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
;
}
}
promotion/promotion-service-api/src/main/java/cn/iocoder/mall/promotion/api/constant/PromotionErrorCodeEnum.java
浏览文件 @
989259de
...
...
@@ -21,6 +21,7 @@ public enum PromotionErrorCodeEnum {
PRODUCT_TEMPLATE_NOT_CARD
(
1006002001
,
"不是优惠劵模板"
),
PRODUCT_TEMPLATE_NOT_CODE
(
1006002002
,
"不是优惠码模板"
),
PRODUCT_TEMPLATE_TOTAL_CAN_NOT_REDUCE
(
1006002003
,
"优惠劵(码)模板的发放数量不能减小"
),
PRODUCT_TEMPLATE_STATUS_NOT_ENABLE
(
1006002004
,
"优惠劵模板(码)未开启"
),
;
...
...
promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/convert/CouponCardConvert.java
0 → 100644
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
biz
.
convert
;
import
cn.iocoder.mall.promotion.api.bo.CouponCardBO
;
import
cn.iocoder.mall.promotion.biz.dataobject.CouponCardDO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
@Mapper
public
interface
CouponCardConvert
{
CouponCardConvert
INSTANCE
=
Mappers
.
getMapper
(
CouponCardConvert
.
class
);
// @Mappings({})
// CouponCardBO convertToBO(CouponCardDO banner);
//
@Mappings
({})
List
<
CouponCardBO
>
convertToBO
(
List
<
CouponCardDO
>
cardList
);
@Mappings
({})
CouponCardBO
convert
(
CouponCardDO
card
);
}
promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dao/CouponCardMapper.java
0 → 100644
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
biz
.
dao
;
import
cn.iocoder.mall.promotion.biz.dataobject.CouponCardDO
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@Repository
public
interface
CouponCardMapper
{
CouponCardDO
selectById
(
@Param
(
"id"
)
Integer
id
);
List
<
CouponCardDO
>
selectListByPage
(
@Param
(
"status"
)
Integer
status
);
Integer
selectCountByPage
(
@Param
(
"status"
)
Integer
status
);
void
insert
(
CouponCardDO
couponCardDO
);
int
update
(
CouponCardDO
couponCardDO
);
}
promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCardDO.java
浏览文件 @
989259de
...
...
@@ -53,11 +53,11 @@ public class CouponCardDO extends BaseDO {
// ========== 使用规则 BEGIN ==========
/**
*
固定日期-
生效开始时间
* 生效开始时间
*/
private
Date
validStartTime
;
/**
*
固定日期-
生效结束时间
* 生效结束时间
*/
private
Date
validEndTime
;
// ========== 使用规则 END ==========
...
...
@@ -73,7 +73,7 @@ public class CouponCardDO extends BaseDO {
/**
* 折扣
*/
private
Double
percentOff
;
private
Integer
percentOff
;
/**
* 优惠金额,单位:分。
*/
...
...
@@ -87,14 +87,10 @@ public class CouponCardDO extends BaseDO {
// ========== 使用效果 END ==========
// ========== 使用情况 BEGIN ==========
/**
* 是否使用
*/
private
Boolean
used
;
/**
* 使用订单号
*/
private
String
usedOrderId
;
private
Integer
usedOrderId
;
/**
* 订单中优惠面值,单位:分
*/
...
...
promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/CouponServiceImpl.java
浏览文件 @
989259de
package
cn
.
iocoder
.
mall
.
promotion
.
biz
.
service
;
import
cn.iocoder.common.framework.constant.SysErrorCodeEnum
;
import
cn.iocoder.common.framework.util.DateUtil
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.promotion.api.CouponService
;
...
...
@@ -9,12 +10,17 @@ import cn.iocoder.mall.promotion.api.bo.CouponTemplateBO;
import
cn.iocoder.mall.promotion.api.bo.CouponTemplatePageBO
;
import
cn.iocoder.mall.promotion.api.constant.*
;
import
cn.iocoder.mall.promotion.api.dto.*
;
import
cn.iocoder.mall.promotion.biz.convert.CouponCardConvert
;
import
cn.iocoder.mall.promotion.biz.convert.CouponTemplateConvert
;
import
cn.iocoder.mall.promotion.biz.convert.CouponTemplateConvertImpl
;
import
cn.iocoder.mall.promotion.biz.dao.CouponCardMapper
;
import
cn.iocoder.mall.promotion.biz.dao.CouponTemplateMapper
;
import
cn.iocoder.mall.promotion.biz.dataobject.CouponCardDO
;
import
cn.iocoder.mall.promotion.biz.dataobject.CouponTemplateDO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Calendar
;
import
java.util.Date
;
@Service
// 实际上不用添加。添加的原因是,必须 Spring 报错提示
...
...
@@ -23,9 +29,17 @@ public class CouponServiceImpl implements CouponService {
@Autowired
private
CouponTemplateMapper
couponTemplateMapper
;
@Autowired
private
CouponCardMapper
couponCardMapper
;
// ========== 优惠劵(码)模板 ==========
@Override
public
CommonResult
<
CouponTemplateBO
>
getCouponTemplate
(
Integer
couponTemplateId
)
{
CouponTemplateDO
template
=
couponTemplateMapper
.
selectById
(
couponTemplateId
);
return
CommonResult
.
success
(
CouponTemplateConvertImpl
.
INSTANCE
.
convert
(
template
));
}
@Override
public
CommonResult
<
CouponTemplatePageBO
>
getCouponTemplatePage
(
CouponTemplatePageDTO
couponTemplatePageDTO
)
{
CouponTemplatePageBO
couponTemplatePageBO
=
new
CouponTemplatePageBO
();
...
...
@@ -163,7 +177,37 @@ public class CouponServiceImpl implements CouponService {
@Override
public
CommonResult
<
CouponCardBO
>
addCouponCard
(
Integer
userId
,
Integer
couponTemplateId
)
{
return
null
;
// 校验 CouponCardTemplate 存在
CouponTemplateDO
template
=
couponTemplateMapper
.
selectById
(
couponTemplateId
);
if
(
template
==
null
)
{
return
ServiceExceptionUtil
.
error
(
PromotionErrorCodeEnum
.
PRODUCT_TEMPLATE_NOT_EXISTS
.
getCode
());
}
// 校验 CouponCardTemplate 是 CARD
if
(!
CouponTemplateTypeEnum
.
CARD
.
getValue
().
equals
(
template
.
getType
()))
{
return
ServiceExceptionUtil
.
error
(
PromotionErrorCodeEnum
.
PRODUCT_TEMPLATE_NOT_CARD
.
getCode
());
}
// 校验 CouponCardTemplate 状态是否开启
if
(!
CouponTemplateStatusEnum
.
ENABLE
.
getValue
().
equals
(
template
.
getStatus
()))
{
return
ServiceExceptionUtil
.
error
(
PromotionErrorCodeEnum
.
PRODUCT_TEMPLATE_STATUS_NOT_ENABLE
.
getCode
());
}
// 创建优惠劵
// 1. 基本信息 + 领取情况
CouponCardDO
card
=
new
CouponCardDO
()
.
setTemplateId
(
couponTemplateId
)
.
setStatus
(
CouponCardStatusEnum
.
UNUSED
.
getValue
())
.
setUserId
(
userId
)
.
setTakeType
(
CouponCardTakeTypeEnum
.
BY_USER
.
getValue
());
// TODO 需要改
// 2. 使用规则
setCouponCardValidTime
(
card
,
template
);
// 3. 使用效果
card
.
setPreferentialType
(
template
.
getPreferentialType
())
.
setPriceOff
(
template
.
getPriceOff
())
.
setPercentOff
(
template
.
getPercentOff
()).
setDiscountPriceLimit
(
template
.
getDiscountPriceLimit
());
// 保存优惠劵模板到数据库
card
.
setCreateTime
(
new
Date
());
couponCardMapper
.
insert
(
card
);
// 返回成功
return
CommonResult
.
success
(
CouponCardConvert
.
INSTANCE
.
convert
(
card
));
}
@Override
...
...
@@ -176,6 +220,17 @@ public class CouponServiceImpl implements CouponService {
return
null
;
}
private
void
setCouponCardValidTime
(
CouponCardDO
card
,
CouponTemplateDO
template
)
{
if
(
CouponTemplateDateTypeEnum
.
FIXED_DATE
.
getValue
().
equals
(
template
.
getDateType
()))
{
card
.
setValidStartTime
(
template
.
getValidStartTime
()).
setValidEndTime
(
template
.
getValidEndTime
());
}
else
if
(
CouponTemplateDateTypeEnum
.
FIXED_TERM
.
getValue
().
equals
(
template
.
getDateType
()))
{
Date
validStartTime
=
DateUtil
.
getDayBegin
(
new
Date
());
card
.
setValidStartTime
(
DateUtil
.
addDate
(
validStartTime
,
Calendar
.
DAY_OF_YEAR
,
template
.
getFixedStartTerm
()));
Date
validEndTime
=
DateUtil
.
getDayEnd
(
card
.
getValidStartTime
());
card
.
setValidEndTime
(
DateUtil
.
addDate
(
validEndTime
,
Calendar
.
DAY_OF_YEAR
,
template
.
getFixedEndTerm
()
-
1
));
}
}
// ========== 优惠码 ==========
@Override
...
...
promotion/promotion-service-impl/src/main/resources/mapper/CouponCardMapper.xml
0 → 100644
浏览文件 @
989259de
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"cn.iocoder.mall.promotion.biz.dao.CouponCardMapper"
>
<sql
id=
"FIELDS"
>
id, template_id, status, user_id, take_type,
valid_start_time, valid_end_time, preferential_type, percent_off, price_off,
discount_price_limit, used_order_id, used_price, used_time,
create_time
</sql>
<!-- <select id="selectListByPidAndStatusOrderBySort" resultType="CouponCardDO">-->
<!-- SELECT-->
<!-- <include refid="FIELDS" />-->
<!-- FROM coupon_card-->
<!-- WHERE pid = #{pid}-->
<!-- AND status = #{status}-->
<!-- AND deleted = 0-->
<!-- ORDER BY sort ASC-->
<!-- </select>-->
<!-- <select id="selectList" resultType="CouponCardDO">-->
<!-- SELECT-->
<!-- <include refid="FIELDS" />-->
<!-- FROM coupon_card-->
<!-- WHERE deleted = 0-->
<!-- </select>-->
<select
id=
"selectById"
parameterType=
"Integer"
resultType=
"CouponCardDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM coupon_card
WHERE id = #{id}
</select>
<select
id=
"selectListByPage"
resultType=
"CouponCardDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM coupon_card
<where>
<if
test=
"status != null"
>
AND status = #{status}
</if>
</where>
LIMIT #{offset}, #{limit}
</select>
<select
id=
"selectCountByPage"
resultType=
"Integer"
>
SELECT
COUNT(1)
FROM coupon_card
<where>
<if
test=
"status != null"
>
AND status = #{status}
</if>
</where>
</select>
<insert
id=
"insert"
parameterType=
"CouponCardDO"
useGeneratedKeys=
"true"
keyColumn=
"id"
keyProperty=
"id"
>
INSERT INTO coupon_card (
template_id, status, user_id, take_type,
valid_start_time, valid_end_time, preferential_type, percent_off, price_off,
discount_price_limit, used_order_id, used_price, used_time,
create_time
) VALUES (
#{templateId}, #{status}, #{userId}, #{takeType},
#{validStartTime}, #{validEndTime}, #{preferentialType}, #{percentOff}, #{priceOff},
#{discountPriceLimit}, #{usedOrderId}, #{usedPrice}, #{usedTime},
#{createTime}
)
</insert>
<update
id=
"update"
parameterType=
"CouponCardDO"
>
UPDATE coupon_card
<set>
<if
test=
"status != null"
>
status = #{status},
</if>
<if
test=
"usedOrderId != null"
>
used_order_id = #{usedOrderId},
</if>
<if
test=
"usedPrice != null"
>
used_price = #{usedPrice},
</if>
<if
test=
"usedTime != null"
>
used_time = #{usedTime},
</if>
</set>
WHERE id = #{id}
</update>
</mapper>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论