Toggle navigation
Toggle navigation
This project
Loading...
Sign in
ufo
/
ufo-platform
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
0
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Email Patches
Plain Diff
Browse Files
Authored by
tanling
6 years ago
Commit
361d549aa8a0151848ea9551181f2f5061c10203
1 parent
52dffeca
优惠券优化
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
62 additions
and
169 deletions
coupon/src/main/java/com/yoho/ufo/coupon/service/impl/CouponServiceImpl.java
dal/src/main/java/com/yoho/ufo/dal/UserCouponMapper.java
dal/src/main/java/com/yoho/ufo/model/coupon/Coupon.java
dal/src/main/java/com/yoho/ufo/model/coupon/UserCouponNum.java
dal/src/main/resources/META-INF/mybatis/CouponMapper.xml
dal/src/main/resources/META-INF/mybatis/UserCouponMapper.xml
coupon/src/main/java/com/yoho/ufo/coupon/service/impl/CouponServiceImpl.java
View file @
361d549
...
...
@@ -17,6 +17,7 @@ import com.yoho.ufo.exception.PlatformException;
import
com.yoho.ufo.model.coupon.Coupon
;
import
com.yoho.ufo.model.coupon.CouponProductLimit
;
import
com.yoho.ufo.model.coupon.UserCoupon
;
import
com.yoho.ufo.model.coupon.UserCouponNum
;
import
com.yoho.ufo.model.coupon.resp.CouponQueryResp
;
import
com.yoho.ufo.model.coupon.resp.UidCouponQueryResp
;
import
com.yoho.ufo.model.coupon.resp.UserCouponQueryResp
;
...
...
@@ -46,6 +47,7 @@ import org.springframework.web.multipart.MultipartFile;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -137,45 +139,40 @@ public class CouponServiceImpl implements ICouponService,IBusinessExportService{
}
List
<
Coupon
>
coupons
=
couponMapper
.
selectByCondition
(
req
);
// 获取 该券的用户领取|使用记录
Map
<
Integer
,
List
<
UserCoupon
>>
userCouponMap
=
null
;
// 只获取使用记录
Map
<
Integer
,
UserCouponNum
>
sendNumMap
=
null
;
Map
<
Integer
,
UserCouponNum
>
useNumMap
=
null
;
if
(
CollectionUtils
.
isNotEmpty
(
coupons
)){
List
<
Integer
>
couponIdList
=
coupons
.
stream
().
map
(
Coupon:
:
getId
).
collect
(
Collectors
.
toList
());
userCouponMap
=
getUserCouponMap
(
couponIdList
);
List
<
UserCouponNum
>
sendNumList
=
userCouponMapper
.
selectByCouponIds
(
couponIdList
);
sendNumMap
=
sendNumList
.
stream
().
collect
(
Collectors
.
toMap
(
UserCouponNum:
:
getCouponId
,
Function
.
identity
(),
(
k1
,
k2
)->
k2
));
List
<
UserCouponNum
>
useNumList
=
userCouponMapper
.
selectByCouponIdsAndStatus
(
couponIdList
);
useNumMap
=
useNumList
.
stream
().
collect
(
Collectors
.
toMap
(
UserCouponNum:
:
getCouponId
,
Function
.
identity
(),
(
k1
,
k2
)->
k2
));
}
List
<
CouponQueryResp
>
couponQueryResps
=
initCouponQueryResps
(
coupons
,
req
.
getCurTime
());
// 设置 已经领取数量|已经使用记录
if
(
MapUtils
.
isNotEmpty
(
userCouponMap
)){
Map
<
Integer
,
List
<
UserCoupon
>>
finalUserCouponMap
=
userCouponMap
;
if
(
MapUtils
.
isEmpty
(
sendNumMap
)
&&
MapUtils
.
isEmpty
(
useNumMap
))
{
Map
<
Integer
,
UserCouponNum
>
finalSendNumMap
=
sendNumMap
;
Map
<
Integer
,
UserCouponNum
>
finalUseNumMap
=
useNumMap
;
couponQueryResps
=
couponQueryResps
.
stream
().
map
(
x
->{
couponQueryResps
=
couponQueryResps
.
stream
().
map
(
x
->
{
List
<
UserCoupon
>
userCouponList
=
finalUserCouponMap
.
get
(
x
.
getId
());
if
(
CollectionUtils
.
isEmpty
(
userCouponList
))
{
return
x
;
if
(
MapUtils
.
isNotEmpty
(
finalSendNumMap
)){
x
.
setSendNum
(
finalSendNumMap
.
get
(
x
.
getId
())
==
null
?
0
:
finalSendNumMap
.
get
(
x
.
getId
()).
getCnt
());
}
x
.
setSendNum
(
userCouponList
.
size
());
x
.
setUseNum
(
userCouponList
.
stream
().
filter
(
y
->
y
.
getStatus
()==
UserCouponsStatusEnum
.
USED
.
getCode
()).
count
());
if
(
MapUtils
.
isNotEmpty
(
finalUseNumMap
)){
x
.
setUseNum
(
finalUseNumMap
.
get
(
x
.
getId
())
==
null
?
0
:
finalUseNumMap
.
get
(
x
.
getId
()).
getCnt
());
}
return
x
;
}).
collect
(
Collectors
.
toList
());
}
jsonObject
.
put
(
"coupons"
,
couponQueryResps
);
return
new
ApiResponse
.
ApiResponseBuilder
().
data
(
jsonObject
).
build
();
}
private
Map
<
Integer
,
List
<
UserCoupon
>>
getUserCouponMap
(
List
<
Integer
>
couponIdList
)
{
List
<
UserCoupon
>
userCouponList
=
userCouponMapper
.
selectByCouponIds
(
couponIdList
);
if
(
CollectionUtils
.
isEmpty
(
userCouponList
)){
return
null
;
}
Map
<
Integer
,
List
<
UserCoupon
>>
userCouponMap
=
userCouponList
.
stream
().
collect
(
Collectors
.
groupingBy
(
UserCoupon:
:
getCouponId
));
return
userCouponMap
;
}
@Override
public
ApiResponse
saveOrUpdateCoupon
(
CouponSaveUpdateReq
req
)
{
LOGGER
.
info
(
"enter saveOrUpdateCoupon,param is {}"
,
req
);
...
...
@@ -522,6 +519,7 @@ public class CouponServiceImpl implements ICouponService,IBusinessExportService{
com
.
yoho
.
ufo
.
util
.
DateUtil
.
int2DateStr
(
coupon
.
getEndTime
(),
"yyyy-MM-dd HH:mm:ss"
);
CouponQueryResp
resp
=
new
CouponQueryResp
(
coupon
.
getId
(),
coupon
.
getCouponName
(),
coupon
.
getCouponNum
(),
useTime
,
coupon
.
getRemark
(),
getStatusDesc
(
coupon
,
curTime
),
coupon
.
getStatus
(),
coupon
.
getCouponToken
());
resp
.
setSendNum
(
coupon
.
getSendNum
());
resps
.
add
(
resp
);
}
return
resps
;
...
...
dal/src/main/java/com/yoho/ufo/dal/UserCouponMapper.java
View file @
361d549
package
com
.
yoho
.
ufo
.
dal
;
import
com.yoho.ufo.model.coupon.UserCoupon
;
import
com.yoho.ufo.model.coupon.UserCouponNum
;
import
com.yohobuy.ufo.coupon.req.UserCouponQueryReq
;
import
org.apache.ibatis.annotations.Param
;
...
...
@@ -13,7 +14,10 @@ public interface UserCouponMapper {
List
<
UserCoupon
>
selectByCondition
(
@Param
(
"param"
)
UserCouponQueryReq
param
);
List
<
UserCoupon
>
selectByCouponIds
(
@Param
(
"couponIds"
)
List
<
Integer
>
couponIds
);
List
<
UserCouponNum
>
selectByCouponIds
(
@Param
(
"couponIds"
)
List
<
Integer
>
couponIds
);
List
<
UserCouponNum
>
selectByCouponIdsAndStatus
(
@Param
(
"couponIds"
)
List
<
Integer
>
couponIds
);
int
selectTotalByCondition
(
@Param
(
"param"
)
UserCouponQueryReq
param
);
}
...
...
dal/src/main/java/com/yoho/ufo/model/coupon/Coupon.java
View file @
361d549
package
com
.
yoho
.
ufo
.
model
.
coupon
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* Created by shengguo.cai on 2018/11/20.
*/
@Data
public
class
Coupon
implements
Serializable
{
private
Integer
id
;
...
...
@@ -25,6 +28,10 @@ public class Coupon implements Serializable {
private
Integer
createTime
;
private
Integer
pid
;
private
String
remark
;
/**
* 禁止商品类型
*/
private
String
skupForbidType
;
/**商品限制条件-特定商品*/
public
static
final
int
PRODUCTLIMITTYPE_SPECIALPRODUCT
=
1
;
/**商品限制条件-无限制*/
...
...
@@ -70,147 +77,5 @@ public class Coupon implements Serializable {
}
}
public
Integer
getId
()
{
return
id
;
}
public
void
setId
(
Integer
id
)
{
this
.
id
=
id
;
}
public
String
getCouponToken
()
{
return
couponToken
;
}
public
void
setCouponToken
(
String
couponToken
)
{
this
.
couponToken
=
couponToken
;
}
public
String
getCouponName
()
{
return
couponName
;
}
public
void
setCouponName
(
String
couponName
)
{
this
.
couponName
=
couponName
;
}
public
Float
getCouponAmount
()
{
return
couponAmount
;
}
public
void
setCouponAmount
(
Float
couponAmount
)
{
this
.
couponAmount
=
couponAmount
;
}
public
Integer
getCouponType
()
{
return
couponType
;
}
public
void
setCouponType
(
Integer
couponType
)
{
this
.
couponType
=
couponType
;
}
public
Integer
getCouponNum
()
{
return
couponNum
;
}
public
void
setCouponNum
(
Integer
couponNum
)
{
this
.
couponNum
=
couponNum
;
}
public
Integer
getUseNum
()
{
return
useNum
;
}
public
void
setUseNum
(
Integer
useNum
)
{
this
.
useNum
=
useNum
;
}
public
Integer
getSendNum
()
{
return
sendNum
;
}
public
void
setSendNum
(
Integer
sendNum
)
{
this
.
sendNum
=
sendNum
;
}
public
Integer
getUseLimitType
()
{
return
useLimitType
;
}
public
void
setUseLimitType
(
Integer
useLimitType
)
{
this
.
useLimitType
=
useLimitType
;
}
public
Integer
getUseLimitValue
()
{
return
useLimitValue
;
}
public
void
setUseLimitValue
(
Integer
useLimitValue
)
{
this
.
useLimitValue
=
useLimitValue
;
}
public
Integer
getProductLimitType
()
{
return
productLimitType
;
}
public
void
setProductLimitType
(
Integer
productLimitType
)
{
this
.
productLimitType
=
productLimitType
;
}
public
String
getProductLimitValue
()
{
return
productLimitValue
;
}
public
void
setProductLimitValue
(
String
productLimitValue
)
{
this
.
productLimitValue
=
productLimitValue
;
}
public
Integer
getStartTime
()
{
return
startTime
;
}
public
void
setStartTime
(
Integer
startTime
)
{
this
.
startTime
=
startTime
;
}
public
Integer
getEndTime
()
{
return
endTime
;
}
public
void
setEndTime
(
Integer
endTime
)
{
this
.
endTime
=
endTime
;
}
public
Integer
getStatus
()
{
return
status
;
}
public
void
setStatus
(
Integer
status
)
{
this
.
status
=
status
;
}
public
Integer
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Integer
createTime
)
{
this
.
createTime
=
createTime
;
}
public
Integer
getPid
()
{
return
pid
;
}
public
void
setPid
(
Integer
pid
)
{
this
.
pid
=
pid
;
}
public
String
getRemark
()
{
return
remark
;
}
public
void
setRemark
(
String
remark
)
{
this
.
remark
=
remark
;
}
}
...
...
dal/src/main/java/com/yoho/ufo/model/coupon/UserCouponNum.java
0 → 100644
View file @
361d549
package
com
.
yoho
.
ufo
.
model
.
coupon
;
import
lombok.Data
;
@Data
public
class
UserCouponNum
{
int
cnt
;
int
couponId
;
}
...
...
dal/src/main/resources/META-INF/mybatis/CouponMapper.xml
View file @
361d549
...
...
@@ -20,12 +20,13 @@
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"INTEGER"
/>
<result
column=
"pid"
property=
"pid"
jdbcType=
"INTEGER"
/>
<result
column=
"remark"
property=
"remark"
jdbcType=
"VARCHAR"
/>
<result
column=
"skup_forbid_type"
property=
"skupForbidType"
jdbcType=
"VARCHAR"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id,coupon_token,coupon_name,coupon_amount,coupon_type,coupon_num,use_num,send_num,
use_limit_type,use_limit_value,product_limit_type,product_limit_value,start_time,
end_time,status,create_time,pid,remark
end_time,status,create_time,pid,remark
,skup_forbid_type
</sql>
<insert
id=
"insertOrUpdate"
useGeneratedKeys=
"true"
keyProperty=
"param.id"
>
insert into coupon(id,coupon_token,coupon_name,coupon_amount,coupon_type,coupon_num,use_num,send_num,
...
...
dal/src/main/resources/META-INF/mybatis/UserCouponMapper.xml
View file @
361d549
...
...
@@ -21,15 +21,30 @@
</sql>
<select
id=
"selectByCouponIds"
result
Map=
"BaseResultMap
"
>
<select
id=
"selectByCouponIds"
result
Type=
"com.yoho.ufo.model.coupon.UserCouponNum
"
>
select
<include
refid=
"Base_Column_List"
/>
count(uid) cnt, coupon_id
from user_coupon
where
coupon_id IN
<foreach
collection=
"couponIds"
item=
"couponId"
open=
"("
separator=
","
close=
")"
>
#{couponId,jdbcType=INTEGER}
</foreach>
group by coupon_id
</select>
<select
id=
"selectByCouponIdsAndStatus"
resultType=
"com.yoho.ufo.model.coupon.UserCouponNum"
>
select
count(uid) cnt, coupon_id
from user_coupon
where
status=1 and
coupon_id IN
<foreach
collection=
"couponIds"
item=
"couponId"
open=
"("
separator=
","
close=
")"
>
#{couponId,jdbcType=INTEGER}
</foreach>
group by coupon_id
</select>
...
...
Please
register
or
login
to post a comment