Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
84186417
提交
84186417
authored
4月 05, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
后端 + 前端:优惠劵模板添加
上级
f6c847d1
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
115 行增加
和
44 行删除
+115
-44
BaseMenu.js
admin-web/src/components/SiderMenu/BaseMenu.js
+1
-1
CouponCardTemplateList.js
admin-web/src/pages/Promotion/CouponCardTemplateList.js
+12
-9
DateUtil.java
.../main/java/cn/iocoder/common/framework/util/DateUtil.java
+68
-2
AdminsCouponTemplateController.java
...ion/controller/admins/AdminsCouponTemplateController.java
+12
-6
AdminsCouponTemplateVO.java
...omotion/application/vo/admins/AdminsCouponTemplateVO.java
+0
-9
CouponCardTemplateAddDTO.java
...oder/mall/promotion/api/dto/CouponCardTemplateAddDTO.java
+2
-3
CouponTemplateDO.java
...coder/mall/promotion/biz/dataobject/CouponTemplateDO.java
+6
-8
CouponServiceImpl.java
...iocoder/mall/promotion/biz/service/CouponServiceImpl.java
+11
-3
CouponTemplateMapper.xml
...e-impl/src/main/resources/mapper/CouponTemplateMapper.xml
+3
-3
没有找到文件。
admin-web/src/components/SiderMenu/BaseMenu.js
浏览文件 @
84186417
...
...
@@ -105,7 +105,7 @@ export default class BaseMenu extends PureComponent {
onClick
=
{
isMobile
?
()
=>
{
onCollapse
(
true
)
;
onCollapse
true
;
}
:
undefined
}
...
...
admin-web/src/pages/Promotion/CouponCardTemplateList.js
浏览文件 @
84186417
...
...
@@ -220,11 +220,12 @@ const AddOrUpdateForm = Form.create()(props => {
if
(
err
)
return
;
let
newFileds
=
{
...
fields
,
priceAvailable
:
fields
[
'priceAvailable'
]
?
parseInt
(
fields
.
priceAvailable
*
100
)
:
undefined
,
priceOff
:
fields
[
'priceOff'
]
?
parseInt
(
fields
.
priceOff
*
100
)
:
undefined
,
discountPriceLimit
:
fields
[
'discountPriceLimit'
]
?
parseInt
(
fields
.
discountPriceLimit
*
100
)
:
undefined
,
}
debugger
;
priceAvailable
:
fields
.
priceAvailable
?
parseInt
(
fields
.
priceAvailable
*
100
)
:
undefined
,
priceOff
:
fields
.
priceOff
?
parseInt
(
fields
.
priceOff
*
100
)
:
undefined
,
discountPriceLimit
:
fields
.
discountPriceLimit
?
parseInt
(
fields
.
discountPriceLimit
*
100
)
:
undefined
,
validStartTime
:
fields
.
validStartTime
?
fields
.
validStartTime
.
format
(
'YYYY-MM-DD'
)
:
undefined
,
validEndTime
:
fields
.
validEndTime
?
fields
.
validEndTime
.
format
(
'YYYY-MM-DD'
)
:
undefined
};
// 添加表单
if
(
modalType
===
'add'
)
{
dispatch
({
...
...
@@ -291,7 +292,8 @@ const AddOrUpdateForm = Form.create()(props => {
>
<
FormItem
labelCol
=
{{
span
:
5
}}
wrapperCol
=
{{
span
:
15
}}
label
=
"标题"
>
{
form
.
getFieldDecorator
(
'title'
,
{
rules
:
[{
required
:
true
,
message
:
'请输入标题!'
}],
rules
:
[{
required
:
true
,
message
:
'请输入标题!'
},
{
max
:
16
,
min
:
2
,
message
:
'长度为 2-16 位'
},],
initialValue
:
formVals
.
title
,
})(
<
Input
placeholder
=
"请输入"
/>
)}
<
/FormItem
>
...
...
@@ -310,7 +312,6 @@ const AddOrUpdateForm = Form.create()(props => {
initialValue
:
formVals
.
quota
,
})(
<
Select
placeholder
=
"请选择"
style
=
{{
maxWidth
:
200
,
width
:
'100%'
}}
>
<
SelectOption
value
=
""
>
不限次数
<
/SelectOption
>
<
SelectOption
value
=
"1"
>
1
次
<
/SelectOption
>
<
SelectOption
value
=
"2"
>
2
次
<
/SelectOption
>
<
SelectOption
value
=
"3"
>
3
次
<
/SelectOption
>
...
...
@@ -391,12 +392,14 @@ const AddOrUpdateForm = Form.create()(props => {
formVals
.
dateType
==
2
?
<
FormItem
labelCol
=
{{
span
:
5
}}
wrapperCol
=
{{
span
:
15
}}
label
=
"领取日期"
>
{
form
.
getFieldDecorator
(
'fixedBeginTerm'
,
{
rules
:
[{
required
:
true
,
message
:
'请输入固定日期!'
},],
rules
:
[{
required
:
true
,
message
:
'请输入固定日期!'
},
{
min
:
1
,
type
:
'number'
,
message
:
'最小值为 1'
}],
initialValue
:
formVals
.
fixedBeginTerm
,
})(
<
InputNumber
placeholder
=
"请输入"
/>
)}
&
nbsp
;
-&
nbsp
;
{
form
.
getFieldDecorator
(
'fixedEndTerm'
,
{
rules
:
[{
required
:
false
,
message
:
'请输入固定日期!'
},],
rules
:
[{
required
:
true
,
message
:
'请输入固定日期!'
},
{
min
:
1
,
type
:
'number'
,
message
:
'最小值为 1'
}],
initialValue
:
formVals
.
fixedEndTerm
,
})(
<
InputNumber
placeholder
=
"请输入"
/>
)}
天
<
/FormItem> : '
'
...
...
common/common-framework/src/main/java/cn/iocoder/common/framework/util/DateUtil.java
浏览文件 @
84186417
...
...
@@ -43,7 +43,74 @@ public class DateUtil {
if
(
date
==
null
)
{
return
""
;
}
// TODO 芋艿,后面改成缓存
return
new
SimpleDateFormat
(
pattern
).
format
(
date
);
}
}
\ No newline at end of file
/**
* 获取指定天结束时间
*
* @param date 日期
* @return 获得该日期的开始
*/
public
static
Date
getDayBegin
(
Date
date
)
{
if
(
date
==
null
)
{
return
null
;
}
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
setCalender
(
calendar
,
0
,
0
,
0
,
0
);
return
calendar
.
getTime
();
}
/**
* 获取当天开始时间
*
* @return 获得该日期的开始
*/
public
static
Date
getDayBegin
()
{
return
getDayBegin
(
new
Date
());
}
/**
* 获取指定天结束时间
*
* @param date 日期
* @return 获得该日期的结束
*/
public
static
Date
getDayEnd
(
Date
date
)
{
if
(
date
==
null
)
{
return
null
;
}
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
setCalender
(
calendar
,
23
,
59
,
59
,
999
);
return
calendar
.
getTime
();
}
/**
* 获取当天结束时间
*
* @return 获得该日期的开始
*/
public
static
Date
getDayEnd
()
{
return
getDayEnd
(
new
Date
());
}
/**
* 设置Calendar的小时、分钟、秒、毫秒
*
* @param calendar 日历
* @param hour 小时
* @param minute 分钟
* @param second 秒
* @param milliSecond 毫秒
*/
public
static
void
setCalender
(
Calendar
calendar
,
int
hour
,
int
minute
,
int
second
,
int
milliSecond
)
{
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
hour
);
calendar
.
set
(
Calendar
.
MINUTE
,
minute
);
calendar
.
set
(
Calendar
.
SECOND
,
second
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
milliSecond
);
}
}
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsCouponTemplateController.java
浏览文件 @
84186417
package
cn
.
iocoder
.
mall
.
promotion
.
application
.
controller
.
admins
;
import
cn.iocoder.common.framework.util.DateUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.promotion.api.CouponService
;
import
cn.iocoder.mall.promotion.api.bo.CouponTemplateBO
;
...
...
@@ -11,6 +12,7 @@ import io.swagger.annotations.Api;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
...
...
@@ -19,7 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
import
java.util.Date
;
@RestController
@RequestMapping
(
"admins/
product_recommend
"
)
@RequestMapping
(
"admins/
coupon
"
)
@Api
(
"优惠劵(码)模块"
)
public
class
AdminsCouponTemplateController
{
...
...
@@ -33,8 +35,8 @@ public class AdminsCouponTemplateController {
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"title"
,
value
=
"标题"
,
required
=
true
,
example
=
"优惠劵牛逼"
),
@ApiImplicitParam
(
name
=
"description"
,
value
=
"使用说明"
,
example
=
"我只是描述"
),
@ApiImplicitParam
(
name
=
"quota"
,
value
=
"每人限领个数"
,
example
=
"null - 则表示不限制"
),
@ApiImplicitParam
(
name
=
"
stock"
,
value
=
"剩余可用库存"
,
example
=
"null - 则表示无限库存
"
),
@ApiImplicitParam
(
name
=
"quota"
,
value
=
"每人限领个数"
,
required
=
true
),
@ApiImplicitParam
(
name
=
"
total"
,
value
=
"发行总量
"
),
@ApiImplicitParam
(
name
=
"priceAvailable"
,
value
=
"是否设置满多少金额可用,单位:分"
,
example
=
"0-不限制;大于0-多少金额可用"
),
@ApiImplicitParam
(
name
=
"rangeType"
,
value
=
"可用范围的类型"
,
required
=
true
,
example
=
"参见 CouponTemplateRangeTypeEnum 枚举"
),
@ApiImplicitParam
(
name
=
"rangeValues"
,
value
=
"指定商品 / 分类列表,使用逗号分隔商品编号"
),
...
...
@@ -50,13 +52,15 @@ public class AdminsCouponTemplateController {
})
public
CommonResult
<
AdminsCouponTemplateVO
>
add
(
@RequestParam
(
value
=
"title"
)
String
title
,
@RequestParam
(
value
=
"description"
,
required
=
false
)
String
description
,
@RequestParam
(
value
=
"quota"
,
required
=
false
)
Integer
quota
,
@RequestParam
(
value
=
"
stock"
,
required
=
false
)
Integer
stock
,
@RequestParam
(
value
=
"quota"
)
Integer
quota
,
@RequestParam
(
value
=
"
total"
,
required
=
false
)
Integer
total
,
@RequestParam
(
value
=
"priceAvailable"
)
Integer
priceAvailable
,
@RequestParam
(
value
=
"rangeType"
)
Integer
rangeType
,
@RequestParam
(
value
=
"rangeType"
,
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"
)
@RequestParam
(
value
=
"validEndTime"
,
required
=
false
)
Date
validEndTime
,
@RequestParam
(
value
=
"fixedBeginTerm"
,
required
=
false
)
Integer
fixedBeginTerm
,
@RequestParam
(
value
=
"fixedEndTerm"
,
required
=
false
)
Integer
fixedEndTerm
,
...
...
@@ -65,9 +69,11 @@ public class AdminsCouponTemplateController {
@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 为准
CouponCardTemplateAddDTO
couponCardTemplateAddDTO
=
new
CouponCardTemplateAddDTO
()
.
setTitle
(
title
).
setDescription
(
description
)
.
setQuota
(
quota
).
set
Stock
(
stock
)
.
setQuota
(
quota
).
set
Total
(
total
)
.
setPriceAvailable
(
priceAvailable
).
setRangeType
(
rangeType
).
setRangeValues
(
rangeValues
)
.
setDateType
(
dateType
).
setValidStartTime
(
validStartTime
).
setValidEndTime
(
validEndTime
)
.
setFixedBeginTerm
(
fixedBeginTerm
).
setFixedEndTerm
(
fixedEndTerm
)
...
...
promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/vo/admins/AdminsCouponTemplateVO.java
浏览文件 @
84186417
...
...
@@ -136,15 +136,6 @@ public class AdminsCouponTemplateVO {
return
this
;
}
public
Integer
getStock
()
{
return
stock
;
}
public
AdminsCouponTemplateVO
setStock
(
Integer
stock
)
{
this
.
stock
=
stock
;
return
this
;
}
public
Integer
getPriceAvailable
()
{
return
priceAvailable
;
}
...
...
promotion/promotion-service-api/src/main/java/cn/iocoder/mall/promotion/api/dto/CouponCardTemplateAddDTO.java
浏览文件 @
84186417
...
...
@@ -19,7 +19,7 @@ public class CouponCardTemplateAddDTO {
* 标题
*/
@NotEmpty
(
message
=
"标题不能为空"
)
@Length
(
min
=
6
,
max
=
16
,
message
=
"标题长度为 {min}-{max} 位"
)
@Length
(
min
=
2
,
max
=
16
,
message
=
"标题长度为 {min}-{max} 位"
)
private
String
title
;
/**
* 使用说明
...
...
@@ -31,9 +31,8 @@ public class CouponCardTemplateAddDTO {
// ========== 领取规则 BEGIN ==========
/**
* 每人限领个数
*
* null - 则表示不限制
*/
@NotNull
(
message
=
"每人限领个数不能为空"
)
@Min
(
value
=
1
,
message
=
"每人限领个数最小为 {value}"
)
private
Integer
quota
;
/**
...
...
promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponTemplateDO.java
浏览文件 @
84186417
...
...
@@ -82,11 +82,9 @@ public class CouponTemplateDO extends BaseDO {
*/
private
Integer
quota
;
/**
* 剩余可用库存
*
* null - 则表示无限库存
* 发行总量
*/
private
Integer
stock
;
private
Integer
total
;
// ========== 领取规则 END ==========
// ========== 使用规则 BEGIN ==========
...
...
@@ -274,12 +272,12 @@ public class CouponTemplateDO extends BaseDO {
return
this
;
}
public
Integer
get
Stock
()
{
return
stock
;
public
Integer
get
Total
()
{
return
total
;
}
public
CouponTemplateDO
set
Stock
(
Integer
stock
)
{
this
.
stock
=
stock
;
public
CouponTemplateDO
set
Total
(
Integer
total
)
{
this
.
total
=
total
;
return
this
;
}
...
...
promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/CouponServiceImpl.java
浏览文件 @
84186417
...
...
@@ -49,8 +49,8 @@ public class CouponServiceImpl implements CouponService {
// 校验优惠类型
CommonResult
<
Boolean
>
checkCouponTemplateDateTypeResult
=
this
.
checkCouponTemplatePreferentialType
(
couponCardTemplateAddDTO
.
getPreferentialType
(),
couponCardTemplateAddDTO
.
getPercentOff
(),
couponCardTemplateAddDTO
.
getPriceOff
());
if
(
checkCoupon
Code
TemplateDateTypeResult
.
isError
())
{
couponCardTemplateAddDTO
.
getPriceOff
()
,
couponCardTemplateAddDTO
.
getPriceAvailable
()
);
if
(
checkCouponTemplateDateTypeResult
.
isError
())
{
return
CommonResult
.
error
(
checkCouponTemplateDateTypeResult
);
}
// 保存优惠劵模板到数据库
...
...
@@ -58,6 +58,7 @@ public class CouponServiceImpl implements CouponService {
.
setType
(
CouponTemplateTypeEnum
.
CARD
.
getValue
())
.
setStatus
(
CouponTemplateStatusEnum
.
ENABLE
.
getValue
())
.
setStatFetchNum
(
0
);
template
.
setCreateTime
(
new
Date
());
couponTemplateMapper
.
insert
(
template
);
// 返回成功
return
CommonResult
.
success
(
CouponTemplateConvert
.
INSTANCE
.
convert
(
template
));
...
...
@@ -106,6 +107,9 @@ public class CouponServiceImpl implements CouponService {
if
(
validEndTime
==
null
)
{
return
CommonResult
.
error
(
SysErrorCodeEnum
.
VALIDATION_REQUEST_PARAM_ERROR
.
getCode
(),
"生效结束时间不能为空"
);
}
if
(
validStartTime
.
after
(
validEndTime
))
{
return
CommonResult
.
error
(
SysErrorCodeEnum
.
VALIDATION_REQUEST_PARAM_ERROR
.
getCode
(),
"生效开始时间不能大于生效结束时间"
);
}
}
else
if
(
CouponTemplateDateTypeEnum
.
FIXED_TERM
.
getValue
().
equals
(
dateType
))
{
// 领取日期
if
(
fixedBeginTerm
==
null
)
{
return
CommonResult
.
error
(
SysErrorCodeEnum
.
VALIDATION_REQUEST_PARAM_ERROR
.
getCode
(),
"领取日期开始时间不能为空"
);
...
...
@@ -119,11 +123,15 @@ public class CouponServiceImpl implements CouponService {
return
CommonResult
.
success
(
true
);
}
private
CommonResult
<
Boolean
>
checkCouponTemplatePreferentialType
(
Integer
preferentialType
,
Integer
percentOff
,
Integer
priceOff
)
{
private
CommonResult
<
Boolean
>
checkCouponTemplatePreferentialType
(
Integer
preferentialType
,
Integer
percentOff
,
Integer
priceOff
,
Integer
priceAvailable
)
{
if
(
CouponTemplatePreferentialTypeEnum
.
PRICE
.
getValue
().
equals
(
preferentialType
))
{
if
(
priceOff
==
null
)
{
return
CommonResult
.
error
(
SysErrorCodeEnum
.
VALIDATION_REQUEST_PARAM_ERROR
.
getCode
(),
"优惠金额不能为空"
);
}
if
(
priceOff
>=
priceAvailable
)
{
return
CommonResult
.
error
(
SysErrorCodeEnum
.
VALIDATION_REQUEST_PARAM_ERROR
.
getCode
(),
"优惠金额不能d大于等于使用金额门槛"
);
}
}
else
if
(
CouponTemplatePreferentialTypeEnum
.
DISCOUNT
.
getValue
().
equals
(
preferentialType
))
{
if
(
percentOff
==
null
)
{
return
CommonResult
.
error
(
SysErrorCodeEnum
.
VALIDATION_REQUEST_PARAM_ERROR
.
getCode
(),
"折扣百分比不能为空"
);
...
...
promotion/promotion-service-impl/src/main/resources/mapper/CouponTemplateMapper.xml
浏览文件 @
84186417
...
...
@@ -4,7 +4,7 @@
<sql
id=
"FIELDS"
>
id, title, description, type, code_type,
status, quota,
stock
, price_available, range_type,
status, quota,
total
, price_available, range_type,
range_values, date_type, valid_start_time, valid_end_time, fixed_term,
preferential_type, percent_off, price_off, discount_price_limit, stat_fetch_num,
create_time
...
...
@@ -100,8 +100,8 @@
<if
test=
"quota != null"
>
quota = #{quota},
</if>
<if
test=
"
stock
!= null"
>
stock = #{stock
},
<if
test=
"
total
!= null"
>
total = #{total
},
</if>
<if
test=
"priceAvailable != null"
>
price_available = #{priceAvailable},
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论